commit c0349c106b3af42c3f0de6fe2575cd4453dba620 Author: Bailey Taylor Date: Fri Sep 19 02:09:05 2025 +0000 Initial commit of ld-sysinfo-server backend diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8af972c --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +/gradlew text eol=lf +*.bat text eol=crlf +*.jar binary diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c2065bc --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..368653a --- /dev/null +++ b/build.gradle @@ -0,0 +1,73 @@ +plugins { + id 'java' + id 'org.springframework.boot' version '3.3.3' + id 'io.spring.dependency-management' version '1.1.6' +} + +group = 'com.psg.ldsysinfo' +version = '0.0.1-SNAPSHOT' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(17) + } +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenCentral() +} + +dependencies { + // Spring Boot web dependency + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-security' + implementation("org.springframework.boot:spring-boot-starter-logging") + + //InMemory stuff relies on this "part of the Java EE (Jakarta EE) specification, which was removed from the Java SE platform starting from Java 11." + // For JAXB + implementation 'jakarta.xml.bind:jakarta.xml.bind-api:3.0.1' // Updated for Jakarta EE 9+ + implementation 'javax.xml.bind:jaxb-api:2.3.1' + implementation 'jakarta.validation:jakarta.validation-api:3.0.0' + + implementation 'io.jsonwebtoken:jjwt-api:0.11.5' + implementation 'io.jsonwebtoken:jjwt-impl:0.11.5' + implementation 'io.jsonwebtoken:jjwt-jackson:0.11.5' + + // Provides JWT decoding and signature validation for streamlining UserPrincipal related things + implementation 'org.springframework.boot:spring-boot-starter-oauth2-resource-server' + + // Console streaming logfiles to frontend via webflux + implementation 'org.springframework.boot:spring-boot-starter-webflux' + + // Spring Boot JPA with Hibernate + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + + // MySQL or other database driver + implementation 'mysql:mysql-connector-java:8.0.29' // or 'org.postgresql:postgresql' for PostgreSQL + + // Dependancy required for semantic version checking + implementation 'org.apache.maven:maven-artifact:3.9.6' + + // Add support for Jackson to serialize the LocalDateTime for Device entity + implementation 'com.fasterxml.jackson.datatype:jackson-datatype-jsr310' + + // Email dependancy for SMTP + implementation 'org.springframework.boot:spring-boot-starter-mail' + + // Lombok (optional for reducing boilerplate) + compileOnly 'org.projectlombok:lombok' + annotationProcessor 'org.projectlombok:lombok' + + // Test dependencies + testImplementation 'org.springframework.boot:spring-boot-starter-test' + + + +} + diff --git a/cert_STAR-PSG-NET-AU/cert2.pem b/cert_STAR-PSG-NET-AU/cert2.pem new file mode 100644 index 0000000..884d1c1 --- /dev/null +++ b/cert_STAR-PSG-NET-AU/cert2.pem @@ -0,0 +1,22 @@ +-----BEGIN CERTIFICATE----- +MIIDmDCCAx2gAwIBAgISA3cx6pdudinoyNPQQ6tDERv0MAoGCCqGSM49BAMDMDIx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF +NjAeFw0yNTAzMDYxNDE2NTJaFw0yNTA2MDQxNDE2NTFaMBcxFTATBgNVBAMMDCou +cHNnLm5ldC5hdTB2MBAGByqGSM49AgEGBSuBBAAiA2IABOG0jKcfM4uf8gGG4/k4 +bCVyivf6p6euAk3gSu3evvIs3YjJK8zlMYZM/YogO+GQxBipRHJ75/j35umpfGMM +TdeIHX1b8BkuxaJM1+OPbEhMcEweRIVihfqCQMi8ogofrqOCAg8wggILMA4GA1Ud +DwEB/wQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0T +AQH/BAIwADAdBgNVHQ4EFgQUNG8CwKH0p/+/ityNnLV5qe1XUMowHwYDVR0jBBgw +FoAUkydGmAOpUWiOmNbEQkjbI79YlNIwVQYIKwYBBQUHAQEESTBHMCEGCCsGAQUF +BzABhhVodHRwOi8vZTYuby5sZW5jci5vcmcwIgYIKwYBBQUHMAKGFmh0dHA6Ly9l +Ni5pLmxlbmNyLm9yZy8wFwYDVR0RBBAwDoIMKi5wc2cubmV0LmF1MBMGA1UdIAQM +MAowCAYGZ4EMAQIBMIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHcAouMK5EXvva2b +fjjtR2d3U9eCW4SU1yteGyzEuVCkR+cAAAGVbAaKcAAABAMASDBGAiEAo1M9qabG +y9ULFqX2f0aSFUEbq4/mxgYMGI8CyRHIMysCIQDKiqjf02C7djRbUXFgY8i525D4 +Dk//piv8x3BVnwFOKAB2AMz7D2qFcQll/pWbU87psnwi6YVcDZeNtql+VMD+TA2w +AAABlWwGktIAAAQDAEcwRQIhAMfWVBUyDceYf5CIOYCWb4jBHw0cDsmpzV2rnLlW ++lYGAiBbBBf1oAiL74wvRoYYHITbUBkJzeiKsdd4QL+g9ITgXDAKBggqhkjOPQQD +AwNpADBmAjEA+2N7kXIuSeR+q48M3ZAddqQ1yKk9epGr/vjn8kAN6kHB18CYZ1IZ +fSS1qzj+GdJ4AjEAmaUjf/N+08nte4SlEo9bl0hszoPZCEEDaorzzZUZZg0rlwtU +TmnpNMRKPWKDDuNZ +-----END CERTIFICATE----- diff --git a/cert_STAR-PSG-NET-AU/chain2.pem b/cert_STAR-PSG-NET-AU/chain2.pem new file mode 100644 index 0000000..65797c8 --- /dev/null +++ b/cert_STAR-PSG-NET-AU/chain2.pem @@ -0,0 +1,26 @@ +-----BEGIN CERTIFICATE----- +MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw +WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg +RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G +h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV +6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw +gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD +ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj +v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB +AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g +BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu +Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc +MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL +pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp +eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH +pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7 +s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu +h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv +YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8 +ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0 +LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+ +EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY +Ig46v9mFmBvyH04= +-----END CERTIFICATE----- diff --git a/cert_STAR-PSG-NET-AU/fullchain2.pem b/cert_STAR-PSG-NET-AU/fullchain2.pem new file mode 100644 index 0000000..30af734 --- /dev/null +++ b/cert_STAR-PSG-NET-AU/fullchain2.pem @@ -0,0 +1,48 @@ +-----BEGIN CERTIFICATE----- +MIIDmDCCAx2gAwIBAgISA3cx6pdudinoyNPQQ6tDERv0MAoGCCqGSM49BAMDMDIx +CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1MZXQncyBFbmNyeXB0MQswCQYDVQQDEwJF +NjAeFw0yNTAzMDYxNDE2NTJaFw0yNTA2MDQxNDE2NTFaMBcxFTATBgNVBAMMDCou +cHNnLm5ldC5hdTB2MBAGByqGSM49AgEGBSuBBAAiA2IABOG0jKcfM4uf8gGG4/k4 +bCVyivf6p6euAk3gSu3evvIs3YjJK8zlMYZM/YogO+GQxBipRHJ75/j35umpfGMM +TdeIHX1b8BkuxaJM1+OPbEhMcEweRIVihfqCQMi8ogofrqOCAg8wggILMA4GA1Ud +DwEB/wQEAwIHgDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0T +AQH/BAIwADAdBgNVHQ4EFgQUNG8CwKH0p/+/ityNnLV5qe1XUMowHwYDVR0jBBgw +FoAUkydGmAOpUWiOmNbEQkjbI79YlNIwVQYIKwYBBQUHAQEESTBHMCEGCCsGAQUF +BzABhhVodHRwOi8vZTYuby5sZW5jci5vcmcwIgYIKwYBBQUHMAKGFmh0dHA6Ly9l +Ni5pLmxlbmNyLm9yZy8wFwYDVR0RBBAwDoIMKi5wc2cubmV0LmF1MBMGA1UdIAQM +MAowCAYGZ4EMAQIBMIIBBQYKKwYBBAHWeQIEAgSB9gSB8wDxAHcAouMK5EXvva2b +fjjtR2d3U9eCW4SU1yteGyzEuVCkR+cAAAGVbAaKcAAABAMASDBGAiEAo1M9qabG +y9ULFqX2f0aSFUEbq4/mxgYMGI8CyRHIMysCIQDKiqjf02C7djRbUXFgY8i525D4 +Dk//piv8x3BVnwFOKAB2AMz7D2qFcQll/pWbU87psnwi6YVcDZeNtql+VMD+TA2w +AAABlWwGktIAAAQDAEcwRQIhAMfWVBUyDceYf5CIOYCWb4jBHw0cDsmpzV2rnLlW ++lYGAiBbBBf1oAiL74wvRoYYHITbUBkJzeiKsdd4QL+g9ITgXDAKBggqhkjOPQQD +AwNpADBmAjEA+2N7kXIuSeR+q48M3ZAddqQ1yKk9epGr/vjn8kAN6kHB18CYZ1IZ +fSS1qzj+GdJ4AjEAmaUjf/N+08nte4SlEo9bl0hszoPZCEEDaorzzZUZZg0rlwtU +TmnpNMRKPWKDDuNZ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw +TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh +cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw +WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg +RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G +h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV +6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw +gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD +ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj +v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB +AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g +BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu +Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc +MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL +pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp +eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH +pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7 +s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu +h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv +YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8 +ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0 +LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+ +EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY +Ig46v9mFmBvyH04= +-----END CERTIFICATE----- diff --git a/cert_STAR-PSG-NET-AU/privkey2.pem b/cert_STAR-PSG-NET-AU/privkey2.pem new file mode 100644 index 0000000..8eb6a15 --- /dev/null +++ b/cert_STAR-PSG-NET-AU/privkey2.pem @@ -0,0 +1,6 @@ +-----BEGIN PRIVATE KEY----- +MIG2AgEAMBAGByqGSM49AgEGBSuBBAAiBIGeMIGbAgEBBDDNruDvCgZHOnvf2iE7 +tALMNMgDbRaW4VZTLIOuIAddLOG9V5UzpAHbXuy9ldvsFlKhZANiAAThtIynHzOL +n/IBhuP5OGwlcor3+qenrgJN4Ert3r7yLN2IySvM5TGGTP2KIDvhkMQYqURye+f4 +9+bpqXxjDE3XiB19W/AZLsWiTNfjj2xITHBMHkSFYoX6gkDIvKIKH64= +-----END PRIVATE KEY----- diff --git a/cve-sync.log b/cve-sync.log new file mode 100644 index 0000000..b1d089e --- /dev/null +++ b/cve-sync.log @@ -0,0 +1,107 @@ +2025-04-22T08:01:13.987630700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-22T16:00:00.026814600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-23T00:00:00.004035100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-23T08:00:00.007768800 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-23T15:59:57.763430 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-24T00:00:00.016624800 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-24T08:01:08.636887200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-24T15:59:57.765749700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-25T00:01:08.092828800 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-25T08:01:06.857710500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-25T15:59:57.731443100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-26T00:00:00.009948400 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-26T08:00:00.006638600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-26T16:01:08.623954 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-27T00:00:00.011085300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-27T08:01:11.972091100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-27T16:01:28.937311200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-28T00:00:00.008333500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-28T07:59:56.208168300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-28T16:01:32.912372 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-29T00:01:16.831892100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-29T08:00:00.009434600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-29T16:00:00.015109300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-30T00:00:00.010769200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-30T08:00:00.013797700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-04-30T16:00:00.030601100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-01T00:00:00.009068200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-01T07:59:58.572069400 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-01T16:01:19.091394300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-02T00:00:00.014060300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-02T08:01:13.207239700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-02T16:00:00.013796700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-03T00:00:00.011198800 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-03T07:59:58.264769400 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-03T16:01:22.373358400 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-04T00:00:00.004206300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-04T08:01:13.972592100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-04T16:00:00.007804200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-05T00:01:19.060217500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-05T08:01:17.844706800 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-05T16:00:00.022030200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-06T00:01:17.022330500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-06T08:01:16.912824 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-06T16:01:18.366174500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-07T00:01:19.032636900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-07T08:00:00.032290600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-07T15:59:58.216182700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-08T00:00:00.015498300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-08T08:01:16.749082900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-08T16:00:00.008310600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-09T00:01:17.028476100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-09T08:01:17.895912100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-09T16:00:00.004853500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-10T00:01:20.875962100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-10T08:01:16.991245100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-10T16:01:18.649239800 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-11T00:01:17.603202100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-11T08:01:16.431230500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-11T16:01:17.459599700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-12T00:01:17.619409600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-12T08:01:16.031570900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-12T16:01:18.305099800 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-13T00:00:00.011872100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-13T08:01:17.321038700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-13T16:00:00.016488600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-14T00:00:00.013132800 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-14T07:59:58.286809100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-14T16:00:00.017691100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-15T00:01:17.549725700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-15T07:59:58.224836 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-15T16:01:17.142352500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-16T00:01:15.618005100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-16T08:01:15.076920900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-16T16:00:00.005493400 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-17T00:01:15.777671300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-17T08:00:00.015485600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-17T15:59:58.217869200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-18T00:00:00.004178500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-18T08:01:16.545760700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-18T16:01:15.940931100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-19T00:00:00.007971400 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-19T08:00:00.007816900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-19T15:59:58.215865600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-20T00:00:00.016141700 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-20T07:59:58.232237500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-20T16:00:00.012581200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-21T00:01:15.109241800 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-21T08:01:17.164403100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-21T15:59:58.179601100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-22T00:01:15.630576100 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-22T07:59:58.194641300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-22T16:01:16.704448200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-23T00:01:15.748653200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-23T08:01:16.353470600 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-23T15:59:58.209189500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-24T16:01:21.527591900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-25T00:01:18.771297300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-25T08:00:00.013248900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-25T15:59:58.178269400 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-26T00:00:00.009849900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-26T08:00:00.015168300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-26T15:59:58.190632400 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-27T00:00:00.014399300 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-05-27T08:01:23.904986900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-09-10T16:01:35.666116500 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-09-11T00:00:00.010256900 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null +2025-09-11T08:00:00.013690200 — ? Exception during CVE sync: Cannot invoke "String.indexOf(int)" because "value" is null diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..e644113 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..a441313 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew new file mode 100755 index 0000000..b740cf1 --- /dev/null +++ b/gradlew @@ -0,0 +1,249 @@ +#!/bin/sh + +# +# Copyright ยฉ 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions ยซ$varยป, ยซ${var}ยป, ยซ${var:-default}ยป, ยซ${var+SET}ยป, +# ยซ${var#prefix}ยป, ยซ${var%suffix}ยป, and ยซ$( cmd )ยป; +# * compound commands having a testable exit status, especially ยซcaseยป; +# * various built-in commands including ยซcommandยป, ยซsetยป, and ยซulimitยป. +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..25da30d --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,92 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json new file mode 100644 index 0000000..83a1111 --- /dev/null +++ b/node_modules/.package-lock.json @@ -0,0 +1,691 @@ +{ + "name": "ld-sysinfo-server", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/aws-ssl-profiles": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", + "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/axios": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz", + "integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/cheerio": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0.tgz", + "integrity": "sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==", + "license": "MIT", + "dependencies": { + "cheerio-select": "^2.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "encoding-sniffer": "^0.2.0", + "htmlparser2": "^9.1.0", + "parse5": "^7.1.2", + "parse5-htmlparser2-tree-adapter": "^7.0.0", + "parse5-parser-stream": "^7.1.2", + "undici": "^6.19.5", + "whatwg-mimetype": "^4.0.0" + }, + "engines": { + "node": ">=18.17" + }, + "funding": { + "url": "https://github.com/cheeriojs/cheerio?sponsor=1" + } + }, + "node_modules/cheerio-select": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", + "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "license": "BSD-2-Clause", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz", + "integrity": "sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==", + "license": "BSD-2-Clause", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/dotenv": { + "version": "16.5.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.5.0.tgz", + "integrity": "sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/encoding-sniffer": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz", + "integrity": "sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==", + "license": "MIT", + "dependencies": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + }, + "funding": { + "url": "https://github.com/fb55/encoding-sniffer?sponsor=1" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "license": "MIT", + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/htmlparser2": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-9.1.0.tgz", + "integrity": "sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==", + "license": "MIT" + }, + "node_modules/long": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz", + "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==", + "license": "Apache-2.0" + }, + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/lru.min": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.2.tgz", + "integrity": "sha512-Nv9KddBcQSlQopmBHXSsZVY5xsdlZkdH/Iey0BlcBYggMd4two7cZnKOK9vmy3nY0O5RGH99z1PCeTpPqszUYg==", + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=1.30.0", + "node": ">=8.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wellwelwel" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mysql2": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.14.1.tgz", + "integrity": "sha512-7ytuPQJjQB8TNAYX/H2yhL+iQOnIBjAMam361R7UAL0lOVXWjtdrmoL9HYKqKoLp/8UUTRcvo1QPvK9KL7wA8w==", + "license": "MIT", + "dependencies": { + "aws-ssl-profiles": "^1.1.1", + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^5.2.1", + "lru.min": "^1.0.0", + "named-placeholders": "^1.1.3", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", + "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", + "license": "MIT", + "dependencies": { + "lru-cache": "^7.14.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", + "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz", + "integrity": "sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==", + "license": "MIT", + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-parser-stream": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz", + "integrity": "sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==", + "license": "MIT", + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.0.tgz", + "integrity": "sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undici": { + "version": "6.21.3", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.21.3.tgz", + "integrity": "sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==", + "license": "MIT", + "engines": { + "node": ">=18.17" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "license": "MIT", + "engines": { + "node": ">=18" + } + } + } +} diff --git a/node_modules/asynckit/LICENSE b/node_modules/asynckit/LICENSE new file mode 100644 index 0000000..c9eca5d --- /dev/null +++ b/node_modules/asynckit/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2016 Alex Indigo + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/asynckit/README.md b/node_modules/asynckit/README.md new file mode 100644 index 0000000..ddcc7e6 --- /dev/null +++ b/node_modules/asynckit/README.md @@ -0,0 +1,233 @@ +# asynckit [![NPM Module](https://img.shields.io/npm/v/asynckit.svg?style=flat)](https://www.npmjs.com/package/asynckit) + +Minimal async jobs utility library, with streams support. + +[![PhantomJS Build](https://img.shields.io/travis/alexindigo/asynckit/v0.4.0.svg?label=browser&style=flat)](https://travis-ci.org/alexindigo/asynckit) +[![Linux Build](https://img.shields.io/travis/alexindigo/asynckit/v0.4.0.svg?label=linux:0.12-6.x&style=flat)](https://travis-ci.org/alexindigo/asynckit) +[![Windows Build](https://img.shields.io/appveyor/ci/alexindigo/asynckit/v0.4.0.svg?label=windows:0.12-6.x&style=flat)](https://ci.appveyor.com/project/alexindigo/asynckit) + +[![Coverage Status](https://img.shields.io/coveralls/alexindigo/asynckit/v0.4.0.svg?label=code+coverage&style=flat)](https://coveralls.io/github/alexindigo/asynckit?branch=master) +[![Dependency Status](https://img.shields.io/david/alexindigo/asynckit/v0.4.0.svg?style=flat)](https://david-dm.org/alexindigo/asynckit) +[![bitHound Overall Score](https://www.bithound.io/github/alexindigo/asynckit/badges/score.svg)](https://www.bithound.io/github/alexindigo/asynckit) + + + +AsyncKit provides harness for `parallel` and `serial` iterators over list of items represented by arrays or objects. +Optionally it accepts abort function (should be synchronously return by iterator for each item), and terminates left over jobs upon an error event. For specific iteration order built-in (`ascending` and `descending`) and custom sort helpers also supported, via `asynckit.serialOrdered` method. + +It ensures async operations to keep behavior more stable and prevent `Maximum call stack size exceeded` errors, from sync iterators. + +| compression | size | +| :----------------- | -------: | +| asynckit.js | 12.34 kB | +| asynckit.min.js | 4.11 kB | +| asynckit.min.js.gz | 1.47 kB | + + +## Install + +```sh +$ npm install --save asynckit +``` + +## Examples + +### Parallel Jobs + +Runs iterator over provided array in parallel. Stores output in the `result` array, +on the matching positions. In unlikely event of an error from one of the jobs, +will terminate rest of the active jobs (if abort function is provided) +and return error along with salvaged data to the main callback function. + +#### Input Array + +```javascript +var parallel = require('asynckit').parallel + , assert = require('assert') + ; + +var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] + , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ] + , target = [] + ; + +parallel(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); +}); + +// async job accepts one element from the array +// and a callback function +function asyncJob(item, cb) +{ + // different delays (in ms) per item + var delay = item * 25; + + // pretend different jobs take different time to finish + // and not in consequential order + var timeoutId = setTimeout(function() { + target.push(item); + cb(null, item * 2); + }, delay); + + // allow to cancel "leftover" jobs upon error + // return function, invoking of which will abort this job + return clearTimeout.bind(null, timeoutId); +} +``` + +More examples could be found in [test/test-parallel-array.js](test/test-parallel-array.js). + +#### Input Object + +Also it supports named jobs, listed via object. + +```javascript +var parallel = require('asynckit/parallel') + , assert = require('assert') + ; + +var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 } + , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 } + , expectedTarget = [ 1, 1, 2, 4, 8, 16, 32, 64 ] + , expectedKeys = [ 'first', 'one', 'two', 'four', 'eight', 'sixteen', 'thirtyTwo', 'sixtyFour' ] + , target = [] + , keys = [] + ; + +parallel(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); + assert.deepEqual(keys, expectedKeys); +}); + +// supports full value, key, callback (shortcut) interface +function asyncJob(item, key, cb) +{ + // different delays (in ms) per item + var delay = item * 25; + + // pretend different jobs take different time to finish + // and not in consequential order + var timeoutId = setTimeout(function() { + keys.push(key); + target.push(item); + cb(null, item * 2); + }, delay); + + // allow to cancel "leftover" jobs upon error + // return function, invoking of which will abort this job + return clearTimeout.bind(null, timeoutId); +} +``` + +More examples could be found in [test/test-parallel-object.js](test/test-parallel-object.js). + +### Serial Jobs + +Runs iterator over provided array sequentially. Stores output in the `result` array, +on the matching positions. In unlikely event of an error from one of the jobs, +will not proceed to the rest of the items in the list +and return error along with salvaged data to the main callback function. + +#### Input Array + +```javascript +var serial = require('asynckit/serial') + , assert = require('assert') + ; + +var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] + , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ] + , target = [] + ; + +serial(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); +}); + +// extended interface (item, key, callback) +// also supported for arrays +function asyncJob(item, key, cb) +{ + target.push(key); + + // it will be automatically made async + // even it iterator "returns" in the same event loop + cb(null, item * 2); +} +``` + +More examples could be found in [test/test-serial-array.js](test/test-serial-array.js). + +#### Input Object + +Also it supports named jobs, listed via object. + +```javascript +var serial = require('asynckit').serial + , assert = require('assert') + ; + +var source = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , expectedResult = [ 2, 2, 8, 32, 128, 64, 16, 4 ] + , expectedTarget = [ 0, 1, 2, 3, 4, 5, 6, 7 ] + , target = [] + ; + +var source = { first: 1, one: 1, four: 4, sixteen: 16, sixtyFour: 64, thirtyTwo: 32, eight: 8, two: 2 } + , expectedResult = { first: 2, one: 2, four: 8, sixteen: 32, sixtyFour: 128, thirtyTwo: 64, eight: 16, two: 4 } + , expectedTarget = [ 1, 1, 4, 16, 64, 32, 8, 2 ] + , target = [] + ; + + +serial(source, asyncJob, function(err, result) +{ + assert.deepEqual(result, expectedResult); + assert.deepEqual(target, expectedTarget); +}); + +// shortcut interface (item, callback) +// works for object as well as for the arrays +function asyncJob(item, cb) +{ + target.push(item); + + // it will be automatically made async + // even it iterator "returns" in the same event loop + cb(null, item * 2); +} +``` + +More examples could be found in [test/test-serial-object.js](test/test-serial-object.js). + +_Note: Since _object_ is an _unordered_ collection of properties, +it may produce unexpected results with sequential iterations. +Whenever order of the jobs' execution is important please use `serialOrdered` method._ + +### Ordered Serial Iterations + +TBD + +For example [compare-property](compare-property) package. + +### Streaming interface + +TBD + +## Want to Know More? + +More examples can be found in [test folder](test/). + +Or open an [issue](https://github.com/alexindigo/asynckit/issues) with questions and/or suggestions. + +## License + +AsyncKit is licensed under the MIT license. diff --git a/node_modules/asynckit/bench.js b/node_modules/asynckit/bench.js new file mode 100644 index 0000000..c612f1a --- /dev/null +++ b/node_modules/asynckit/bench.js @@ -0,0 +1,76 @@ +/* eslint no-console: "off" */ + +var asynckit = require('./') + , async = require('async') + , assert = require('assert') + , expected = 0 + ; + +var Benchmark = require('benchmark'); +var suite = new Benchmark.Suite; + +var source = []; +for (var z = 1; z < 100; z++) +{ + source.push(z); + expected += z; +} + +suite +// add tests + +.add('async.map', function(deferred) +{ + var total = 0; + + async.map(source, + function(i, cb) + { + setImmediate(function() + { + total += i; + cb(null, total); + }); + }, + function(err, result) + { + assert.ifError(err); + assert.equal(result[result.length - 1], expected); + deferred.resolve(); + }); +}, {'defer': true}) + + +.add('asynckit.parallel', function(deferred) +{ + var total = 0; + + asynckit.parallel(source, + function(i, cb) + { + setImmediate(function() + { + total += i; + cb(null, total); + }); + }, + function(err, result) + { + assert.ifError(err); + assert.equal(result[result.length - 1], expected); + deferred.resolve(); + }); +}, {'defer': true}) + + +// add listeners +.on('cycle', function(ev) +{ + console.log(String(ev.target)); +}) +.on('complete', function() +{ + console.log('Fastest is ' + this.filter('fastest').map('name')); +}) +// run async +.run({ 'async': true }); diff --git a/node_modules/asynckit/index.js b/node_modules/asynckit/index.js new file mode 100644 index 0000000..455f945 --- /dev/null +++ b/node_modules/asynckit/index.js @@ -0,0 +1,6 @@ +module.exports = +{ + parallel : require('./parallel.js'), + serial : require('./serial.js'), + serialOrdered : require('./serialOrdered.js') +}; diff --git a/node_modules/asynckit/lib/abort.js b/node_modules/asynckit/lib/abort.js new file mode 100644 index 0000000..114367e --- /dev/null +++ b/node_modules/asynckit/lib/abort.js @@ -0,0 +1,29 @@ +// API +module.exports = abort; + +/** + * Aborts leftover active jobs + * + * @param {object} state - current state object + */ +function abort(state) +{ + Object.keys(state.jobs).forEach(clean.bind(state)); + + // reset leftover jobs + state.jobs = {}; +} + +/** + * Cleans up leftover job by invoking abort function for the provided job id + * + * @this state + * @param {string|number} key - job id to abort + */ +function clean(key) +{ + if (typeof this.jobs[key] == 'function') + { + this.jobs[key](); + } +} diff --git a/node_modules/asynckit/lib/async.js b/node_modules/asynckit/lib/async.js new file mode 100644 index 0000000..7f1288a --- /dev/null +++ b/node_modules/asynckit/lib/async.js @@ -0,0 +1,34 @@ +var defer = require('./defer.js'); + +// API +module.exports = async; + +/** + * Runs provided callback asynchronously + * even if callback itself is not + * + * @param {function} callback - callback to invoke + * @returns {function} - augmented callback + */ +function async(callback) +{ + var isAsync = false; + + // check if async happened + defer(function() { isAsync = true; }); + + return function async_callback(err, result) + { + if (isAsync) + { + callback(err, result); + } + else + { + defer(function nextTick_callback() + { + callback(err, result); + }); + } + }; +} diff --git a/node_modules/asynckit/lib/defer.js b/node_modules/asynckit/lib/defer.js new file mode 100644 index 0000000..b67110c --- /dev/null +++ b/node_modules/asynckit/lib/defer.js @@ -0,0 +1,26 @@ +module.exports = defer; + +/** + * Runs provided function on next iteration of the event loop + * + * @param {function} fn - function to run + */ +function defer(fn) +{ + var nextTick = typeof setImmediate == 'function' + ? setImmediate + : ( + typeof process == 'object' && typeof process.nextTick == 'function' + ? process.nextTick + : null + ); + + if (nextTick) + { + nextTick(fn); + } + else + { + setTimeout(fn, 0); + } +} diff --git a/node_modules/asynckit/lib/iterate.js b/node_modules/asynckit/lib/iterate.js new file mode 100644 index 0000000..5d2839a --- /dev/null +++ b/node_modules/asynckit/lib/iterate.js @@ -0,0 +1,75 @@ +var async = require('./async.js') + , abort = require('./abort.js') + ; + +// API +module.exports = iterate; + +/** + * Iterates over each job object + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {object} state - current job status + * @param {function} callback - invoked when all elements processed + */ +function iterate(list, iterator, state, callback) +{ + // store current index + var key = state['keyedList'] ? state['keyedList'][state.index] : state.index; + + state.jobs[key] = runJob(iterator, key, list[key], function(error, output) + { + // don't repeat yourself + // skip secondary callbacks + if (!(key in state.jobs)) + { + return; + } + + // clean up jobs + delete state.jobs[key]; + + if (error) + { + // don't process rest of the results + // stop still active jobs + // and reset the list + abort(state); + } + else + { + state.results[key] = output; + } + + // return salvaged results + callback(error, state.results); + }); +} + +/** + * Runs iterator over provided job element + * + * @param {function} iterator - iterator to invoke + * @param {string|number} key - key/index of the element in the list of jobs + * @param {mixed} item - job description + * @param {function} callback - invoked after iterator is done with the job + * @returns {function|mixed} - job abort function or something else + */ +function runJob(iterator, key, item, callback) +{ + var aborter; + + // allow shortcut if iterator expects only two arguments + if (iterator.length == 2) + { + aborter = iterator(item, async(callback)); + } + // otherwise go with full three arguments + else + { + aborter = iterator(item, key, async(callback)); + } + + return aborter; +} diff --git a/node_modules/asynckit/lib/readable_asynckit.js b/node_modules/asynckit/lib/readable_asynckit.js new file mode 100644 index 0000000..78ad240 --- /dev/null +++ b/node_modules/asynckit/lib/readable_asynckit.js @@ -0,0 +1,91 @@ +var streamify = require('./streamify.js') + , defer = require('./defer.js') + ; + +// API +module.exports = ReadableAsyncKit; + +/** + * Base constructor for all streams + * used to hold properties/methods + */ +function ReadableAsyncKit() +{ + ReadableAsyncKit.super_.apply(this, arguments); + + // list of active jobs + this.jobs = {}; + + // add stream methods + this.destroy = destroy; + this._start = _start; + this._read = _read; +} + +/** + * Destroys readable stream, + * by aborting outstanding jobs + * + * @returns {void} + */ +function destroy() +{ + if (this.destroyed) + { + return; + } + + this.destroyed = true; + + if (typeof this.terminator == 'function') + { + this.terminator(); + } +} + +/** + * Starts provided jobs in async manner + * + * @private + */ +function _start() +{ + // first argument โ€“ runner function + var runner = arguments[0] + // take away first argument + , args = Array.prototype.slice.call(arguments, 1) + // second argument - input data + , input = args[0] + // last argument - result callback + , endCb = streamify.callback.call(this, args[args.length - 1]) + ; + + args[args.length - 1] = endCb; + // third argument - iterator + args[1] = streamify.iterator.call(this, args[1]); + + // allow time for proper setup + defer(function() + { + if (!this.destroyed) + { + this.terminator = runner.apply(null, args); + } + else + { + endCb(null, Array.isArray(input) ? [] : {}); + } + }.bind(this)); +} + + +/** + * Implement _read to comply with Readable streams + * Doesn't really make sense for flowing object mode + * + * @private + */ +function _read() +{ + +} diff --git a/node_modules/asynckit/lib/readable_parallel.js b/node_modules/asynckit/lib/readable_parallel.js new file mode 100644 index 0000000..5d2929f --- /dev/null +++ b/node_modules/asynckit/lib/readable_parallel.js @@ -0,0 +1,25 @@ +var parallel = require('../parallel.js'); + +// API +module.exports = ReadableParallel; + +/** + * Streaming wrapper to `asynckit.parallel` + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {stream.Readable#} + */ +function ReadableParallel(list, iterator, callback) +{ + if (!(this instanceof ReadableParallel)) + { + return new ReadableParallel(list, iterator, callback); + } + + // turn on object mode + ReadableParallel.super_.call(this, {objectMode: true}); + + this._start(parallel, list, iterator, callback); +} diff --git a/node_modules/asynckit/lib/readable_serial.js b/node_modules/asynckit/lib/readable_serial.js new file mode 100644 index 0000000..7822698 --- /dev/null +++ b/node_modules/asynckit/lib/readable_serial.js @@ -0,0 +1,25 @@ +var serial = require('../serial.js'); + +// API +module.exports = ReadableSerial; + +/** + * Streaming wrapper to `asynckit.serial` + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {stream.Readable#} + */ +function ReadableSerial(list, iterator, callback) +{ + if (!(this instanceof ReadableSerial)) + { + return new ReadableSerial(list, iterator, callback); + } + + // turn on object mode + ReadableSerial.super_.call(this, {objectMode: true}); + + this._start(serial, list, iterator, callback); +} diff --git a/node_modules/asynckit/lib/readable_serial_ordered.js b/node_modules/asynckit/lib/readable_serial_ordered.js new file mode 100644 index 0000000..3de89c4 --- /dev/null +++ b/node_modules/asynckit/lib/readable_serial_ordered.js @@ -0,0 +1,29 @@ +var serialOrdered = require('../serialOrdered.js'); + +// API +module.exports = ReadableSerialOrdered; +// expose sort helpers +module.exports.ascending = serialOrdered.ascending; +module.exports.descending = serialOrdered.descending; + +/** + * Streaming wrapper to `asynckit.serialOrdered` + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} sortMethod - custom sort function + * @param {function} callback - invoked when all elements processed + * @returns {stream.Readable#} + */ +function ReadableSerialOrdered(list, iterator, sortMethod, callback) +{ + if (!(this instanceof ReadableSerialOrdered)) + { + return new ReadableSerialOrdered(list, iterator, sortMethod, callback); + } + + // turn on object mode + ReadableSerialOrdered.super_.call(this, {objectMode: true}); + + this._start(serialOrdered, list, iterator, sortMethod, callback); +} diff --git a/node_modules/asynckit/lib/state.js b/node_modules/asynckit/lib/state.js new file mode 100644 index 0000000..cbea7ad --- /dev/null +++ b/node_modules/asynckit/lib/state.js @@ -0,0 +1,37 @@ +// API +module.exports = state; + +/** + * Creates initial state object + * for iteration over list + * + * @param {array|object} list - list to iterate over + * @param {function|null} sortMethod - function to use for keys sort, + * or `null` to keep them as is + * @returns {object} - initial state object + */ +function state(list, sortMethod) +{ + var isNamedList = !Array.isArray(list) + , initState = + { + index : 0, + keyedList: isNamedList || sortMethod ? Object.keys(list) : null, + jobs : {}, + results : isNamedList ? {} : [], + size : isNamedList ? Object.keys(list).length : list.length + } + ; + + if (sortMethod) + { + // sort array keys based on it's values + // sort object's keys just on own merit + initState.keyedList.sort(isNamedList ? sortMethod : function(a, b) + { + return sortMethod(list[a], list[b]); + }); + } + + return initState; +} diff --git a/node_modules/asynckit/lib/streamify.js b/node_modules/asynckit/lib/streamify.js new file mode 100644 index 0000000..f56a1c9 --- /dev/null +++ b/node_modules/asynckit/lib/streamify.js @@ -0,0 +1,141 @@ +var async = require('./async.js'); + +// API +module.exports = { + iterator: wrapIterator, + callback: wrapCallback +}; + +/** + * Wraps iterators with long signature + * + * @this ReadableAsyncKit# + * @param {function} iterator - function to wrap + * @returns {function} - wrapped function + */ +function wrapIterator(iterator) +{ + var stream = this; + + return function(item, key, cb) + { + var aborter + , wrappedCb = async(wrapIteratorCallback.call(stream, cb, key)) + ; + + stream.jobs[key] = wrappedCb; + + // it's either shortcut (item, cb) + if (iterator.length == 2) + { + aborter = iterator(item, wrappedCb); + } + // or long format (item, key, cb) + else + { + aborter = iterator(item, key, wrappedCb); + } + + return aborter; + }; +} + +/** + * Wraps provided callback function + * allowing to execute snitch function before + * real callback + * + * @this ReadableAsyncKit# + * @param {function} callback - function to wrap + * @returns {function} - wrapped function + */ +function wrapCallback(callback) +{ + var stream = this; + + var wrapped = function(error, result) + { + return finisher.call(stream, error, result, callback); + }; + + return wrapped; +} + +/** + * Wraps provided iterator callback function + * makes sure snitch only called once, + * but passes secondary calls to the original callback + * + * @this ReadableAsyncKit# + * @param {function} callback - callback to wrap + * @param {number|string} key - iteration key + * @returns {function} wrapped callback + */ +function wrapIteratorCallback(callback, key) +{ + var stream = this; + + return function(error, output) + { + // don't repeat yourself + if (!(key in stream.jobs)) + { + callback(error, output); + return; + } + + // clean up jobs + delete stream.jobs[key]; + + return streamer.call(stream, error, {key: key, value: output}, callback); + }; +} + +/** + * Stream wrapper for iterator callback + * + * @this ReadableAsyncKit# + * @param {mixed} error - error response + * @param {mixed} output - iterator output + * @param {function} callback - callback that expects iterator results + */ +function streamer(error, output, callback) +{ + if (error && !this.error) + { + this.error = error; + this.pause(); + this.emit('error', error); + // send back value only, as expected + callback(error, output && output.value); + return; + } + + // stream stuff + this.push(output); + + // back to original track + // send back value only, as expected + callback(error, output && output.value); +} + +/** + * Stream wrapper for finishing callback + * + * @this ReadableAsyncKit# + * @param {mixed} error - error response + * @param {mixed} output - iterator output + * @param {function} callback - callback that expects final results + */ +function finisher(error, output, callback) +{ + // signal end of the stream + // only for successfully finished streams + if (!error) + { + this.push(null); + } + + // back to original track + callback(error, output); +} diff --git a/node_modules/asynckit/lib/terminator.js b/node_modules/asynckit/lib/terminator.js new file mode 100644 index 0000000..d6eb992 --- /dev/null +++ b/node_modules/asynckit/lib/terminator.js @@ -0,0 +1,29 @@ +var abort = require('./abort.js') + , async = require('./async.js') + ; + +// API +module.exports = terminator; + +/** + * Terminates jobs in the attached state context + * + * @this AsyncKitState# + * @param {function} callback - final callback to invoke after termination + */ +function terminator(callback) +{ + if (!Object.keys(this.jobs).length) + { + return; + } + + // fast forward iteration index + this.index = this.size; + + // abort jobs + abort(this); + + // send back results we have so far + async(callback)(null, this.results); +} diff --git a/node_modules/asynckit/package.json b/node_modules/asynckit/package.json new file mode 100644 index 0000000..51147d6 --- /dev/null +++ b/node_modules/asynckit/package.json @@ -0,0 +1,63 @@ +{ + "name": "asynckit", + "version": "0.4.0", + "description": "Minimal async jobs utility library, with streams support", + "main": "index.js", + "scripts": { + "clean": "rimraf coverage", + "lint": "eslint *.js lib/*.js test/*.js", + "test": "istanbul cover --reporter=json tape -- 'test/test-*.js' | tap-spec", + "win-test": "tape test/test-*.js", + "browser": "browserify -t browserify-istanbul test/lib/browserify_adjustment.js test/test-*.js | obake --coverage | tap-spec", + "report": "istanbul report", + "size": "browserify index.js | size-table asynckit", + "debug": "tape test/test-*.js" + }, + "pre-commit": [ + "clean", + "lint", + "test", + "browser", + "report", + "size" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/alexindigo/asynckit.git" + }, + "keywords": [ + "async", + "jobs", + "parallel", + "serial", + "iterator", + "array", + "object", + "stream", + "destroy", + "terminate", + "abort" + ], + "author": "Alex Indigo ", + "license": "MIT", + "bugs": { + "url": "https://github.com/alexindigo/asynckit/issues" + }, + "homepage": "https://github.com/alexindigo/asynckit#readme", + "devDependencies": { + "browserify": "^13.0.0", + "browserify-istanbul": "^2.0.0", + "coveralls": "^2.11.9", + "eslint": "^2.9.0", + "istanbul": "^0.4.3", + "obake": "^0.1.2", + "phantomjs-prebuilt": "^2.1.7", + "pre-commit": "^1.1.3", + "reamde": "^1.1.0", + "rimraf": "^2.5.2", + "size-table": "^0.2.0", + "tap-spec": "^4.1.1", + "tape": "^4.5.1" + }, + "dependencies": {} +} diff --git a/node_modules/asynckit/parallel.js b/node_modules/asynckit/parallel.js new file mode 100644 index 0000000..3c50344 --- /dev/null +++ b/node_modules/asynckit/parallel.js @@ -0,0 +1,43 @@ +var iterate = require('./lib/iterate.js') + , initState = require('./lib/state.js') + , terminator = require('./lib/terminator.js') + ; + +// Public API +module.exports = parallel; + +/** + * Runs iterator over provided array elements in parallel + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {function} - jobs terminator + */ +function parallel(list, iterator, callback) +{ + var state = initState(list); + + while (state.index < (state['keyedList'] || list).length) + { + iterate(list, iterator, state, function(error, result) + { + if (error) + { + callback(error, result); + return; + } + + // looks like it's the last one + if (Object.keys(state.jobs).length === 0) + { + callback(null, state.results); + return; + } + }); + + state.index++; + } + + return terminator.bind(state, callback); +} diff --git a/node_modules/asynckit/serial.js b/node_modules/asynckit/serial.js new file mode 100644 index 0000000..6cd949a --- /dev/null +++ b/node_modules/asynckit/serial.js @@ -0,0 +1,17 @@ +var serialOrdered = require('./serialOrdered.js'); + +// Public API +module.exports = serial; + +/** + * Runs iterator over provided array elements in series + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} callback - invoked when all elements processed + * @returns {function} - jobs terminator + */ +function serial(list, iterator, callback) +{ + return serialOrdered(list, iterator, null, callback); +} diff --git a/node_modules/asynckit/serialOrdered.js b/node_modules/asynckit/serialOrdered.js new file mode 100644 index 0000000..607eafe --- /dev/null +++ b/node_modules/asynckit/serialOrdered.js @@ -0,0 +1,75 @@ +var iterate = require('./lib/iterate.js') + , initState = require('./lib/state.js') + , terminator = require('./lib/terminator.js') + ; + +// Public API +module.exports = serialOrdered; +// sorting helpers +module.exports.ascending = ascending; +module.exports.descending = descending; + +/** + * Runs iterator over provided sorted array elements in series + * + * @param {array|object} list - array or object (named list) to iterate over + * @param {function} iterator - iterator to run + * @param {function} sortMethod - custom sort function + * @param {function} callback - invoked when all elements processed + * @returns {function} - jobs terminator + */ +function serialOrdered(list, iterator, sortMethod, callback) +{ + var state = initState(list, sortMethod); + + iterate(list, iterator, state, function iteratorHandler(error, result) + { + if (error) + { + callback(error, result); + return; + } + + state.index++; + + // are we there yet? + if (state.index < (state['keyedList'] || list).length) + { + iterate(list, iterator, state, iteratorHandler); + return; + } + + // done here + callback(null, state.results); + }); + + return terminator.bind(state, callback); +} + +/* + * -- Sort methods + */ + +/** + * sort helper to sort array elements in ascending order + * + * @param {mixed} a - an item to compare + * @param {mixed} b - an item to compare + * @returns {number} - comparison result + */ +function ascending(a, b) +{ + return a < b ? -1 : a > b ? 1 : 0; +} + +/** + * sort helper to sort array elements in descending order + * + * @param {mixed} a - an item to compare + * @param {mixed} b - an item to compare + * @returns {number} - comparison result + */ +function descending(a, b) +{ + return -1 * ascending(a, b); +} diff --git a/node_modules/asynckit/stream.js b/node_modules/asynckit/stream.js new file mode 100644 index 0000000..d43465f --- /dev/null +++ b/node_modules/asynckit/stream.js @@ -0,0 +1,21 @@ +var inherits = require('util').inherits + , Readable = require('stream').Readable + , ReadableAsyncKit = require('./lib/readable_asynckit.js') + , ReadableParallel = require('./lib/readable_parallel.js') + , ReadableSerial = require('./lib/readable_serial.js') + , ReadableSerialOrdered = require('./lib/readable_serial_ordered.js') + ; + +// API +module.exports = +{ + parallel : ReadableParallel, + serial : ReadableSerial, + serialOrdered : ReadableSerialOrdered, +}; + +inherits(ReadableAsyncKit, Readable); + +inherits(ReadableParallel, ReadableAsyncKit); +inherits(ReadableSerial, ReadableAsyncKit); +inherits(ReadableSerialOrdered, ReadableAsyncKit); diff --git a/node_modules/aws-ssl-profiles/LICENSE b/node_modules/aws-ssl-profiles/LICENSE new file mode 100644 index 0000000..95dc096 --- /dev/null +++ b/node_modules/aws-ssl-profiles/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2024 Andrey Sidorov, Douglas Wilson, Weslley Araรบjo and contributors. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/aws-ssl-profiles/README.md b/node_modules/aws-ssl-profiles/README.md new file mode 100644 index 0000000..99acaad --- /dev/null +++ b/node_modules/aws-ssl-profiles/README.md @@ -0,0 +1,146 @@ +# AWS SSL Profiles + +[**AWS RDS**](https://aws.amazon.com/rds/) **SSL** Certificates Bundles. + +**Table of Contents** + +- [Installation](#installation) +- [Usage](#usage) + - [**mysqljs/mysql**](#mysqljsmysql) + - [**MySQL2**](#mysql2) + - [**node-postgres**](#node-postgres) + - [Custom `ssl` options](#custom-ssl-options) +- [License](#license) +- [Security](#security) +- [Contributing](#contributing) +- [Acknowledgements](#acknowledgements) + +--- + +## Installation + +```bash +npm install --save aws-ssl-profiles +``` + +--- + +## Usage + +### [mysqljs/mysql](https://github.com/mysqljs/mysql) + +```js +const mysql = require('mysql'); +const awsCaBundle = require('aws-ssl-profiles'); + +// mysql connection +const connection = mysql.createConnection({ + //... + ssl: awsCaBundle, +}); + +// mysql connection pool +const pool = mysql.createPool({ + //... + ssl: awsCaBundle, +}); +``` + +### [MySQL2](https://github.com/sidorares/node-mysql2) + +```js +const mysql = require('mysql2'); +const awsCaBundle = require('aws-ssl-profiles'); + +// mysql2 connection +const connection = mysql.createConnection({ + //... + ssl: awsCaBundle, +}); + +// mysql2 connection pool +const pool = mysql.createPool({ + //... + ssl: awsCaBundle, +}); +``` + +### [node-postgres](https://github.com/brianc/node-postgres) + +```js +const pg = require('pg'); +const awsCaBundle = require('aws-ssl-profiles'); + +// pg connection +const client = new pg.Client({ + // ... + ssl: awsCaBundle, +}); + +// pg connection pool +const pool = new pg.Pool({ + // ... + ssl: awsCaBundle, +}); +``` + +### Custom `ssl` options + +Using **AWS SSL Profiles** with custom `ssl` options: + +```js +{ + // ... + ssl: { + ...awsCaBundle, + rejectUnauthorized: true, + // ... + } +} +``` + +```js +{ + // ... + ssl: { + ca: awsCaBundle.ca, + rejectUnauthorized: true, + // ... + } +} +``` + +### Custom bundles + +```js +const { proxyBundle } = require('aws-ssl-profiles'); + +{ + // ... + ssl: proxyBundle, +} +``` + +--- + +## License + +**AWS SSL Profiles** is under the [**MIT License**](./LICENSE). + +--- + +## Security + +Please check the [**SECURITY.md**](./SECURITY.md). + +--- + +## Contributing + +Please check the [**CONTRIBUTING.md**](./CONTRIBUTING.md) for instructions. + +--- + +## Acknowledgements + +[**Contributors**](https://github.com/mysqljs/aws-ssl-profiles/graphs/contributors). diff --git a/node_modules/aws-ssl-profiles/lib/@types/profiles.d.ts b/node_modules/aws-ssl-profiles/lib/@types/profiles.d.ts new file mode 100644 index 0000000..a02c121 --- /dev/null +++ b/node_modules/aws-ssl-profiles/lib/@types/profiles.d.ts @@ -0,0 +1,4 @@ +export type CA = string[]; +export type Profiles = { + ca: CA; +}; diff --git a/node_modules/aws-ssl-profiles/lib/@types/profiles.js b/node_modules/aws-ssl-profiles/lib/@types/profiles.js new file mode 100644 index 0000000..c8ad2e5 --- /dev/null +++ b/node_modules/aws-ssl-profiles/lib/@types/profiles.js @@ -0,0 +1,2 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); diff --git a/node_modules/aws-ssl-profiles/lib/index.d.ts b/node_modules/aws-ssl-profiles/lib/index.d.ts new file mode 100644 index 0000000..18d181b --- /dev/null +++ b/node_modules/aws-ssl-profiles/lib/index.d.ts @@ -0,0 +1,8 @@ +import type { Profiles } from "./@types/profiles.js"; +export declare const proxyBundle: Profiles; +declare const profiles: Profiles; +declare module "aws-ssl-profiles" { + const profiles: Profiles & { proxyBundle: Profiles }; + export = profiles; +} +export default profiles; diff --git a/node_modules/aws-ssl-profiles/lib/index.js b/node_modules/aws-ssl-profiles/lib/index.js new file mode 100644 index 0000000..d702ca7 --- /dev/null +++ b/node_modules/aws-ssl-profiles/lib/index.js @@ -0,0 +1,13 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const defaults_js_1 = require("./profiles/ca/defaults.js"); +const proxies_js_1 = require("./profiles/ca/proxies.js"); +const proxyBundle = { + ca: proxies_js_1.proxies, +}; +const profiles = { + ca: [...defaults_js_1.defaults, ...proxies_js_1.proxies], +}; +module.exports = profiles; +module.exports.proxyBundle = proxyBundle; +module.exports.default = profiles; diff --git a/node_modules/aws-ssl-profiles/lib/profiles/ca/defaults.d.ts b/node_modules/aws-ssl-profiles/lib/profiles/ca/defaults.d.ts new file mode 100644 index 0000000..347c7b5 --- /dev/null +++ b/node_modules/aws-ssl-profiles/lib/profiles/ca/defaults.d.ts @@ -0,0 +1,9 @@ +import type { CA } from '../../@types/profiles.js'; +/** + * CA Certificates for **Amazon RDS** (2024) + * + * - https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html + * - https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL.html + * - https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html#aurora-serverless.tls + */ +export declare const defaults: CA; diff --git a/node_modules/aws-ssl-profiles/lib/profiles/ca/defaults.js b/node_modules/aws-ssl-profiles/lib/profiles/ca/defaults.js new file mode 100644 index 0000000..343c8a0 --- /dev/null +++ b/node_modules/aws-ssl-profiles/lib/profiles/ca/defaults.js @@ -0,0 +1,2888 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.defaults = void 0; +/** + * CA Certificates for **Amazon RDS** (2024) + * + * - https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.SSL.html + * - https://docs.amazonaws.cn/en_us/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.SSL.html + * - https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html#aurora-serverless.tls + */ +exports.defaults = [ + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEEjCCAvqgAwIBAgIJAM2ZN/+nPi27MA0GCSqGSIb3DQEBCwUAMIGVMQswCQYD\n' + + 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n' + + 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\n' + + 'em9uIFJEUzEmMCQGA1UEAwwdQW1hem9uIFJEUyBhZi1zb3V0aC0xIFJvb3QgQ0Ew\n' + + 'HhcNMTkxMDI4MTgwNTU4WhcNMjQxMDI2MTgwNTU4WjCBlTELMAkGA1UEBhMCVVMx\n' + + 'EDAOBgNVBAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoM\n' + + 'GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n' + + 'JjAkBgNVBAMMHUFtYXpvbiBSRFMgYWYtc291dGgtMSBSb290IENBMIIBIjANBgkq\n' + + 'hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwR2351uPMZaJk2gMGT+1sk8HE9MQh2rc\n' + + '/sCnbxGn2p1c7Oi9aBbd/GiFijeJb2BXvHU+TOq3d3Jjqepq8tapXVt4ojbTJNyC\n' + + 'J5E7r7KjTktKdLxtBE1MK25aY+IRJjtdU6vG3KiPKUT1naO3xs3yt0F76WVuFivd\n' + + '9OHv2a+KHvPkRUWIxpmAHuMY9SIIMmEZtVE7YZGx5ah0iO4JzItHcbVR0y0PBH55\n' + + 'arpFBddpIVHCacp1FUPxSEWkOpI7q0AaU4xfX0fe1BV5HZYRKpBOIp1TtZWvJD+X\n' + + 'jGUtL1BEsT5vN5g9MkqdtYrC+3SNpAk4VtpvJrdjraI/hhvfeXNnAwIDAQABo2Mw\n' + + 'YTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUEEi/\n' + + 'WWMcBJsoGXg+EZwkQ0MscZQwHwYDVR0jBBgwFoAUEEi/WWMcBJsoGXg+EZwkQ0Ms\n' + + 'cZQwDQYJKoZIhvcNAQELBQADggEBAGDZ5js5Pc/gC58LJrwMPXFhJDBS8QuDm23C\n' + + 'FFUdlqucskwOS3907ErK1ZkmVJCIqFLArHqskFXMAkRZ2PNR7RjWLqBs+0znG5yH\n' + + 'hRKb4DXzhUFQ18UBRcvT6V6zN97HTRsEEaNhM/7k8YLe7P8vfNZ28VIoJIGGgv9D\n' + + 'wQBBvkxQ71oOmAG0AwaGD0ORGUfbYry9Dz4a4IcUsZyRWRMADixgrFv6VuETp26s\n' + + '/+z+iqNaGWlELBKh3iQCT6Y/1UnkPLO42bxrCSyOvshdkYN58Q2gMTE1SVTqyo8G\n' + + 'Lw8lLAz9bnvUSgHzB3jRrSx6ggF/WRMRYlR++y6LXP4SAsSAaC0=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEEjCCAvqgAwIBAgIJAJYM4LxvTZA6MA0GCSqGSIb3DQEBCwUAMIGVMQswCQYD\n' + + 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n' + + 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\n' + + 'em9uIFJEUzEmMCQGA1UEAwwdQW1hem9uIFJEUyBldS1zb3V0aC0xIFJvb3QgQ0Ew\n' + + 'HhcNMTkxMDMwMjAyMDM2WhcNMjQxMDI4MjAyMDM2WjCBlTELMAkGA1UEBhMCVVMx\n' + + 'EDAOBgNVBAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoM\n' + + 'GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n' + + 'JjAkBgNVBAMMHUFtYXpvbiBSRFMgZXUtc291dGgtMSBSb290IENBMIIBIjANBgkq\n' + + 'hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqM921jXCXeqpRNCS9CBPOe5N7gMaEt+D\n' + + 's5uR3riZbqzRlHGiF1jZihkXfHAIQewDwy+Yz+Oec1aEZCQMhUHxZJPusuX0cJfj\n' + + 'b+UluFqHIijL2TfXJ3D0PVLLoNTQJZ8+GAPECyojAaNuoHbdVqxhOcznMsXIXVFq\n' + + 'yVLKDGvyKkJjai/iSPDrQMXufg3kWt0ISjNLvsG5IFXgP4gttsM8i0yvRd4QcHoo\n' + + 'DjvH7V3cS+CQqW5SnDrGnHToB0RLskE1ET+oNOfeN9PWOxQprMOX/zmJhnJQlTqD\n' + + 'QP7jcf7SddxrKFjuziFiouskJJyNDsMjt1Lf60+oHZhed2ogTeifGwIDAQABo2Mw\n' + + 'YTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUFBAF\n' + + 'cgJe/BBuZiGeZ8STfpkgRYQwHwYDVR0jBBgwFoAUFBAFcgJe/BBuZiGeZ8STfpkg\n' + + 'RYQwDQYJKoZIhvcNAQELBQADggEBAKAYUtlvDuX2UpZW9i1QgsjFuy/ErbW0dLHU\n' + + 'e/IcFtju2z6RLZ+uF+5A8Kme7IKG1hgt8s+w9TRVQS/7ukQzoK3TaN6XKXRosjtc\n' + + 'o9Rm4gYWM8bmglzY1TPNaiI4HC7546hSwJhubjN0bXCuj/0sHD6w2DkiGuwKNAef\n' + + 'yTu5vZhPkeNyXLykxkzz7bNp2/PtMBnzIp+WpS7uUDmWyScGPohKMq5PqvL59z+L\n' + + 'ZI3CYeMZrJ5VpXUg3fNNIz/83N3G0sk7wr0ohs/kHTP7xPOYB0zD7Ku4HA0Q9Swf\n' + + 'WX0qr6UQgTPMjfYDLffI7aEId0gxKw1eGYc6Cq5JAZ3ipi/cBFc=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEEjCCAvqgAwIBAgIJANew34ehz5l8MA0GCSqGSIb3DQEBCwUAMIGVMQswCQYD\n' + + 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n' + + 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\n' + + 'em9uIFJEUzEmMCQGA1UEAwwdQW1hem9uIFJEUyBtZS1zb3V0aC0xIFJvb3QgQ0Ew\n' + + 'HhcNMTkwNTEwMjE0ODI3WhcNMjQwNTA4MjE0ODI3WjCBlTELMAkGA1UEBhMCVVMx\n' + + 'EDAOBgNVBAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoM\n' + + 'GUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMx\n' + + 'JjAkBgNVBAMMHUFtYXpvbiBSRFMgbWUtc291dGgtMSBSb290IENBMIIBIjANBgkq\n' + + 'hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp7BYV88MukcY+rq0r79+C8UzkT30fEfT\n' + + 'aPXbx1d6M7uheGN4FMaoYmL+JE1NZPaMRIPTHhFtLSdPccInvenRDIatcXX+jgOk\n' + + 'UA6lnHQ98pwN0pfDUyz/Vph4jBR9LcVkBbe0zdoKKp+HGbMPRU0N2yNrog9gM5O8\n' + + 'gkU/3O2csJ/OFQNnj4c2NQloGMUpEmedwJMOyQQfcUyt9CvZDfIPNnheUS29jGSw\n' + + 'ERpJe/AENu8Pxyc72jaXQuD+FEi2Ck6lBkSlWYQFhTottAeGvVFNCzKszCntrtqd\n' + + 'rdYUwurYsLTXDHv9nW2hfDUQa0mhXf9gNDOBIVAZugR9NqNRNyYLHQIDAQABo2Mw\n' + + 'YTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU54cf\n' + + 'DjgwBx4ycBH8+/r8WXdaiqYwHwYDVR0jBBgwFoAU54cfDjgwBx4ycBH8+/r8WXda\n' + + 'iqYwDQYJKoZIhvcNAQELBQADggEBAIIMTSPx/dR7jlcxggr+O6OyY49Rlap2laKA\n' + + 'eC/XI4ySP3vQkIFlP822U9Kh8a9s46eR0uiwV4AGLabcu0iKYfXjPkIprVCqeXV7\n' + + 'ny9oDtrbflyj7NcGdZLvuzSwgl9SYTJp7PVCZtZutsPYlbJrBPHwFABvAkMvRtDB\n' + + 'hitIg4AESDGPoCl94sYHpfDfjpUDMSrAMDUyO6DyBdZH5ryRMAs3lGtsmkkNUrso\n' + + 'aTW6R05681Z0mvkRdb+cdXtKOSuDZPoe2wJJIaz3IlNQNSrB5TImMYgmt6iAsFhv\n' + + '3vfTSTKrZDNTJn4ybG6pq1zWExoXsktZPylJly6R3RBwV6nwqBM=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEBjCCAu6gAwIBAgIJAMc0ZzaSUK51MA0GCSqGSIb3DQEBCwUAMIGPMQswCQYD\n' + + 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n' + + 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\n' + + 'em9uIFJEUzEgMB4GA1UEAwwXQW1hem9uIFJEUyBSb290IDIwMTkgQ0EwHhcNMTkw\n' + + 'ODIyMTcwODUwWhcNMjQwODIyMTcwODUwWjCBjzELMAkGA1UEBhMCVVMxEDAOBgNV\n' + + 'BAcMB1NlYXR0bGUxEzARBgNVBAgMCldhc2hpbmd0b24xIjAgBgNVBAoMGUFtYXpv\n' + + 'biBXZWIgU2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxIDAeBgNV\n' + + 'BAMMF0FtYXpvbiBSRFMgUm9vdCAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEFAAOC\n' + + 'AQ8AMIIBCgKCAQEArXnF/E6/Qh+ku3hQTSKPMhQQlCpoWvnIthzX6MK3p5a0eXKZ\n' + + 'oWIjYcNNG6UwJjp4fUXl6glp53Jobn+tWNX88dNH2n8DVbppSwScVE2LpuL+94vY\n' + + '0EYE/XxN7svKea8YvlrqkUBKyxLxTjh+U/KrGOaHxz9v0l6ZNlDbuaZw3qIWdD/I\n' + + '6aNbGeRUVtpM6P+bWIoxVl/caQylQS6CEYUk+CpVyJSkopwJlzXT07tMoDL5WgX9\n' + + 'O08KVgDNz9qP/IGtAcRduRcNioH3E9v981QO1zt/Gpb2f8NqAjUUCUZzOnij6mx9\n' + + 'McZ+9cWX88CRzR0vQODWuZscgI08NvM69Fn2SQIDAQABo2MwYTAOBgNVHQ8BAf8E\n' + + 'BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUc19g2LzLA5j0Kxc0LjZa\n' + + 'pmD/vB8wHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJKoZIhvcN\n' + + 'AQELBQADggEBAHAG7WTmyjzPRIM85rVj+fWHsLIvqpw6DObIjMWokpliCeMINZFV\n' + + 'ynfgBKsf1ExwbvJNzYFXW6dihnguDG9VMPpi2up/ctQTN8tm9nDKOy08uNZoofMc\n' + + 'NUZxKCEkVKZv+IL4oHoeayt8egtv3ujJM6V14AstMQ6SwvwvA93EP/Ug2e4WAXHu\n' + + 'cbI1NAbUgVDqp+DRdfvZkgYKryjTWd/0+1fS8X1bBZVWzl7eirNVnHbSH2ZDpNuY\n' + + '0SBd8dj5F6ld3t58ydZbrTHze7JJOd8ijySAp4/kiu9UfZWuTPABzDa/DSdz9Dk/\n' + + 'zPW4CXXvhLmE02TA9/HeCw3KEHIwicNuEfw=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEEDCCAvigAwIBAgIJAKFMXyltvuRdMA0GCSqGSIb3DQEBCwUAMIGUMQswCQYD\n' + + 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n' + + 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\n' + + 'em9uIFJEUzElMCMGA1UEAwwcQW1hem9uIFJEUyBCZXRhIFJvb3QgMjAxOSBDQTAe\n' + + 'Fw0xOTA4MTkxNzM4MjZaFw0yNDA4MTkxNzM4MjZaMIGUMQswCQYDVQQGEwJVUzEQ\n' + + 'MA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEiMCAGA1UECgwZ\n' + + 'QW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEl\n' + + 'MCMGA1UEAwwcQW1hem9uIFJEUyBCZXRhIFJvb3QgMjAxOSBDQTCCASIwDQYJKoZI\n' + + 'hvcNAQEBBQADggEPADCCAQoCggEBAMkZdnIH9ndatGAcFo+DppGJ1HUt4x+zeO+0\n' + + 'ZZ29m0sfGetVulmTlv2d5b66e+QXZFWpcPQMouSxxYTW08TbrQiZngKr40JNXftA\n' + + 'atvzBqIImD4II0ZX5UEVj2h98qe/ypW5xaDN7fEa5e8FkYB1TEemPaWIbNXqchcL\n' + + 'tV7IJPr3Cd7Z5gZJlmujIVDPpMuSiNaal9/6nT9oqN+JSM1fx5SzrU5ssg1Vp1vv\n' + + '5Xab64uOg7wCJRB9R2GC9XD04odX6VcxUAGrZo6LR64ZSifupo3l+R5sVOc5i8NH\n' + + 'skdboTzU9H7+oSdqoAyhIU717PcqeDum23DYlPE2nGBWckE+eT8CAwEAAaNjMGEw\n' + + 'DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFK2hDBWl\n' + + 'sbHzt/EHd0QYOooqcFPhMB8GA1UdIwQYMBaAFK2hDBWlsbHzt/EHd0QYOooqcFPh\n' + + 'MA0GCSqGSIb3DQEBCwUAA4IBAQAO/718k8EnOqJDx6wweUscGTGL/QdKXUzTVRAx\n' + + 'JUsjNUv49mH2HQVEW7oxszfH6cPCaupNAddMhQc4C/af6GHX8HnqfPDk27/yBQI+\n' + + 'yBBvIanGgxv9c9wBbmcIaCEWJcsLp3HzXSYHmjiqkViXwCpYfkoV3Ns2m8bp+KCO\n' + + 'y9XmcCKRaXkt237qmoxoh2sGmBHk2UlQtOsMC0aUQ4d7teAJG0q6pbyZEiPyKZY1\n' + + 'XR/UVxMJL0Q4iVpcRS1kaNCMfqS2smbLJeNdsan8pkw1dvPhcaVTb7CvjhJtjztF\n' + + 'YfDzAI5794qMlWxwilKMmUvDlPPOTen8NNHkLwWvyFCH7Doh\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEFjCCAv6gAwIBAgIJAMzYZJ+R9NBVMA0GCSqGSIb3DQEBCwUAMIGXMQswCQYD\n' + + 'VQQGEwJVUzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEi\n' + + 'MCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1h\n' + + 'em9uIFJEUzEoMCYGA1UEAwwfQW1hem9uIFJEUyBQcmV2aWV3IFJvb3QgMjAxOSBD\n' + + 'QTAeFw0xOTA4MjEyMjI5NDlaFw0yNDA4MjEyMjI5NDlaMIGXMQswCQYDVQQGEwJV\n' + + 'UzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEiMCAGA1UE\n' + + 'CgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJE\n' + + 'UzEoMCYGA1UEAwwfQW1hem9uIFJEUyBQcmV2aWV3IFJvb3QgMjAxOSBDQTCCASIw\n' + + 'DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM7kkS6vjgKKQTPynC2NjdN5aPPV\n' + + 'O71G0JJS/2ARVBVJd93JLiGovVJilfWYfwZCs4gTRSSjrUD4D4HyqCd6A+eEEtJq\n' + + 'M0DEC7i0dC+9WNTsPszuB206Jy2IUmxZMIKJAA1NHSbIMjB+b6/JhbSUi7nKdbR/\n' + + 'brj83bF+RoSA+ogrgX7mQbxhmFcoZN9OGaJgYKsKWUt5Wqv627KkGodUK8mDepgD\n' + + 'S3ZfoRQRx3iceETpcmHJvaIge6+vyDX3d9Z22jmvQ4AKv3py2CmU2UwuhOltFDwB\n' + + '0ddtb39vgwrJxaGfiMRHpEP1DfNLWHAnA69/pgZPwIggidS+iBPUhgucMp8CAwEA\n' + + 'AaNjMGEwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE\n' + + 'FGnTGpQuQ2H/DZlXMQijZEhjs7TdMB8GA1UdIwQYMBaAFGnTGpQuQ2H/DZlXMQij\n' + + 'ZEhjs7TdMA0GCSqGSIb3DQEBCwUAA4IBAQC3xz1vQvcXAfpcZlngiRWeqU8zQAMQ\n' + + 'LZPCFNv7PVk4pmqX+ZiIRo4f9Zy7TrOVcboCnqmP/b/mNq0gVF4O+88jwXJZD+f8\n' + + '/RnABMZcnGU+vK0YmxsAtYU6TIb1uhRFmbF8K80HHbj9vSjBGIQdPCbvmR2zY6VJ\n' + + 'BYM+w9U9hp6H4DVMLKXPc1bFlKA5OBTgUtgkDibWJKFOEPW3UOYwp9uq6pFoN0AO\n' + + 'xMTldqWFsOF3bJIlvOY0c/1EFZXu3Ns6/oCP//Ap9vumldYMUZWmbK+gK33FPOXV\n' + + '8BQ6jNC29icv7lLDpRPwjibJBXX+peDR5UK4FdYcswWEB1Tix5X8dYu6\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIECTCCAvGgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZUxCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSYwJAYDVQQDDB1BbWF6b24gUkRTIGFmLXNvdXRoLTEgUm9vdCBDQTAeFw0xOTEw\n' + + 'MjgxODA2NTNaFw0yNDEwMjgxODA2NTNaMIGQMQswCQYDVQQGEwJVUzETMBEGA1UE\n' + + 'CAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9u\n' + + 'IFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEhMB8GA1UE\n' + + 'AwwYQW1hem9uIFJEUyBhZi1zb3V0aC0xIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC\n' + + 'AQ8AMIIBCgKCAQEAvtV1OqmFa8zCVQSKOvPUJERLVFtd4rZmDpImc5rIoeBk7w/P\n' + + '9lcKUJjO8R/w1a2lJXx3oQ81tiY0Piw6TpT62YWVRMWrOw8+Vxq1dNaDSFp9I8d0\n' + + 'UHillSSbOk6FOrPDp+R6AwbGFqUDebbN5LFFoDKbhNmH1BVS0a6YNKpGigLRqhka\n' + + 'cClPslWtPqtjbaP3Jbxl26zWzLo7OtZl98dR225pq8aApNBwmtgA7Gh60HK/cX0t\n' + + '32W94n8D+GKSg6R4MKredVFqRTi9hCCNUu0sxYPoELuM+mHiqB5NPjtm92EzCWs+\n' + + '+vgWhMc6GxG+82QSWx1Vj8sgLqtE/vLrWddf5QIDAQABo2YwZDAOBgNVHQ8BAf8E\n' + + 'BAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUuLB4gYVJrSKJj/Gz\n' + + 'pqc6yeA+RcAwHwYDVR0jBBgwFoAUEEi/WWMcBJsoGXg+EZwkQ0MscZQwDQYJKoZI\n' + + 'hvcNAQELBQADggEBABauYOZxUhe9/RhzGJ8MsWCz8eKcyDVd4FCnY6Qh+9wcmYNT\n' + + 'LtnD88LACtJKb/b81qYzcB0Em6+zVJ3Z9jznfr6buItE6es9wAoja22Xgv44BTHL\n' + + 'rimbgMwpTt3uEMXDffaS0Ww6YWb3pSE0XYI2ISMWz+xRERRf+QqktSaL39zuiaW5\n' + + 'tfZMre+YhohRa/F0ZQl3RCd6yFcLx4UoSPqQsUl97WhYzwAxZZfwvLJXOc4ATt3u\n' + + 'VlCUylNDkaZztDJc/yN5XQoK9W5nOt2cLu513MGYKbuarQr8f+gYU8S+qOyuSRSP\n' + + 'NRITzwCRVnsJE+2JmcRInn/NcanB7uOGqTvJ9+c=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIECTCCAvGgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZUxCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSYwJAYDVQQDDB1BbWF6b24gUkRTIGV1LXNvdXRoLTEgUm9vdCBDQTAeFw0xOTEw\n' + + 'MzAyMDIxMzBaFw0yNDEwMzAyMDIxMzBaMIGQMQswCQYDVQQGEwJVUzETMBEGA1UE\n' + + 'CAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9u\n' + + 'IFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEhMB8GA1UE\n' + + 'AwwYQW1hem9uIFJEUyBldS1zb3V0aC0xIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC\n' + + 'AQ8AMIIBCgKCAQEAtEyjYcajx6xImJn8Vz1zjdmL4ANPgQXwF7+tF7xccmNAZETb\n' + + 'bzb3I9i5fZlmrRaVznX+9biXVaGxYzIUIR3huQ3Q283KsDYnVuGa3mk690vhvJbB\n' + + 'QIPgKa5mVwJppnuJm78KqaSpi0vxyCPe3h8h6LLFawVyWrYNZ4okli1/U582eef8\n' + + 'RzJp/Ear3KgHOLIiCdPDF0rjOdCG1MOlDLixVnPn9IYOciqO+VivXBg+jtfc5J+L\n' + + 'AaPm0/Yx4uELt1tkbWkm4BvTU/gBOODnYziITZM0l6Fgwvbwgq5duAtKW+h031lC\n' + + '37rEvrclqcp4wrsUYcLAWX79ZyKIlRxcAdvEhQIDAQABo2YwZDAOBgNVHQ8BAf8E\n' + + 'BAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQU7zPyc0azQxnBCe7D\n' + + 'b9KAadH1QSEwHwYDVR0jBBgwFoAUFBAFcgJe/BBuZiGeZ8STfpkgRYQwDQYJKoZI\n' + + 'hvcNAQELBQADggEBAFGaNiYxg7yC/xauXPlaqLCtwbm2dKyK9nIFbF/7be8mk7Q3\n' + + 'MOA0of1vGHPLVQLr6bJJpD9MAbUcm4cPAwWaxwcNpxOjYOFDaq10PCK4eRAxZWwF\n' + + 'NJRIRmGsl8NEsMNTMCy8X+Kyw5EzH4vWFl5Uf2bGKOeFg0zt43jWQVOX6C+aL3Cd\n' + + 'pRS5MhmYpxMG8irrNOxf4NVFE2zpJOCm3bn0STLhkDcV/ww4zMzObTJhiIb5wSWn\n' + + 'EXKKWhUXuRt7A2y1KJtXpTbSRHQxE++69Go1tWhXtRiULCJtf7wF2Ksm0RR/AdXT\n' + + '1uR1vKyH5KBJPX3ppYkQDukoHTFR0CpB+G84NLo=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIECTCCAvGgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZUxCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSYwJAYDVQQDDB1BbWF6b24gUkRTIG1lLXNvdXRoLTEgUm9vdCBDQTAeFw0xOTA1\n' + + 'MTAyMTU4NDNaFw0yNTA2MDExMjAwMDBaMIGQMQswCQYDVQQGEwJVUzETMBEGA1UE\n' + + 'CAwKV2FzaGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9u\n' + + 'IFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEhMB8GA1UE\n' + + 'AwwYQW1hem9uIFJEUyBtZS1zb3V0aC0xIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC\n' + + 'AQ8AMIIBCgKCAQEAudOYPZH+ihJAo6hNYMB5izPVBe3TYhnZm8+X3IoaaYiKtsp1\n' + + 'JJhkTT0CEejYIQ58Fh4QrMUyWvU8qsdK3diNyQRoYLbctsBPgxBR1u07eUJDv38/\n' + + 'C1JlqgHmMnMi4y68Iy7ymv50QgAMuaBqgEBRI1R6Lfbyrb2YvH5txjJyTVMwuCfd\n' + + 'YPAtZVouRz0JxmnfsHyxjE+So56uOKTDuw++Ho4HhZ7Qveej7XB8b+PIPuroknd3\n' + + 'FQB5RVbXRvt5ZcVD4F2fbEdBniF7FAF4dEiofVCQGQ2nynT7dZdEIPfPdH3n7ZmE\n' + + 'lAOmwHQ6G83OsiHRBLnbp+QZRgOsjkHJxT20bQIDAQABo2YwZDAOBgNVHQ8BAf8E\n' + + 'BAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUOEVDM7VomRH4HVdA\n' + + 'QvIMNq2tXOcwHwYDVR0jBBgwFoAU54cfDjgwBx4ycBH8+/r8WXdaiqYwDQYJKoZI\n' + + 'hvcNAQELBQADggEBAHhvMssj+Th8IpNePU6RH0BiL6o9c437R3Q4IEJeFdYL+nZz\n' + + 'PW/rELDPvLRUNMfKM+KzduLZ+l29HahxefejYPXtvXBlq/E/9czFDD4fWXg+zVou\n' + + 'uDXhyrV4kNmP4S0eqsAP/jQHPOZAMFA4yVwO9hlqmePhyDnszCh9c1PfJSBh49+b\n' + + '4w7i/L3VBOMt8j3EKYvqz0gVfpeqhJwL4Hey8UbVfJRFJMJzfNHpePqtDRAY7yjV\n' + + 'PYquRaV2ab/E+/7VFkWMM4tazYz/qsYA2jSH+4xDHvYk8LnsbcrF9iuidQmEc5sb\n' + + 'FgcWaSKG4DJjcI5k7AJLWcXyTDt21Ci43LE+I9Q=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIECDCCAvCgAwIBAgICVIYwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MDQxNzEz\n' + + 'MDRaFw0yNDA4MjIxNzA4NTBaMIGVMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' + + 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' + + 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEmMCQGA1UEAwwdQW1h\n' + + 'em9uIFJEUyBhcC1zb3V0aC0xIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n' + + 'DwAwggEKAoIBAQDUYOz1hGL42yUCrcsMSOoU8AeD/3KgZ4q7gP+vAz1WnY9K/kim\n' + + 'eWN/2Qqzlo3+mxSFQFyD4MyV3+CnCPnBl9Sh1G/F6kThNiJ7dEWSWBQGAB6HMDbC\n' + + 'BaAsmUc1UIz8sLTL3fO+S9wYhA63Wun0Fbm/Rn2yk/4WnJAaMZcEtYf6e0KNa0LM\n' + + 'p/kN/70/8cD3iz3dDR8zOZFpHoCtf0ek80QqTich0A9n3JLxR6g6tpwoYviVg89e\n' + + 'qCjQ4axxOkWWeusLeTJCcY6CkVyFvDAKvcUl1ytM5AiaUkXblE7zDFXRM4qMMRdt\n' + + 'lPm8d3pFxh0fRYk8bIKnpmtOpz3RIctDrZZxAgMBAAGjZjBkMA4GA1UdDwEB/wQE\n' + + 'AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBT99wKJftD3jb4sHoHG\n' + + 'i3uGlH6W6TAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\n' + + '9w0BAQsFAAOCAQEAZ17hhr3dII3hUfuHQ1hPWGrpJOX/G9dLzkprEIcCidkmRYl+\n' + + 'hu1Pe3caRMh/17+qsoEErmnVq5jNY9X1GZL04IZH8YbHc7iRHw3HcWAdhN8633+K\n' + + 'jYEB2LbJ3vluCGnCejq9djDb6alOugdLMJzxOkHDhMZ6/gYbECOot+ph1tQuZXzD\n' + + 'tZ7prRsrcuPBChHlPjmGy8M9z8u+kF196iNSUGC4lM8vLkHM7ycc1/ZOwRq9aaTe\n' + + 'iOghbQQyAEe03MWCyDGtSmDfr0qEk+CHN+6hPiaL8qKt4s+V9P7DeK4iW08ny8Ox\n' + + 'AVS7u0OK/5+jKMAMrKwpYrBydOjTUTHScocyNw==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEBzCCAu+gAwIBAgICQ2QwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MDUxODQ2\n' + + 'MjlaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' + + 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' + + 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\n' + + 'em9uIFJEUyBzYS1lYXN0LTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n' + + 'ADCCAQoCggEBAMMvR+ReRnOzqJzoaPipNTt1Z2VA968jlN1+SYKUrYM3No+Vpz0H\n' + + 'M6Tn0oYB66ByVsXiGc28ulsqX1HbHsxqDPwvQTKvO7SrmDokoAkjJgLocOLUAeld\n' + + '5AwvUjxGRP6yY90NV7X786MpnYb2Il9DIIaV9HjCmPt+rjy2CZjS0UjPjCKNfB8J\n' + + 'bFjgW6GGscjeyGb/zFwcom5p4j0rLydbNaOr9wOyQrtt3ZQWLYGY9Zees/b8pmcc\n' + + 'Jt+7jstZ2UMV32OO/kIsJ4rMUn2r/uxccPwAc1IDeRSSxOrnFKhW3Cu69iB3bHp7\n' + + 'JbawY12g7zshE4I14sHjv3QoXASoXjx4xgMCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n' + + 'AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFI1Fc/Ql2jx+oJPgBVYq\n' + + 'ccgP0pQ8MB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\n' + + 'DQEBCwUAA4IBAQB4VVVabVp70myuYuZ3vltQIWqSUMhkaTzehMgGcHjMf9iLoZ/I\n' + + '93KiFUSGnek5cRePyS9wcpp0fcBT3FvkjpUdCjVtdttJgZFhBxgTd8y26ImdDDMR\n' + + '4+BUuhI5msvjL08f+Vkkpu1GQcGmyFVPFOy/UY8iefu+QyUuiBUnUuEDd49Hw0Fn\n' + + '/kIPII6Vj82a2mWV/Q8e+rgN8dIRksRjKI03DEoP8lhPlsOkhdwU6Uz9Vu6NOB2Q\n' + + 'Ls1kbcxAc7cFSyRVJEhh12Sz9d0q/CQSTFsVJKOjSNQBQfVnLz1GwO/IieUEAr4C\n' + + 'jkTntH0r1LX5b/GwN4R887LvjAEdTbg1his7\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIECDCCAvCgAwIBAgIDAIkHMA0GCSqGSIb3DQEBCwUAMIGPMQswCQYDVQQGEwJV\n' + + 'UzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEiMCAGA1UE\n' + + 'CgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJE\n' + + 'UzEgMB4GA1UEAwwXQW1hem9uIFJEUyBSb290IDIwMTkgQ0EwHhcNMTkwOTA2MTc0\n' + + 'MDIxWhcNMjQwODIyMTcwODUwWjCBlDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldh\n' + + 'c2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoMGUFtYXpvbiBXZWIg\n' + + 'U2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxJTAjBgNVBAMMHEFt\n' + + 'YXpvbiBSRFMgdXMtd2VzdC0xIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n' + + 'DwAwggEKAoIBAQDD2yzbbAl77OofTghDMEf624OvU0eS9O+lsdO0QlbfUfWa1Kd6\n' + + '0WkgjkLZGfSRxEHMCnrv4UPBSK/Qwn6FTjkDLgemhqBtAnplN4VsoDL+BkRX4Wwq\n' + + '/dSQJE2b+0hm9w9UMVGFDEq1TMotGGTD2B71eh9HEKzKhGzqiNeGsiX4VV+LJzdH\n' + + 'uM23eGisNqmd4iJV0zcAZ+Gbh2zK6fqTOCvXtm7Idccv8vZZnyk1FiWl3NR4WAgK\n' + + 'AkvWTIoFU3Mt7dIXKKClVmvssG8WHCkd3Xcb4FHy/G756UZcq67gMMTX/9fOFM/v\n' + + 'l5C0+CHl33Yig1vIDZd+fXV1KZD84dEJfEvHAgMBAAGjZjBkMA4GA1UdDwEB/wQE\n' + + 'AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBR+ap20kO/6A7pPxo3+\n' + + 'T3CfqZpQWjAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\n' + + '9w0BAQsFAAOCAQEAHCJky2tPjPttlDM/RIqExupBkNrnSYnOK4kr9xJ3sl8UF2DA\n' + + 'PAnYsjXp3rfcjN/k/FVOhxwzi3cXJF/2Tjj39Bm/OEfYTOJDNYtBwB0VVH4ffa/6\n' + + 'tZl87jaIkrxJcreeeHqYMnIxeN0b/kliyA+a5L2Yb0VPjt9INq34QDc1v74FNZ17\n' + + '4z8nr1nzg4xsOWu0Dbjo966lm4nOYIGBRGOKEkHZRZ4mEiMgr3YLkv8gSmeitx57\n' + + 'Z6dVemNtUic/LVo5Iqw4n3TBS0iF2C1Q1xT/s3h+0SXZlfOWttzSluDvoMv5PvCd\n' + + 'pFjNn+aXLAALoihL1MJSsxydtsLjOBro5eK0Vw==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEDDCCAvSgAwIBAgICOFAwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTAxNzQ2\n' + + 'MjFaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' + + 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' + + 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\n' + + 'em9uIFJEUyBhcC1ub3J0aGVhc3QtMiAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\n' + + 'AAOCAQ8AMIIBCgKCAQEAzU72e6XbaJbi4HjJoRNjKxzUEuChKQIt7k3CWzNnmjc5\n' + + '8I1MjCpa2W1iw1BYVysXSNSsLOtUsfvBZxi/1uyMn5ZCaf9aeoA9UsSkFSZBjOCN\n' + + 'DpKPCmfV1zcEOvJz26+1m8WDg+8Oa60QV0ou2AU1tYcw98fOQjcAES0JXXB80P2s\n' + + '3UfkNcnDz+l4k7j4SllhFPhH6BQ4lD2NiFAP4HwoG6FeJUn45EPjzrydxjq6v5Fc\n' + + 'cQ8rGuHADVXotDbEhaYhNjIrsPL+puhjWfhJjheEw8c4whRZNp6gJ/b6WEes/ZhZ\n' + + 'h32DwsDsZw0BfRDUMgUn8TdecNexHUw8vQWeC181hwIDAQABo2YwZDAOBgNVHQ8B\n' + + 'Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUwW9bWgkWkr0U\n' + + 'lrOsq2kvIdrECDgwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\n' + + 'KoZIhvcNAQELBQADggEBAEugF0Gj7HVhX0ehPZoGRYRt3PBuI2YjfrrJRTZ9X5wc\n' + + '9T8oHmw07mHmNy1qqWvooNJg09bDGfB0k5goC2emDiIiGfc/kvMLI7u+eQOoMKj6\n' + + 'mkfCncyRN3ty08Po45vTLBFZGUvtQmjM6yKewc4sXiASSBmQUpsMbiHRCL72M5qV\n' + + 'obcJOjGcIdDTmV1BHdWT+XcjynsGjUqOvQWWhhLPrn4jWe6Xuxll75qlrpn3IrIx\n' + + 'CRBv/5r7qbcQJPOgwQsyK4kv9Ly8g7YT1/vYBlR3cRsYQjccw5ceWUj2DrMVWhJ4\n' + + 'prf+E3Aa4vYmLLOUUvKnDQ1k3RGNu56V0tonsQbfsaM=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIECjCCAvKgAwIBAgICEzUwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTAyMDUy\n' + + 'MjVaFw0yNDA4MjIxNzA4NTBaMIGXMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' + + 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' + + 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEoMCYGA1UEAwwfQW1h\n' + + 'em9uIFJEUyBjYS1jZW50cmFsLTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQAD\n' + + 'ggEPADCCAQoCggEBAOxHqdcPSA2uBjsCP4DLSlqSoPuQ/X1kkJLusVRKiQE2zayB\n' + + 'viuCBt4VB9Qsh2rW3iYGM+usDjltGnI1iUWA5KHcvHszSMkWAOYWLiMNKTlg6LCp\n' + + 'XnE89tvj5dIH6U8WlDvXLdjB/h30gW9JEX7S8supsBSci2GxEzb5mRdKaDuuF/0O\n' + + 'qvz4YE04pua3iZ9QwmMFuTAOYzD1M72aOpj+7Ac+YLMM61qOtU+AU6MndnQkKoQi\n' + + 'qmUN2A9IFaqHFzRlSdXwKCKUA4otzmz+/N3vFwjb5F4DSsbsrMfjeHMo6o/nb6Nh\n' + + 'YDb0VJxxPee6TxSuN7CQJ2FxMlFUezcoXqwqXD0CAwEAAaNmMGQwDgYDVR0PAQH/\n' + + 'BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFDGGpon9WfIpsggE\n' + + 'CxHq8hZ7E2ESMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqG\n' + + 'SIb3DQEBCwUAA4IBAQAvpeQYEGZvoTVLgV9rd2+StPYykMsmFjWQcyn3dBTZRXC2\n' + + 'lKq7QhQczMAOhEaaN29ZprjQzsA2X/UauKzLR2Uyqc2qOeO9/YOl0H3qauo8C/W9\n' + + 'r8xqPbOCDLEXlOQ19fidXyyEPHEq5WFp8j+fTh+s8WOx2M7IuC0ANEetIZURYhSp\n' + + 'xl9XOPRCJxOhj7JdelhpweX0BJDNHeUFi0ClnFOws8oKQ7sQEv66d5ddxqqZ3NVv\n' + + 'RbCvCtEutQMOUMIuaygDlMn1anSM8N7Wndx8G6+Uy67AnhjGx7jw/0YPPxopEj6x\n' + + 'JXP8j0sJbcT9K/9/fPVLNT25RvQ/93T2+IQL4Ca2\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEBzCCAu+gAwIBAgICYpgwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTExNzMx\n' + + 'NDhaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' + + 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' + + 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\n' + + 'em9uIFJEUyBldS13ZXN0LTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n' + + 'ADCCAQoCggEBAMk3YdSZ64iAYp6MyyKtYJtNzv7zFSnnNf6vv0FB4VnfITTMmOyZ\n' + + 'LXqKAT2ahZ00hXi34ewqJElgU6eUZT/QlzdIu359TEZyLVPwURflL6SWgdG01Q5X\n' + + 'O++7fSGcBRyIeuQWs9FJNIIqK8daF6qw0Rl5TXfu7P9dBc3zkgDXZm2DHmxGDD69\n' + + '7liQUiXzoE1q2Z9cA8+jirDioJxN9av8hQt12pskLQumhlArsMIhjhHRgF03HOh5\n' + + 'tvi+RCfihVOxELyIRTRpTNiIwAqfZxxTWFTgfn+gijTmd0/1DseAe82aYic8JbuS\n' + + 'EMbrDduAWsqrnJ4GPzxHKLXX0JasCUcWyMECAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n' + + 'AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPLtsq1NrwJXO13C9eHt\n' + + 'sLY11AGwMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\n' + + 'DQEBCwUAA4IBAQAnWBKj5xV1A1mYd0kIgDdkjCwQkiKF5bjIbGkT3YEFFbXoJlSP\n' + + '0lZZ/hDaOHI8wbLT44SzOvPEEmWF9EE7SJzkvSdQrUAWR9FwDLaU427ALI3ngNHy\n' + + 'lGJ2hse1fvSRNbmg8Sc9GBv8oqNIBPVuw+AJzHTacZ1OkyLZrz1c1QvwvwN2a+Jd\n' + + 'vH0V0YIhv66llKcYDMUQJAQi4+8nbRxXWv6Gq3pvrFoorzsnkr42V3JpbhnYiK+9\n' + + 'nRKd4uWl62KRZjGkfMbmsqZpj2fdSWMY1UGyN1k+kDmCSWYdrTRDP0xjtIocwg+A\n' + + 'J116n4hV/5mbA0BaPiS2krtv17YAeHABZcvz\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIECjCCAvKgAwIBAgICV2YwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTExOTM2\n' + + 'MjBaFw0yNDA4MjIxNzA4NTBaMIGXMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' + + 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' + + 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEoMCYGA1UEAwwfQW1h\n' + + 'em9uIFJEUyBldS1jZW50cmFsLTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQAD\n' + + 'ggEPADCCAQoCggEBAMEx54X2pHVv86APA0RWqxxRNmdkhAyp2R1cFWumKQRofoFv\n' + + 'n+SPXdkpIINpMuEIGJANozdiEz7SPsrAf8WHyD93j/ZxrdQftRcIGH41xasetKGl\n' + + 'I67uans8d+pgJgBKGb/Z+B5m+UsIuEVekpvgpwKtmmaLFC/NCGuSsJoFsRqoa6Gh\n' + + 'm34W6yJoY87UatddCqLY4IIXaBFsgK9Q/wYzYLbnWM6ZZvhJ52VMtdhcdzeTHNW0\n' + + '5LGuXJOF7Ahb4JkEhoo6TS2c0NxB4l4MBfBPgti+O7WjR3FfZHpt18A6Zkq6A2u6\n' + + 'D/oTSL6c9/3sAaFTFgMyL3wHb2YlW0BPiljZIqECAwEAAaNmMGQwDgYDVR0PAQH/\n' + + 'BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFOcAToAc6skWffJa\n' + + 'TnreaswAfrbcMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqG\n' + + 'SIb3DQEBCwUAA4IBAQA1d0Whc1QtspK496mFWfFEQNegLh0a9GWYlJm+Htcj5Nxt\n' + + 'DAIGXb+8xrtOZFHmYP7VLCT5Zd2C+XytqseK/+s07iAr0/EPF+O2qcyQWMN5KhgE\n' + + 'cXw2SwuP9FPV3i+YAm11PBVeenrmzuk9NrdHQ7TxU4v7VGhcsd2C++0EisrmquWH\n' + + 'mgIfmVDGxphwoES52cY6t3fbnXmTkvENvR+h3rj+fUiSz0aSo+XZUGHPgvuEKM/W\n' + + 'CBD9Smc9CBoBgvy7BgHRgRUmwtABZHFUIEjHI5rIr7ZvYn+6A0O6sogRfvVYtWFc\n' + + 'qpyrW1YX8mD0VlJ8fGKM3G+aCOsiiPKDV/Uafrm+\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIECDCCAvCgAwIBAgICGAcwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTIxODE5\n' + + 'NDRaFw0yNDA4MjIxNzA4NTBaMIGVMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' + + 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' + + 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEmMCQGA1UEAwwdQW1h\n' + + 'em9uIFJEUyBldS1ub3J0aC0xIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n' + + 'DwAwggEKAoIBAQCiIYnhe4UNBbdBb/nQxl5giM0XoVHWNrYV5nB0YukA98+TPn9v\n' + + 'Aoj1RGYmtryjhrf01Kuv8SWO+Eom95L3zquoTFcE2gmxCfk7bp6qJJ3eHOJB+QUO\n' + + 'XsNRh76fwDzEF1yTeZWH49oeL2xO13EAx4PbZuZpZBttBM5zAxgZkqu4uWQczFEs\n' + + 'JXfla7z2fvWmGcTagX10O5C18XaFroV0ubvSyIi75ue9ykg/nlFAeB7O0Wxae88e\n' + + 'uhiBEFAuLYdqWnsg3459NfV8Yi1GnaitTym6VI3tHKIFiUvkSiy0DAlAGV2iiyJE\n' + + 'q+DsVEO4/hSINJEtII4TMtysOsYPpINqeEzRAgMBAAGjZjBkMA4GA1UdDwEB/wQE\n' + + 'AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBRR0UpnbQyjnHChgmOc\n' + + 'hnlc0PogzTAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\n' + + '9w0BAQsFAAOCAQEAKJD4xVzSf4zSGTBJrmamo86jl1NHQxXUApAZuBZEc8tqC6TI\n' + + 'T5CeoSr9CMuVC8grYyBjXblC4OsM5NMvmsrXl/u5C9dEwtBFjo8mm53rOOIm1fxl\n' + + 'I1oYB/9mtO9ANWjkykuLzWeBlqDT/i7ckaKwalhLODsRDO73vRhYNjsIUGloNsKe\n' + + 'pxw3dzHwAZx4upSdEVG4RGCZ1D0LJ4Gw40OfD69hfkDfRVVxKGrbEzqxXRvovmDc\n' + + 'tKLdYZO/6REoca36v4BlgIs1CbUXJGLSXUwtg7YXGLSVBJ/U0+22iGJmBSNcoyUN\n' + + 'cjPFD9JQEhDDIYYKSGzIYpvslvGc4T5ISXFiuQ==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEBzCCAu+gAwIBAgICZIEwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTIyMTMy\n' + + 'MzJaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' + + 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' + + 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\n' + + 'em9uIFJEUyBldS13ZXN0LTIgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n' + + 'ADCCAQoCggEBALGiwqjiF7xIjT0Sx7zB3764K2T2a1DHnAxEOr+/EIftWKxWzT3u\n' + + 'PFwS2eEZcnKqSdRQ+vRzonLBeNLO4z8aLjQnNbkizZMBuXGm4BqRm1Kgq3nlLDQn\n' + + '7YqdijOq54SpShvR/8zsO4sgMDMmHIYAJJOJqBdaus2smRt0NobIKc0liy7759KB\n' + + '6kmQ47Gg+kfIwxrQA5zlvPLeQImxSoPi9LdbRoKvu7Iot7SOa+jGhVBh3VdqndJX\n' + + '7tm/saj4NE375csmMETFLAOXjat7zViMRwVorX4V6AzEg1vkzxXpA9N7qywWIT5Y\n' + + 'fYaq5M8i6vvLg0CzrH9fHORtnkdjdu1y+0MCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n' + + 'AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFFOhOx1yt3Z7mvGB9jBv\n' + + '2ymdZwiOMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\n' + + 'DQEBCwUAA4IBAQBehqY36UGDvPVU9+vtaYGr38dBbp+LzkjZzHwKT1XJSSUc2wqM\n' + + 'hnCIQKilonrTIvP1vmkQi8qHPvDRtBZKqvz/AErW/ZwQdZzqYNFd+BmOXaeZWV0Q\n' + + 'oHtDzXmcwtP8aUQpxN0e1xkWb1E80qoy+0uuRqb/50b/R4Q5qqSfJhkn6z8nwB10\n' + + '7RjLtJPrK8igxdpr3tGUzfAOyiPrIDncY7UJaL84GFp7WWAkH0WG3H8Y8DRcRXOU\n' + + 'mqDxDLUP3rNuow3jnGxiUY+gGX5OqaZg4f4P6QzOSmeQYs6nLpH0PiN00+oS1BbD\n' + + 'bpWdZEttILPI+vAYkU4QuBKKDjJL6HbSd+cn\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIECDCCAvCgAwIBAgIDAIVCMA0GCSqGSIb3DQEBCwUAMIGPMQswCQYDVQQGEwJV\n' + + 'UzEQMA4GA1UEBwwHU2VhdHRsZTETMBEGA1UECAwKV2FzaGluZ3RvbjEiMCAGA1UE\n' + + 'CgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJE\n' + + 'UzEgMB4GA1UEAwwXQW1hem9uIFJEUyBSb290IDIwMTkgQ0EwHhcNMTkwOTEzMTcw\n' + + 'NjQxWhcNMjQwODIyMTcwODUwWjCBlDELMAkGA1UEBhMCVVMxEzARBgNVBAgMCldh\n' + + 'c2hpbmd0b24xEDAOBgNVBAcMB1NlYXR0bGUxIjAgBgNVBAoMGUFtYXpvbiBXZWIg\n' + + 'U2VydmljZXMsIEluYy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxJTAjBgNVBAMMHEFt\n' + + 'YXpvbiBSRFMgdXMtZWFzdC0yIDIwMTkgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IB\n' + + 'DwAwggEKAoIBAQDE+T2xYjUbxOp+pv+gRA3FO24+1zCWgXTDF1DHrh1lsPg5k7ht\n' + + '2KPYzNc+Vg4E+jgPiW0BQnA6jStX5EqVh8BU60zELlxMNvpg4KumniMCZ3krtMUC\n' + + 'au1NF9rM7HBh+O+DYMBLK5eSIVt6lZosOb7bCi3V6wMLA8YqWSWqabkxwN4w0vXI\n' + + '8lu5uXXFRemHnlNf+yA/4YtN4uaAyd0ami9+klwdkZfkrDOaiy59haOeBGL8EB/c\n' + + 'dbJJlguHH5CpCscs3RKtOOjEonXnKXldxarFdkMzi+aIIjQ8GyUOSAXHtQHb3gZ4\n' + + 'nS6Ey0CMlwkB8vUObZU9fnjKJcL5QCQqOfwvAgMBAAGjZjBkMA4GA1UdDwEB/wQE\n' + + 'AwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBQUPuRHohPxx4VjykmH\n' + + '6usGrLL1ETAfBgNVHSMEGDAWgBRzX2DYvMsDmPQrFzQuNlqmYP+8HzANBgkqhkiG\n' + + '9w0BAQsFAAOCAQEAUdR9Vb3y33Yj6X6KGtuthZ08SwjImVQPtknzpajNE5jOJAh8\n' + + 'quvQnU9nlnMO85fVDU1Dz3lLHGJ/YG1pt1Cqq2QQ200JcWCvBRgdvH6MjHoDQpqZ\n' + + 'HvQ3vLgOGqCLNQKFuet9BdpsHzsctKvCVaeBqbGpeCtt3Hh/26tgx0rorPLw90A2\n' + + 'V8QSkZJjlcKkLa58N5CMM8Xz8KLWg3MZeT4DmlUXVCukqK2RGuP2L+aME8dOxqNv\n' + + 'OnOz1zrL5mR2iJoDpk8+VE/eBDmJX40IJk6jBjWoxAO/RXq+vBozuF5YHN1ujE92\n' + + 'tO8HItgTp37XT8bJBAiAnt5mxw+NLSqtxk2QdQ==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEDDCCAvSgAwIBAgICY4kwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTMyMDEx\n' + + 'NDJaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' + + 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' + + 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\n' + + 'em9uIFJEUyBhcC1zb3V0aGVhc3QtMSAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\n' + + 'AAOCAQ8AMIIBCgKCAQEAr5u9OuLL/OF/fBNUX2kINJLzFl4DnmrhnLuSeSnBPgbb\n' + + 'qddjf5EFFJBfv7IYiIWEFPDbDG5hoBwgMup5bZDbas+ZTJTotnnxVJTQ6wlhTmns\n' + + 'eHECcg2pqGIKGrxZfbQhlj08/4nNAPvyYCTS0bEcmQ1emuDPyvJBYDDLDU6AbCB5\n' + + '6Z7YKFQPTiCBblvvNzchjLWF9IpkqiTsPHiEt21sAdABxj9ityStV3ja/W9BfgxH\n' + + 'wzABSTAQT6FbDwmQMo7dcFOPRX+hewQSic2Rn1XYjmNYzgEHisdUsH7eeXREAcTw\n' + + '61TRvaLH8AiOWBnTEJXPAe6wYfrcSd1pD0MXpoB62wIDAQABo2YwZDAOBgNVHQ8B\n' + + 'Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUytwMiomQOgX5\n' + + 'Ichd+2lDWRUhkikwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\n' + + 'KoZIhvcNAQELBQADggEBACf6lRDpfCD7BFRqiWM45hqIzffIaysmVfr+Jr+fBTjP\n' + + 'uYe/ba1omSrNGG23bOcT9LJ8hkQJ9d+FxUwYyICQNWOy6ejicm4z0C3VhphbTPqj\n' + + 'yjpt9nG56IAcV8BcRJh4o/2IfLNzC/dVuYJV8wj7XzwlvjysenwdrJCoLadkTr1h\n' + + 'eIdG6Le07sB9IxrGJL9e04afk37h7c8ESGSE4E+oS4JQEi3ATq8ne1B9DQ9SasXi\n' + + 'IRmhNAaISDzOPdyLXi9N9V9Lwe/DHcja7hgLGYx3UqfjhLhOKwp8HtoZORixAmOI\n' + + 'HfILgNmwyugAbuZoCazSKKBhQ0wgO0WZ66ZKTMG8Oho=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEBzCCAu+gAwIBAgICUYkwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTYxODIx\n' + + 'MTVaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' + + 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' + + 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\n' + + 'em9uIFJEUyB1cy13ZXN0LTIgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n' + + 'ADCCAQoCggEBANCEZBZyu6yJQFZBJmSUZfSZd3Ui2gitczMKC4FLr0QzkbxY+cLa\n' + + 'uVONIOrPt4Rwi+3h/UdnUg917xao3S53XDf1TDMFEYp4U8EFPXqCn/GXBIWlU86P\n' + + 'PvBN+gzw3nS+aco7WXb+woTouvFVkk8FGU7J532llW8o/9ydQyDIMtdIkKTuMfho\n' + + 'OiNHSaNc+QXQ32TgvM9A/6q7ksUoNXGCP8hDOkSZ/YOLiI5TcdLh/aWj00ziL5bj\n' + + 'pvytiMZkilnc9dLY9QhRNr0vGqL0xjmWdoEXz9/OwjmCihHqJq+20MJPsvFm7D6a\n' + + '2NKybR9U+ddrjb8/iyLOjURUZnj5O+2+OPcCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n' + + 'AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFEBxMBdv81xuzqcK5TVu\n' + + 'pHj+Aor8MB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\n' + + 'DQEBCwUAA4IBAQBZkfiVqGoJjBI37aTlLOSjLcjI75L5wBrwO39q+B4cwcmpj58P\n' + + '3sivv+jhYfAGEbQnGRzjuFoyPzWnZ1DesRExX+wrmHsLLQbF2kVjLZhEJMHF9eB7\n' + + 'GZlTPdTzHErcnuXkwA/OqyXMpj9aghcQFuhCNguEfnROY9sAoK2PTfnTz9NJHL+Q\n' + + 'UpDLEJEUfc0GZMVWYhahc0x38ZnSY2SKacIPECQrTI0KpqZv/P+ijCEcMD9xmYEb\n' + + 'jL4en+XKS1uJpw5fIU5Sj0MxhdGstH6S84iAE5J3GM3XHklGSFwwqPYvuTXvANH6\n' + + 'uboynxRgSae59jIlAK6Jrr6GWMwQRbgcaAlW\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEDDCCAvSgAwIBAgICEkYwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTYxOTUz\n' + + 'NDdaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' + + 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' + + 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\n' + + 'em9uIFJEUyBhcC1zb3V0aGVhc3QtMiAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\n' + + 'AAOCAQ8AMIIBCgKCAQEAufodI2Flker8q7PXZG0P0vmFSlhQDw907A6eJuF/WeMo\n' + + 'GHnll3b4S6nC3oRS3nGeRMHbyU2KKXDwXNb3Mheu+ox+n5eb/BJ17eoj9HbQR1cd\n' + + 'gEkIciiAltf8gpMMQH4anP7TD+HNFlZnP7ii3geEJB2GGXSxgSWvUzH4etL67Zmn\n' + + 'TpGDWQMB0T8lK2ziLCMF4XAC/8xDELN/buHCNuhDpxpPebhct0T+f6Arzsiswt2j\n' + + '7OeNeLLZwIZvVwAKF7zUFjC6m7/VmTQC8nidVY559D6l0UhhU0Co/txgq3HVsMOH\n' + + 'PbxmQUwJEKAzQXoIi+4uZzHFZrvov/nDTNJUhC6DqwIDAQABo2YwZDAOBgNVHQ8B\n' + + 'Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUwaZpaCme+EiV\n' + + 'M5gcjeHZSTgOn4owHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\n' + + 'KoZIhvcNAQELBQADggEBAAR6a2meCZuXO2TF9bGqKGtZmaah4pH2ETcEVUjkvXVz\n' + + 'sl+ZKbYjrun+VkcMGGKLUjS812e7eDF726ptoku9/PZZIxlJB0isC/0OyixI8N4M\n' + + 'NsEyvp52XN9QundTjkl362bomPnHAApeU0mRbMDRR2JdT70u6yAzGLGsUwMkoNnw\n' + + '1VR4XKhXHYGWo7KMvFrZ1KcjWhubxLHxZWXRulPVtGmyWg/MvE6KF+2XMLhojhUL\n' + + '+9jB3Fpn53s6KMx5tVq1x8PukHmowcZuAF8k+W4gk8Y68wIwynrdZrKRyRv6CVtR\n' + + 'FZ8DeJgoNZT3y/GT254VqMxxfuy2Ccb/RInd16tEvVk=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEDDCCAvSgAwIBAgICOYIwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTcyMDA1\n' + + 'MjlaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' + + 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' + + 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\n' + + 'em9uIFJEUyBhcC1ub3J0aGVhc3QtMyAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\n' + + 'AAOCAQ8AMIIBCgKCAQEA4dMak8W+XW8y/2F6nRiytFiA4XLwePadqWebGtlIgyCS\n' + + 'kbug8Jv5w7nlMkuxOxoUeD4WhI6A9EkAn3r0REM/2f0aYnd2KPxeqS2MrtdxxHw1\n' + + 'xoOxk2x0piNSlOz6yog1idsKR5Wurf94fvM9FdTrMYPPrDabbGqiBMsZZmoHLvA3\n' + + 'Z+57HEV2tU0Ei3vWeGIqnNjIekS+E06KhASxrkNU5vi611UsnYZlSi0VtJsH4UGV\n' + + 'LhnHl53aZL0YFO5mn/fzuNG/51qgk/6EFMMhaWInXX49Dia9FnnuWXwVwi6uX1Wn\n' + + '7kjoHi5VtmC8ZlGEHroxX2DxEr6bhJTEpcLMnoQMqwIDAQABo2YwZDAOBgNVHQ8B\n' + + 'Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQUsUI5Cb3SWB8+\n' + + 'gv1YLN/ABPMdxSAwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\n' + + 'KoZIhvcNAQELBQADggEBAJAF3E9PM1uzVL8YNdzb6fwJrxxqI2shvaMVmC1mXS+w\n' + + 'G0zh4v2hBZOf91l1EO0rwFD7+fxoI6hzQfMxIczh875T6vUXePKVOCOKI5wCrDad\n' + + 'zQbVqbFbdhsBjF4aUilOdtw2qjjs9JwPuB0VXN4/jY7m21oKEOcnpe36+7OiSPjN\n' + + 'xngYewCXKrSRqoj3mw+0w/+exYj3Wsush7uFssX18av78G+ehKPIVDXptOCP/N7W\n' + + '8iKVNeQ2QGTnu2fzWsGUSvMGyM7yqT+h1ILaT//yQS8er511aHMLc142bD4D9VSy\n' + + 'DgactwPDTShK/PXqhvNey9v/sKXm4XatZvwcc8KYlW4=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEDDCCAvSgAwIBAgICcEUwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTgxNjU2\n' + + 'MjBaFw0yNDA4MjIxNzA4NTBaMIGZMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' + + 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' + + 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzEqMCgGA1UEAwwhQW1h\n' + + 'em9uIFJEUyBhcC1ub3J0aGVhc3QtMSAyMDE5IENBMIIBIjANBgkqhkiG9w0BAQEF\n' + + 'AAOCAQ8AMIIBCgKCAQEAndtkldmHtk4TVQAyqhAvtEHSMb6pLhyKrIFved1WO3S7\n' + + '+I+bWwv9b2W/ljJxLq9kdT43bhvzonNtI4a1LAohS6bqyirmk8sFfsWT3akb+4Sx\n' + + '1sjc8Ovc9eqIWJCrUiSvv7+cS7ZTA9AgM1PxvHcsqrcUXiK3Jd/Dax9jdZE1e15s\n' + + 'BEhb2OEPE+tClFZ+soj8h8Pl2Clo5OAppEzYI4LmFKtp1X/BOf62k4jviXuCSst3\n' + + 'UnRJzE/CXtjmN6oZySVWSe0rQYuyqRl6//9nK40cfGKyxVnimB8XrrcxUN743Vud\n' + + 'QQVU0Esm8OVTX013mXWQXJHP2c0aKkog8LOga0vobQIDAQABo2YwZDAOBgNVHQ8B\n' + + 'Af8EBAMCAQYwEgYDVR0TAQH/BAgwBgEB/wIBADAdBgNVHQ4EFgQULmoOS1mFSjj+\n' + + 'snUPx4DgS3SkLFYwHwYDVR0jBBgwFoAUc19g2LzLA5j0Kxc0LjZapmD/vB8wDQYJ\n' + + 'KoZIhvcNAQELBQADggEBAAkVL2P1M2/G9GM3DANVAqYOwmX0Xk58YBHQu6iiQg4j\n' + + 'b4Ky/qsZIsgT7YBsZA4AOcPKQFgGTWhe9pvhmXqoN3RYltN8Vn7TbUm/ZVDoMsrM\n' + + 'gwv0+TKxW1/u7s8cXYfHPiTzVSJuOogHx99kBW6b2f99GbP7O1Sv3sLq4j6lVvBX\n' + + 'Fiacf5LAWC925nvlTzLlBgIc3O9xDtFeAGtZcEtxZJ4fnGXiqEnN4539+nqzIyYq\n' + + 'nvlgCzyvcfRAxwltrJHuuRu6Maw5AGcd2Y0saMhqOVq9KYKFKuD/927BTrbd2JVf\n' + + '2sGWyuPZPCk3gq+5pCjbD0c6DkhcMGI6WwxvM5V/zSM=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEBzCCAu+gAwIBAgICJDQwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTgxNzAz\n' + + 'MTVaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' + + 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' + + 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\n' + + 'em9uIFJEUyBldS13ZXN0LTMgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n' + + 'ADCCAQoCggEBAL9bL7KE0n02DLVtlZ2PL+g/BuHpMYFq2JnE2RgompGurDIZdjmh\n' + + '1pxfL3nT+QIVMubuAOy8InRfkRxfpxyjKYdfLJTPJG+jDVL+wDcPpACFVqoV7Prg\n' + + 'pVYEV0lc5aoYw4bSeYFhdzgim6F8iyjoPnObjll9mo4XsHzSoqJLCd0QC+VG9Fw2\n' + + 'q+GDRZrLRmVM2oNGDRbGpGIFg77aRxRapFZa8SnUgs2AqzuzKiprVH5i0S0M6dWr\n' + + 'i+kk5epmTtkiDHceX+dP/0R1NcnkCPoQ9TglyXyPdUdTPPRfKCq12dftqll+u4mV\n' + + 'ARdN6WFjovxax8EAP2OAUTi1afY+1JFMj+sCAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n' + + 'AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFLfhrbrO5exkCVgxW0x3\n' + + 'Y2mAi8lNMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\n' + + 'DQEBCwUAA4IBAQAigQ5VBNGyw+OZFXwxeJEAUYaXVoP/qrhTOJ6mCE2DXUVEoJeV\n' + + 'SxScy/TlFA9tJXqmit8JH8VQ/xDL4ubBfeMFAIAo4WzNWDVoeVMqphVEcDWBHsI1\n' + + 'AETWzfsapRS9yQekOMmxg63d/nV8xewIl8aNVTHdHYXMqhhik47VrmaVEok1UQb3\n' + + 'O971RadLXIEbVd9tjY5bMEHm89JsZDnDEw1hQXBb67Elu64OOxoKaHBgUH8AZn/2\n' + + 'zFsL1ynNUjOhCSAA15pgd1vjwc0YsBbAEBPcHBWYBEyME6NLNarjOzBl4FMtATSF\n' + + 'wWCKRGkvqN8oxYhwR2jf2rR5Mu4DWkK5Q8Ep\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEBzCCAu+gAwIBAgICJVUwDQYJKoZIhvcNAQELBQAwgY8xCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSAwHgYDVQQDDBdBbWF6b24gUkRTIFJvb3QgMjAxOSBDQTAeFw0xOTA5MTkxODE2\n' + + 'NTNaFw0yNDA4MjIxNzA4NTBaMIGUMQswCQYDVQQGEwJVUzETMBEGA1UECAwKV2Fz\n' + + 'aGluZ3RvbjEQMA4GA1UEBwwHU2VhdHRsZTEiMCAGA1UECgwZQW1hem9uIFdlYiBT\n' + + 'ZXJ2aWNlcywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzElMCMGA1UEAwwcQW1h\n' + + 'em9uIFJEUyB1cy1lYXN0LTEgMjAxOSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP\n' + + 'ADCCAQoCggEBAM3i/k2u6cqbMdcISGRvh+m+L0yaSIoOXjtpNEoIftAipTUYoMhL\n' + + 'InXGlQBVA4shkekxp1N7HXe1Y/iMaPEyb3n+16pf3vdjKl7kaSkIhjdUz3oVUEYt\n' + + 'i8Z/XeJJ9H2aEGuiZh3kHixQcZczn8cg3dA9aeeyLSEnTkl/npzLf//669Ammyhs\n' + + 'XcAo58yvT0D4E0D/EEHf2N7HRX7j/TlyWvw/39SW0usiCrHPKDLxByLojxLdHzso\n' + + 'QIp/S04m+eWn6rmD+uUiRteN1hI5ncQiA3wo4G37mHnUEKo6TtTUh+sd/ku6a8HK\n' + + 'glMBcgqudDI90s1OpuIAWmuWpY//8xEG2YECAwEAAaNmMGQwDgYDVR0PAQH/BAQD\n' + + 'AgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFPqhoWZcrVY9mU7tuemR\n' + + 'RBnQIj1jMB8GA1UdIwQYMBaAFHNfYNi8ywOY9CsXNC42WqZg/7wfMA0GCSqGSIb3\n' + + 'DQEBCwUAA4IBAQB6zOLZ+YINEs72heHIWlPZ8c6WY8MDU+Be5w1M+BK2kpcVhCUK\n' + + 'PJO4nMXpgamEX8DIiaO7emsunwJzMSvavSPRnxXXTKIc0i/g1EbiDjnYX9d85DkC\n' + + 'E1LaAUCmCZBVi9fIe0H2r9whIh4uLWZA41oMnJx/MOmo3XyMfQoWcqaSFlMqfZM4\n' + + '0rNoB/tdHLNuV4eIdaw2mlHxdWDtF4oH+HFm+2cVBUVC1jXKrFv/euRVtsTT+A6i\n' + + 'h2XBHKxQ1Y4HgAn0jACP2QSPEmuoQEIa57bEKEcZsBR8SDY6ZdTd2HLRIApcCOSF\n' + + 'MRM8CKLeF658I0XgF8D5EsYoKPsA+74Z+jDH\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEETCCAvmgAwIBAgICEAAwDQYJKoZIhvcNAQELBQAwgZQxCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSUwIwYDVQQDDBxBbWF6b24gUkRTIEJldGEgUm9vdCAyMDE5IENBMB4XDTE5MDgy\n' + + 'MDE3MTAwN1oXDTI0MDgxOTE3MzgyNlowgZkxCzAJBgNVBAYTAlVTMRMwEQYDVQQI\n' + + 'DApXYXNoaW5ndG9uMRAwDgYDVQQHDAdTZWF0dGxlMSIwIAYDVQQKDBlBbWF6b24g\n' + + 'V2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMSowKAYDVQQD\n' + + 'DCFBbWF6b24gUkRTIEJldGEgdXMtZWFzdC0xIDIwMTkgQ0EwggEiMA0GCSqGSIb3\n' + + 'DQEBAQUAA4IBDwAwggEKAoIBAQDTNCOlotQcLP8TP82U2+nk0bExVuuMVOgFeVMx\n' + + 'vbUHZQeIj9ikjk+jm6eTDnnkhoZcmJiJgRy+5Jt69QcRbb3y3SAU7VoHgtraVbxF\n' + + 'QDh7JEHI9tqEEVOA5OvRrDRcyeEYBoTDgh76ROco2lR+/9uCvGtHVrMCtG7BP7ZB\n' + + 'sSVNAr1IIRZZqKLv2skKT/7mzZR2ivcw9UeBBTUf8xsfiYVBvMGoEsXEycjYdf6w\n' + + 'WV+7XS7teNOc9UgsFNN+9AhIBc1jvee5E//72/4F8pAttAg/+mmPUyIKtekNJ4gj\n' + + 'OAR2VAzGx1ybzWPwIgOudZFHXFduxvq4f1hIRPH0KbQ/gkRrAgMBAAGjZjBkMA4G\n' + + 'A1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBTkvpCD\n' + + '6C43rar9TtJoXr7q8dkrrjAfBgNVHSMEGDAWgBStoQwVpbGx87fxB3dEGDqKKnBT\n' + + '4TANBgkqhkiG9w0BAQsFAAOCAQEAJd9fOSkwB3uVdsS+puj6gCER8jqmhd3g/J5V\n' + + 'Zjk9cKS8H0e8pq/tMxeJ8kpurPAzUk5RkCspGt2l0BSwmf3ahr8aJRviMX6AuW3/\n' + + 'g8aKplTvq/WMNGKLXONa3Sq8591J+ce8gtOX/1rDKmFI4wQ/gUzOSYiT991m7QKS\n' + + 'Fr6HMgFuz7RNJbb3Fy5cnurh8eYWA7mMv7laiLwTNsaro5qsqErD5uXuot6o9beT\n' + + 'a+GiKinEur35tNxAr47ax4IRubuIzyfCrezjfKc5raVV2NURJDyKP0m0CCaffAxE\n' + + 'qn2dNfYc3v1D8ypg3XjHlOzRo32RB04o8ALHMD9LSwsYDLpMag==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEFzCCAv+gAwIBAgICFSUwDQYJKoZIhvcNAQELBQAwgZcxCzAJBgNVBAYTAlVT\n' + + 'MRAwDgYDVQQHDAdTZWF0dGxlMRMwEQYDVQQIDApXYXNoaW5ndG9uMSIwIAYDVQQK\n' + + 'DBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRT\n' + + 'MSgwJgYDVQQDDB9BbWF6b24gUkRTIFByZXZpZXcgUm9vdCAyMDE5IENBMB4XDTE5\n' + + 'MDgyMTIyMzk0N1oXDTI0MDgyMTIyMjk0OVowgZwxCzAJBgNVBAYTAlVTMRMwEQYD\n' + + 'VQQIDApXYXNoaW5ndG9uMRAwDgYDVQQHDAdTZWF0dGxlMSIwIAYDVQQKDBlBbWF6\n' + + 'b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMS0wKwYD\n' + + 'VQQDDCRBbWF6b24gUkRTIFByZXZpZXcgdXMtZWFzdC0yIDIwMTkgQ0EwggEiMA0G\n' + + 'CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQD0dB/U7qRnSf05wOi7m10Pa2uPMTJv\n' + + 'r6U/3Y17a5prq5Zr4++CnSUYarG51YuIf355dKs+7Lpzs782PIwCmLpzAHKWzix6\n' + + 'pOaTQ+WZ0+vUMTxyqgqWbsBgSCyP7pVBiyqnmLC/L4az9XnscrbAX4pNaoJxsuQe\n' + + 'mzBo6yofjQaAzCX69DuqxFkVTRQnVy7LCFkVaZtjNAftnAHJjVgQw7lIhdGZp9q9\n' + + 'IafRt2gteihYfpn+EAQ/t/E4MnhrYs4CPLfS7BaYXBycEKC5Muj1l4GijNNQ0Efo\n' + + 'xG8LSZz7SNgUvfVwiNTaqfLP3AtEAWiqxyMyh3VO+1HpCjT7uNBFtmF3AgMBAAGj\n' + + 'ZjBkMA4GA1UdDwEB/wQEAwIBBjASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQW\n' + + 'BBQtinkdrj+0B2+qdXngV2tgHnPIujAfBgNVHSMEGDAWgBRp0xqULkNh/w2ZVzEI\n' + + 'o2RIY7O03TANBgkqhkiG9w0BAQsFAAOCAQEAtJdqbCxDeMc8VN1/RzCabw9BIL/z\n' + + '73Auh8eFTww/sup26yn8NWUkfbckeDYr1BrXa+rPyLfHpg06kwR8rBKyrs5mHwJx\n' + + 'bvOzXD/5WTdgreB+2Fb7mXNvWhenYuji1MF+q1R2DXV3I05zWHteKX6Dajmx+Uuq\n' + + 'Yq78oaCBSV48hMxWlp8fm40ANCL1+gzQ122xweMFN09FmNYFhwuW+Ao+Vv90ZfQG\n' + + 'PYwTvN4n/gegw2TYcifGZC2PNX74q3DH03DXe5fvNgRW5plgz/7f+9mS+YHd5qa9\n' + + 'tYTPUvoRbi169ou6jicsMKUKPORHWhiTpSCWR1FMMIbsAcsyrvtIsuaGCQ==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIID/jCCAuagAwIBAgIQdOCSuA9psBpQd8EI368/0DANBgkqhkiG9w0BAQsFADCB\n' + + 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\n' + + 'bWF6b24gUkRTIHNhLWVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcM\n' + + 'B1NlYXR0bGUwIBcNMjEwNTE5MTgwNjI2WhgPMjA2MTA1MTkxOTA2MjZaMIGXMQsw\n' + + 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' + + 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\n' + + 'biBSRFMgc2EtZWFzdC0xIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UEBwwHU2Vh\n' + + 'dHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN6ftL6w8v3dB2yW\n' + + 'LjCxSP1D7ZsOTeLZOSCz1Zv0Gkd0XLhil5MdHOHBvwH/DrXqFU2oGzCRuAy+aZis\n' + + 'DardJU6ChyIQIciXCO37f0K23edhtpXuruTLLwUwzeEPdcnLPCX+sWEn9Y5FPnVm\n' + + 'pCd6J8edH2IfSGoa9LdErkpuESXdidLym/w0tWG/O2By4TabkNSmpdrCL00cqI+c\n' + + 'prA8Bx1jX8/9sY0gpAovtuFaRN+Ivg3PAnWuhqiSYyQ5nC2qDparOWuDiOhpY56E\n' + + 'EgmTvjwqMMjNtExfYx6Rv2Ndu50TriiNKEZBzEtkekwXInTupmYTvc7U83P/959V\n' + + 'UiQ+WSMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU4uYHdH0+\n' + + 'bUeh81Eq2l5/RJbW+vswDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IB\n' + + 'AQBhxcExJ+w74bvDknrPZDRgTeMLYgbVJjx2ExH7/Ac5FZZWcpUpFwWMIJJxtewI\n' + + 'AnhryzM3tQYYd4CG9O+Iu0+h/VVfW7e4O3joWVkxNMb820kQSEwvZfA78aItGwOY\n' + + 'WSaFNVRyloVicZRNJSyb1UL9EiJ9ldhxm4LTT0ax+4ontI7zTx6n6h8Sr6r/UOvX\n' + + 'd9T5aUUENWeo6M9jGupHNn3BobtL7BZm2oS8wX8IVYj4tl0q5T89zDi2x0MxbsIV\n' + + '5ZjwqBQ5JWKv7ASGPb+z286RjPA9R2knF4lJVZrYuNV90rHvI/ECyt/JrDqeljGL\n' + + 'BLl1W/UsvZo6ldLIpoMbbrb5\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEBDCCAuygAwIBAgIQUfVbqapkLYpUqcLajpTJWzANBgkqhkiG9w0BAQsFADCB\n' + + 'mjELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTMwMQYDVQQDDCpB\n' + + 'bWF6b24gUkRTIG1lLWNlbnRyYWwtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNV\n' + + 'BAcMB1NlYXR0bGUwIBcNMjIwNTA2MjMyMDA5WhgPMjA2MjA1MDcwMDIwMDlaMIGa\n' + + 'MQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5j\n' + + 'LjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMzAxBgNVBAMMKkFt\n' + + 'YXpvbiBSRFMgbWUtY2VudHJhbC0xIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UE\n' + + 'BwwHU2VhdHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJIeovu3\n' + + 'ewI9FVitXMQzvkh34aQ6WyI4NO3YepfJaePiv3cnyFGYHN2S1cR3UQcLWgypP5va\n' + + 'j6bfroqwGbCbZZcb+6cyOB4ceKO9Ws1UkcaGHnNDcy5gXR7aCW2OGTUfinUuhd2d\n' + + '5bOGgV7JsPbpw0bwJ156+MwfOK40OLCWVbzy8B1kITs4RUPNa/ZJnvIbiMu9rdj4\n' + + '8y7GSFJLnKCjlOFUkNI5LcaYvI1+ybuNgphT3nuu5ZirvTswGakGUT/Q0J3dxP0J\n' + + 'pDfg5Sj/2G4gXiaM0LppVOoU5yEwVewhQ250l0eQAqSrwPqAkdTg9ng360zqCFPE\n' + + 'JPPcgI1tdGUgneECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU\n' + + '/2AJVxWdZxc8eJgdpbwpW7b0f7IwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB\n' + + 'CwUAA4IBAQBYm63jTu2qYKJ94gKnqc+oUgqmb1mTXmgmp/lXDbxonjszJDOXFbri\n' + + '3CCO7xB2sg9bd5YWY8sGKHaWmENj3FZpCmoefbUx++8D7Mny95Cz8R32rNcwsPTl\n' + + 'ebpd9A/Oaw5ug6M0x/cNr0qzF8Wk9Dx+nFEimp8RYQdKvLDfNFZHjPa1itnTiD8M\n' + + 'TorAqj+VwnUGHOYBsT/0NY12tnwXdD+ATWfpEHdOXV+kTMqFFwDyhfgRVNpTc+os\n' + + 'ygr8SwhnSCpJPB/EYl2S7r+tgAbJOkuwUvGT4pTqrzDQEhwE7swgepnHC87zhf6l\n' + + 'qN6mVpSnQKQLm6Ob5TeCEFgcyElsF5bH\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICrjCCAjSgAwIBAgIRAOxu0I1QuMAhIeszB3fJIlkwCgYIKoZIzj0EAwMwgZYx\n' + + 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' + + 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1h\n' + + 'em9uIFJEUyB1cy13ZXN0LTIgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwIBcNMjEwNTI0MjIwNjU5WhgPMjEyMTA1MjQyMzA2NTlaMIGWMQswCQYD\n' + + 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' + + 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExLzAtBgNVBAMMJkFtYXpvbiBS\n' + + 'RFMgdXMtd2VzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdTZWF0dGxl\n' + + 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEz4bylRcGqqDWdP7gQIIoTHdBK6FNtKH1\n' + + '4SkEIXRXkYDmRvL9Bci1MuGrwuvrka5TDj4b7e+csY0llEzHpKfq6nJPFljoYYP9\n' + + 'uqHFkv77nOpJJ633KOr8IxmeHW5RXgrZo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0G\n' + + 'A1UdDgQWBBQQikVz8wmjd9eDFRXzBIU8OseiGzAOBgNVHQ8BAf8EBAMCAYYwCgYI\n' + + 'KoZIzj0EAwMDaAAwZQIwf06Mcrpw1O0EBLBBrp84m37NYtOkE/0Z0O+C7D41wnXi\n' + + 'EQdn6PXUVgdD23Gj82SrAjEAklhKs+liO1PtN15yeZR1Io98nFve+lLptaLakZcH\n' + + '+hfFuUtCqMbaI8CdvJlKnPqT\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIGCTCCA/GgAwIBAgIRALyWMTyCebLZOGcZZQmkmfcwDQYJKoZIhvcNAQEMBQAw\n' + + 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' + + 'QW1hem9uIFJEUyBhcC1ub3J0aGVhc3QtMyBSb290IENBIFJTQTQwOTYgRzExEDAO\n' + + 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTI0MjAyODAzWhgPMjEyMTA1MjQyMTI4MDNa\n' + + 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' + + 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' + + 'LEFtYXpvbiBSRFMgYXAtbm9ydGhlYXN0LTMgUm9vdCBDQSBSU0E0MDk2IEcxMRAw\n' + + 'DgYDVQQHDAdTZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA\n' + + 'wGFiyDyCrGqgdn4fXG12cxKAAfVvhMea1mw5h9CVRoavkPqhzQpAitSOuMB9DeiP\n' + + 'wQyqcsiGl/cTEau4L+AUBG8b9v26RlY48exUYBXj8CieYntOT9iNw5WtdYJa3kF/\n' + + 'JxgI+HDMzE9cmHDs5DOO3S0uwZVyra/xE1ymfSlpOeUIOTpHRJv97CBUEpaZMUW5\n' + + 'Sr6GruuOwFVpO5FX3A/jQlcS+UN4GjSRgDUJuqg6RRQldEZGCVCCmodbByvI2fGm\n' + + 'reGpsPJD54KkmAX08nOR8e5hkGoHxq0m2DLD4SrOFmt65vG47qnuwplWJjtk9B3Z\n' + + '9wDoopwZLBOtlkPIkUllWm1P8EuHC1IKOA+wSP6XdT7cy8S77wgyHzR0ynxv7q/l\n' + + 'vlZtH30wnNqFI0y9FeogD0TGMCHcnGqfBSicJXPy9T4fU6f0r1HwqKwPp2GArwe7\n' + + 'dnqLTj2D7M9MyVtFjEs6gfGWXmu1y5uDrf+CszurE8Cycoma+OfjjuVQgWOCy7Nd\n' + + 'jJswPxAroTzVfpgoxXza4ShUY10woZu0/J+HmNmqK7lh4NS75q1tz75in8uTZDkV\n' + + 'be7GK+SEusTrRgcf3tlgPjSTWG3veNzFDF2Vn1GLJXmuZfhdlVQDBNXW4MNREExS\n' + + 'dG57kJjICpT+r8X+si+5j51gRzkSnMYs7VHulpxfcwECAwEAAaNCMEAwDwYDVR0T\n' + + 'AQH/BAUwAwEB/zAdBgNVHQ4EFgQU4JWOpDBmUBuWKvGPZelw87ezhL8wDgYDVR0P\n' + + 'AQH/BAQDAgGGMA0GCSqGSIb3DQEBDAUAA4ICAQBRNLMql7itvXSEFQRAnyOjivHz\n' + + 'l5IlWVQjAbOUr6ogZcwvK6YpxNAFW5zQr8F+fdkiypLz1kk5irx9TIpff0BWC9hQ\n' + + '/odMPO8Gxn8+COlSvc+dLsF2Dax3Hvz0zLeKMo+cYisJOzpdR/eKd0/AmFdkvQoM\n' + + 'AOK9n0yYvVJU2IrSgeJBiiCarpKSeAktEVQ4rvyacQGr+QAPkkjRwm+5LHZKK43W\n' + + 'nNnggRli9N/27qYtc5bgr3AaQEhEXMI4RxPRXCLsod0ehMGWyRRK728a+6PMMJAJ\n' + + 'WHOU0x7LCEMPP/bvpLj3BdvSGqNor4ZtyXEbwREry1uzsgODeRRns5acPwTM6ff+\n' + + 'CmxO2NZ0OktIUSYRmf6H/ZFlZrIhV8uWaIwEJDz71qvj7buhQ+RFDZ9CNL64C0X6\n' + + 'mf0zJGEpddjANHaaVky+F4gYMtEy2K2Lcm4JGTdyIzUoIe+atzCnRp0QeIcuWtF+\n' + + 's8AjDYCVFNypcMmqbRmNpITSnOoCHSRuVkY3gutVoYyMLbp8Jm9SJnCIlEWTA6Rm\n' + + 'wADOMGZJVn5/XRTRuetVOB3KlQDjs9OO01XN5NzGSZO2KT9ngAUfh9Eqhf1iRWSP\n' + + 'nZlRbQ2NRCuY/oJ5N59mLGxnNJSE7giEKEBRhTQ/XEPIUYAUPD5fca0arKRJwbol\n' + + 'l9Se1Hsq0ZU5f+OZKQ==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + '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\n' + + '5zT5+Bs=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + '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\n' + + 'Hing\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIECTCCAvGgAwIBAgIRANxgyBbnxgTEOpDul2ZnC0UwDQYJKoZIhvcNAQELBQAw\n' + + 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' + + 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtMyBSb290IENBIFJTQTIwNDggRzExEDAO\n' + + 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNjEwMTgxOTA3WhgPMjA2MTA2MTAxOTE5MDda\n' + + 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' + + 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' + + 'LEFtYXpvbiBSRFMgYXAtc291dGhlYXN0LTMgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\n' + + 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n' + + 'xnwSDAChrMkfk5TA4Dk8hKzStDlSlONzmd3fTG0Wqr5+x3EmFT6Ksiu/WIwEl9J2\n' + + 'K98UI7vYyuZfCxUKb1iMPeBdVGqk0zb92GpURd+Iz/+K1ps9ZLeGBkzR8mBmAi1S\n' + + 'OfpwKiTBzIv6E8twhEn4IUpHsdcuX/2Y78uESpJyM8O5CpkG0JaV9FNEbDkJeBUQ\n' + + 'Ao2qqNcH4R0Qcr5pyeqA9Zto1RswgL06BQMI9dTpfwSP5VvkvcNUaLl7Zv5WzLQE\n' + + 'JzORWePvdPzzvWEkY/3FPjxBypuYwssKaERW0fkPDmPtykktP9W/oJolKUFI6pXp\n' + + 'y+Y6p6/AVdnQD2zZjW5FhQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\n' + + 'DgQWBBT+jEKs96LC+/X4BZkUYUkzPfXdqTAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\n' + + 'hvcNAQELBQADggEBAIGQqgqcQ6XSGkmNebzR6DhadTbfDmbYeN5N0Vuzv+Tdmufb\n' + + 'tMGjdjnYMg4B+IVnTKQb+Ox3pL9gbX6KglGK8HupobmIRtwKVth+gYYz3m0SL/Nk\n' + + 'haWPYzOm0x3tJm8jSdufJcEob4/ATce9JwseLl76pSWdl5A4lLjnhPPKudUDfH+1\n' + + 'BLNUi3lxpp6GkC8aWUPtupnhZuXddolTLOuA3GwTZySI44NfaFRm+o83N1jp+EwD\n' + + '6e94M4cTRzjUv6J3MZmSbdtQP/Tk1uz2K4bQZGP0PZC3bVpqiesdE/xr+wbu8uHr\n' + + 'cM1JXH0AmXf1yIkTgyWzmvt0k1/vgcw5ixAqvvE=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEATCCAumgAwIBAgIRAMhw98EQU18mIji+unM2YH8wDQYJKoZIhvcNAQELBQAw\n' + + 'gZgxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwo\n' + + 'QW1hem9uIFJEUyBhcC1zb3V0aC0yIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UE\n' + + 'BwwHU2VhdHRsZTAgFw0yMjA2MDYyMTQyMjJaGA8yMDYyMDYwNjIyNDIyMlowgZgx\n' + + 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' + + 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwoQW1h\n' + + 'em9uIFJEUyBhcC1zb3V0aC0yIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UEBwwH\n' + + 'U2VhdHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAIeeRoLfTm+7\n' + + 'vqm7ZlFSx+1/CGYHyYrOOryM4/Z3dqYVHFMgWTR7V3ziO8RZ6yUanrRcWVX3PZbF\n' + + 'AfX0KFE8OgLsXEZIX8odSrq86+/Th5eZOchB2fDBsUB7GuN2rvFBbM8lTI9ivVOU\n' + + 'lbuTnYyb55nOXN7TpmH2bK+z5c1y9RVC5iQsNAl6IJNvSN8VCqXh31eK5MlKB4DT\n' + + '+Y3OivCrSGsjM+UR59uZmwuFB1h+icE+U0p9Ct3Mjq3MzSX5tQb6ElTNGlfmyGpW\n' + + 'Kh7GQ5XU1KaKNZXoJ37H53woNSlq56bpVrKI4uv7ATpdpFubOnSLtpsKlpLdR3sy\n' + + 'Ws245200pC8CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUp0ki\n' + + '6+eWvsnBjQhMxwMW5pwn7DgwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUA\n' + + 'A4IBAQB2V8lv0aqbYQpj/bmVv/83QfE4vOxKCJAHv7DQ35cJsTyBdF+8pBczzi3t\n' + + '3VNL5IUgW6WkyuUOWnE0eqAFOUVj0yTS1jSAtfl3vOOzGJZmWBbqm9BKEdu1D8O6\n' + + 'sB8bnomwiab2tNDHPmUslpdDqdabbkWwNWzLJ97oGFZ7KNODMEPXWKWNxg33iHfS\n' + + '/nlmnrTVI3XgaNK9qLZiUrxu9Yz5gxi/1K+sG9/Dajd32ZxjRwDipOLiZbiXQrsd\n' + + 'qzIMY4GcWf3g1gHL5mCTfk7dG22h/rhPyGV0svaDnsb+hOt6sv1McMN6Y3Ou0mtM\n' + + '/UaAXojREmJmTSCNvs2aBny3/2sy\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICrjCCAjSgAwIBAgIRAMnRxsKLYscJV8Qv5pWbL7swCgYIKoZIzj0EAwMwgZYx\n' + + 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' + + 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1h\n' + + 'em9uIFJEUyBzYS1lYXN0LTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwIBcNMjEwNTE5MTgxNjAxWhgPMjEyMTA1MTkxOTE2MDFaMIGWMQswCQYD\n' + + 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' + + 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExLzAtBgNVBAMMJkFtYXpvbiBS\n' + + 'RFMgc2EtZWFzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdTZWF0dGxl\n' + + 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEjFOCZgTNVKxLKhUxffiDEvTLFhrmIqdO\n' + + 'dKqVdgDoELEzIHWDdC+19aDPitbCYtBVHl65ITu/9pn6mMUl5hhUNtfZuc6A+Iw1\n' + + 'sBe0v0qI3y9Q9HdQYrGgeHDh8M5P7E2ho0IwQDAPBgNVHRMBAf8EBTADAQH/MB0G\n' + + 'A1UdDgQWBBS5L7/8M0TzoBZk39Ps7BkfTB4yJTAOBgNVHQ8BAf8EBAMCAYYwCgYI\n' + + 'KoZIzj0EAwMDaAAwZQIwI43O0NtWKTgnVv9z0LO5UMZYgSve7GvGTwqktZYCMObE\n' + + 'rUI4QerXM9D6JwLy09mqAjEAypfkdLyVWtaElVDUyHFkihAS1I1oUxaaDrynLNQK\n' + + 'Ou/Ay+ns+J+GyvyDUjBpVVW1\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIF/jCCA+agAwIBAgIQR71Z8lTO5Sj+as2jB7IWXzANBgkqhkiG9w0BAQwFADCB\n' + + 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\n' + + 'bWF6b24gUkRTIHVzLXdlc3QtMiBSb290IENBIFJTQTQwOTYgRzExEDAOBgNVBAcM\n' + + 'B1NlYXR0bGUwIBcNMjEwNTI0MjIwMzIwWhgPMjEyMTA1MjQyMzAzMjBaMIGXMQsw\n' + + 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' + + 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\n' + + 'biBSRFMgdXMtd2VzdC0yIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UEBwwHU2Vh\n' + + 'dHRsZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM977bHIs1WJijrS\n' + + 'XQMfUOhmlJjr2v0K0UjPl52sE1TJ76H8umo1yR4T7Whkd9IwBHNGKXCJtJmMr9zp\n' + + 'fB38eLTu+5ydUAXdFuZpRMKBWwPVe37AdJRKqn5beS8HQjd3JXAgGKUNNuE92iqF\n' + + 'qi2fIqFMpnJXWo0FIW6s2Dl2zkORd7tH0DygcRi7lgVxCsw1BJQhFJon3y+IV8/F\n' + + 'bnbUXSNSDUnDW2EhvWSD8L+t4eiXYsozhDAzhBvojpxhPH9OB7vqFYw5qxFx+G0t\n' + + 'lSLX5iWi1jzzc3XyGnB6WInZDVbvnvJ4BGZ+dTRpOCvsoMIn9bz4EQTvu243c7aU\n' + + 'HbS/kvnCASNt+zk7C6lbmaq0AGNztwNj85Opn2enFciWZVnnJ/4OeefUWQxD0EPp\n' + + 'SjEd9Cn2IHzkBZrHCg+lWZJQBKbUVS0lLIMSsLQQ6WvR38jY7D2nxM1A93xWxwpt\n' + + 'ZtQnYRCVXH6zt2OwDAFePInWwxUjR5t/wu3XxPgpSfrmTi3WYtr1wFypAJ811e/P\n' + + 'yBtswWUQ6BNJQvy+KnOEeGfOwmtdDFYR+GOCfvCihzrKJrxOtHIieehR5Iw3cbXG\n' + + 'sm4pDzfMUVvDDz6C2M6PRlJhhClbatHCjik9hxFYEsAlqtVVK9pxaz9i8hOqSFQq\n' + + 'kJSQsgWw+oM/B2CyjcSqkSQEu8RLAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8w\n' + + 'HQYDVR0OBBYEFPmrdxpRRgu3IcaB5BTqlprcKdTsMA4GA1UdDwEB/wQEAwIBhjAN\n' + + 'BgkqhkiG9w0BAQwFAAOCAgEAVdlxWjPvVKky3kn8ZizeM4D+EsLw9dWLau2UD/ls\n' + + 'zwDCFoT6euagVeCknrn+YEl7g20CRYT9iaonGoMUPuMR/cdtPL1W/Rf40PSrGf9q\n' + + 'QuxavWiHLEXOQTCtCaVZMokkvjuuLNDXyZnstgECuiZECTwhexUF4oiuhyGk9o01\n' + + 'QMaiz4HX4lgk0ozALUvEzaNd9gWEwD2qe+rq9cQMTVq3IArUkvTIftZUaVUMzr0O\n' + + 'ed1+zAsNa9nJhURJ/6anJPJjbQgb5qA1asFcp9UaMT1ku36U3gnR1T/BdgG2jX3X\n' + + 'Um0UcaGNVPrH1ukInWW743pxWQb7/2sumEEMVh+jWbB18SAyLI4WIh4lkurdifzS\n' + + 'IuTFp8TEx+MouISFhz/vJDWZ84tqoLVjkEcP6oDypq9lFoEzHDJv3V1CYcIgOusT\n' + + 'k1jm9P7BXdTG7TYzUaTb9USb6bkqkD9EwJAOSs7DI94aE6rsSws2yAHavjAMfuMZ\n' + + 'sDAZvkqS2Qg2Z2+CI6wUZn7mzkJXbZoqRjDvChDXEB1mIhzVXhiNW/CR5WKVDvlj\n' + + '9v1sdGByh2pbxcLQtVaq/5coM4ANgphoNz3pOYUPWHS+JUrIivBZ+JobjXcxr3SN\n' + + '9iDzcu5/FVVNbq7+KN/nvPMngT+gduEN5m+EBjm8GukJymFG0m6BENRA0QSDqZ7k\n' + + 'zDY=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIECTCCAvGgAwIBAgIRAK5EYG3iHserxMqgg+0EFjgwDQYJKoZIhvcNAQELBQAw\n' + + 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' + + 'QW1hem9uIFJEUyBhcC1ub3J0aGVhc3QtMyBSb290IENBIFJTQTIwNDggRzExEDAO\n' + + 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTI0MjAyMzE2WhgPMjA2MTA1MjQyMTIzMTZa\n' + + 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' + + 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' + + 'LEFtYXpvbiBSRFMgYXAtbm9ydGhlYXN0LTMgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\n' + + 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n' + + 's1L6TtB84LGraLHVC+rGPhLBW2P0oN/91Rq3AnYwqDOuTom7agANwEjvLq7dSRG/\n' + + 'sIfZsSV/ABTgArZ5sCmLjHFZAo8Kd45yA9byx20RcYtAG8IZl+q1Cri+s0XefzyO\n' + + 'U6mlfXZkVe6lzjlfXBkrlE/+5ifVbJK4dqOS1t9cWIpgKqv5fbE6Qbq4LVT+5/WM\n' + + 'Vd2BOljuBMGMzdZubqFKFq4mzTuIYfnBm7SmHlZfTdfBYPP1ScNuhpjuzw4n3NCR\n' + + 'EdU6dQv04Q6th4r7eiOCwbWI9LkmVbvBe3ylhH63lApC7MiiPYLlB13xBubVHVhV\n' + + 'q1NHoNTi+zA3MN9HWicRxQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\n' + + 'DgQWBBSuxoqm0/wjNiZLvqv+JlQwsDvTPDAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\n' + + 'hvcNAQELBQADggEBAFfTK/j5kv90uIbM8VaFdVbr/6weKTwehafT0pAk1bfLVX+7\n' + + 'uf8oHgYiyKTTl0DFQicXejghXTeyzwoEkWSR8c6XkhD5vYG3oESqmt/RGvvoxz11\n' + + 'rHHy7yHYu7RIUc3VQG60c4qxXv/1mWySGwVwJrnuyNT9KZXPevu3jVaWOVHEILaK\n' + + 'HvzQ2YEcWBPmde/zEseO2QeeGF8FL45Q1d66wqIP4nNUd2pCjeTS5SpB0MMx7yi9\n' + + 'ki1OH1pv8tOuIdimtZ7wkdB8+JSZoaJ81b8sRrydRwJyvB88rftuI3YB4WwGuONT\n' + + 'ZezUPsmaoK69B0RChB0ofDpAaviF9V3xOWvVZfo=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIGDzCCA/egAwIBAgIRAI0sMNG2XhaBMRN3zD7ZyoEwDQYJKoZIhvcNAQEMBQAw\n' + + 'gZ8xCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE4MDYGA1UEAwwv\n' + + 'QW1hem9uIFJEUyBQcmV2aWV3IHVzLWVhc3QtMiBSb290IENBIFJTQTQwOTYgRzEx\n' + + 'EDAOBgNVBAcMB1NlYXR0bGUwIBcNMjEwNTE4MjA1NzUwWhgPMjEyMTA1MTgyMTU3\n' + + 'NTBaMIGfMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n' + + 'cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExODA2BgNV\n' + + 'BAMML0FtYXpvbiBSRFMgUHJldmlldyB1cy1lYXN0LTIgUm9vdCBDQSBSU0E0MDk2\n' + + 'IEcxMRAwDgYDVQQHDAdTZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC\n' + + 'CgKCAgEAh/otSiCu4Uw3hu7OJm0PKgLsLRqBmUS6jihcrkxfN2SHmp2zuRflkweU\n' + + 'BhMkebzL+xnNvC8okzbgPWtUxSmDnIRhE8J7bvSKFlqs/tmEdiI/LMqe/YIKcdsI\n' + + '20UYmvyLIjtDaJIh598SHHlF9P8DB5jD8snJfhxWY+9AZRN+YVTltgQAAgayxkWp\n' + + 'M1BbvxpOnz4CC00rE0eqkguXIUSuobb1vKqdKIenlYBNxm2AmtgvQfpsBIQ0SB+8\n' + + '8Zip8Ef5rtjSw5J3s2Rq0aYvZPfCVIsKYepIboVwXtD7E9J31UkB5onLBQlaHaA6\n' + + 'XlH4srsMmrew5d2XejQGy/lGZ1nVWNsKO0x/Az2QzY5Kjd6AlXZ8kq6H68hscA5i\n' + + 'OMbNlXzeEQsZH0YkId3+UsEns35AAjZv4qfFoLOu8vDotWhgVNT5DfdbIWZW3ZL8\n' + + 'qbmra3JnCHuaTwXMnc25QeKgVq7/rG00YB69tCIDwcf1P+tFJWxvaGtV0g2NthtB\n' + + 'a+Xo09eC0L53gfZZ3hZw1pa3SIF5dIZ6RFRUQ+lFOux3Q/I3u+rYstYw7Zxc4Zeo\n' + + 'Y8JiedpQXEAnbw2ECHix/L6mVWgiWCiDzBnNLLdbmXjJRnafNSndSfFtHCnY1SiP\n' + + 'aCrNpzwZIJejoV1zDlWAMO+gyS28EqzuIq3WJK/TFE7acHkdKIcCAwEAAaNCMEAw\n' + + 'DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUrmV1YASnuudfmqAZP4sKGTvScaEw\n' + + 'DgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBDAUAA4ICAQBGpEKeQoPvE85tN/25\n' + + 'qHFkys9oHDl93DZ62EnOqAUKLd6v0JpCyEiop4nlrJe+4KrBYVBPyKOJDcIqE2Sp\n' + + '3cvgJXLhY4i46VM3Qxe8yuYF1ElqBpg3jJVj/sCQnYz9dwoAMWIJFaDWOvmU2E7M\n' + + 'MRaKx+sPXFkIjiDA6Bv0m+VHef7aedSYIY7IDltEQHuXoqNacGrYo3I50R+fZs88\n' + + '/mB3e/V7967e99D6565yf9Lcjw4oQf2Hy7kl/6P9AuMz0LODnGITwh2TKk/Zo3RU\n' + + 'Vgq25RDrT4xJK6nFHyjUF6+4cOBxVpimmFw/VP1zaXT8DN5r4HyJ9p4YuSK8ha5N\n' + + '2pJc/exvU8Nv2+vS/efcDZWyuEdZ7eh1IJWQZlOZKIAONfRDRTpeQHJ3zzv3QVYy\n' + + 't78pYp/eWBHyVIfEE8p2lFKD4279WYe+Uvdb8c4Jm4TJwqkSJV8ifID7Ub80Lsir\n' + + 'lPAU3OCVTBeVRFPXT2zpC4PB4W6KBSuj6OOcEu2y/HgWcoi7Cnjvp0vFTUhDFdus\n' + + 'Wz3ucmJjfVsrkEO6avDKu4SwdbVHsk30TVAwPd6srIdi9U6MOeOQSOSE4EsrrS7l\n' + + 'SVmu2QIDUVFpm8QAHYplkyWIyGkupyl3ashH9mokQhixIU/Pzir0byePxHLHrwLu\n' + + '1axqeKpI0F5SBUPsaVNYY2uNFg==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIECDCCAvCgAwIBAgIQCREfzzVyDTMcNME+gWnTCTANBgkqhkiG9w0BAQsFADCB\n' + + 'nDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTUwMwYDVQQDDCxB\n' + + 'bWF6b24gUkRTIGFwLXNvdXRoZWFzdC0yIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4G\n' + + 'A1UEBwwHU2VhdHRsZTAgFw0yMTA1MjQyMDQyMzNaGA8yMDYxMDUyNDIxNDIzM1ow\n' + + 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' + + 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtMiBSb290IENBIFJTQTIwNDggRzExEDAO\n' + + 'BgNVBAcMB1NlYXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDL\n' + + '1MT6br3L/4Pq87DPXtcjlXN3cnbNk2YqRAZHJayStTz8VtsFcGPJOpk14geRVeVk\n' + + 'e9uKFHRbcyr/RM4owrJTj5X4qcEuATYZbo6ou/rW2kYzuWFZpFp7lqm0vasV4Z9F\n' + + 'fChlhwkNks0UbM3G+psCSMNSoF19ERunj7w2c4E62LwujkeYLvKGNepjnaH10TJL\n' + + '2krpERd+ZQ4jIpObtRcMH++bTrvklc+ei8W9lqrVOJL+89v2piN3Ecdd389uphst\n' + + 'qQdb1BBVXbhUrtuGHgVf7zKqN1SkCoktoWxVuOprVWhSvr7akaWeq0UmlvbEsujU\n' + + 'vADqxGMcJFyCzxx3CkJjAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O\n' + + 'BBYEFFk8UJmlhoxFT3PP12PvhvazHjT4MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG\n' + + '9w0BAQsFAAOCAQEAfFtr2lGoWVXmWAsIo2NYre7kzL8Xb9Tx7desKxCCz5HOOvIr\n' + + '8JMB1YK6A7IOvQsLJQ/f1UnKRh3X3mJZjKIywfrMSh0FiDf+rjcEzXxw2dGtUem4\n' + + 'A+WMvIA3jwxnJ90OQj5rQ8bg3iPtE6eojzo9vWQGw/Vu48Dtw1DJo9210Lq/6hze\n' + + 'hPhNkFh8fMXNT7Q1Wz/TJqJElyAQGNOXhyGpHKeb0jHMMhsy5UNoW5hLeMS5ffao\n' + + 'TBFWEJ1gVfxIU9QRxSh+62m46JIg+dwDlWv8Aww14KgepspRbMqDuaM2cinoejv6\n' + + 't3dyOyHHrsOyv3ffZUKtQhQbQr+sUcL89lARsg==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIID/zCCAuegAwIBAgIRAIJLTMpzGNxqHZ4t+c1MlCIwDQYJKoZIhvcNAQELBQAw\n' + + 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\n' + + 'QW1hem9uIFJEUyBhcC1lYXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIxMDUyNTIxMzAzM1oYDzIwNjEwNTI1MjIzMDMzWjCBlzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' + + 'b24gUkRTIGFwLWVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDtdHut0ZhJ9Nn2\n' + + 'MpVafFcwHdoEzx06okmmhjJsNy4l9QYVeh0UUoek0SufRNMRF4d5ibzpgZol0Y92\n' + + '/qKWNe0jNxhEj6sXyHsHPeYtNBPuDMzThfbvsLK8z7pBP7vVyGPGuppqW/6m4ZBB\n' + + 'lcc9fsf7xpZ689iSgoyjiT6J5wlVgmCx8hFYc/uvcRtfd8jAHvheug7QJ3zZmIye\n' + + 'V4htOW+fRVWnBjf40Q+7uTv790UAqs0Zboj4Yil+hER0ibG62y1g71XcCyvcVpto\n' + + '2/XW7Y9NCgMNqQ7fGN3wR1gjtSYPd7DO32LTzYhutyvfbpAZjsAHnoObmoljcgXI\n' + + 'QjfBcCFpAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFJI3aWLg\n' + + 'CS5xqU5WYVaeT5s8lpO0MA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC\n' + + 'AQEAUwATpJOcGVOs3hZAgJwznWOoTzOVJKfrqBum7lvkVH1vBwxBl9CahaKj3ZOt\n' + + 'YYp2qJzhDUWludL164DL4ZjS6eRedLRviyy5cRy0581l1MxPWTThs27z+lCC14RL\n' + + 'PJZNVYYdl7Jy9Q5NsQ0RBINUKYlRY6OqGDySWyuMPgno2GPbE8aynMdKP+f6G/uE\n' + + 'YHOf08gFDqTsbyfa70ztgVEJaRooVf5JJq4UQtpDvVswW2reT96qi6tXPKHN5qp3\n' + + '3wI0I1Mp4ePmiBKku2dwYzPfrJK/pQlvu0Gu5lKOQ65QdotwLAAoaFqrf9za1yYs\n' + + 'INUkHLWIxDds+4OHNYcerGp5Dw==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIGCTCCA/GgAwIBAgIRAIO6ldra1KZvNWJ0TA1ihXEwDQYJKoZIhvcNAQEMBQAw\n' + + 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' + + 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtMSBSb290IENBIFJTQTQwOTYgRzExEDAO\n' + + 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTIxMjE0NTA1WhgPMjEyMTA1MjEyMjQ1MDVa\n' + + 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' + + 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' + + 'LEFtYXpvbiBSRFMgYXAtc291dGhlYXN0LTEgUm9vdCBDQSBSU0E0MDk2IEcxMRAw\n' + + 'DgYDVQQHDAdTZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA\n' + + 'sDN52Si9pFSyZ1ruh3xAN0nVqEs960o2IK5CPu/ZfshFmzAwnx/MM8EHt/jMeZtj\n' + + 'SM58LADAsNDL01ELpFZATjgZQ6xNAyXRXE7RiTRUvNkK7O3o2qAGbLnJq/UqF7Sw\n' + + 'LRnB8V6hYOv+2EjVnohtGCn9SUFGZtYDjWXsLd4ML4Zpxv0a5LK7oEC7AHzbUR7R\n' + + 'jsjkrXqSv7GE7bvhSOhMkmgxgj1F3J0b0jdQdtyyj109aO0ATUmIvf+Bzadg5AI2\n' + + 'A9UA+TUcGeebhpHu8AP1Hf56XIlzPpaQv3ZJ4vzoLaVNUC7XKzAl1dlvCl7Klg/C\n' + + '84qmbD/tjZ6GHtzpLKgg7kQEV7mRoXq8X4wDX2AFPPQl2fv+Kbe+JODqm5ZjGegm\n' + + 'uskABBi8IFv1hYx9jEulZPxC6uD/09W2+niFm3pirnlWS83BwVDTUBzF+CooUIMT\n' + + 'jhWkIIZGDDgMJTzouBHfoSJtS1KpUZi99m2WyVs21MNKHeWAbs+zmI6TO5iiMC+T\n' + + 'uB8spaOiHFO1573Fmeer4sy3YA6qVoqVl6jjTQqOdy3frAMbCkwH22/crV8YA+08\n' + + 'hLeHXrMK+6XUvU+EtHAM3VzcrLbuYJUI2XJbzTj5g0Eb8I8JWsHvWHR5K7Z7gceR\n' + + '78AzxQmoGEfV6KABNWKsgoCQnfb1BidDJIe3BsI0A6UCAwEAAaNCMEAwDwYDVR0T\n' + + 'AQH/BAUwAwEB/zAdBgNVHQ4EFgQUABp0MlB14MSHgAcuNSOhs3MOlUcwDgYDVR0P\n' + + 'AQH/BAQDAgGGMA0GCSqGSIb3DQEBDAUAA4ICAQCv4CIOBSQi/QR9NxdRgVAG/pAh\n' + + 'tFJhV7OWb/wqwsNKFDtg6tTxwaahdCfWpGWId15OUe7G9LoPiKiwM9C92n0ZeHRz\n' + + '4ewbrQVo7Eu1JI1wf0rnZJISL72hVYKmlvaWaacHhWxvsbKLrB7vt6Cknxa+S993\n' + + 'Kf8i2Psw8j5886gaxhiUtzMTBwoDWak8ZaK7m3Y6C6hXQk08+3pnIornVSFJ9dlS\n' + + 'PAqt5UPwWmrEfF+0uIDORlT+cvrAwgSp7nUF1q8iasledycZ/BxFgQqzNwnkBDwQ\n' + + 'Z/aM52ArGsTzfMhkZRz9HIEhz1/0mJw8gZtDVQroD8778h8zsx2SrIz7eWQ6uWsD\n' + + 'QEeSWXpcheiUtEfzkDImjr2DLbwbA23c9LoexUD10nwohhoiQQg77LmvBVxeu7WU\n' + + 'E63JqaYUlOLOzEmNJp85zekIgR8UTkO7Gc+5BD7P4noYscI7pPOL5rP7YLg15ZFi\n' + + 'ega+G53NTckRXz4metsd8XFWloDjZJJq4FfD60VuxgXzoMNT9wpFTNSH42PR2s9L\n' + + 'I1vcl3w8yNccs9se2utM2nLsItZ3J0m/+QSRiw9hbrTYTcM9sXki0DtH2kyIOwYf\n' + + 'lOrGJDiYOIrXSQK36H0gQ+8omlrUTvUj4msvkXuQjlfgx6sgp2duOAfnGxE7uHnc\n' + + 'UhnJzzoe6M+LfGHkVQ==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICuDCCAj2gAwIBAgIQSAG6j2WHtWUUuLGJTPb1nTAKBggqhkjOPQQDAzCBmzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' + + 'b24gUkRTIGFwLW5vcnRoZWFzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIxMDUyMDE2MzgyNloYDzIxMjEwNTIwMTczODI2WjCBmzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' + + 'b24gUkRTIGFwLW5vcnRoZWFzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE2eqwU4FOzW8RV1W381Bd\n' + + 'olhDOrqoMqzWli21oDUt7y8OnXM/lmAuOS6sr8Nt61BLVbONdbr+jgCYw75KabrK\n' + + 'ZGg3siqvMOgabIKkKuXO14wtrGyGDt7dnKXg5ERGYOZlo0IwQDAPBgNVHRMBAf8E\n' + + 'BTADAQH/MB0GA1UdDgQWBBS1Acp2WYxOcblv5ikZ3ZIbRCCW+zAOBgNVHQ8BAf8E\n' + + 'BAMCAYYwCgYIKoZIzj0EAwMDaQAwZgIxAJL84J08PBprxmsAKPTotBuVI3MyW1r8\n' + + 'xQ0i8lgCQUf8GcmYjQ0jI4oZyv+TuYJAcwIxAP9Xpzq0Docxb+4N1qVhpiOfWt1O\n' + + 'FnemFiy9m1l+wv6p3riQMPV7mBVpklmijkIv3Q==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIECTCCAvGgAwIBAgIRALZLcqCVIJ25maDPE3sbPCIwDQYJKoZIhvcNAQELBQAw\n' + + 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' + + 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAO\n' + + 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTIxMjEzOTM5WhgPMjA2MTA1MjEyMjM5Mzla\n' + + 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' + + 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' + + 'LEFtYXpvbiBSRFMgYXAtc291dGhlYXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\n' + + 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n' + + 'ypKc+6FfGx6Gl6fQ78WYS29QoKgQiur58oxR3zltWeg5fqh9Z85K5S3UbRSTqWWu\n' + + 'Xcfnkz0/FS07qHX+nWAGU27JiQb4YYqhjZNOAq8q0+ptFHJ6V7lyOqXBq5xOzO8f\n' + + '+0DlbJSsy7GEtJp7d7QCM3M5KVY9dENVZUKeJwa8PC5StvwPx4jcLeZRJC2rAVDG\n' + + 'SW7NAInbATvr9ssSh03JqjXb+HDyywiqoQ7EVLtmtXWimX+0b3/2vhqcH5jgcKC9\n' + + 'IGFydrjPbv4kwMrKnm6XlPZ9L0/3FMzanXPGd64LQVy51SI4d5Xymn0Mw2kMX8s6\n' + + 'Nf05OsWcDzJ1n6/Q1qHSxQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\n' + + 'DgQWBBRmaIc8eNwGP7i6P7AJrNQuK6OpFzAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\n' + + 'hvcNAQELBQADggEBAIBeHfGwz3S2zwIUIpqEEI5/sMySDeS+3nJR+woWAHeO0C8i\n' + + 'BJdDh+kzzkP0JkWpr/4NWz84/IdYo1lqASd1Kopz9aT1+iROXaWr43CtbzjXb7/X\n' + + 'Zv7eZZFC8/lS5SROq42pPWl4ekbR0w8XGQElmHYcWS41LBfKeHCUwv83ATF0XQ6I\n' + + '4t+9YSqZHzj4vvedrvcRInzmwWJaal9s7Z6GuwTGmnMsN3LkhZ+/GD6oW3pU/Pyh\n' + + 'EtWqffjsLhfcdCs3gG8x9BbkcJPH5aPAVkPn4wc8wuXg6xxb9YGsQuY930GWTYRf\n' + + 'schbgjsuqznW4HHakq4WNhs1UdTSTKkRdZz7FUQ=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEDzCCAvegAwIBAgIRAM2zAbhyckaqRim63b+Tib8wDQYJKoZIhvcNAQELBQAw\n' + + 'gZ8xCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE4MDYGA1UEAwwv\n' + + 'QW1hem9uIFJEUyBQcmV2aWV3IHVzLWVhc3QtMiBSb290IENBIFJTQTIwNDggRzEx\n' + + 'EDAOBgNVBAcMB1NlYXR0bGUwIBcNMjEwNTE4MjA0OTQ1WhgPMjA2MTA1MTgyMTQ5\n' + + 'NDVaMIGfMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNl\n' + + 'cywgSW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExODA2BgNV\n' + + 'BAMML0FtYXpvbiBSRFMgUHJldmlldyB1cy1lYXN0LTIgUm9vdCBDQSBSU0EyMDQ4\n' + + 'IEcxMRAwDgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB\n' + + 'CgKCAQEA1ybjQMH1MkbvfKsWJaCTXeCSN1SG5UYid+Twe+TjuSqaXWonyp4WRR5z\n' + + 'tlkqq+L2MWUeQQAX3S17ivo/t84mpZ3Rla0cx39SJtP3BiA2BwfUKRjhPwOjmk7j\n' + + '3zrcJjV5k1vSeLNOfFFSlwyDiVyLAE61lO6onBx+cRjelu0egMGq6WyFVidTdCmT\n' + + 'Q9Zw3W6LTrnPvPmEyjHy2yCHzH3E50KSd/5k4MliV4QTujnxYexI2eR8F8YQC4m3\n' + + 'DYjXt/MicbqA366SOoJA50JbgpuVv62+LSBu56FpzY12wubmDZsdn4lsfYKiWxUy\n' + + 'uc83a2fRXsJZ1d3whxrl20VFtLFHFQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/\n' + + 'MB0GA1UdDgQWBBRC0ytKmDYbfz0Bz0Psd4lRQV3aNTAOBgNVHQ8BAf8EBAMCAYYw\n' + + 'DQYJKoZIhvcNAQELBQADggEBAGv8qZu4uaeoF6zsbumauz6ea6tdcWt+hGFuwGrb\n' + + 'tRbI85ucAmVSX06x59DJClsb4MPhL1XmqO3RxVMIVVfRwRHWOsZQPnXm8OYQ2sny\n' + + 'rYuFln1COOz1U/KflZjgJmxbn8x4lYiTPZRLarG0V/OsCmnLkQLPtEl/spMu8Un7\n' + + 'r3K8SkbWN80gg17Q8EV5mnFwycUx9xsTAaFItuG0en9bGsMgMmy+ZsDmTRbL+lcX\n' + + 'Fq8r4LT4QjrFz0shrzCwuuM4GmcYtBSxlacl+HxYEtAs5k10tmzRf6OYlY33tGf6\n' + + '1tkYvKryxDPF/EDgGp/LiBwx6ixYMBfISoYASt4V/ylAlHA=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICtTCCAjqgAwIBAgIRAK9BSZU6nIe6jqfODmuVctYwCgYIKoZIzj0EAwMwgZkx\n' + + 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' + + 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEyMDAGA1UEAwwpQW1h\n' + + 'em9uIFJEUyBjYS1jZW50cmFsLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcM\n' + + 'B1NlYXR0bGUwIBcNMjEwNTIxMjIxMzA5WhgPMjEyMTA1MjEyMzEzMDlaMIGZMQsw\n' + + 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' + + 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMjAwBgNVBAMMKUFtYXpv\n' + + 'biBSRFMgY2EtY2VudHJhbC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdT\n' + + 'ZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEUkEERcgxneT5H+P+fERcbGmf\n' + + 'bVx+M7rNWtgWUr6w+OBENebQA9ozTkeSg4c4M+qdYSObFqjxITdYxT1z/nHz1gyx\n' + + 'OKAhLjWu+nkbRefqy3RwXaWT680uUaAP6ccnkZOMo0IwQDAPBgNVHRMBAf8EBTAD\n' + + 'AQH/MB0GA1UdDgQWBBSN6fxlg0s5Wny08uRBYZcQ3TUoyzAOBgNVHQ8BAf8EBAMC\n' + + 'AYYwCgYIKoZIzj0EAwMDaQAwZgIxAORaz+MBVoFBTmZ93j2G2vYTwA6T5hWzBWrx\n' + + 'CrI54pKn5g6At56DBrkjrwZF5T1enAIxAJe/LZ9xpDkAdxDgGJFN8gZYLRWc0NRy\n' + + 'Rb4hihy5vj9L+w9uKc9VfEBIFuhT7Z3ljg==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEADCCAuigAwIBAgIQB/57HSuaqUkLaasdjxUdPjANBgkqhkiG9w0BAQsFADCB\n' + + 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\n' + + 'bWF6b24gUkRTIGFwLXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIxMDUxOTE3NDAzNFoYDzIwNjEwNTE5MTg0MDM0WjCBmDEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\n' + + 'b24gUkRTIGFwLXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQHDAdT\n' + + 'ZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtbkaoVsUS76o\n' + + 'TgLFmcnaB8cswBk1M3Bf4IVRcwWT3a1HeJSnaJUqWHCJ+u3ip/zGVOYl0gN1MgBb\n' + + 'MuQRIJiB95zGVcIa6HZtx00VezDTr3jgGWRHmRjNVCCHGmxOZWvJjsIE1xavT/1j\n' + + 'QYV/ph4EZEIZ/qPq7e3rHohJaHDe23Z7QM9kbyqp2hANG2JtU/iUhCxqgqUHNozV\n' + + 'Zd0l5K6KnltZQoBhhekKgyiHqdTrH8fWajYl5seD71bs0Axowb+Oh0rwmrws3Db2\n' + + 'Dh+oc2PwREnjHeca9/1C6J2vhY+V0LGaJmnnIuOANrslx2+bgMlyhf9j0Bv8AwSi\n' + + 'dSWsobOhNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQb7vJT\n' + + 'VciLN72yJGhaRKLn6Krn2TAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\n' + + 'ggEBAAxEj8N9GslReAQnNOBpGl8SLgCMTejQ6AW/bapQvzxrZrfVOZOYwp/5oV0f\n' + + '9S1jcGysDM+DrmfUJNzWxq2Y586R94WtpH4UpJDGqZp+FuOVJL313te4609kopzO\n' + + 'lDdmd+8z61+0Au93wB1rMiEfnIMkOEyt7D2eTFJfJRKNmnPrd8RjimRDlFgcLWJA\n' + + '3E8wca67Lz/G0eAeLhRHIXv429y8RRXDtKNNz0wA2RwURWIxyPjn1fHjA9SPDkeW\n' + + 'E1Bq7gZj+tBnrqz+ra3yjZ2blss6Ds3/uRY6NYqseFTZWmQWT7FolZEnT9vMUitW\n' + + 'I0VynUbShVpGf6946e0vgaaKw20=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIID/jCCAuagAwIBAgIQGyUVTaVjYJvWhroVEiHPpDANBgkqhkiG9w0BAQsFADCB\n' + + 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\n' + + 'bWF6b24gUkRTIHVzLXdlc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcM\n' + + 'B1NlYXR0bGUwIBcNMjEwNTE5MTkwNDA2WhgPMjA2MTA1MTkyMDA0MDZaMIGXMQsw\n' + + 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' + + 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\n' + + 'biBSRFMgdXMtd2VzdC0xIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UEBwwHU2Vh\n' + + 'dHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANhyXpJ0t4nigRDZ\n' + + 'EwNtFOem1rM1k8k5XmziHKDvDk831p7QsX9ZOxl/BT59Pu/P+6W6SvasIyKls1sW\n' + + 'FJIjFF+6xRQcpoE5L5evMgN/JXahpKGeQJPOX9UEXVW5B8yi+/dyUitFT7YK5LZA\n' + + 'MqWBN/LtHVPa8UmE88RCDLiKkqiv229tmwZtWT7nlMTTCqiAHMFcryZHx0pf9VPh\n' + + 'x/iPV8p2gBJnuPwcz7z1kRKNmJ8/cWaY+9w4q7AYlAMaq/rzEqDaN2XXevdpsYAK\n' + + 'TMMj2kji4x1oZO50+VPNfBl5ZgJc92qz1ocF95SAwMfOUsP8AIRZkf0CILJYlgzk\n' + + '/6u6qZECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm5jfcS9o\n' + + '+LwL517HpB6hG+PmpBswDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IB\n' + + 'AQAcQ6lsqxi63MtpGk9XK8mCxGRLCad51+MF6gcNz6i6PAqhPOoKCoFqdj4cEQTF\n' + + 'F8dCfa3pvfJhxV6RIh+t5FCk/y6bWT8Ls/fYKVo6FhHj57bcemWsw/Z0XnROdVfK\n' + + 'Yqbc7zvjCPmwPHEqYBhjU34NcY4UF9yPmlLOL8uO1JKXa3CAR0htIoW4Pbmo6sA4\n' + + '6P0co/clW+3zzsQ92yUCjYmRNeSbdXbPfz3K/RtFfZ8jMtriRGuO7KNxp8MqrUho\n' + + 'HK8O0mlSUxGXBZMNicfo7qY8FD21GIPH9w5fp5oiAl7lqFzt3E3sCLD3IiVJmxbf\n' + + 'fUwpGd1XZBBSdIxysRLM6j48\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICrTCCAjOgAwIBAgIQU+PAILXGkpoTcpF200VD/jAKBggqhkjOPQQDAzCBljEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMS8wLQYDVQQDDCZBbWF6\n' + + 'b24gUkRTIGFwLWVhc3QtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2Vh\n' + + 'dHRsZTAgFw0yMTA1MjUyMTQ1MTFaGA8yMTIxMDUyNTIyNDUxMVowgZYxCzAJBgNV\n' + + 'BAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYD\n' + + 'VQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1hem9uIFJE\n' + + 'UyBhcC1lYXN0LTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1NlYXR0bGUw\n' + + 'djAQBgcqhkjOPQIBBgUrgQQAIgNiAAT3tFKE8Kw1sGQAvNLlLhd8OcGhlc7MiW/s\n' + + 'NXm3pOiCT4vZpawKvHBzD76Kcv+ZZzHRxQEmG1/muDzZGlKR32h8AAj+NNO2Wy3d\n' + + 'CKTtYMiVF6Z2zjtuSkZQdjuQbe4eQ7qjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD\n' + + 'VR0OBBYEFAiSQOp16Vv0Ohpvqcbd2j5RmhYNMA4GA1UdDwEB/wQEAwIBhjAKBggq\n' + + 'hkjOPQQDAwNoADBlAjBVsi+5Ape0kOhMt/WFkANkslD4qXA5uqhrfAtH29Xzz2NV\n' + + 'tR7akiA771OaIGB/6xsCMQCZt2egCtbX7J0WkuZ2KivTh66jecJr5DHvAP4X2xtS\n' + + 'F/5pS+AUhcKTEGjI9jDH3ew=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICuDCCAj2gAwIBAgIQT5mGlavQzFHsB7hV6Mmy6TAKBggqhkjOPQQDAzCBmzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' + + 'b24gUkRTIGFwLXNvdXRoZWFzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIxMDUyNDIwNTAxNVoYDzIxMjEwNTI0MjE1MDE1WjCBmzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' + + 'b24gUkRTIGFwLXNvdXRoZWFzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEcm4BBBjYK7clwm0HJRWS\n' + + 'flt3iYwoJbIXiXn9c1y3E+Vb7bmuyKhS4eO8mwO4GefUcXObRfoHY2TZLhMJLVBQ\n' + + '7MN2xDc0RtZNj07BbGD3VAIFRTDX0mH9UNYd0JQM3t/Oo0IwQDAPBgNVHRMBAf8E\n' + + 'BTADAQH/MB0GA1UdDgQWBBRrd5ITedfAwrGo4FA9UaDaGFK3rjAOBgNVHQ8BAf8E\n' + + 'BAMCAYYwCgYIKoZIzj0EAwMDaQAwZgIxAPBNqmVv1IIA3EZyQ6XuVf4gj79/DMO8\n' + + 'bkicNS1EcBpUqbSuU4Zwt2BYc8c/t7KVOQIxAOHoWkoKZPiKyCxfMtJpCZySUG+n\n' + + 'sXgB/LOyWE5BJcXUfm+T1ckeNoWeUUMOLmnJjg==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIECTCCAvGgAwIBAgIRAJcDeinvdNrDQBeJ8+t38WQwDQYJKoZIhvcNAQELBQAw\n' + + 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' + + 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtNCBSb290IENBIFJTQTIwNDggRzExEDAO\n' + + 'BgNVBAcMB1NlYXR0bGUwIBcNMjIwNTI1MTY0OTE2WhgPMjA2MjA1MjUxNzQ5MTZa\n' + + 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' + + 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' + + 'LEFtYXpvbiBSRFMgYXAtc291dGhlYXN0LTQgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\n' + + 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n' + + 'k8DBNkr9tMoIM0NHoFiO7cQfSX0cOMhEuk/CHt0fFx95IBytx7GHCnNzpM27O5z6\n' + + 'x6iRhfNnx+B6CrGyCzOjxvPizneY+h+9zfvNz9jj7L1I2uYMuiNyOKR6FkHR46CT\n' + + '1CiArfVLLPaTqgD/rQjS0GL2sLHS/0dmYipzynnZcs613XT0rAWdYDYgxDq7r/Yi\n' + + 'Xge5AkWQFkMUq3nOYDLCyGGfQqWKkwv6lZUHLCDKf+Y0Uvsrj8YGCI1O8mF0qPCQ\n' + + 'lmlfaDvbuBu1AV+aabmkvyFj3b8KRIlNLEtQ4N8KGYR2Jdb82S4YUGIOAt4wuuFt\n' + + '1B7AUDLk3V/u+HTWiwfoLQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\n' + + 'DgQWBBSNpcjz6ArWBtAA+Gz6kyyZxrrgdDAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\n' + + 'hvcNAQELBQADggEBAGJEd7UgOzHYIcQRSF7nSYyjLROyalaIV9AX4WXW/Cqlul1c\n' + + 'MblP5etDZm7A/thliZIWAuyqv2bNicmS3xKvNy6/QYi1YgxZyy/qwJ3NdFl067W0\n' + + 't8nGo29B+EVK94IPjzFHWShuoktIgp+dmpijB7wkTIk8SmIoe9yuY4+hzgqk+bo4\n' + + 'ms2SOXSN1DoQ75Xv+YmztbnZM8MuWhL1T7hA4AMorzTQLJ9Pof8SpSdMHeDsHp0R\n' + + '01jogNFkwy25nw7cL62nufSuH2fPYGWXyNDg+y42wKsKWYXLRgUQuDVEJ2OmTFMB\n' + + 'T0Vf7VuNijfIA9hkN2d3K53m/9z5WjGPSdOjGhg=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIID/jCCAuagAwIBAgIQRiwspKyrO0xoxDgSkqLZczANBgkqhkiG9w0BAQsFADCB\n' + + 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\n' + + 'bWF6b24gUkRTIHVzLXdlc3QtMiBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcM\n' + + 'B1NlYXR0bGUwIBcNMjEwNTI0MjE1OTAwWhgPMjA2MTA1MjQyMjU5MDBaMIGXMQsw\n' + + 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' + + 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\n' + + 'biBSRFMgdXMtd2VzdC0yIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UEBwwHU2Vh\n' + + 'dHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL53Jk3GsKiu+4bx\n' + + 'jDfsevWbwPCNJ3H08Zp7GWhvI3Tgi39opfHYv2ku2BKFjK8N2L6RvNPSR8yplv5j\n' + + 'Y0tK0U+XVNl8o0ibhqRDhbTuh6KL8CFINWYzAajuxFS+CF0U6c1Q3tXLBdALxA7l\n' + + 'FlXJ71QrP06W31kRe7kvgrvO7qWU3/OzUf9qYw4LSiR1/VkvvRCTqcVNw09clw/M\n' + + 'Jbw6FSgweN65M9j7zPbjGAXSHkXyxH1Erin2fa+B9PE4ZDgX9cp2C1DHewYJQL/g\n' + + 'SepwwcudVNRN1ibKH7kpMrgPnaNIVNx5sXVsTjk6q2ZqYw3SVHegltJpLy/cZReP\n' + + 'mlivF2kCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUmTcQd6o1\n' + + 'CuS65MjBrMwQ9JJjmBwwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IB\n' + + 'AQAKSDSIzl956wVddPThf2VAzI8syw9ngSwsEHZvxVGHBvu5gg618rDyguVCYX9L\n' + + '4Kw/xJrk6S3qxOS2ZDyBcOpsrBskgahDFIunzoRP3a18ARQVq55LVgfwSDQiunch\n' + + 'Bd05cnFGLoiLkR5rrkgYaP2ftn3gRBRaf0y0S3JXZ2XB3sMZxGxavYq9mfiEcwB0\n' + + 'LMTMQ1NYzahIeG6Jm3LqRqR8HkzP/Ztq4dT2AtSLvFebbNMiWqeqT7OcYp94HTYT\n' + + 'zqrtaVdUg9bwyAUCDgy0GV9RHDIdNAOInU/4LEETovrtuBU7Z1q4tcHXvN6Hd1H8\n' + + 'gMb0mCG5I393qW5hFsA/diFb\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIECTCCAvGgAwIBAgIRAPQAvihfjBg/JDbj6U64K98wDQYJKoZIhvcNAQELBQAw\n' + + 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' + + 'QW1hem9uIFJEUyBhcC1ub3J0aGVhc3QtMiBSb290IENBIFJTQTIwNDggRzExEDAO\n' + + 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTIwMTYyODQxWhgPMjA2MTA1MjAxNzI4NDFa\n' + + 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' + + 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' + + 'LEFtYXpvbiBSRFMgYXAtbm9ydGhlYXN0LTIgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\n' + + 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n' + + 'vJ9lgyksCxkBlY40qOzI1TCj/Q0FVGuPL/Z1Mw2YN0l+41BDv0FHApjTUkIKOeIP\n' + + 'nwDwpXTa3NjYbk3cOZ/fpH2rYJ++Fte6PNDGPgKppVCUh6x3jiVZ1L7wOgnTdK1Q\n' + + 'Trw8440IDS5eLykRHvz8OmwvYDl0iIrt832V0QyOlHTGt6ZJ/aTQKl12Fy3QBLv7\n' + + 'stClPzvHTrgWqVU6uidSYoDtzHbU7Vda7YH0wD9IUoMBf7Tu0rqcE4uH47s2XYkc\n' + + 'SdLEoOg/Ngs7Y9B1y1GCyj3Ux7hnyvCoRTw014QyNB7dTatFMDvYlrRDGG14KeiU\n' + + 'UL7Vo/+EejWI31eXNLw84wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\n' + + 'DgQWBBQkgTWFsNg6wA3HbbihDQ4vpt1E2zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\n' + + 'hvcNAQELBQADggEBAGz1Asiw7hn5WYUj8RpOCzpE0h/oBZcnxP8wulzZ5Xd0YxWO\n' + + '0jYUcUk3tTQy1QvoY+Q5aCjg6vFv+oFBAxkib/SmZzp4xLisZIGlzpJQuAgRkwWA\n' + + '6BVMgRS+AaOMQ6wKPgz1x4v6T0cIELZEPq3piGxvvqkcLZKdCaeC3wCS6sxuafzZ\n' + + '4qA3zMwWuLOzRftgX2hQto7d/2YkRXga7jSvQl3id/EI+xrYoH6zIWgjdU1AUaNq\n' + + 'NGT7DIo47vVMfnd9HFZNhREsd4GJE83I+JhTqIxiKPNxrKgESzyADmNPt0gXDnHo\n' + + 'tbV1pMZz5HpJtjnP/qVZhEK5oB0tqlKPv9yx074=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICuTCCAj6gAwIBAgIRAKp1Rn3aL/g/6oiHVIXtCq8wCgYIKoZIzj0EAwMwgZsx\n' + + 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' + + 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE0MDIGA1UEAwwrQW1h\n' + + 'em9uIFJEUyBhcC1ub3J0aGVhc3QtMyBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UE\n' + + 'BwwHU2VhdHRsZTAgFw0yMTA1MjQyMDMyMTdaGA8yMTIxMDUyNDIxMzIxN1owgZsx\n' + + 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' + + 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE0MDIGA1UEAwwrQW1h\n' + + 'em9uIFJEUyBhcC1ub3J0aGVhc3QtMyBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UE\n' + + 'BwwHU2VhdHRsZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABGTYWPILeBJXfcL3Dz4z\n' + + 'EWMUq78xB1HpjBwHoTURYfcMd5r96BTVG6yaUBWnAVCMeeD6yTG9a1eVGNhG14Hk\n' + + 'ZAEjgLiNB7RRbEG5JZ/XV7W/vODh09WCst2y9SLKsdgeAaNCMEAwDwYDVR0TAQH/\n' + + 'BAUwAwEB/zAdBgNVHQ4EFgQUoE0qZHmDCDB+Bnm8GUa/evpfPwgwDgYDVR0PAQH/\n' + + 'BAQDAgGGMAoGCCqGSM49BAMDA2kAMGYCMQCnil5MMwhY3qoXv0xvcKZGxGPaBV15\n' + + '0CCssCKn0oVtdJQfJQ3Jrf3RSaEyijXIJsoCMQC35iJi4cWoNX3N/qfgnHohW52O\n' + + 'B5dg0DYMqy5cNZ40+UcAanRMyqNQ6P7fy3umGco=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICtzCCAj2gAwIBAgIQPXnDTPegvJrI98qz8WxrMjAKBggqhkjOPQQDAzCBmzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' + + 'b24gUkRTIEJldGEgdXMtZWFzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIxMDUxODIxNDAxMloYDzIxMjEwNTE4MjI0MDEyWjCBmzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' + + 'b24gUkRTIEJldGEgdXMtZWFzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEI0sR7gwutK5AB46hM761\n' + + 'gcLTGBIYlURSEoM1jcBwy56CL+3CJKZwLLyJ7qoOKfWbu5GsVLUTWS8MV6Nw33cx\n' + + '2KQD2svb694wi+Px2f4n9+XHkEFQw8BbiodDD7RZA70fo0IwQDAPBgNVHRMBAf8E\n' + + 'BTADAQH/MB0GA1UdDgQWBBTQSioOvnVLEMXwNSDg+zgln/vAkjAOBgNVHQ8BAf8E\n' + + 'BAMCAYYwCgYIKoZIzj0EAwMDaAAwZQIxAMwu1hqm5Bc98uE/E0B5iMYbBQ4kpMxO\n' + + 'tP8FTfz5UR37HUn26nXE0puj6S/Ffj4oJgIwXI7s2c26tFQeqzq6u3lrNJHp5jC9\n' + + 'Uxlo/hEJOLoDj5jnpxo8dMAtCNoQPaHdfL0P\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICrjCCAjWgAwIBAgIQGKVv+5VuzEZEBzJ+bVfx2zAKBggqhkjOPQQDAzCBlzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' + + 'b24gUkRTIGFwLXNvdXRoLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwIBcNMjEwNTE5MTc1MDU5WhgPMjEyMTA1MTkxODUwNTlaMIGXMQswCQYD\n' + + 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' + + 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\n' + + 'RFMgYXAtc291dGgtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\n' + + 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABMqdLJ0tZF/DGFZTKZDrGRJZID8ivC2I\n' + + 'JRCYTWweZKCKSCAzoiuGGHzJhr5RlLHQf/QgmFcgXsdmO2n3CggzhA4tOD9Ip7Lk\n' + + 'P05eHd2UPInyPCHRgmGjGb0Z+RdQ6zkitKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\n' + + 'BgNVHQ4EFgQUC1yhRgVqU5bR8cGzOUCIxRpl4EYwDgYDVR0PAQH/BAQDAgGGMAoG\n' + + 'CCqGSM49BAMDA2cAMGQCMG0c/zLGECRPzGKJvYCkpFTCUvdP4J74YP0v/dPvKojL\n' + + 't/BrR1Tg4xlfhaib7hPc7wIwFvgqHes20CubQnZmswbTKLUrgSUW4/lcKFpouFd2\n' + + 't2/ewfi/0VhkeUW+IiHhOMdU\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIGCTCCA/GgAwIBAgIRAOXxJuyXVkbfhZCkS/dOpfEwDQYJKoZIhvcNAQEMBQAw\n' + + 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' + + 'QW1hem9uIFJEUyBhcC1ub3J0aGVhc3QtMSBSb290IENBIFJTQTQwOTYgRzExEDAO\n' + + 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTI1MjE1OTEwWhgPMjEyMTA1MjUyMjU5MTBa\n' + + 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' + + 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' + + 'LEFtYXpvbiBSRFMgYXAtbm9ydGhlYXN0LTEgUm9vdCBDQSBSU0E0MDk2IEcxMRAw\n' + + 'DgYDVQQHDAdTZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA\n' + + 'xiP4RDYm4tIS12hGgn1csfO8onQDmK5SZDswUpl0HIKXOUVVWkHNlINkVxbdqpqH\n' + + 'FhbyZmNN6F/EWopotMDKe1B+NLrjNQf4zefv2vyKvPHJXhxoKmfyuTd5Wk8k1F7I\n' + + 'lNwLQzznB+ElhrLIDJl9Ro8t31YBBNFRGAGEnxyACFGcdkjlsa52UwfYrwreEg2l\n' + + 'gW5AzqHgjFfj9QRLydeU/n4bHm0F1adMsV7P3rVwilcUlqsENDwXnWyPEyv3sw6F\n' + + 'wNemLEs1129mB77fwvySb+lLNGsnzr8w4wdioZ74co+T9z2ca+eUiP+EQccVw1Is\n' + + 'D4Fh57IjPa6Wuc4mwiUYKkKY63+38aCfEWb0Qoi+zW+mE9nek6MOQ914cN12u5LX\n' + + 'dBoYopphRO5YmubSN4xcBy405nIdSdbrAVWwxXnVVyjqjknmNeqQsPZaxAhdoKhV\n' + + 'AqxNr8AUAdOAO6Sz3MslmcLlDXFihrEEOeUbpg/m1mSUUHGbu966ajTG1FuEHHwS\n' + + '7WB52yxoJo/tHvt9nAWnh3uH5BHmS8zn6s6CGweWKbX5yICnZ1QFR1e4pogxX39v\n' + + 'XD6YcNOO+Vn+HY4nXmjgSYVC7l+eeP8eduMg1xJujzjrbmrXU+d+cBObgdTOAlpa\n' + + 'JFHaGwYw1osAwPCo9cZ2f04yitBfj9aPFia8ASKldakCAwEAAaNCMEAwDwYDVR0T\n' + + 'AQH/BAUwAwEB/zAdBgNVHQ4EFgQUqKS+ltlior0SyZKYAkJ/efv55towDgYDVR0P\n' + + 'AQH/BAQDAgGGMA0GCSqGSIb3DQEBDAUAA4ICAQAdElvp8bW4B+Cv+1WSN87dg6TN\n' + + 'wGyIjJ14/QYURgyrZiYpUmZpj+/pJmprSWXu4KNyqHftmaidu7cdjL5nCAvAfnY5\n' + + '/6eDDbX4j8Gt9fb/6H9y0O0dn3mUPSEKG0crR+JRFAtPhn/2FNvst2P82yguWLv0\n' + + 'pHjHVUVcq+HqDMtUIJsTPYjSh9Iy77Q6TOZKln9dyDOWJpCSkiUWQtMAKbCSlvzd\n' + + 'zTs/ahqpT+zLfGR1SR+T3snZHgQnbnemmz/XtlKl52NxccARwfcEEKaCRQyGq/pR\n' + + '0PVZasyJS9JY4JfQs4YOdeOt4UMZ8BmW1+BQWGSkkb0QIRl8CszoKofucAlqdPcO\n' + + 'IT/ZaMVhI580LFGWiQIizWFskX6lqbCyHqJB3LDl8gJISB5vNTHOHpvpMOMs5PYt\n' + + 'cRl5Mrksx5MKMqG7y5R734nMlZxQIHjL5FOoOxTBp9KeWIL/Ib89T2QDaLw1SQ+w\n' + + 'ihqWBJ4ZdrIMWYpP3WqM+MXWk7WAem+xsFJdR+MDgOOuobVQTy5dGBlPks/6gpjm\n' + + 'rO9TjfQ36ppJ3b7LdKUPeRfnYmlR5RU4oyYJ//uLbClI443RZAgxaCXX/nyc12lr\n' + + 'eVLUMNF2abLX4/VF63m2/Z9ACgMRfqGshPssn1NN33OonrotQoj4S3N9ZrjvzKt8\n' + + 'iHcaqd60QKpfiH2A3A==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICuDCCAj2gAwIBAgIQPaVGRuu86nh/ylZVCLB0MzAKBggqhkjOPQQDAzCBmzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' + + 'b24gUkRTIGFwLW5vcnRoZWFzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIxMDUyNTIyMDMxNloYDzIxMjEwNTI1MjMwMzE2WjCBmzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' + + 'b24gUkRTIGFwLW5vcnRoZWFzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEexNURoB9KE93MEtEAlJG\n' + + 'obz4LS/pD2hc8Gczix1WhVvpJ8bN5zCDXaKdnDMCebetyRQsmQ2LYlfmCwpZwSDu\n' + + '0zowB11Pt3I5Avu2EEcuKTlKIDMBeZ1WWuOd3Tf7MEAMo0IwQDAPBgNVHRMBAf8E\n' + + 'BTADAQH/MB0GA1UdDgQWBBSaYbZPBvFLikSAjpa8mRJvyArMxzAOBgNVHQ8BAf8E\n' + + 'BAMCAYYwCgYIKoZIzj0EAwMDaQAwZgIxAOEJkuh3Zjb7Ih/zuNRd1RBqmIYcnyw0\n' + + 'nwUZczKXry+9XebYj3VQxSRNadrarPWVqgIxAMg1dyGoDAYjY/L/9YElyMnvHltO\n' + + 'PwpJShmqHvCLc/mXMgjjYb/akK7yGthvW6j/uQ==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIGCDCCA/CgAwIBAgIQChu3v5W1Doil3v6pgRIcVzANBgkqhkiG9w0BAQwFADCB\n' + + 'nDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTUwMwYDVQQDDCxB\n' + + 'bWF6b24gUkRTIEJldGEgdXMtZWFzdC0xIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4G\n' + + 'A1UEBwwHU2VhdHRsZTAgFw0yMTA1MTgyMTM0MTVaGA8yMTIxMDUxODIyMzQxNVow\n' + + 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' + + 'QW1hem9uIFJEUyBCZXRhIHVzLWVhc3QtMSBSb290IENBIFJTQTQwOTYgRzExEDAO\n' + + 'BgNVBAcMB1NlYXR0bGUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC1\n' + + 'FUGQ5tf3OwpDR6hGBxhUcrkwKZhaXP+1St1lSOQvjG8wXT3RkKzRGMvb7Ee0kzqI\n' + + 'mzKKe4ASIhtV3UUWdlNmP0EA3XKnif6N79MismTeGkDj75Yzp5A6tSvqByCgxIjK\n' + + 'JqpJrch3Dszoyn8+XhwDxMZtkUa5nQVdJgPzJ6ltsQ8E4SWLyLtTu0S63jJDkqYY\n' + + 'S7cQblk7y7fel+Vn+LS5dGTdRRhMvSzEnb6mkVBaVzRyVX90FNUED06e8q+gU8Ob\n' + + 'htvQlf9/kRzHwRAdls2YBhH40ZeyhpUC7vdtPwlmIyvW5CZ/QiG0yglixnL6xahL\n' + + 'pbmTuTSA/Oqz4UGQZv2WzHe1lD2gRHhtFX2poQZeNQX8wO9IcUhrH5XurW/G9Xwl\n' + + 'Sat9CMPERQn4KC3HSkat4ir2xaEUrjfg6c4XsGyh2Pk/LZ0gLKum0dyWYpWP4JmM\n' + + 'RQNjrInXPbMhzQObozCyFT7jYegS/3cppdyy+K1K7434wzQGLU1gYXDKFnXwkX8R\n' + + 'bRKgx2pHNbH5lUddjnNt75+e8m83ygSq/ZNBUz2Ur6W2s0pl6aBjwaDES4VfWYlI\n' + + 'jokcmrGvJNDfQWygb1k00eF2bzNeNCHwgWsuo3HSxVgc/WGsbcGrTlDKfz+g3ich\n' + + 'bXUeUidPhRiv5UQIVCLIHpHuin3bj9lQO/0t6p+tAQIDAQABo0IwQDAPBgNVHRMB\n' + + 'Af8EBTADAQH/MB0GA1UdDgQWBBSFmMBgm5IsRv3hLrvDPIhcPweXYTAOBgNVHQ8B\n' + + 'Af8EBAMCAYYwDQYJKoZIhvcNAQEMBQADggIBAAa2EuozymOsQDJlEi7TqnyA2OhT\n' + + 'GXPfYqCyMJVkfrqNgcnsNpCAiNEiZbb+8sIPXnT8Ay8hrwJYEObJ5b7MHXpLuyft\n' + + 'z0Pu1oFLKnQxKjNxrIsCvaB4CRRdYjm1q7EqGhMGv76se9stOxkOqO9it31w/LoU\n' + + 'ENDk7GLsSqsV1OzYLhaH8t+MaNP6rZTSNuPrHwbV3CtBFl2TAZ7iKgKOhdFz1Hh9\n' + + 'Pez0lG+oKi4mHZ7ajov6PD0W7njn5KqzCAkJR6OYmlNVPjir+c/vUtEs0j+owsMl\n' + + 'g7KE5g4ZpTRShyh5BjCFRK2tv0tkqafzNtxrKC5XNpEkqqVTCnLcKG+OplIEadtr\n' + + 'C7UWf4HyhCiR+xIyxFyR05p3uY/QQU/5uza7GlK0J+U1sBUytx7BZ+Fo8KQfPPqV\n' + + 'CqDCaYUksoJcnJE/KeoksyqNQys7sDGJhkd0NeUGDrFLKHSLhIwAMbEWnqGxvhli\n' + + 'E7sP2E5rI/I9Y9zTbLIiI8pfeZlFF8DBdoP/Hzg8pqsiE/yiXSFTKByDwKzGwNqz\n' + + 'F0VoFdIZcIbLdDbzlQitgGpJtvEL7HseB0WH7B2PMMD8KPJlYvPveO3/6OLzCsav\n' + + '+CAkvk47NQViKMsUTKOA0JDCW+u981YRozxa3K081snhSiSe83zIPBz1ikldXxO9\n' + + '6YYLNPRrj3mi9T/f\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICrjCCAjSgAwIBAgIRAMkvdFnVDb0mWWFiXqnKH68wCgYIKoZIzj0EAwMwgZYx\n' + + 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' + + 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1h\n' + + 'em9uIFJEUyB1cy13ZXN0LTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwIBcNMjEwNTE5MTkxMzI0WhgPMjEyMTA1MTkyMDEzMjRaMIGWMQswCQYD\n' + + 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' + + 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExLzAtBgNVBAMMJkFtYXpvbiBS\n' + + 'RFMgdXMtd2VzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdTZWF0dGxl\n' + + 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEy86DB+9th/0A5VcWqMSWDxIUblWTt/R0\n' + + 'ao6Z2l3vf2YDF2wt1A2NIOGpfQ5+WAOJO/IQmnV9LhYo+kacB8sOnXdQa6biZZkR\n' + + 'IyouUfikVQAKWEJnh1Cuo5YMM4E2sUt5o0IwQDAPBgNVHRMBAf8EBTADAQH/MB0G\n' + + 'A1UdDgQWBBQ8u3OnecANmG8OoT7KLWDuFzZwBTAOBgNVHQ8BAf8EBAMCAYYwCgYI\n' + + 'KoZIzj0EAwMDaAAwZQIwQ817qkb7mWJFnieRAN+m9W3E0FLVKaV3zC5aYJUk2fcZ\n' + + 'TaUx3oLp3jPLGvY5+wgeAjEA6wAicAki4ZiDfxvAIuYiIe1OS/7H5RA++R8BH6qG\n' + + 'iRzUBM/FItFpnkus7u/eTkvo\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICrzCCAjWgAwIBAgIQS/+Ryfgb/IOVEa1pWoe8oTAKBggqhkjOPQQDAzCBlzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' + + 'b24gUkRTIGFwLXNvdXRoLTIgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwIBcNMjIwNjA2MjE1NDQyWhgPMjEyMjA2MDYyMjU0NDJaMIGXMQswCQYD\n' + + 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' + + 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\n' + + 'RFMgYXAtc291dGgtMiBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\n' + + 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDsX6fhdUWBQpYTdseBD/P3s96Dtw2Iw\n' + + 'OrXKNToCnmX5nMkUGdRn9qKNiz1pw3EPzaPxShbYwQ7LYP09ENK/JN4QQjxMihxC\n' + + 'jLFxS85nhBQQQGRCWikDAe38mD8fSvREQKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\n' + + 'BgNVHQ4EFgQUIh1xZiseQYFjPYKJmGbruAgRH+AwDgYDVR0PAQH/BAQDAgGGMAoG\n' + + 'CCqGSM49BAMDA2gAMGUCMFudS4zLy+UUGrtgNLtRMcu/DZ9BUzV4NdHxo0bkG44O\n' + + 'thnjl4+wTKI6VbyAbj2rkgIxAOHps8NMITU5DpyiMnKTxV8ubb/WGHrLl0BjB8Lw\n' + + 'ETVJk5DNuZvsIIcm7ykk6iL4Tw==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIGBDCCA+ygAwIBAgIQDcEmNIAVrDpUw5cH5ynutDANBgkqhkiG9w0BAQwFADCB\n' + + 'mjELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTMwMQYDVQQDDCpB\n' + + 'bWF6b24gUkRTIG1lLWNlbnRyYWwtMSBSb290IENBIFJTQTQwOTYgRzExEDAOBgNV\n' + + 'BAcMB1NlYXR0bGUwIBcNMjIwNTA3MDA0MDIzWhgPMjEyMjA1MDcwMTQwMjNaMIGa\n' + + 'MQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5j\n' + + 'LjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMzAxBgNVBAMMKkFt\n' + + 'YXpvbiBSRFMgbWUtY2VudHJhbC0xIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UE\n' + + 'BwwHU2VhdHRsZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKvADk8t\n' + + 'Fl9bFlU5sajLPPDSOUpPAkKs6iPlz+27o1GJC88THcOvf3x0nVAcu9WYe9Qaas+4\n' + + 'j4a0vv51agqyODRD/SNi2HnqW7DbtLPAm6KBHe4twl28ItB/JD5g7u1oPAHFoXMS\n' + + 'cH1CZEAs5RtlZGzJhcBXLFsHNv/7+SCLyZ7+2XFh9OrtgU4wMzkHoRNndhfwV5bu\n' + + '17bPTwuH+VxH37zXf1mQ/KjhuJos0C9dL0FpjYBAuyZTAWhZKs8dpSe4DI544z4w\n' + + 'gkwUB4bC2nA1TBzsywEAHyNuZ/xRjNpWvx0ToWAA2iFJqC3VO3iKcnBplMvaUuMt\n' + + 'jwzVSNBnKcoabXCZL2XDLt4YTZR8FSwz05IvsmwcPB7uNTBXq3T9sjejW8QQK3vT\n' + + 'tzyfLq4jKmQE7PoS6cqYm+hEPm2hDaC/WP9bp3FdEJxZlPH26fq1b7BWYWhQ9pBA\n' + + 'Nv9zTnzdR1xohTyOJBUFQ81ybEzabqXqVXUIANqIOaNcTB09/sLJ7+zuMhp3mwBu\n' + + 'LtjfJv8PLuT1r63bU3seROhKA98b5KfzjvbvPSg3vws78JQyoYGbqNyDfyjVjg3U\n' + + 'v//AdVuPie6PNtdrW3upZY4Qti5IjP9e3kimaJ+KAtTgMRG56W0WxD3SP7+YGGbG\n' + + 'KhntDOkKsN39hLpn9UOafTIqFu7kIaueEy/NAgMBAAGjQjBAMA8GA1UdEwEB/wQF\n' + + 'MAMBAf8wHQYDVR0OBBYEFHAems86dTwdZbLe8AaPy3kfIUVoMA4GA1UdDwEB/wQE\n' + + 'AwIBhjANBgkqhkiG9w0BAQwFAAOCAgEAOBHpp0ICx81kmeoBcZTrMdJs2gnhcd85\n' + + 'FoSCjXx9H5XE5rmN/lQcxxOgj8hr3uPuLdLHu+i6THAyzjrl2NA1FWiqpfeECGmy\n' + + '0jm7iZsYORgGQYp/VKnDrwnKNSqlZvOuRr0kfUexwFlr34Y4VmupvEOK/RdGsd3S\n' + + '+3hiemcHse9ST/sJLHx962AWMkN86UHPscJEe4+eT3f2Wyzg6La8ARwdWZSNS+WH\n' + + 'ZfybrncMmuiXuUdHv9XspPsqhKgtHhcYeXOGUtrwQPLe3+VJZ0LVxhlTWr9951GZ\n' + + 'GfmWwTV/9VsyKVaCFIXeQ6L+gjcKyEzYF8wpMtQlSc7FFqwgC4bKxvMBSaRy88Nr\n' + + 'lV2+tJD/fr8zGUeBK44Emon0HKDBWGX+/Hq1ZIv0Da0S+j6LbA4fusWxtGfuGha+\n' + + 'luhHgVInCpALIOamiBEdGhILkoTtx7JrYppt3/Raqg9gUNCOOYlCvGhqX7DXeEfL\n' + + 'DGabooiY2FNWot6h04JE9nqGj5QqT8D6t/TL1nzxhRPzbcSDIHUd/b5R+a0bAA+7\n' + + 'YTU6JqzEVCWKEIEynYmqikgLMGB/OzWsgyEL6822QW6hJAQ78XpbNeCzrICF4+GC\n' + + '7KShLnwuWoWpAb26268lvOEvCTFM47VC6jNQl97md+2SA9Ma81C9wflid2M83Wle\n' + + 'cuLMVcQZceE=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEADCCAuigAwIBAgIQAhAteLRCvizAElaWORFU2zANBgkqhkiG9w0BAQsFADCB\n' + + 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\n' + + 'bWF6b24gUkRTIG1lLXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIxMDUyMDE3MDkxNloYDzIwNjEwNTIwMTgwOTE2WjCBmDEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\n' + + 'b24gUkRTIG1lLXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQHDAdT\n' + + 'ZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA+qg7JAcOVKjh\n' + + 'N83SACnBFZPyB63EusfDr/0V9ZdL8lKcmZX9sv/CqoBo3N0EvBqHQqUUX6JvFb7F\n' + + 'XrMUZ740kr28gSRALfXTFgNODjXeDsCtEkKRTkac/UM8xXHn+hR7UFRPHS3e0GzI\n' + + 'iLiwQWDkr0Op74W8aM0CfaVKvh2bp4BI1jJbdDnQ9OKXpOxNHGUf0ZGb7TkNPkgI\n' + + 'b2CBAc8J5o3H9lfw4uiyvl6Fz5JoP+A+zPELAioYBXDrbE7wJeqQDJrETWqR9VEK\n' + + 'BXURCkVnHeaJy123MpAX2ozf4pqk0V0LOEOZRS29I+USF5DcWr7QIXR/w2I8ws1Q\n' + + '7ys+qbE+kQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQFJ16n\n' + + '1EcCMOIhoZs/F9sR+Jy++zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\n' + + 'ggEBAOc5nXbT3XTDEZsxX2iD15YrQvmL5m13B3ImZWpx/pqmObsgx3/dg75rF2nQ\n' + + 'qS+Vl+f/HLh516pj2BPP/yWCq12TRYigGav8UH0qdT3CAClYy2o+zAzUJHm84oiB\n' + + 'ud+6pFVGkbqpsY+QMpJUbZWu52KViBpJMYsUEy+9cnPSFRVuRAHjYynSiLk2ZEjb\n' + + 'Wkdc4x0nOZR5tP0FgrX0Ve2KcjFwVQJVZLgOUqmFYQ/G0TIIGTNh9tcmR7yp+xJR\n' + + 'A2tbPV2Z6m9Yxx4E8lLEPNuoeouJ/GR4CkMEmF8cLwM310t174o3lKKUXJ4Vs2HO\n' + + 'Wj2uN6R9oI+jGLMSswTzCNV1vgc=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICuDCCAj6gAwIBAgIRAOocLeZWjYkG/EbHmscuy8gwCgYIKoZIzj0EAwMwgZsx\n' + + 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' + + 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE0MDIGA1UEAwwrQW1h\n' + + 'em9uIFJEUyBhcC1zb3V0aGVhc3QtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UE\n' + + 'BwwHU2VhdHRsZTAgFw0yMTA1MjEyMTUwMDFaGA8yMTIxMDUyMTIyNTAwMVowgZsx\n' + + 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' + + 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE0MDIGA1UEAwwrQW1h\n' + + 'em9uIFJEUyBhcC1zb3V0aGVhc3QtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UE\n' + + 'BwwHU2VhdHRsZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABCEr3jq1KtRncnZfK5cq\n' + + 'btY0nW6ZG3FMbh7XwBIR6Ca0f8llGZ4vJEC1pXgiM/4Dh045B9ZIzNrR54rYOIfa\n' + + '2NcYZ7mk06DjIQML64hbAxbQzOAuNzLPx268MrlL2uW2XaNCMEAwDwYDVR0TAQH/\n' + + 'BAUwAwEB/zAdBgNVHQ4EFgQUln75pChychwN4RfHl+tOinMrfVowDgYDVR0PAQH/\n' + + 'BAQDAgGGMAoGCCqGSM49BAMDA2gAMGUCMGiyPINRU1mwZ4Crw01vpuPvxZxb2IOr\n' + + 'yX3RNlOIu4We1H+5dQk5tIvH8KGYFbWEpAIxAO9NZ6/j9osMhLgZ0yj0WVjb+uZx\n' + + 'YlZR9fyFisY/jNfX7QhSk+nrc3SFLRUNtpXrng==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEBTCCAu2gAwIBAgIRAKiaRZatN8eiz9p0s0lu0rQwDQYJKoZIhvcNAQELBQAw\n' + + 'gZoxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEzMDEGA1UEAwwq\n' + + 'QW1hem9uIFJEUyBjYS1jZW50cmFsLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYD\n' + + 'VQQHDAdTZWF0dGxlMCAXDTIxMDUyMTIyMDIzNVoYDzIwNjEwNTIxMjMwMjM1WjCB\n' + + 'mjELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTMwMQYDVQQDDCpB\n' + + 'bWF6b24gUkRTIGNhLWNlbnRyYWwtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNV\n' + + 'BAcMB1NlYXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCygVMf\n' + + 'qB865IR9qYRBRFHn4eAqGJOCFx+UbraQZmjr/mnRqSkY+nhbM7Pn/DWOrRnxoh+w\n' + + 'q5F9ZxdZ5D5T1v6kljVwxyfFgHItyyyIL0YS7e2h7cRRscCM+75kMedAP7icb4YN\n' + + 'LfWBqfKHbHIOqvvQK8T6+Emu/QlG2B5LvuErrop9K0KinhITekpVIO4HCN61cuOe\n' + + 'CADBKF/5uUJHwS9pWw3uUbpGUwsLBuhJzCY/OpJlDqC8Y9aToi2Ivl5u3/Q/sKjr\n' + + '6AZb9lx4q3J2z7tJDrm5MHYwV74elGSXoeoG8nODUqjgklIWAPrt6lQ3WJpO2kug\n' + + '8RhCdSbWkcXHfX95AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE\n' + + 'FOIxhqTPkKVqKBZvMWtKewKWDvDBMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0B\n' + + 'AQsFAAOCAQEAqoItII89lOl4TKvg0I1EinxafZLXIheLcdGCxpjRxlZ9QMQUN3yb\n' + + 'y/8uFKBL0otbQgJEoGhxm4h0tp54g28M6TN1U0332dwkjYxUNwvzrMaV5Na55I2Z\n' + + '1hq4GB3NMXW+PvdtsgVOZbEN+zOyOZ5MvJHEQVkT3YRnf6avsdntltcRzHJ16pJc\n' + + 'Y8rR7yWwPXh1lPaPkxddrCtwayyGxNbNmRybjR48uHRhwu7v2WuAMdChL8H8bp89\n' + + 'TQLMrMHgSbZfee9hKhO4Zebelf1/cslRSrhkG0ESq6G5MUINj6lMg2g6F0F7Xz2v\n' + + 'ncD/vuRN5P+vT8th/oZ0Q2Gc68Pun0cn/g==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIID/zCCAuegAwIBAgIRAJYlnmkGRj4ju/2jBQsnXJYwDQYJKoZIhvcNAQELBQAw\n' + + 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\n' + + 'QW1hem9uIFJEUyB1cy1lYXN0LTIgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIxMDUyMTIzMDQ0NFoYDzIwNjEwNTIyMDAwNDQ0WjCBlzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' + + 'b24gUkRTIHVzLWVhc3QtMiBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC74V3eigv+pCj5\n' + + 'nqDBqplY0Jp16pTeNB06IKbzb4MOTvNde6QjsZxrE1xUmprT8LxQqN9tI3aDYEYk\n' + + 'b9v4F99WtQVgCv3Y34tYKX9NwWQgwS1vQwnIR8zOFBYqsAsHEkeJuSqAB12AYUSd\n' + + 'Zv2RVFjiFmYJho2X30IrSLQfS/IE3KV7fCyMMm154+/K1Z2IJlcissydEAwgsUHw\n' + + 'edrE6CxJVkkJ3EvIgG4ugK/suxd8eEMztaQYJwSdN8TdfT59LFuSPl7zmF3fIBdJ\n' + + '//WexcQmGabaJ7Xnx+6o2HTfkP8Zzzzaq8fvjAcvA7gyFH5EP26G2ZqMG+0y4pTx\n' + + 'SPVTrQEXAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFIWWuNEF\n' + + 'sUMOC82XlfJeqazzrkPDMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC\n' + + 'AQEAgClmxcJaQTGpEZmjElL8G2Zc8lGc+ylGjiNlSIw8X25/bcLRptbDA90nuP+q\n' + + 'zXAMhEf0ccbdpwxG/P5a8JipmHgqQLHfpkvaXx+0CuP++3k+chAJ3Gk5XtY587jX\n' + + '+MJfrPgjFt7vmMaKmynndf+NaIJAYczjhJj6xjPWmGrjM3MlTa9XesmelMwP3jep\n' + + 'bApIWAvCYVjGndbK9byyMq1nyj0TUzB8oJZQooaR3MMjHTmADuVBylWzkRMxbKPl\n' + + '4Nlsk4Ef1JvIWBCzsMt+X17nuKfEatRfp3c9tbpGlAE/DSP0W2/Lnayxr4RpE9ds\n' + + 'ICF35uSis/7ZlsftODUe8wtpkQ==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + '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\n' + + 'Pqj2\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIGATCCA+mgAwIBAgIRAI/U4z6+GF8/znpHM8Dq8G0wDQYJKoZIhvcNAQEMBQAw\n' + + 'gZgxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwo\n' + + 'QW1hem9uIFJEUyBhcC1zb3V0aC0yIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UE\n' + + 'BwwHU2VhdHRsZTAgFw0yMjA2MDYyMTQ4MThaGA8yMTIyMDYwNjIyNDgxOFowgZgx\n' + + 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' + + 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwoQW1h\n' + + 'em9uIFJEUyBhcC1zb3V0aC0yIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UEBwwH\n' + + 'U2VhdHRsZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK5WqMvyq888\n' + + '3uuOtEj1FcP6iZhqO5kJurdJF59Otp2WCg+zv6I+QwaAspEWHQsKD405XfFsTGKV\n' + + 'SKTCwoMxwBniuChSmyhlagQGKSnRY9+znOWq0v7hgmJRwp6FqclTbubmr+K6lzPy\n' + + 'hs86mEp68O5TcOTYWUlPZDqfKwfNTbtCl5YDRr8Gxb5buHmkp6gUSgDkRsXiZ5VV\n' + + 'b3GBmXRqbnwo5ZRNAzQeM6ylXCn4jKs310lQGUrFbrJqlyxUdfxzqdlaIRn2X+HY\n' + + 'xRSYbHox3LVNPpJxYSBRvpQVFSy9xbX8d1v6OM8+xluB31cbLBtm08KqPFuqx+cO\n' + + 'I2H5F0CYqYzhyOSKJsiOEJT6/uH4ewryskZzncx9ae62SC+bB5n3aJLmOSTkKLFY\n' + + 'YS5IsmDT2m3iMgzsJNUKVoCx2zihAzgBanFFBsG+Xmoq0aKseZUI6vd2qpd5tUST\n' + + '/wS1sNk0Ph7teWB2ACgbFE6etnJ6stwjHFZOj/iTYhlnR2zDRU8akunFdGb6CB4/\n' + + 'hMxGJxaqXSJeGtHm7FpadlUTf+2ESbYcVW+ui/F8sdBJseQdKZf3VdZZMgM0bcaX\n' + + 'NE47cauDTy72WdU9YJX/YXKYMLDE0iFHTnGpfVGsuWGPYhlwZ3dFIO07mWnCRM6X\n' + + 'u5JXRB1oy5n5HRluMsmpSN/R92MeBxKFAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB\n' + + 'Af8wHQYDVR0OBBYEFNtH0F0xfijSLHEyIkRGD9gW6NazMA4GA1UdDwEB/wQEAwIB\n' + + 'hjANBgkqhkiG9w0BAQwFAAOCAgEACo+5jFeY3ygxoDDzL3xpfe5M0U1WxdKk+az4\n' + + '/OfjZvkoma7WfChi3IIMtwtKLYC2/seKWA4KjlB3rlTsCVNPnK6D+gAnybcfTKk/\n' + + 'IRSPk92zagwQkSUWtAk80HpVfWJzpkSU16ejiajhedzOBRtg6BwsbSqLCDXb8hXr\n' + + 'eXWC1S9ZceGc+LcKRHewGWPu31JDhHE9bNcl9BFSAS0lYVZqxIRWxivZ+45j5uQv\n' + + 'wPrC8ggqsdU3K8quV6dblUQzzA8gKbXJpCzXZihkPrYpQHTH0szvXvgebh+CNUAG\n' + + 'rUxm8+yTS0NFI3U+RLbcLFVzSvjMOnEwCX0SPj5XZRYYXs5ajtQCoZhTUkkwpDV8\n' + + 'RxXk8qGKiXwUxDO8GRvmvM82IOiXz5w2jy/h7b7soyIgdYiUydMq4Ja4ogB/xPZa\n' + + 'gf4y0o+bremO15HFf1MkaU2UxPK5FFVUds05pKvpSIaQWbF5lw4LHHj4ZtVup7zF\n' + + 'CLjPWs4Hs/oUkxLMqQDw0FBwlqa4uot8ItT8uq5BFpz196ZZ+4WXw5PVzfSxZibI\n' + + 'C/nwcj0AS6qharXOs8yPnPFLPSZ7BbmWzFDgo3tpglRqo3LbSPsiZR+sLeivqydr\n' + + '0w4RK1btRda5Ws88uZMmW7+2aufposMKcbAdrApDEAVzHijbB/nolS5nsnFPHZoA\n' + + 'KDPtFEk=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICtzCCAj2gAwIBAgIQVZ5Y/KqjR4XLou8MCD5pOjAKBggqhkjOPQQDAzCBmzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' + + 'b24gUkRTIGFwLXNvdXRoZWFzdC00IFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIyMDUyNTE2NTgzM1oYDzIxMjIwNTI1MTc1ODMzWjCBmzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' + + 'b24gUkRTIGFwLXNvdXRoZWFzdC00IFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEbo473OmpD5vkckdJajXg\n' + + 'brhmNFyoSa0WCY1njuZC2zMFp3zP6rX4I1r3imrYnJd9pFH/aSiV/r6L5ACE5RPx\n' + + '4qdg5SQ7JJUaZc3DWsTOiOed7BCZSzM+KTYK/2QzDMApo0IwQDAPBgNVHRMBAf8E\n' + + 'BTADAQH/MB0GA1UdDgQWBBTmogc06+1knsej1ltKUOdWFvwgsjAOBgNVHQ8BAf8E\n' + + 'BAMCAYYwCgYIKoZIzj0EAwMDaAAwZQIxAIs7TlLMbGTWNXpGiKf9DxaM07d/iDHe\n' + + 'F/Vv/wyWSTGdobxBL6iArQNVXz0Gr4dvPAIwd0rsoa6R0x5mtvhdRPtM37FYrbHJ\n' + + 'pbV+OMusQqcSLseunLBoCHenvJW0QOCQ8EDY\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICvTCCAkOgAwIBAgIQCIY7E/bFvFN2lK9Kckb0dTAKBggqhkjOPQQDAzCBnjEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTcwNQYDVQQDDC5BbWF6\n' + + 'b24gUkRTIFByZXZpZXcgdXMtZWFzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYD\n' + + 'VQQHDAdTZWF0dGxlMCAXDTIxMDUxODIxMDUxMFoYDzIxMjEwNTE4MjIwNTEwWjCB\n' + + 'njELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTcwNQYDVQQDDC5B\n' + + 'bWF6b24gUkRTIFByZXZpZXcgdXMtZWFzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAw\n' + + 'DgYDVQQHDAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEMI0hzf1JCEOI\n' + + 'Eue4+DmcNnSs2i2UaJxHMrNGGfU7b42a7vwP53F7045ffHPBGP4jb9q02/bStZzd\n' + + 'VHqfcgqkSRI7beBKjD2mfz82hF/wJSITTgCLs+NRpS6zKMFOFHUNo0IwQDAPBgNV\n' + + 'HRMBAf8EBTADAQH/MB0GA1UdDgQWBBS8uF/6hk5mPLH4qaWv9NVZaMmyTjAOBgNV\n' + + 'HQ8BAf8EBAMCAYYwCgYIKoZIzj0EAwMDaAAwZQIxAO7Pu9wzLyM0X7Q08uLIL+vL\n' + + 'qaxe3UFuzFTWjM16MLJHbzLf1i9IDFKz+Q4hXCSiJwIwClMBsqT49BPUxVsJnjGr\n' + + 'EbyEk6aOOVfY1p2yQL649zh3M4h8okLnwf+bYIb1YpeU\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEADCCAuigAwIBAgIQY+JhwFEQTe36qyRlUlF8ozANBgkqhkiG9w0BAQsFADCB\n' + + 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\n' + + 'bWF6b24gUkRTIGFmLXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIxMDUxOTE5MjQxNloYDzIwNjEwNTE5MjAyNDE2WjCBmDEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\n' + + 'b24gUkRTIGFmLXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQHDAdT\n' + + 'ZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnIye77j6ev40\n' + + '8wRPyN2OdKFSUfI9jB20Or2RLO+RDoL43+USXdrze0Wv4HMRLqaen9BcmCfaKMp0\n' + + 'E4SFo47bXK/O17r6G8eyq1sqnHE+v288mWtYH9lAlSamNFRF6YwA7zncmE/iKL8J\n' + + '0vePHMHP/B6svw8LULZCk+nZk3tgxQn2+r0B4FOz+RmpkoVddfqqUPMbKUxhM2wf\n' + + 'fO7F6bJaUXDNMBPhCn/3ayKCjYr49ErmnpYV2ZVs1i34S+LFq39J7kyv6zAgbHv9\n' + + '+/MtRMoRB1CjpqW0jIOZkHBdYcd1o9p1zFn591Do1wPkmMsWdjIYj+6e7UXcHvOB\n' + + '2+ScIRAcnwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBQGtq2W\n' + + 'YSyMMxpdQ3IZvcGE+nyZqTAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\n' + + 'ggEBAEgoP3ixJsKSD5FN8dQ01RNHERl/IFbA7TRXfwC+L1yFocKnQh4Mp/msPRSV\n' + + '+OeHIvemPW/wtZDJzLTOFJ6eTolGekHK1GRTQ6ZqsWiU2fmiOP8ks4oSpI+tQ9Lw\n' + + 'VrfZqTiEcS5wEIqyfUAZZfKDo7W1xp+dQWzfczSBuZJZwI5iaha7+ILM0r8Ckden\n' + + 'TVTapc5pLSoO15v0ziRuQ2bT3V3nwu/U0MRK44z+VWOJdSiKxdnOYDs8hFNnKhfe\n' + + 'klbTZF7kW7WbiNYB43OaAQBJ6BALZsIskEaqfeZT8FD71uN928TcEQyBDXdZpRN+\n' + + 'iGQZDGhht0r0URGMDSs9waJtTfA=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIF/jCCA+agAwIBAgIQXY/dmS+72lZPranO2JM9jjANBgkqhkiG9w0BAQwFADCB\n' + + 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\n' + + 'bWF6b24gUkRTIGFwLWVhc3QtMSBSb290IENBIFJTQTQwOTYgRzExEDAOBgNVBAcM\n' + + 'B1NlYXR0bGUwIBcNMjEwNTI1MjEzNDUxWhgPMjEyMTA1MjUyMjM0NTFaMIGXMQsw\n' + + 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' + + 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\n' + + 'biBSRFMgYXAtZWFzdC0xIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UEBwwHU2Vh\n' + + 'dHRsZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMyW9kBJjD/hx8e8\n' + + 'b5E1sF42bp8TXsz1htSYE3Tl3T1Aq379DfEhB+xa/ASDZxt7/vwa81BkNo4M6HYq\n' + + 'okYIXeE7cu5SnSgjWXqcERhgPevtAwgmhdE3yREe8oz2DyOi2qKKZqah+1gpPaIQ\n' + + 'fK0uAqoeQlyHosye3KZZKkDHBatjBsQ5kf8lhuf7wVulEZVRHY2bP2X7N98PfbpL\n' + + 'QdH7mWXzDtJJ0LiwFwds47BrkgK1pkHx2p1mTo+HMkfX0P6Fq1atkVC2RHHtbB/X\n' + + 'iYyH7paaHBzviFrhr679zNqwXIOKlbf74w3mS11P76rFn9rS1BAH2Qm6eY5S/Fxe\n' + + 'HEKXm4kjPN63Zy0p3yE5EjPt54yPkvumOnT+RqDGJ2HCI9k8Ehcbve0ogfdRKNqQ\n' + + 'VHWYTy8V33ndQRHZlx/CuU1yN61TH4WSoMly1+q1ihTX9sApmlQ14B2pJi/9DnKW\n' + + 'cwECrPy1jAowC2UJ45RtC8UC05CbP9yrIy/7Noj8gQDiDOepm+6w1g6aNlWoiuQS\n' + + 'kyI6nzz1983GcnOHya73ga7otXo0Qfg9jPghlYiMomrgshlSLDHZG0Ib/3hb8cnR\n' + + '1OcN9FpzNmVK2Ll1SmTMLrIhuCkyNYX9O/bOknbcf706XeESxGduSkHEjIw/k1+2\n' + + 'Atteoq5dT6cwjnJ9hyhiueVlVkiDAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8w\n' + + 'HQYDVR0OBBYEFLUI+DD7RJs+0nRnjcwIVWzzYSsFMA4GA1UdDwEB/wQEAwIBhjAN\n' + + 'BgkqhkiG9w0BAQwFAAOCAgEAb1mcCHv4qMQetLGTBH9IxsB2YUUhr5dda0D2BcHr\n' + + 'UtDbfd0VQs4tux6h/6iKwHPx0Ew8fuuYj99WknG0ffgJfNc5/fMspxR/pc1jpdyU\n' + + '5zMQ+B9wi0lOZPO9uH7/pr+d2odcNEy8zAwqdv/ihsTwLmGP54is9fVbsgzNW1cm\n' + + 'HKAVL2t/Ope+3QnRiRilKCN1lzhav4HHdLlN401TcWRWKbEuxF/FgxSO2Hmx86pj\n' + + 'e726lweCTMmnq/cTsPOVY0WMjs0or3eHDVlyLgVeV5ldyN+ptg3Oit60T05SRa58\n' + + 'AJPTaVKIcGQ/gKkKZConpu7GDofT67P/ox0YNY57LRbhsx9r5UY4ROgz7WMQ1yoS\n' + + 'Y+19xizm+mBm2PyjMUbfwZUyCxsdKMwVdOq5/UmTmdms+TR8+m1uBHPOTQ2vKR0s\n' + + 'Pd/THSzPuu+d3dbzRyDSLQbHFFneG760CUlD/ZmzFlQjJ89/HmAmz8IyENq+Sjhx\n' + + 'Jgzy+FjVZb8aRUoYLlnffpUpej1n87Ynlr1GrvC4GsRpNpOHlwuf6WD4W0qUTsC/\n' + + 'C9JO+fBzUj/aWlJzNcLEW6pte1SB+EdkR2sZvWH+F88TxemeDrV0jKJw5R89CDf8\n' + + 'ZQNfkxJYjhns+YeV0moYjqQdc7tq4i04uggEQEtVzEhRLU5PE83nlh/K2NZZm8Kj\n' + + 'dIA=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIID/zCCAuegAwIBAgIRAPVSMfFitmM5PhmbaOFoGfUwDQYJKoZIhvcNAQELBQAw\n' + + 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\n' + + 'QW1hem9uIFJEUyB1cy1lYXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIxMDUyNTIyMzQ1N1oYDzIwNjEwNTI1MjMzNDU3WjCBlzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' + + 'b24gUkRTIHVzLWVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDu9H7TBeGoDzMr\n' + + 'dxN6H8COntJX4IR6dbyhnj5qMD4xl/IWvp50lt0VpmMd+z2PNZzx8RazeGC5IniV\n' + + '5nrLg0AKWRQ2A/lGGXbUrGXCSe09brMQCxWBSIYe1WZZ1iU1IJ/6Bp4D2YEHpXrW\n' + + 'bPkOq5x3YPcsoitgm1Xh8ygz6vb7PsvJvPbvRMnkDg5IqEThapPjmKb8ZJWyEFEE\n' + + 'QRrkCIRueB1EqQtJw0fvP4PKDlCJAKBEs/y049FoOqYpT3pRy0WKqPhWve+hScMd\n' + + '6obq8kxTFy1IHACjHc51nrGII5Bt76/MpTWhnJIJrCnq1/Uc3Qs8IVeb+sLaFC8K\n' + + 'DI69Sw6bAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE7PCopt\n' + + 'lyOgtXX0Y1lObBUxuKaCMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC\n' + + 'AQEAFj+bX8gLmMNefr5jRJfHjrL3iuZCjf7YEZgn89pS4z8408mjj9z6Q5D1H7yS\n' + + 'jNETVV8QaJip1qyhh5gRzRaArgGAYvi2/r0zPsy+Tgf7v1KGL5Lh8NT8iCEGGXwF\n' + + 'g3Ir+Nl3e+9XUp0eyyzBIjHtjLBm6yy8rGk9p6OtFDQnKF5OxwbAgip42CD75r/q\n' + + 'p421maEDDvvRFR4D+99JZxgAYDBGqRRceUoe16qDzbMvlz0A9paCZFclxeftAxv6\n' + + 'QlR5rItMz/XdzpBJUpYhdzM0gCzAzdQuVO5tjJxmXhkSMcDP+8Q+Uv6FA9k2VpUV\n' + + 'E/O5jgpqUJJ2Hc/5rs9VkAPXeA==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICrzCCAjWgAwIBAgIQW0yuFCle3uj4vWiGU0SaGzAKBggqhkjOPQQDAzCBlzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' + + 'b24gUkRTIGFmLXNvdXRoLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwIBcNMjEwNTE5MTkzNTE2WhgPMjEyMTA1MTkyMDM1MTZaMIGXMQswCQYD\n' + + 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' + + 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\n' + + 'RFMgYWYtc291dGgtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\n' + + 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABDPiKNZSaXs3Un/J/v+LTsFDANHpi7en\n' + + 'oL2qh0u0DoqNzEBTbBjvO23bLN3k599zh6CY3HKW0r2k1yaIdbWqt4upMCRCcUFi\n' + + 'I4iedAmubgzh56wJdoMZztjXZRwDthTkJKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\n' + + 'BgNVHQ4EFgQUWbYkcrvVSnAWPR5PJhIzppcAnZIwDgYDVR0PAQH/BAQDAgGGMAoG\n' + + 'CCqGSM49BAMDA2gAMGUCMCESGqpat93CjrSEjE7z+Hbvz0psZTHwqaxuiH64GKUm\n' + + 'mYynIiwpKHyBrzjKBmeDoQIxANGrjIo6/b8Jl6sdIZQI18V0pAyLfLiZjlHVOnhM\n' + + 'MOTVgr82ZuPoEHTX78MxeMnYlw==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIECTCCAvGgAwIBAgIRAIbsx8XOl0sgTNiCN4O+18QwDQYJKoZIhvcNAQELBQAw\n' + + 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' + + 'QW1hem9uIFJEUyBhcC1ub3J0aGVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAO\n' + + 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTI1MjE1NDU4WhgPMjA2MTA1MjUyMjU0NTha\n' + + 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' + + 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' + + 'LEFtYXpvbiBSRFMgYXAtbm9ydGhlYXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\n' + + 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n' + + 'tROxwXWCgn5R9gI/2Ivjzaxc0g95ysBjoJsnhPdJEHQb7w3y2kWrVWU3Y9fOitgb\n' + + 'CEsnEC3PrhRnzNVW0fPsK6kbvOeCmjvY30rdbxbc8h+bjXfGmIOgAkmoULEr6Hc7\n' + + 'G1Q/+tvv4lEwIs7bEaf+abSZxRJbZ0MBxhbHn7UHHDiMZYvzK+SV1MGCxx7JVhrm\n' + + 'xWu3GC1zZCsGDhB9YqY9eR6PmjbqA5wy8vqbC57dZZa1QVtWIQn3JaRXn+faIzHx\n' + + 'nLMN5CEWihsdmHBXhnRboXprE/OS4MFv1UrQF/XM/h5RBeCywpHePpC+Oe1T3LNC\n' + + 'iP8KzRFrjC1MX/WXJnmOVQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\n' + + 'DgQWBBS33XbXAUMs1znyZo4B0+B3D68WFTAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\n' + + 'hvcNAQELBQADggEBADuadd2EmlpueY2VlrIIPC30QkoA1EOSoCmZgN6124apkoY1\n' + + 'HiV4r+QNPljN4WP8gmcARnNkS7ZeR4fvWi8xPh5AxQCpiaBMw4gcbTMCuKDV68Pw\n' + + 'P2dZCTMspvR3CDfM35oXCufdtFnxyU6PAyINUqF/wyTHguO3owRFPz64+sk3r2pT\n' + + 'WHmJjG9E7V+KOh0s6REgD17Gqn6C5ijLchSrPUHB0wOIkeLJZndHxN/76h7+zhMt\n' + + 'fFeNxPWHY2MfpcaLjz4UREzZPSB2U9k+y3pW1omCIcl6MQU9itGx/LpQE+H3ZeX2\n' + + 'M2bdYd5L+ow+bdbGtsVKOuN+R9Dm17YpswF+vyQ=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + '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\n' + + 'Em4Hy3A=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + '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\n' + + 'jGKc3k6UNxpg\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + '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\n' + + '0Ws=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICtDCCAjqgAwIBAgIRAMyaTlVLN0ndGp4ffwKAfoMwCgYIKoZIzj0EAwMwgZkx\n' + + 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' + + 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEyMDAGA1UEAwwpQW1h\n' + + 'em9uIFJEUyBtZS1jZW50cmFsLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcM\n' + + 'B1NlYXR0bGUwIBcNMjIwNTA3MDA0NDM3WhgPMjEyMjA1MDcwMTQ0MzdaMIGZMQsw\n' + + 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' + + 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMjAwBgNVBAMMKUFtYXpv\n' + + 'biBSRFMgbWUtY2VudHJhbC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdT\n' + + 'ZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE19nCV1nsI6CohSor13+B25cr\n' + + 'zg+IHdi9Y3L7ziQnHWI6yjBazvnKD+oC71aRRlR8b5YXsYGUQxWzPLHN7EGPcSGv\n' + + 'bzA9SLG1KQYCJaQ0m9Eg/iGrwKWOgylbhVw0bCxoo0IwQDAPBgNVHRMBAf8EBTAD\n' + + 'AQH/MB0GA1UdDgQWBBS4KsknsJXM9+QPEkBdZxUPaLr11zAOBgNVHQ8BAf8EBAMC\n' + + 'AYYwCgYIKoZIzj0EAwMDaAAwZQIxAJaRgrYIEfXQMZQQDxMTYS0azpyWSseQooXo\n' + + 'L3nYq4OHGBgYyQ9gVjvRYWU85PXbfgIwdi82DtANQFkCu+j+BU0JBY/uRKPEeYzo\n' + + 'JG92igKIcXPqCoxIJ7lJbbzmuf73gQu5\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIGATCCA+mgAwIBAgIRAJwCobx0Os8F7ihbJngxrR8wDQYJKoZIhvcNAQEMBQAw\n' + + 'gZgxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwo\n' + + 'QW1hem9uIFJEUyBtZS1zb3V0aC0xIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UE\n' + + 'BwwHU2VhdHRsZTAgFw0yMTA1MjAxNzE1MzNaGA8yMTIxMDUyMDE4MTUzM1owgZgx\n' + + 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' + + 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTExMC8GA1UEAwwoQW1h\n' + + 'em9uIFJEUyBtZS1zb3V0aC0xIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UEBwwH\n' + + 'U2VhdHRsZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANukKwlm+ZaI\n' + + 'Y5MkWGbEVLApEyLmlrHLEg8PfiiEa9ts7jssQcin3bzEPdTqGr5jo91ONoZ3ccWq\n' + + 'xJgg1W3bLu5CAO2CqIOXTXHRyCO/u0Ch1FGgWB8xETPSi3UHt/Vn1ltdO6DYdbDU\n' + + 'mYgwzYrvLBdRCwxsb9o+BuYQHVFzUYonqk/y9ujz3gotzFq7r55UwDTA1ita3vb4\n' + + 'eDKjIb4b1M4Wr81M23WHonpje+9qkkrAkdQcHrkgvSCV046xsq/6NctzwCUUNsgF\n' + + '7Q1a8ut5qJEYpz5ta8vI1rqFqAMBqCbFjRYlmAoTTpFPOmzAVxV+YoqTrW5A16su\n' + + '/2SXlMYfJ/n/ad/QfBNPPAAQMpyOr2RCL/YiL/PFZPs7NxYjnZHNWxMLSPgFyI+/\n' + + 't2klnn5jR76KJK2qimmaXedB90EtFsMRUU1e4NxH9gDuyrihKPJ3aVnZ35mSipvR\n' + + '/1KB8t8gtFXp/VQaz2sg8+uxPMKB81O37fL4zz6Mg5K8+aq3ejBiyHucpFGnsnVB\n' + + '3kQWeD36ONkybngmgWoyPceuSWm1hQ0Z7VRAQX+KlxxSaHmSaIk1XxZu9h9riQHx\n' + + 'fMuev6KXjRn/CjCoUTn+7eFrt0dT5GryQEIZP+nA0oq0LKxogigHNZlwAT4flrqb\n' + + 'JUfZJrqgoce5HjZSXl10APbtPjJi0fW9AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB\n' + + 'Af8wHQYDVR0OBBYEFEfV+LztI29OVDRm0tqClP3NrmEWMA4GA1UdDwEB/wQEAwIB\n' + + 'hjANBgkqhkiG9w0BAQwFAAOCAgEAvSNe+0wuk53KhWlRlRf2x/97H2Q76X3anzF0\n' + + '5fOSVm022ldALzXMzqOfdnoKIhAu2oVKiHHKs7mMas+T6TL+Mkphx0CYEVxFE3PG\n' + + '061q3CqJU+wMm9W9xsB79oB2XG47r1fIEywZZ3GaRsatAbjcNOT8uBaATPQAfJFN\n' + + 'zjFe4XyN+rA4cFrYNvfHTeu5ftrYmvks7JlRaJgEGWsz+qXux7uvaEEVPqEumd2H\n' + + 'uYeaRNOZ2V23R009X5lbgBFx9tq5VDTnKhQiTQ2SeT0rc1W3Dz5ik6SbQQNP3nSR\n' + + '0Ywy7r/sZ3fcDyfFiqnrVY4Ympfvb4YW2PZ6OsQJbzH6xjdnTG2HtzEU30ngxdp1\n' + + 'WUEF4zt6rjJCp7QBUqXgdlHvJqYu6949qtWjEPiFN9uSsRV2i1YDjJqN52dLjAPn\n' + + 'AipJKo8x1PHTwUzuITqnB9BdP+5TlTl8biJfkEf/+08eWDTLlDHr2VrZLOLompTh\n' + + 'bS5OrhDmqA2Q+O+EWrTIhMflwwlCpR9QYM/Xwvlbad9H0FUHbJsCVNaru3wGOgWo\n' + + 'tt3dNSK9Lqnv/Ej9K9v6CRr36in4ylJKivhJ5B9E7ABHg7EpBJ1xi7O5eNDkNoJG\n' + + '+pFyphJq3AkBR2U4ni2tUaTAtSW2tks7IaiDV+UMtqZyGabT5ISQfWLLtLHSWn2F\n' + + 'Tspdjbg=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIECTCCAvGgAwIBAgIRAJZFh4s9aZGzKaTMLrSb4acwDQYJKoZIhvcNAQELBQAw\n' + + 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' + + 'QW1hem9uIFJEUyBCZXRhIHVzLWVhc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAO\n' + + 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTE4MjEyODQxWhgPMjA2MTA1MTgyMjI4NDFa\n' + + 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' + + 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' + + 'LEFtYXpvbiBSRFMgQmV0YSB1cy1lYXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAw\n' + + 'DgYDVQQHDAdTZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA\n' + + '17i2yoU6diep+WrqxIn2CrDEO2NdJVwWTSckx4WMZlLpkQDoymSmkNHjq9ADIApD\n' + + 'A31Cx+843apL7wub8QkFZD0Tk7/ThdHWJOzcAM3ov98QBPQfOC1W5zYIIRP2F+vQ\n' + + 'TRETHQnLcW3rLv0NMk5oQvIKpJoC9ett6aeVrzu+4cU4DZVWYlJUoC/ljWzCluau\n' + + '8blfW0Vwin6OB7s0HCG5/wijQWJBU5SrP/KAIPeQi1GqG5efbqAXDr/ple0Ipwyo\n' + + 'Xjjl73LenGUgqpANlC9EAT4i7FkJcllLPeK3NcOHjuUG0AccLv1lGsHAxZLgjk/x\n' + + 'z9ZcnVV9UFWZiyJTKxeKPwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud\n' + + 'DgQWBBRWyMuZUo4gxCR3Luf9/bd2AqZ7CjAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZI\n' + + 'hvcNAQELBQADggEBAIqN2DlIKlvDFPO0QUZQVFbsi/tLdYM98/vvzBpttlTGVMyD\n' + + 'gJuQeHVz+MnhGIwoCGOlGU3OOUoIlLAut0+WG74qYczn43oA2gbMd7HoD7oL/IGg\n' + + 'njorBwJVcuuLv2G//SqM3nxGcLRtkRnQ+lvqPxMz9+0fKFUn6QcIDuF0QSfthLs2\n' + + 'WSiGEPKO9c9RSXdRQ4pXA7c3hXng8P4A2ZmdciPne5Nu4I4qLDGZYRrRLRkNTrOi\n' + + 'TyS6r2HNGUfgF7eOSeKt3NWL+mNChcYj71/Vycf5edeczpUgfnWy9WbPrK1svKyl\n' + + 'aAs2xg+X6O8qB+Mnj2dNBzm+lZIS3sIlm+nO9sg=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICrjCCAjSgAwIBAgIRAPAlEk8VJPmEzVRRaWvTh2AwCgYIKoZIzj0EAwMwgZYx\n' + + 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' + + 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1h\n' + + 'em9uIFJEUyB1cy1lYXN0LTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwIBcNMjEwNTI1MjI0MTU1WhgPMjEyMTA1MjUyMzQxNTVaMIGWMQswCQYD\n' + + 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' + + 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExLzAtBgNVBAMMJkFtYXpvbiBS\n' + + 'RFMgdXMtZWFzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdTZWF0dGxl\n' + + 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEx5xjrup8II4HOJw15NTnS3H5yMrQGlbj\n' + + 'EDA5MMGnE9DmHp5dACIxmPXPMe/99nO7wNdl7G71OYPCgEvWm0FhdvVUeTb3LVnV\n' + + 'BnaXt32Ek7/oxGk1T+Df03C+W0vmuJ+wo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0G\n' + + 'A1UdDgQWBBTGXmqBWN/1tkSea4pNw0oHrjk2UDAOBgNVHQ8BAf8EBAMCAYYwCgYI\n' + + 'KoZIzj0EAwMDaAAwZQIxAIqqZWCSrIkZ7zsv/FygtAusW6yvlL935YAWYPVXU30m\n' + + 'jkMFLM+/RJ9GMvnO8jHfCgIwB+whlkcItzE9CRQ6CsMo/d5cEHDUu/QW6jSIh9BR\n' + + 'OGh9pTYPVkUbBiKPA7lVVhre\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + '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\n' + + 'nWS0\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIGCTCCA/GgAwIBAgIRAOY7gfcBZgR2tqfBzMbFQCUwDQYJKoZIhvcNAQEMBQAw\n' + + 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' + + 'QW1hem9uIFJEUyBhcC1zb3V0aGVhc3QtNCBSb290IENBIFJTQTQwOTYgRzExEDAO\n' + + 'BgNVBAcMB1NlYXR0bGUwIBcNMjIwNTI1MTY1NDU5WhgPMjEyMjA1MjUxNzU0NTla\n' + + 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' + + 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' + + 'LEFtYXpvbiBSRFMgYXAtc291dGhlYXN0LTQgUm9vdCBDQSBSU0E0MDk2IEcxMRAw\n' + + 'DgYDVQQHDAdTZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA\n' + + 'lfxER43FuLRdL08bddF0YhbCP+XXKj1A/TFMXmd2My8XDei8rPXFYyyjMig9+xZw\n' + + 'uAsIxLwz8uiA26CKA8bCZKg5VG2kTeOJAfvBJaLv1CZefs3Z4Uf1Sjvm6MF2yqEj\n' + + 'GoORfyfL9HiZFTDuF/hcjWoKYCfMuG6M/wO8IbdICrX3n+BiYQJu/pFO660Mg3h/\n' + + '8YBBWYDbHoCiH/vkqqJugQ5BM3OI5nsElW51P1icEEqti4AZ7JmtSv9t7fIFBVyR\n' + + 'oaEyOgpp0sm193F/cDJQdssvjoOnaubsSYm1ep3awZAUyGN/X8MBrPY95d0hLhfH\n' + + 'Ehc5Icyg+hsosBljlAyksmt4hFQ9iBnWIz/ZTfGMck+6p3HVL9RDgvluez+rWv59\n' + + '8q7omUGsiPApy5PDdwI/Wt/KtC34/2sjslIJfvgifdAtkRPkhff1WEwER00ADrN9\n' + + 'eGGInaCpJfb1Rq8cV2n00jxg7DcEd65VR3dmIRb0bL+jWK62ni/WdEyomAOMfmGj\n' + + 'aWf78S/4rasHllWJ+QwnaUYY3u6N8Cgio0/ep4i34FxMXqMV3V0/qXdfhyabi/LM\n' + + 'wCxNo1Dwt+s6OtPJbwO92JL+829QAxydfmaMTeHBsgMPkG7RwAekeuatKGHNsc2Z\n' + + 'x2Q4C2wVvOGAhcHwxfM8JfZs3nDSZJndtVVnFlUY0UECAwEAAaNCMEAwDwYDVR0T\n' + + 'AQH/BAUwAwEB/zAdBgNVHQ4EFgQUpnG7mWazy6k97/tb5iduRB3RXgQwDgYDVR0P\n' + + 'AQH/BAQDAgGGMA0GCSqGSIb3DQEBDAUAA4ICAQCDLqq1Wwa9Tkuv7vxBnIeVvvFF\n' + + 'ecTn+P+wJxl9Qa2ortzqTHZsBDyJO62d04AgBwiDXkJ9a+bthgG0H1J7Xee8xqv1\n' + + 'xyX2yKj24ygHjspLotKP4eDMdDi5TYq+gdkbPmm9Q69B1+W6e049JVGXvWG8/7kU\n' + + 'igxeuCYwtCCdUPRLf6D8y+1XMGgVv3/DSOHWvTg3MJ1wJ3n3+eve3rjGdRYWZeJu\n' + + 'k21HLSZYzVrCtUsh2YAeLnUbSxVuT2Xr4JehYe9zW5HEQ8Je/OUfnCy9vzoN/ITw\n' + + 'osAH+EBJQey7RxEDqMwCaRefH0yeHFcnOll0OXg/urnQmwbEYzQ1uutJaBPsjU0J\n' + + 'Qf06sMxI7GiB5nPE+CnI2sM6A9AW9kvwexGXpNJiLxF8dvPQthpOKGcYu6BFvRmt\n' + + '6ctfXd9b7JJoVqMWuf5cCY6ihpk1e9JTlAqu4Eb/7JNyGiGCR40iSLvV28un9wiE\n' + + 'plrdYxwcNYq851BEu3r3AyYWw/UW1AKJ5tM+/Gtok+AphMC9ywT66o/Kfu44mOWm\n' + + 'L3nSLSWEcgfUVgrikpnyGbUnGtgCmHiMlUtNVexcE7OtCIZoVAlCGKNu7tyuJf10\n' + + 'Qlk8oIIzfSIlcbHpOYoN79FkLoDNc2er4Gd+7w1oPQmdAB0jBJnA6t0OUBPKdDdE\n' + + 'Ufff2jrbfbzECn1ELg==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + '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\n' + + 'fejbXelUSJSzDIdY\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIGCTCCA/GgAwIBAgIRAN7Y9G9i4I+ZaslPobE7VL4wDQYJKoZIhvcNAQEMBQAw\n' + + 'gZwxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTE1MDMGA1UEAwws\n' + + 'QW1hem9uIFJEUyBhcC1ub3J0aGVhc3QtMiBSb290IENBIFJTQTQwOTYgRzExEDAO\n' + + 'BgNVBAcMB1NlYXR0bGUwIBcNMjEwNTIwMTYzMzIzWhgPMjEyMTA1MjAxNzMzMjNa\n' + + 'MIGcMQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywg\n' + + 'SW5jLjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExNTAzBgNVBAMM\n' + + 'LEFtYXpvbiBSRFMgYXAtbm9ydGhlYXN0LTIgUm9vdCBDQSBSU0E0MDk2IEcxMRAw\n' + + 'DgYDVQQHDAdTZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA\n' + + '4BEPCiIfiK66Q/qa8k+eqf1Q3qsa6Xuu/fPkpuStXVBShhtXd3eqrM0iT4Xxs420\n' + + 'Va0vSB3oZ7l86P9zYfa60n6PzRxdYFckYX330aI7L/oFIdaodB/C9szvROI0oLG+\n' + + '6RwmIF2zcprH0cTby8MiM7G3v9ykpq27g4WhDC1if2j8giOQL3oHpUaByekZNIHF\n' + + 'dIllsI3RkXmR3xmmxoOxJM1B9MZi7e1CvuVtTGOnSGpNCQiqofehTGwxCN2wFSK8\n' + + 'xysaWlw48G0VzZs7cbxoXMH9QbMpb4tpk0d+T8JfAPu6uWO9UwCLWWydf0CkmA/+\n' + + 'D50/xd1t33X9P4FEaPSg5lYbHXzSLWn7oLbrN2UqMLaQrkoEBg/VGvzmfN0mbflw\n' + + '+T87bJ/VEOVNlG+gepyCTf89qIQVWOjuYMox4sK0PjzZGsYEuYiq1+OUT3vk/e5K\n' + + 'ag1fCcq2Isy4/iwB2xcXrsQ6ljwdk1fc+EmOnjGKrhuOHJY3S+RFv4ToQBsVyYhC\n' + + 'XGaC3EkqIX0xaCpDimxYhFjWhpDXAjG/zJ+hRLDAMCMhl/LPGRk/D1kzSbPmdjpl\n' + + 'lEMK5695PeBvEBTQdBQdOiYgOU3vWU6tzwwHfiM2/wgvess/q0FDAHfJhppbgbb9\n' + + '3vgsIUcsvoC5o29JvMsUxsDRvsAfEmMSDGkJoA/X6GECAwEAAaNCMEAwDwYDVR0T\n' + + 'AQH/BAUwAwEB/zAdBgNVHQ4EFgQUgEWm1mZCbGD6ytbwk2UU1aLaOUUwDgYDVR0P\n' + + 'AQH/BAQDAgGGMA0GCSqGSIb3DQEBDAUAA4ICAQBb4+ABTGBGwxK1U/q4g8JDqTQM\n' + + '1Wh8Oz8yAk4XtPJMAmCctxbd81cRnSnePWw/hxViLVtkZ/GsemvXfqAQyOn1coN7\n' + + 'QeYSw+ZOlu0j2jEJVynmgsR7nIRqE7QkCyZAU+d2FTJUfmee+IiBiGyFGgxz9n7A\n' + + 'JhBZ/eahBbiuoOik/APW2JWLh0xp0W0GznfJ8lAlaQTyDa8iDXmVtbJg9P9qzkvl\n' + + 'FgPXQttzEOyooF8Pb2LCZO4kUz+1sbU7tHdr2YE+SXxt6D3SBv+Yf0FlvyWLiqVk\n' + + 'GDEOlPPTDSjAWgKnqST8UJ0RDcZK/v1ixs7ayqQJU0GUQm1I7LGTErWXHMnCuHKe\n' + + 'UKYuiSZwmTcJ06NgdhcCnGZgPq13ryMDqxPeltQc3n5eO7f1cL9ERYLDLOzm6A9P\n' + + 'oQ3MfcVOsbHgGHZWaPSeNrQRN9xefqBXH0ZPasgcH9WJdsLlEjVUXoultaHOKx3b\n' + + 'UCCb+d3EfqF6pRT488ippOL6bk7zNubwhRa/+y4wjZtwe3kAX78ACJVcjPobH9jZ\n' + + 'ErySads5zdQeaoee5wRKdp3TOfvuCe4bwLRdhOLCHWzEcXzY3g/6+ppLvNom8o+h\n' + + 'Bh5X26G6KSfr9tqhQ3O9IcbARjnuPbvtJnoPY0gz3EHHGPhy0RNW8i2gl3nUp0ah\n' + + 'PtjwbKW0hYAhIttT0Q==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICtzCCAj2gAwIBAgIQQRBQTs6Y3H1DDbpHGta3lzAKBggqhkjOPQQDAzCBmzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' + + 'b24gUkRTIGFwLXNvdXRoZWFzdC0zIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIxMDYxMTAwMTI0M1oYDzIxMjEwNjExMDExMjQzWjCBmzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTQwMgYDVQQDDCtBbWF6\n' + + 'b24gUkRTIGFwLXNvdXRoZWFzdC0zIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEs0942Xj4m/gKA+WA6F5h\n' + + 'AHYuek9eGpzTRoLJddM4rEV1T3eSueytMVKOSlS3Ub9IhyQrH2D8EHsLYk9ktnGR\n' + + 'pATk0kCYTqFbB7onNo070lmMJmGT/Q7NgwC8cySChFxbo0IwQDAPBgNVHRMBAf8E\n' + + 'BTADAQH/MB0GA1UdDgQWBBQ20iKBKiNkcbIZRu0y1uoF1yJTEzAOBgNVHQ8BAf8E\n' + + 'BAMCAYYwCgYIKoZIzj0EAwMDaAAwZQIwYv0wTSrpQTaPaarfLN8Xcqrqu3hzl07n\n' + + 'FrESIoRw6Cx77ZscFi2/MV6AFyjCV/TlAjEAhpwJ3tpzPXpThRML8DMJYZ3YgMh3\n' + + 'CMuLqhPpla3cL0PhybrD27hJWl29C4el6aMO\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICrDCCAjOgAwIBAgIQGcztRyV40pyMKbNeSN+vXTAKBggqhkjOPQQDAzCBljEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMS8wLQYDVQQDDCZBbWF6\n' + + 'b24gUkRTIHVzLWVhc3QtMiBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2Vh\n' + + 'dHRsZTAgFw0yMTA1MjEyMzE1NTZaGA8yMTIxMDUyMjAwMTU1NlowgZYxCzAJBgNV\n' + + 'BAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYD\n' + + 'VQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1hem9uIFJE\n' + + 'UyB1cy1lYXN0LTIgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1NlYXR0bGUw\n' + + 'djAQBgcqhkjOPQIBBgUrgQQAIgNiAAQfDcv+GGRESD9wT+I5YIPRsD3L+/jsiIis\n' + + 'Tr7t9RSbFl+gYpO7ZbDXvNbV5UGOC5lMJo/SnqFRTC6vL06NF7qOHfig3XO8QnQz\n' + + '6T5uhhrhnX2RSY3/10d2kTyHq3ZZg3+jQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD\n' + + 'VR0OBBYEFLDyD3PRyNXpvKHPYYxjHXWOgfPnMA4GA1UdDwEB/wQEAwIBhjAKBggq\n' + + 'hkjOPQQDAwNnADBkAjB20HQp6YL7CqYD82KaLGzgw305aUKw2aMrdkBR29J183jY\n' + + '6Ocj9+Wcif9xnRMS+7oCMAvrt03rbh4SU9BohpRUcQ2Pjkh7RoY0jDR4Xq4qzjNr\n' + + '5UFr3BXpFvACxXF51BksGQ==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICrjCCAjWgAwIBAgIQeKbS5zvtqDvRtwr5H48cAjAKBggqhkjOPQQDAzCBlzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' + + 'b24gUkRTIG1lLXNvdXRoLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwIBcNMjEwNTIwMTcxOTU1WhgPMjEyMTA1MjAxODE5NTVaMIGXMQswCQYD\n' + + 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' + + 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\n' + + 'RFMgbWUtc291dGgtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\n' + + 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABEKjgUaAPmUlRMEQdBC7BScAGosJ1zRV\n' + + 'LDd38qTBjzgmwBfQJ5ZfGIvyEK5unB09MB4e/3qqK5I/L6Qn5Px/n5g4dq0c7MQZ\n' + + 'u7G9GBYm90U3WRJBf7lQrPStXaRnS4A/O6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\n' + + 'BgNVHQ4EFgQUNKcAbGEIn03/vkwd8g6jNyiRdD4wDgYDVR0PAQH/BAQDAgGGMAoG\n' + + 'CCqGSM49BAMDA2cAMGQCMHIeTrjenCSYuGC6txuBt/0ZwnM/ciO9kHGWVCoK8QLs\n' + + 'jGghb5/YSFGZbmQ6qpGlSAIwVOQgdFfTpEfe5i+Vs9frLJ4QKAfc27cTNYzRIM0I\n' + + 'E+AJgK4C4+DiyyMzOpiCfmvq\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + '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\n' + + 'WT1QcNdw7ntUJP/w\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICrzCCAjWgAwIBAgIQARky6+5PNFRkFVOp3Ob1CTAKBggqhkjOPQQDAzCBlzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' + + 'b24gUkRTIGV1LXNvdXRoLTIgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwIBcNMjIwNTIzMTg0MTI4WhgPMjEyMjA1MjMxOTQxMjdaMIGXMQswCQYD\n' + + 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' + + 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\n' + + 'RFMgZXUtc291dGgtMiBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\n' + + 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABNVGL5oF7cfIBxKyWd2PVK/S5yQfaJY3\n' + + 'QFHWvEdt6951n9JhiiPrHzfVHsxZp1CBjILRMzjgRbYWmc8qRoLkgGE7htGdwudJ\n' + + 'Fa/WuKzO574Prv4iZXUnVGTboC7JdvKbh6NCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\n' + + 'BgNVHQ4EFgQUgDeIIEKynwUbNXApdIPnmRWieZwwDgYDVR0PAQH/BAQDAgGGMAoG\n' + + 'CCqGSM49BAMDA2gAMGUCMEOOJfucrST+FxuqJkMZyCM3gWGZaB+/w6+XUAJC6hFM\n' + + 'uSTY0F44/bERkA4XhH+YGAIxAIpJQBakCA1/mXjsTnQ+0El9ty+LODp8ibkn031c\n' + + '8DKDS7pR9UK7ZYdR6zFg3ZCjQw==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICrjCCAjOgAwIBAgIQJvkWUcYLbnxtuwnyjMmntDAKBggqhkjOPQQDAzCBljEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMS8wLQYDVQQDDCZBbWF6\n' + + 'b24gUkRTIGV1LXdlc3QtMyBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2Vh\n' + + 'dHRsZTAgFw0yMTA1MjUyMjI2MTJaGA8yMTIxMDUyNTIzMjYxMlowgZYxCzAJBgNV\n' + + 'BAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMwEQYD\n' + + 'VQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1hem9uIFJE\n' + + 'UyBldS13ZXN0LTMgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1NlYXR0bGUw\n' + + 'djAQBgcqhkjOPQIBBgUrgQQAIgNiAARENn8uHCyjn1dFax4OeXxvbV861qsXFD9G\n' + + 'DshumTmFzWWHN/69WN/AOsxy9XN5S7Cgad4gQgeYYYgZ5taw+tFo/jQvCLY//uR5\n' + + 'uihcLuLJ78opvRPvD9kbWZ6oXfBtFkWjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD\n' + + 'VR0OBBYEFKiK3LpoF+gDnqPldGSwChBPCYciMA4GA1UdDwEB/wQEAwIBhjAKBggq\n' + + 'hkjOPQQDAwNpADBmAjEA+7qfvRlnvF1Aosyp9HzxxCbN7VKu+QXXPhLEBWa5oeWW\n' + + 'UOcifunf/IVLC4/FGCsLAjEAte1AYp+iJyOHDB8UYkhBE/1sxnFaTiEPbvQBU0wZ\n' + + 'SuwWVLhu2wWDuSW+K7tTuL8p\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIID/zCCAuegAwIBAgIRAKeDpqX5WFCGNo94M4v69sUwDQYJKoZIhvcNAQELBQAw\n' + + 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\n' + + 'QW1hem9uIFJEUyBldS13ZXN0LTMgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIxMDUyNTIyMTgzM1oYDzIwNjEwNTI1MjMxODMzWjCBlzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' + + 'b24gUkRTIGV1LXdlc3QtMyBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCcKOTEMTfzvs4H\n' + + 'WtJR8gI7GXN6xesulWtZPv21oT+fLGwJ+9Bv8ADCGDDrDxfeH/HxJmzG9hgVAzVn\n' + + '4g97Bn7q07tGZM5pVi96/aNp11velZT7spOJKfJDZTlGns6DPdHmx48whpdO+dOb\n' + + '6+eR0VwCIv+Vl1fWXgoACXYCoKjhxJs+R+fwY//0JJ1YG8yjZ+ghLCJmvlkOJmE1\n' + + 'TCPUyIENaEONd6T+FHGLVYRRxC2cPO65Jc4yQjsXvvQypoGgx7FwD5voNJnFMdyY\n' + + '754JGPOOe/SZdepN7Tz7UEq8kn7NQSbhmCsgA/Hkjkchz96qN/YJ+H/okiQUTNB0\n' + + 'eG9ogiVFAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFjayw9Y\n' + + 'MjbxfF14XAhMM2VPl0PfMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC\n' + + 'AQEAAtmx6d9+9CWlMoU0JCirtp4dSS41bBfb9Oor6GQ8WIr2LdfZLL6uES/ubJPE\n' + + '1Sh5Vu/Zon5/MbqLMVrfniv3UpQIof37jKXsjZJFE1JVD/qQfRzG8AlBkYgHNEiS\n' + + 'VtD4lFxERmaCkY1tjKB4Dbd5hfhdrDy29618ZjbSP7NwAfnwb96jobCmMKgxVGiH\n' + + 'UqsLSiEBZ33b2hI7PJ6iTJnYBWGuiDnsWzKRmheA4nxwbmcQSfjbrNwa93w3caL2\n' + + 'v/4u54Kcasvcu3yFsUwJygt8z43jsGAemNZsS7GWESxVVlW93MJRn6M+MMakkl9L\n' + + 'tWaXdHZ+KUV7LhfYLb0ajvb40w==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEBDCCAuygAwIBAgIQJ5oxPEjefCsaESSwrxk68DANBgkqhkiG9w0BAQsFADCB\n' + + 'mjELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTMwMQYDVQQDDCpB\n' + + 'bWF6b24gUkRTIGV1LWNlbnRyYWwtMiBSb290IENBIFJTQTIwNDggRzExEDAOBgNV\n' + + 'BAcMB1NlYXR0bGUwIBcNMjIwNjA2MjExNzA1WhgPMjA2MjA2MDYyMjE3MDVaMIGa\n' + + 'MQswCQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5j\n' + + 'LjETMBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMzAxBgNVBAMMKkFt\n' + + 'YXpvbiBSRFMgZXUtY2VudHJhbC0yIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UE\n' + + 'BwwHU2VhdHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALTQt5eX\n' + + 'g+VP3BjO9VBkWJhE0GfLrU/QIk32I6WvrnejayTrlup9H1z4QWlXF7GNJrqScRMY\n' + + 'KhJHlcP05aPsx1lYco6pdFOf42ybXyWHHJdShj4A5glU81GTT+VrXGzHSarLmtua\n' + + 'eozkQgPpDsSlPt0RefyTyel7r3Cq+5K/4vyjCTcIqbfgaGwTU36ffjM1LaPCuE4O\n' + + 'nINMeD6YuImt2hU/mFl20FZ+IZQUIFZZU7pxGLqTRz/PWcH8tDDxnkYg7tNuXOeN\n' + + 'JbTpXrw7St50/E9ZQ0llGS+MxJD8jGRAa/oL4G/cwnV8P2OEPVVkgN9xDDQeieo0\n' + + '3xkzolkDkmeKOnUCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU\n' + + 'bwu8635iQGQMRanekesORM8Hkm4wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB\n' + + 'CwUAA4IBAQAgN6LE9mUgjsj6xGCX1afYE69fnmCjjb0rC6eEe1mb/QZNcyw4XBIW\n' + + '6+zTXo4mjZ4ffoxb//R0/+vdTE7IvaLgfAZgFsLKJCtYDDstXZj8ujQnGR9Pig3R\n' + + 'W+LpNacvOOSJSawNQq0Xrlcu55AU4buyD5VjcICnfF1dqBMnGTnh27m/scd/ZMx/\n' + + 'kapHZ/fMoK2mAgSX/NvUKF3UkhT85vSSM2BTtET33DzCPDQTZQYxFBa4rFRmFi4c\n' + + 'BLlmIReiCGyh3eJhuUUuYAbK6wLaRyPsyEcIOLMQmZe1+gAFm1+1/q5Ke9ugBmjf\n' + + 'PbTWjsi/lfZ5CdVAhc5lmZj/l5aKqwaS\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICrjCCAjSgAwIBAgIRAKKPTYKln9L4NTx9dpZGUjowCgYIKoZIzj0EAwMwgZYx\n' + + 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' + + 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1h\n' + + 'em9uIFJEUyBldS13ZXN0LTIgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwIBcNMjEwNTIxMjI1NTIxWhgPMjEyMTA1MjEyMzU1MjFaMIGWMQswCQYD\n' + + 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' + + 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExLzAtBgNVBAMMJkFtYXpvbiBS\n' + + 'RFMgZXUtd2VzdC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdTZWF0dGxl\n' + + 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAE/owTReDvaRqdmbtTzXbyRmEpKCETNj6O\n' + + 'hZMKH0F8oU9Tmn8RU7kQQj6xUKEyjLPrFBN7c+26TvrVO1KmJAvbc8bVliiJZMbc\n' + + 'C0yV5PtJTalvlMZA1NnciZuhxaxrzlK1o0IwQDAPBgNVHRMBAf8EBTADAQH/MB0G\n' + + 'A1UdDgQWBBT4i5HaoHtrs7Mi8auLhMbKM1XevDAOBgNVHQ8BAf8EBAMCAYYwCgYI\n' + + 'KoZIzj0EAwMDaAAwZQIxAK9A+8/lFdX4XJKgfP+ZLy5ySXC2E0Spoy12Gv2GdUEZ\n' + + 'p1G7c1KbWVlyb1d6subzkQIwKyH0Naf/3usWfftkmq8SzagicKz5cGcEUaULq4tO\n' + + 'GzA/AMpr63IDBAqkZbMDTCmH\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICrzCCAjWgAwIBAgIQTgIvwTDuNWQo0Oe1sOPQEzAKBggqhkjOPQQDAzCBlzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' + + 'b24gUkRTIGV1LW5vcnRoLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwIBcNMjEwNTI0MjEwNjM4WhgPMjEyMTA1MjQyMjA2MzhaMIGXMQswCQYD\n' + + 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' + + 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpvbiBS\n' + + 'RFMgZXUtbm9ydGgtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwHU2VhdHRs\n' + + 'ZTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJuzXLU8q6WwSKXBvx8BbdIi3mPhb7Xo\n' + + 'rNJBfuMW1XRj5BcKH1ZoGaDGw+BIIwyBJg8qNmCK8kqIb4cH8/Hbo3Y+xBJyoXq/\n' + + 'cuk8aPrxiNoRsKWwiDHCsVxaK9L7GhHHAqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAd\n' + + 'BgNVHQ4EFgQUYgcsdU4fm5xtuqLNppkfTHM2QMYwDgYDVR0PAQH/BAQDAgGGMAoG\n' + + 'CCqGSM49BAMDA2gAMGUCMQDz/Rm89+QJOWJecYAmYcBWCcETASyoK1kbr4vw7Hsg\n' + + '7Ew3LpLeq4IRmTyuiTMl0gMCMAa0QSjfAnxBKGhAnYxcNJSntUyyMpaXzur43ec0\n' + + '3D8npJghwC4DuICtKEkQiI5cSg==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + '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\n' + + 'u3UBpZI=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICtDCCAjmgAwIBAgIQenQbcP/Zbj9JxvZ+jXbRnTAKBggqhkjOPQQDAzCBmTEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTIwMAYDVQQDDClBbWF6\n' + + 'b24gUkRTIGV1LWNlbnRyYWwtMSBSb290IENBIEVDQzM4NCBHMTEQMA4GA1UEBwwH\n' + + 'U2VhdHRsZTAgFw0yMTA1MjEyMjMzMjRaGA8yMTIxMDUyMTIzMzMyNFowgZkxCzAJ\n' + + 'BgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMuMRMw\n' + + 'EQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEyMDAGA1UEAwwpQW1hem9u\n' + + 'IFJEUyBldS1jZW50cmFsLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATlBHiEM9LoEb1Hdnd5j2VpCDOU\n' + + '5nGuFoBD8ROUCkFLFh5mHrHfPXwBc63heW9WrP3qnDEm+UZEUvW7ROvtWCTPZdLz\n' + + 'Z4XaqgAlSqeE2VfUyZOZzBSgUUJk7OlznXfkCMOjQjBAMA8GA1UdEwEB/wQFMAMB\n' + + 'Af8wHQYDVR0OBBYEFDT/ThjQZl42Nv/4Z/7JYaPNMly2MA4GA1UdDwEB/wQEAwIB\n' + + 'hjAKBggqhkjOPQQDAwNpADBmAjEAnZWmSgpEbmq+oiCa13l5aGmxSlfp9h12Orvw\n' + + 'Dq/W5cENJz891QD0ufOsic5oGq1JAjEAp5kSJj0MxJBTHQze1Aa9gG4sjHBxXn98\n' + + '4MP1VGsQuhfndNHQb4V0Au7OWnOeiobq\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIID/zCCAuegAwIBAgIRAMgnyikWz46xY6yRgiYwZ3swDQYJKoZIhvcNAQELBQAw\n' + + 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\n' + + 'QW1hem9uIFJEUyBldS13ZXN0LTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIxMDUyMDE2NDkxMloYDzIwNjEwNTIwMTc0OTEyWjCBlzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' + + 'b24gUkRTIGV1LXdlc3QtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCi8JYOc9cYSgZH\n' + + 'gYPxLk6Xcc7HqzamvsnjYU98Dcb98y6iDqS46Ra2Ne02MITtU5MDL+qjxb8WGDZV\n' + + 'RUA9ZS69tkTO3gldW8QdiSh3J6hVNJQW81F0M7ZWgV0gB3n76WCmfT4IWos0AXHM\n' + + '5v7M/M4tqVmCPViQnZb2kdVlM3/Xc9GInfSMCgNfwHPTXl+PXX+xCdNBePaP/A5C\n' + + '5S0oK3HiXaKGQAy3K7VnaQaYdiv32XUatlM4K2WS4AMKt+2cw3hTCjlmqKRHvYFQ\n' + + 'veWCXAuc+U5PQDJ9SuxB1buFJZhT4VP3JagOuZbh5NWpIbOTxlAJOb5pGEDuJTKi\n' + + '1gQQQVEFAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNXm+N87\n' + + 'OFxK9Af/bjSxDCiulGUzMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQsFAAOC\n' + + 'AQEAkqIbkgZ45spvrgRQ6n9VKzDLvNg+WciLtmVrqyohwwJbj4pYvWwnKQCkVc7c\n' + + 'hUOSBmlSBa5REAPbH5o8bdt00FPRrD6BdXLXhaECKgjsHe1WW08nsequRKD8xVmc\n' + + '8bEX6sw/utBeBV3mB+3Zv7ejYAbDFM4vnRsWtO+XqgReOgrl+cwdA6SNQT9oW3e5\n' + + 'rSQ+VaXgJtl9NhkiIysq9BeYigxqS/A13pHQp0COMwS8nz+kBPHhJTsajHCDc8F4\n' + + 'HfLi6cgs9G0gaRhT8FCH66OdGSqn196sE7Y3bPFFFs/3U+vxvmQgoZC6jegQXAg5\n' + + 'Prxd+VNXtNI/azitTysQPumH7A==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEBTCCAu2gAwIBAgIRAO8bekN7rUReuNPG8pSTKtEwDQYJKoZIhvcNAQELBQAw\n' + + 'gZoxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEzMDEGA1UEAwwq\n' + + 'QW1hem9uIFJEUyBldS1jZW50cmFsLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYD\n' + + 'VQQHDAdTZWF0dGxlMCAXDTIxMDUyMTIyMjM0N1oYDzIwNjEwNTIxMjMyMzQ3WjCB\n' + + 'mjELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTMwMQYDVQQDDCpB\n' + + 'bWF6b24gUkRTIGV1LWNlbnRyYWwtMSBSb290IENBIFJTQTIwNDggRzExEDAOBgNV\n' + + 'BAcMB1NlYXR0bGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCTTYds\n' + + 'Tray+Q9VA5j5jTh5TunHKFQzn68ZbOzdqaoi/Rq4ohfC0xdLrxCpfqn2TGDHN6Zi\n' + + '2qGK1tWJZEd1H0trhzd9d1CtGK+3cjabUmz/TjSW/qBar7e9MA67/iJ74Gc+Ww43\n' + + 'A0xPNIWcL4aLrHaLm7sHgAO2UCKsrBUpxErOAACERScVYwPAfu79xeFcX7DmcX+e\n' + + 'lIqY16pQAvK2RIzrekSYfLFxwFq2hnlgKHaVgZ3keKP+nmXcXmRSHQYUUr72oYNZ\n' + + 'HcNYl2+gxCc9ccPEHM7xncVEKmb5cWEWvVoaysgQ+osi5f5aQdzgC2X2g2daKbyA\n' + + 'XL/z5FM9GHpS5BJjAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE\n' + + 'FBDAiJ7Py9/A9etNa/ebOnx5l5MGMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0B\n' + + 'AQsFAAOCAQEALMh/+81fFPdJV/RrJUeoUvFCGMp8iaANu97NpeJyKitNOv7RoeVP\n' + + 'WjivS0KcCqZaDBs+p6IZ0sLI5ZH098LDzzytcfZg0PsGqUAb8a0MiU/LfgDCI9Ee\n' + + 'jsOiwaFB8k0tfUJK32NPcIoQYApTMT2e26lPzYORSkfuntme2PTHUnuC7ikiQrZk\n' + + 'P+SZjWgRuMcp09JfRXyAYWIuix4Gy0eZ4rpRuaTK6mjAb1/LYoNK/iZ/gTeIqrNt\n' + + 'l70OWRsWW8jEmSyNTIubGK/gGGyfuZGSyqoRX6OKHESkP6SSulbIZHyJ5VZkgtXo\n' + + '2XvyRyJ7w5pFyoofrL3Wv0UF8yt/GDszmg==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIF/zCCA+egAwIBAgIRAMDk/F+rrhdn42SfE+ghPC8wDQYJKoZIhvcNAQEMBQAw\n' + + 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\n' + + 'QW1hem9uIFJEUyBldS13ZXN0LTIgUm9vdCBDQSBSU0E0MDk2IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIxMDUyMTIyNTEyMloYDzIxMjEwNTIxMjM1MTIyWjCBlzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' + + 'b24gUkRTIGV1LXdlc3QtMiBSb290IENBIFJTQTQwOTYgRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2twMALVg9vRVu\n' + + 'VNqsr6N8thmp3Dy8jEGTsm3GCQ+C5P2YcGlD/T/5icfWW84uF7Sx3ezcGlvsqFMf\n' + + 'Ukj9sQyqtz7qfFFugyy7pa/eH9f48kWFHLbQYm9GEgbYBIrWMp1cy3vyxuMCwQN4\n' + + 'DCncqU+yNpy0CprQJEha3PzY+3yJOjDQtc3zr99lyECCFJTDUucxHzyQvX89eL74\n' + + 'uh8la0lKH3v9wPpnEoftbrwmm5jHNFdzj7uXUHUJ41N7af7z7QUfghIRhlBDiKtx\n' + + '5lYZemPCXajTc3ryDKUZC/b+B6ViXZmAeMdmQoPE0jwyEp/uaUcdp+FlUQwCfsBk\n' + + 'ayPFEApTWgPiku2isjdeTVmEgL8bJTDUZ6FYFR7ZHcYAsDzcwHgIu3GGEMVRS3Uf\n' + + 'ILmioiyly9vcK4Sa01ondARmsi/I0s7pWpKflaekyv5boJKD/xqwz9lGejmJHelf\n' + + '8Od2TyqJScMpB7Q8c2ROxBwqwB72jMCEvYigB+Wnbb8RipliqNflIGx938FRCzKL\n' + + 'UQUBmNAznR/yRRL0wHf9UAE/8v9a09uZABeiznzOFAl/frHpgdAbC00LkFlnwwgX\n' + + 'g8YfEFlkp4fLx5B7LtoO6uVNFVimLxtwirpyKoj3G4M/kvSTux8bTw0heBCmWmKR\n' + + '57MS6k7ODzbv+Kpeht2hqVZCNFMxoQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/\n' + + 'MB0GA1UdDgQWBBRuMnDhJjoj7DcKALj+HbxEqj3r6jAOBgNVHQ8BAf8EBAMCAYYw\n' + + 'DQYJKoZIhvcNAQEMBQADggIBALSnXfx72C3ldhBP5kY4Mo2DDaGQ8FGpTOOiD95d\n' + + '0rf7I9LrsBGVqu/Nir+kqqP80PB70+Jy9fHFFigXwcPBX3MpKGxK8Cel7kVf8t1B\n' + + '4YD6A6bqlzP+OUL0uGWfZpdpDxwMDI2Flt4NEldHgXWPjvN1VblEKs0+kPnKowyg\n' + + 'jhRMgBbD/y+8yg0fIcjXUDTAw/+INcp21gWaMukKQr/8HswqC1yoqW9in2ijQkpK\n' + + '2RB9vcQ0/gXR0oJUbZQx0jn0OH8Agt7yfMAnJAdnHO4M3gjvlJLzIC5/4aGrRXZl\n' + + 'JoZKfJ2fZRnrFMi0nhAYDeInoS+Rwx+QzaBk6fX5VPyCj8foZ0nmqvuYoydzD8W5\n' + + 'mMlycgxFqS+DUmO+liWllQC4/MnVBlHGB1Cu3wTj5kgOvNs/k+FW3GXGzD3+rpv0\n' + + 'QTLuwSbMr+MbEThxrSZRSXTCQzKfehyC+WZejgLb+8ylLJUA10e62o7H9PvCrwj+\n' + + 'ZDVmN7qj6amzvndCP98sZfX7CFZPLfcBd4wVIjHsFjSNEwWHOiFyLPPG7cdolGKA\n' + + 'lOFvonvo4A1uRc13/zFeP0Xi5n5OZ2go8aOOeGYdI2vB2sgH9R2IASH/jHmr0gvY\n' + + '0dfBCcfXNgrS0toq0LX/y+5KkKOxh52vEYsJLdhqrveuZhQnsFEm/mFwjRXkyO7c\n' + + '2jpC\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIGADCCA+igAwIBAgIQYe0HgSuFFP9ivYM2vONTrTANBgkqhkiG9w0BAQwFADCB\n' + + 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\n' + + 'bWF6b24gUkRTIGV1LXNvdXRoLTEgUm9vdCBDQSBSU0E0MDk2IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIxMDUxOTE4MzMyMVoYDzIxMjEwNTE5MTkzMzIxWjCBmDEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\n' + + 'b24gUkRTIGV1LXNvdXRoLTEgUm9vdCBDQSBSU0E0MDk2IEcxMRAwDgYDVQQHDAdT\n' + + 'ZWF0dGxlMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAuO7QPKfPMTo2\n' + + 'POQWvzDLwi5f++X98hGjORI1zkN9kotCYH5pAzSBwBPoMNaIfedgmsIxGHj2fq5G\n' + + '4oXagNhNuGP79Zl6uKW5H7S74W7aWM8C0s8zuxMOI4GZy5h2IfQk3m/3AzZEX5w8\n' + + 'UtNPkzo2feDVOkerHT+j+vjXgAxZ4wHnuMDcRT+K4r9EXlAH6X9b/RO0JlfEwmNz\n' + + 'xlqqGxocq9qRC66N6W0HF2fNEAKP84n8H80xcZBOBthQORRi8HSmKcPdmrvwCuPz\n' + + 'M+L+j18q6RAVaA0ABbD0jMWcTf0UvjUfBStn5mvu/wGlLjmmRkZsppUTRukfwqXK\n' + + 'yltUsTq0tOIgCIpne5zA4v+MebbR5JBnsvd4gdh5BI01QH470yB7BkUefZ9bobOm\n' + + 'OseAAVXcYFJKe4DAA6uLDrqOfFSxV+CzVvEp3IhLRaik4G5MwI/h2c/jEYDqkg2J\n' + + 'HMflxc2gcSMdk7E5ByLz5f6QrFfSDFk02ZJTs4ssbbUEYohht9znPMQEaWVqATWE\n' + + '3n0VspqZyoBNkH/agE5GiGZ/k/QyeqzMNj+c9kr43Upu8DpLrz8v2uAp5xNj3YVg\n' + + 'ihaeD6GW8+PQoEjZ3mrCmH7uGLmHxh7Am59LfEyNrDn+8Rq95WvkmbyHSVxZnBmo\n' + + 'h/6O3Jk+0/QhIXZ2hryMflPcYWeRGH0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB\n' + + '/zAdBgNVHQ4EFgQU2eFK7+R3x/me8roIBNxBrplkM6EwDgYDVR0PAQH/BAQDAgGG\n' + + 'MA0GCSqGSIb3DQEBDAUAA4ICAQB5gWFe5s7ObQFj1fTO9L6gYgtFhnwdmxU0q8Ke\n' + + 'HWCrdFmyXdC39qdAFOwM5/7fa9zKmiMrZvy9HNvCXEp4Z7z9mHhBmuqPZQx0qPgU\n' + + 'uLdP8wGRuWryzp3g2oqkX9t31Z0JnkbIdp7kfRT6ME4I4VQsaY5Y3mh+hIHOUvcy\n' + + 'p+98i3UuEIcwJnVAV9wTTzrWusZl9iaQ1nSYbmkX9bBssJ2GmtW+T+VS/1hJ/Q4f\n' + + 'AlE3dOQkLFoPPb3YRWBHr2n1LPIqMVwDNAuWavRA2dSfaLl+kzbn/dua7HTQU5D4\n' + + 'b2Fu2vLhGirwRJe+V7zdef+tI7sngXqjgObyOeG5O2BY3s+um6D4fS0Th3QchMO7\n' + + '0+GwcIgSgcjIjlrt6/xJwJLE8cRkUUieYKq1C4McpZWTF30WnzOPUzRzLHkcNzNA\n' + + '0A7sKMK6QoYWo5Rmo8zewUxUqzc9oQSrYADP7PEwGncLtFe+dlRFx+PA1a+lcIgo\n' + + '1ZGfXigYtQ3VKkcknyYlJ+hN4eCMBHtD81xDy9iP2MLE41JhLnoB2rVEtewO5diF\n' + + '7o95Mwl84VMkLhhHPeGKSKzEbBtYYBifHNct+Bst8dru8UumTltgfX6urH3DN+/8\n' + + 'JF+5h3U8oR2LL5y76cyeb+GWDXXy9zoQe2QvTyTy88LwZq1JzujYi2k8QiLLhFIf\n' + + 'FEv9Bg==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICsDCCAjagAwIBAgIRAMgApnfGYPpK/fD0dbN2U4YwCgYIKoZIzj0EAwMwgZcx\n' + + 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' + + 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwnQW1h\n' + + 'em9uIFJEUyBldS1zb3V0aC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdT\n' + + 'ZWF0dGxlMCAXDTIxMDUxOTE4MzgxMVoYDzIxMjEwNTE5MTkzODExWjCBlzELMAkG\n' + + 'A1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4xEzAR\n' + + 'BgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6b24g\n' + + 'UkRTIGV1LXNvdXRoLTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1NlYXR0\n' + + 'bGUwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQfEWl6d4qSuIoECdZPp+39LaKsfsX7\n' + + 'THs3/RrtT0+h/jl3bjZ7Qc68k16x+HGcHbaayHfqD0LPdzH/kKtNSfQKqemdxDQh\n' + + 'Z4pwkixJu8T1VpXZ5zzCvBXCl75UqgEFS92jQjBAMA8GA1UdEwEB/wQFMAMBAf8w\n' + + 'HQYDVR0OBBYEFFPrSNtWS5JU+Tvi6ABV231XbjbEMA4GA1UdDwEB/wQEAwIBhjAK\n' + + 'BggqhkjOPQQDAwNoADBlAjEA+a7hF1IrNkBd2N/l7IQYAQw8chnRZDzh4wiGsZsC\n' + + '6A83maaKFWUKIb3qZYXFSi02AjAbp3wxH3myAmF8WekDHhKcC2zDvyOiKLkg9Y6v\n' + + 'ZVmyMR043dscQbcsVoacOYv198c=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICtDCCAjqgAwIBAgIRAPhVkIsQ51JFhD2kjFK5uAkwCgYIKoZIzj0EAwMwgZkx\n' + + 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' + + 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEyMDAGA1UEAwwpQW1h\n' + + 'em9uIFJEUyBldS1jZW50cmFsLTIgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcM\n' + + 'B1NlYXR0bGUwIBcNMjIwNjA2MjEyOTE3WhgPMjEyMjA2MDYyMjI5MTdaMIGZMQsw\n' + + 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' + + 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMjAwBgNVBAMMKUFtYXpv\n' + + 'biBSRFMgZXUtY2VudHJhbC0yIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdT\n' + + 'ZWF0dGxlMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEA5xnIEBtG5b2nmbj49UEwQza\n' + + 'yX0844fXjccYzZ8xCDUe9dS2XOUi0aZlGblgSe/3lwjg8fMcKXLObGGQfgIx1+5h\n' + + 'AIBjORis/dlyN5q/yH4U5sjS8tcR0GDGVHrsRUZCo0IwQDAPBgNVHRMBAf8EBTAD\n' + + 'AQH/MB0GA1UdDgQWBBRK+lSGutXf4DkTjR3WNfv4+KeNFTAOBgNVHQ8BAf8EBAMC\n' + + 'AYYwCgYIKoZIzj0EAwMDaAAwZQIxAJ4NxQ1Gerqr70ZrnUqc62Vl8NNqTzInamCG\n' + + 'Kce3FTsMWbS9qkgrjZkO9QqOcGIw/gIwSLrwUT+PKr9+H9eHyGvpq9/3AIYSnFkb\n' + + 'Cf3dyWPiLKoAtLFwjzB/CkJlsAS1c8dS\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIF/jCCA+agAwIBAgIQGZH12Q7x41qIh9vDu9ikTjANBgkqhkiG9w0BAQwFADCB\n' + + 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\n' + + 'bWF6b24gUkRTIGV1LXdlc3QtMyBSb290IENBIFJTQTQwOTYgRzExEDAOBgNVBAcM\n' + + 'B1NlYXR0bGUwIBcNMjEwNTI1MjIyMjMzWhgPMjEyMTA1MjUyMzIyMzNaMIGXMQsw\n' + + 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' + + 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\n' + + 'biBSRFMgZXUtd2VzdC0zIFJvb3QgQ0EgUlNBNDA5NiBHMTEQMA4GA1UEBwwHU2Vh\n' + + 'dHRsZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMqE47sHXWzdpuqj\n' + + 'JHb+6jM9tDbQLDFnYjDWpq4VpLPZhb7xPNh9gnYYTPKG4avG421EblAHqzy9D2pN\n' + + '1z90yKbIfUb/Sy2MhQbmZomsObhONEra06fJ0Dydyjswf1iYRp2kwpx5AgkVoNo7\n' + + '3dlws73zFjD7ImKvUx2C7B75bhnw2pJWkFnGcswl8fZt9B5Yt95sFOKEz2MSJE91\n' + + 'kZlHtya19OUxZ/cSGci4MlOySzqzbGwUqGxEIDlY8I39VMwXaYQ8uXUN4G780VcL\n' + + 'u46FeyRGxZGz2n3hMc805WAA1V5uir87vuirTvoSVREET97HVRGVVNJJ/FM6GXr1\n' + + 'VKtptybbo81nefYJg9KBysxAa2Ao2x2ry/2ZxwhS6VZ6v1+90bpZA1BIYFEDXXn/\n' + + 'dW07HSCFnYSlgPtSc+Muh15mdr94LspYeDqNIierK9i4tB6ep7llJAnq0BU91fM2\n' + + 'JPeqyoTtc3m06QhLf68ccSxO4l8Hmq9kLSHO7UXgtdjfRVaffngopTNk8qK7bIb7\n' + + 'LrgkqhiQw/PRCZjUdyXL153/fUcsj9nFNe25gM4vcFYwH6c5trd2tUl31NTi1MfG\n' + + 'Mgp3d2dqxQBIYANkEjtBDMy3SqQLIo9EymqmVP8xx2A/gCBgaxvMAsI6FSWRoC7+\n' + + 'hqJ8XH4mFnXSHKtYMe6WPY+/XZgtAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8w\n' + + 'HQYDVR0OBBYEFIkXqTnllT/VJnI2NqipA4XV8rh1MA4GA1UdDwEB/wQEAwIBhjAN\n' + + 'BgkqhkiG9w0BAQwFAAOCAgEAKjSle8eenGeHgT8pltWCw/HzWyQruVKhfYIBfKJd\n' + + 'MhV4EnH5BK7LxBIvpXGsFUrb0ThzSw0fn0zoA9jBs3i/Sj6KyeZ9qUF6b8ycDXd+\n' + + 'wHonmJiQ7nk7UuMefaYAfs06vosgl1rI7eBHC0itexIQmKh0aX+821l4GEgEoSMf\n' + + 'loMFTLXv2w36fPHHCsZ67ODldgcZbKNnpCTX0YrCwEYO3Pz/L398btiRcWGrewrK\n' + + 'jdxAAyietra8DRno1Zl87685tfqc6HsL9v8rVw58clAo9XAQvT+fmSOFw/PogRZ7\n' + + 'OMHUat3gu/uQ1M5S64nkLLFsKu7jzudBuoNmcJysPlzIbqJ7vYc82OUGe9ucF3wi\n' + + '3tbKQ983hdJiTExVRBLX/fYjPsGbG3JtPTv89eg2tjWHlPhCDMMxyRKl6isu2RTq\n' + + '6VT489Z2zQrC33MYF8ZqO1NKjtyMAMIZwxVu4cGLkVsqFmEV2ScDHa5RadDyD3Ok\n' + + 'm+mqybhvEVm5tPgY6p0ILPMN3yvJsMSPSvuBXhO/X5ppNnpw9gnxpwbjQKNhkFaG\n' + + 'M5pkADZ14uRguOLM4VthSwUSEAr5VQYCFZhEwK+UOyJAGiB/nJz6IxL5XBNUXmRM\n' + + 'Hl8Xvz4riq48LMQbjcVQj0XvH941yPh+P8xOi00SGaQRaWp55Vyr4YKGbV0mEDz1\n' + + 'r1o=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIF/zCCA+egAwIBAgIRAKwYju1QWxUZpn6D1gOtwgQwDQYJKoZIhvcNAQEMBQAw\n' + + 'gZcxCzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJ\n' + + 'bmMuMRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEwMC4GA1UEAwwn\n' + + 'QW1hem9uIFJEUyBldS13ZXN0LTEgUm9vdCBDQSBSU0E0MDk2IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIxMDUyMDE2NTM1NFoYDzIxMjEwNTIwMTc1MzU0WjCBlzEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdBbWF6\n' + + 'b24gUkRTIGV1LXdlc3QtMSBSb290IENBIFJTQTQwOTYgRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCKdBP1U4lqWWkc\n' + + 'Cb25/BKRTsvNVnISiKocva8GAzJyKfcGRa85gmgu41U+Hz6+39K+XkRfM0YS4BvQ\n' + + 'F1XxWT0bNyypuvwCvmYShSTjN1TY0ltncDddahTajE/4MdSOZb/c98u0yt03cH+G\n' + + 'hVwRyT50h0v/UEol50VfwcVAEZEgcQQYhf1IFUFlIvKpmDOqLuFakOnc7c9akK+i\n' + + 'ivST+JO1tgowbnNkn2iLlSSgUWgb1gjaOsNfysagv1RXdlyPw3EyfwkFifAQvF2P\n' + + 'Q0ayYZfYS640cccv7efM1MSVyFHR9PrrDsF/zr2S2sGPbeHr7R/HwLl+S5J/l9N9\n' + + 'y0rk6IHAWV4dEkOvgpnuJKURwA48iu1Hhi9e4moNS6eqoK2KmY3VFpuiyWcA73nH\n' + + 'GSmyaH+YuMrF7Fnuu7GEHZL/o6+F5cL3mj2SJJhL7sz0ryf5Cs5R4yN9BIEj/f49\n' + + 'wh84pM6nexoI0Q4wiSFCxWiBpjSmOK6h7z6+2utaB5p20XDZHhxAlmlx4vMuWtjh\n' + + 'XckgRFxc+ZpVMU3cAHUpVEoO49e/+qKEpPzp8Xg4cToKw2+AfTk3cmyyXQfGwXMQ\n' + + 'ZUHNZ3w9ILMWihGCM2aGUsLcGDRennvNmnmin/SENsOQ8Ku0/a3teEzwV9cmmdYz\n' + + '5iYs1YtgPvKFobY6+T2RXXh+A5kprwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/\n' + + 'MB0GA1UdDgQWBBSyUrsQVnKmA8z6/2Ech0rCvqpNmTAOBgNVHQ8BAf8EBAMCAYYw\n' + + 'DQYJKoZIhvcNAQEMBQADggIBAFlj3IFmgiFz5lvTzFTRizhVofhTJsGr14Yfkuc7\n' + + 'UrXPuXOwJomd4uot2d/VIeGJpfnuS84qGdmQyGewGTJ9inatHsGZgHl9NHNWRwKZ\n' + + 'lTKTbBiq7aqgtUSFa06v202wpzU+1kadxJJePrbABxiXVfOmIW/a1a4hPNcT3syH\n' + + 'FIEg1+CGsp71UNjBuwg3JTKWna0sLSKcxLOSOvX1fzxK5djzVpEsvQMB4PSAzXca\n' + + 'vENgg2ErTwgTA+4s6rRtiBF9pAusN1QVuBahYP3ftrY6f3ycS4K65GnqscyfvKt5\n' + + 'YgjtEKO3ZeeX8NpubMbzC+0Z6tVKfPFk/9TXuJtwvVeqow0YMrLLyRiYvK7EzJ97\n' + + 'rrkxoKnHYQSZ+rH2tZ5SE392/rfk1PJL0cdHnkpDkUDO+8cKsFjjYKAQSNC52sKX\n' + + '74AVh6wMwxYwVZZJf2/2XxkjMWWhKNejsZhUkTISSmiLs+qPe3L67IM7GyKm9/m6\n' + + 'R3r8x6NGjhTsKH64iYJg7AeKeax4b2e4hBb6GXFftyOs7unpEOIVkJJgM6gh3mwn\n' + + 'R7v4gwFbLKADKt1vHuerSZMiTuNTGhSfCeDM53XI/mjZl2HeuCKP1mCDLlaO+gZR\n' + + 'Q/G+E0sBKgEX4xTkAc3kgkuQGfExdGtnN2U2ehF80lBHB8+2y2E+xWWXih/ZyIcW\n' + + 'wOx+\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + '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\n' + + '89cEIGdbjsA=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEADCCAuigAwIBAgIQYjbPSg4+RNRD3zNxO1fuKDANBgkqhkiG9w0BAQsFADCB\n' + + 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\n' + + 'bWF6b24gUkRTIGV1LW5vcnRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIxMDUyNDIwNTkyMVoYDzIwNjEwNTI0MjE1OTIxWjCBmDEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\n' + + 'b24gUkRTIGV1LW5vcnRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQHDAdT\n' + + 'ZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA179eQHxcV0YL\n' + + 'XMkqEmhSBazHhnRVd8yICbMq82PitE3BZcnv1Z5Zs/oOgNmMkOKae4tCXO/41JCX\n' + + 'wAgbs/eWWi+nnCfpQ/FqbLPg0h3dqzAgeszQyNl9IzTzX4Nd7JFRBVJXPIIKzlRf\n' + + '+GmFsAhi3rYgDgO27pz3ciahVSN+CuACIRYnA0K0s9lhYdddmrW/SYeWyoB7jPa2\n' + + 'LmWpAs7bDOgS4LlP2H3eFepBPgNufRytSQUVA8f58lsE5w25vNiUSnrdlvDrIU5n\n' + + 'Qwzc7NIZCx4qJpRbSKWrUtbyJriWfAkGU7i0IoainHLn0eHp9bWkwb9D+C/tMk1X\n' + + 'ERZw2PDGkwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBSFmR7s\n' + + 'dAblusFN+xhf1ae0KUqhWTAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\n' + + 'ggEBAHsXOpjPMyH9lDhPM61zYdja1ebcMVgfUvsDvt+w0xKMKPhBzYDMs/cFOi1N\n' + + 'Q8LV79VNNfI2NuvFmGygcvTIR+4h0pqqZ+wjWl3Kk5jVxCrbHg3RBX02QLumKd/i\n' + + 'kwGcEtTUvTssn3SM8bgM0/1BDXgImZPC567ciLvWDo0s/Fe9dJJC3E0G7d/4s09n\n' + + 'OMdextcxFuWBZrBm/KK3QF0ByA8MG3//VXaGO9OIeeOJCpWn1G1PjT1UklYhkg61\n' + + 'EbsTiZVA2DLd1BGzfU4o4M5mo68l0msse/ndR1nEY6IywwpgIFue7+rEleDh6b9d\n' + + 'PYkG1rHVw2I0XDG4o17aOn5E94I=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEADCCAuigAwIBAgIQC6W4HFghUkkgyQw14a6JljANBgkqhkiG9w0BAQsFADCB\n' + + 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\n' + + 'bWF6b24gUkRTIGV1LXNvdXRoLTIgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIyMDUyMzE4MTYzMloYDzIwNjIwNTIzMTkxNjMyWjCBmDEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\n' + + 'b24gUkRTIGV1LXNvdXRoLTIgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQHDAdT\n' + + 'ZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiM/t4FV2R9Nx\n' + + 'UQG203UY83jInTa/6TMq0SPyg617FqYZxvz2kkx09x3dmxepUg9ttGMlPgjsRZM5\n' + + 'LCFEi1FWk+hxHzt7vAdhHES5tdjwds3aIkgNEillmRDVrUsbrDwufLaa+MMDO2E1\n' + + 'wQ/JYFXw16WBCCi2g1EtyQ2Xp+tZDX5IWOTnvhZpW8vVDptZ2AcJ5rMhfOYO3OsK\n' + + '5EF0GGA5ldzuezP+BkrBYGJ4wVKGxeaq9+5AT8iVZrypjwRkD7Y5CurywK3+aBwm\n' + + 's9Q5Nd8t45JCOUzYp92rFKsCriD86n/JnEvgDfdP6Hvtm0/DkwXK40Wz2q0Zrd0k\n' + + 'mjP054NRPwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRR7yqd\n' + + 'SfKcX2Q8GzhcVucReIpewTAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\n' + + 'ggEBAEszBRDwXcZyNm07VcFwI1Im94oKwKccuKYeJEsizTBsVon8VpEiMwDs+yGu\n' + + '3p8kBhvkLwWybkD/vv6McH7T5b9jDX2DoOudqYnnaYeypsPH/00Vh3LvKagqzQza\n' + + 'orWLx+0tLo8xW4BtU+Wrn3JId8LvAhxyYXTn9bm+EwPcStp8xGLwu53OPD1RXYuy\n' + + 'uu+3ps/2piP7GVfou7H6PRaqbFHNfiGg6Y+WA0HGHiJzn8uLmrRJ5YRdIOOG9/xi\n' + + 'qTmAZloUNM7VNuurcMM2hWF494tQpsQ6ysg2qPjbBqzlGoOt3GfBTOZmqmwmqtam\n' + + 'K7juWM/mdMQAJ3SMlE5wI8nVdx4=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIICrjCCAjSgAwIBAgIRAL9SdzVPcpq7GOpvdGoM80IwCgYIKoZIzj0EAwMwgZYx\n' + + 'CzAJBgNVBAYTAlVTMSIwIAYDVQQKDBlBbWF6b24gV2ViIFNlcnZpY2VzLCBJbmMu\n' + + 'MRMwEQYDVQQLDApBbWF6b24gUkRTMQswCQYDVQQIDAJXQTEvMC0GA1UEAwwmQW1h\n' + + 'em9uIFJEUyBldS13ZXN0LTEgUm9vdCBDQSBFQ0MzODQgRzExEDAOBgNVBAcMB1Nl\n' + + 'YXR0bGUwIBcNMjEwNTIwMTY1ODA3WhgPMjEyMTA1MjAxNzU4MDdaMIGWMQswCQYD\n' + + 'VQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjETMBEG\n' + + 'A1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExLzAtBgNVBAMMJkFtYXpvbiBS\n' + + 'RFMgZXUtd2VzdC0xIFJvb3QgQ0EgRUNDMzg0IEcxMRAwDgYDVQQHDAdTZWF0dGxl\n' + + 'MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEJWDgXebvwjR+Ce+hxKOLbnsfN5W5dOlP\n' + + 'Zn8kwWnD+SLkU81Eac/BDJsXGrMk6jFD1vg16PEkoSevsuYWlC8xR6FmT6F6pmeh\n' + + 'fsMGOyJpfK4fyoEPhKeQoT23lFIc5Orjo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0G\n' + + 'A1UdDgQWBBSVNAN1CHAz0eZ77qz2adeqjm31TzAOBgNVHQ8BAf8EBAMCAYYwCgYI\n' + + 'KoZIzj0EAwMDaAAwZQIxAMlQeHbcjor49jqmcJ9gRLWdEWpXG8thIf6zfYQ/OEAg\n' + + 'd7GDh4fR/OUk0VfjsBUN/gIwZB0bGdXvK38s6AAE/9IT051cz/wMe9GIrX1MnL1T\n' + + '1F5OqnXJdiwfZRRTHsRQ/L00\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + '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\n' + + '1YfpdH2jp30=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIID/jCCAuagAwIBAgIQTDc+UgTRtYO7ZGTQ8UWKDDANBgkqhkiG9w0BAQsFADCB\n' + + 'lzELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTAwLgYDVQQDDCdB\n' + + 'bWF6b24gUkRTIGV1LXdlc3QtMiBSb290IENBIFJTQTIwNDggRzExEDAOBgNVBAcM\n' + + 'B1NlYXR0bGUwIBcNMjEwNTIxMjI0NjI0WhgPMjA2MTA1MjEyMzQ2MjRaMIGXMQsw\n' + + 'CQYDVQQGEwJVUzEiMCAGA1UECgwZQW1hem9uIFdlYiBTZXJ2aWNlcywgSW5jLjET\n' + + 'MBEGA1UECwwKQW1hem9uIFJEUzELMAkGA1UECAwCV0ExMDAuBgNVBAMMJ0FtYXpv\n' + + 'biBSRFMgZXUtd2VzdC0yIFJvb3QgQ0EgUlNBMjA0OCBHMTEQMA4GA1UEBwwHU2Vh\n' + + 'dHRsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM1oGtthQ1YiVIC2\n' + + 'i4u4swMAGxAjc/BZp0yq0eP5ZQFaxnxs7zFAPabEWsrjeDzrRhdVO0h7zskrertP\n' + + 'gblGhfD20JfjvCHdP1RUhy/nzG+T+hn6Takan/GIgs8grlBMRHMgBYHW7tklhjaH\n' + + '3F7LujhceAHhhgp6IOrpb6YTaTTaJbF3GTmkqxSJ3l1LtEoWz8Al/nL/Ftzxrtez\n' + + 'Vs6ebpvd7sw37sxmXBWX2OlvUrPCTmladw9OrllGXtCFw4YyLe3zozBlZ3cHzQ0q\n' + + 'lINhpRcajTMfZrsiGCkQtoJT+AqVJPS2sHjqsEH8yiySW9Jbq4zyMbM1yqQ2vnnx\n' + + 'MJgoYMcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUaQG88UnV\n' + + 'JPTI+Pcti1P+q3H7pGYwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEBCwUAA4IB\n' + + 'AQBAkgr75V0sEJimC6QRiTVWEuj2Khy7unjSfudbM6zumhXEU2/sUaVLiYy6cA/x\n' + + '3v0laDle6T07x9g64j5YastE/4jbzrGgIINFlY0JnaYmR3KZEjgi1s1fkRRf3llL\n' + + 'PJm9u4Q1mbwAMQK/ZjLuuRcL3uRIHJek18nRqT5h43GB26qXyvJqeYYpYfIjL9+/\n' + + 'YiZAbSRRZG+Li23cmPWrbA1CJY121SB+WybCbysbOXzhD3Sl2KSZRwSw4p2HrFtV\n' + + '1Prk0dOBtZxCG9luf87ultuDZpfS0w6oNBAMXocgswk24ylcADkkFxBWW+7BETn1\n' + + 'EpK+t1Lm37mU4sxtuha00XAi\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIEADCCAuigAwIBAgIQcY44/8NUvBwr6LlHfRy7KjANBgkqhkiG9w0BAQsFADCB\n' + + 'mDELMAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIElu\n' + + 'Yy4xEzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChB\n' + + 'bWF6b24gUkRTIGV1LXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQH\n' + + 'DAdTZWF0dGxlMCAXDTIxMDUxOTE4MjcxOFoYDzIwNjEwNTE5MTkyNzE4WjCBmDEL\n' + + 'MAkGA1UEBhMCVVMxIjAgBgNVBAoMGUFtYXpvbiBXZWIgU2VydmljZXMsIEluYy4x\n' + + 'EzARBgNVBAsMCkFtYXpvbiBSRFMxCzAJBgNVBAgMAldBMTEwLwYDVQQDDChBbWF6\n' + + 'b24gUkRTIGV1LXNvdXRoLTEgUm9vdCBDQSBSU0EyMDQ4IEcxMRAwDgYDVQQHDAdT\n' + + 'ZWF0dGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0UaBeC+Usalu\n' + + 'EtXnV7+PnH+gi7/71tI/jkKVGKuhD2JDVvqLVoqbMHRh3+wGMvqKCjbHPcC2XMWv\n' + + '566fpAj4UZ9CLB5fVzss+QVNTl+FH2XhEzigopp+872ajsNzcZxrMkifxGb4i0U+\n' + + 't0Zi+UrbL5tsfP2JonKR1crOrbS6/DlzHBjIiJazGOQcMsJjNuTOItLbMohLpraA\n' + + '/nApa3kOvI7Ufool1/34MG0+wL3UUA4YkZ6oBJVxjZvvs6tI7Lzz/SnhK2widGdc\n' + + 'snbLqBpHNIZQSorVoiwcFaRBGYX/uzYkiw44Yfa4cK2V/B5zgu1Fbr0gbI2am4eh\n' + + 'yVYyg4jPawIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS9gM1m\n' + + 'IIjyh9O5H/7Vj0R/akI7UzAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQELBQAD\n' + + 'ggEBAF0Sm9HC2AUyedBVnwgkVXMibnYChOzz7T+0Y+fOLXYAEXex2s8oqGeZdGYX\n' + + 'JHkjBn7JXu7LM+TpTbPbFFDoc1sgMguD/ls+8XsqAl1CssW+amryIL+jfcfbgQ+P\n' + + 'ICwEUD9hGdjBgJ5WcuS+qqxHsEIlFNci3HxcxfBa9VsWs5TjI7Vsl4meL5lf7ZyL\n' + + 'wDV7dHRuU+cImqG1MIvPRIlvPnT7EghrCYi2VCPhP2pM/UvShuwVnkz4MJ29ebIk\n' + + 'WR9kpblFxFdE92D5UUvMCjC2kmtgzNiErvTcwIvOO9YCbBHzRB1fFiWrXUHhJWq9\n' + + 'IkaxR5icb/IpAV0A1lYZEWMVsfQ=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + '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\n' + + 'rM2p0kk=\n' + + '-----END CERTIFICATE-----\n', +]; diff --git a/node_modules/aws-ssl-profiles/lib/profiles/ca/proxies.d.ts b/node_modules/aws-ssl-profiles/lib/profiles/ca/proxies.d.ts new file mode 100644 index 0000000..da2b76b --- /dev/null +++ b/node_modules/aws-ssl-profiles/lib/profiles/ca/proxies.d.ts @@ -0,0 +1,8 @@ +import type { CA } from '../../@types/profiles.js'; +/** + * CA Certificates for **Amazon RDS Proxy** (2024) + * + * - https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-proxy.howitworks.html#rds-proxy-security.tls + * - https://www.amazontrust.com/repository/ + */ +export declare const proxies: CA; diff --git a/node_modules/aws-ssl-profiles/lib/profiles/ca/proxies.js b/node_modules/aws-ssl-profiles/lib/profiles/ca/proxies.js new file mode 100644 index 0000000..367a4c3 --- /dev/null +++ b/node_modules/aws-ssl-profiles/lib/profiles/ca/proxies.js @@ -0,0 +1,111 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.proxies = void 0; +/** + * CA Certificates for **Amazon RDS Proxy** (2024) + * + * - https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/rds-proxy.howitworks.html#rds-proxy-security.tls + * - https://www.amazontrust.com/repository/ + */ +exports.proxies = [ + '-----BEGIN CERTIFICATE-----\n' + + 'MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsF\n' + + 'ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6\n' + + 'b24gUm9vdCBDQSAxMB4XDTE1MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTEL\n' + + 'MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv\n' + + 'b3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALJ4gHHKeNXj\n' + + 'ca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgHFzZM\n' + + '9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qw\n' + + 'IFAGbHrQgLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6\n' + + 'VOujw5H5SNz/0egwLX0tdHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L\n' + + '93FcXmn/6pUCyziKrlA4b9v7LWIbxcceVOF34GfID5yHI9Y/QCB/IIDEgEw+OyQm\n' + + 'jgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC\n' + + 'AYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3DQEBCwUA\n' + + 'A4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDI\n' + + 'U5PMCCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUs\n' + + 'N+gDS63pYaACbvXy8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vv\n' + + 'o/ufQJVtMVT8QtPHRh8jrdkPSHCa2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU\n' + + '5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2xJNDd2ZhwLnoQdeXeGADbkpy\n' + + 'rqXRfboQnoZsG4q5WTP468SQvvG5\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwF\n' + + 'ADA5MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6\n' + + 'b24gUm9vdCBDQSAyMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTEL\n' + + 'MAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJv\n' + + 'b3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK2Wny2cSkxK\n' + + 'gXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4kHbZ\n' + + 'W0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg\n' + + '1dKmSYXpN+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K\n' + + '8nu+NQWpEjTj82R0Yiw9AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r\n' + + '2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvdfLC6HM783k81ds8P+HgfajZRRidhW+me\n' + + 'z/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAExkv8LV/SasrlX6avvDXbR\n' + + '8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSSbtqDT6Zj\n' + + 'mUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz\n' + + '7Mt0Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6\n' + + '+XUyo05f7O0oYtlNc/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI\n' + + '0u1ufm8/0i2BWSlmy5A5lREedCf+3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMB\n' + + 'Af8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSwDPBMMPQFWAJI/TPlUq9LhONm\n' + + 'UjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oAA7CXDpO8Wqj2\n' + + 'LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY\n' + + '+gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kS\n' + + 'k5Nrp+gvU5LEYFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl\n' + + '7uxMMne0nxrpS10gxdr9HIcWxkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygm\n' + + 'btmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQgj9sAq+uEjonljYE1x2igGOpm/Hl\n' + + 'urR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbWaQbLU8uz/mtBzUF+\n' + + 'fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoVYh63\n' + + 'n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE\n' + + '76KlXIx3KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H\n' + + '9jVlpNMKVv/1F2Rs76giJUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT\n' + + '4PsJYGw=\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5\n' + + 'MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g\n' + + 'Um9vdCBDQSAzMB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG\n' + + 'A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg\n' + + 'Q0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZBf8ANm+gBG1bG8lKl\n' + + 'ui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjrZt6j\n' + + 'QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSr\n' + + 'ttvXBp43rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkr\n' + + 'BqWTrBqYaGFy+uGh0PsceGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteM\n' + + 'YyRIHN8wfdVoOw==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5\n' + + 'MQswCQYDVQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24g\n' + + 'Um9vdCBDQSA0MB4XDTE1MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkG\n' + + 'A1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZMBcGA1UEAxMQQW1hem9uIFJvb3Qg\n' + + 'Q0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN/sGKe0uoe0ZLY7Bi\n' + + '9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri83Bk\n' + + 'M6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB\n' + + '/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WB\n' + + 'MAoGCCqGSM49BAMDA2gAMGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlw\n' + + 'CkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1AE47xDqUEpHJWEadIRNyp4iciuRMStuW\n' + + '1KyLa2tJElMzrdfkviT8tQp21KW8EA==\n' + + '-----END CERTIFICATE-----\n', + '-----BEGIN CERTIFICATE-----\n' + + 'MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx\n' + + 'EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT\n' + + 'HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs\n' + + 'ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5\n' + + 'MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD\n' + + 'VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy\n' + + 'ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy\n' + + 'dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI\n' + + 'hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p\n' + + 'OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2\n' + + '8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K\n' + + 'Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe\n' + + 'hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk\n' + + '6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw\n' + + 'DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q\n' + + 'AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI\n' + + 'bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB\n' + + 've6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z\n' + + 'qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd\n' + + 'iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn\n' + + '0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN\n' + + 'sSi6\n' + + '-----END CERTIFICATE-----\n', +]; diff --git a/node_modules/aws-ssl-profiles/package.json b/node_modules/aws-ssl-profiles/package.json new file mode 100644 index 0000000..0856ad9 --- /dev/null +++ b/node_modules/aws-ssl-profiles/package.json @@ -0,0 +1,52 @@ +{ + "name": "aws-ssl-profiles", + "version": "1.1.2", + "main": "lib/index.js", + "author": "https://github.com/wellwelwel", + "description": "AWS RDS SSL certificates bundles.", + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/mysqljs/aws-ssl-profiles" + }, + "bugs": { + "url": "https://github.com/mysqljs/aws-ssl-profiles/issues" + }, + "devDependencies": { + "@biomejs/biome": "^1.8.3", + "@types/node": "^22.5.1", + "@types/x509.js": "^1.0.3", + "poku": "^2.5.0", + "prettier": "^3.3.3", + "tsx": "^4.19.0", + "typescript": "^5.5.4", + "x509.js": "^1.0.0" + }, + "files": [ + "lib" + ], + "engines": { + "node": ">= 6.0.0" + }, + "keywords": [ + "mysql", + "mysql2", + "pg", + "postgres", + "aws", + "rds", + "ssl", + "certificates", + "ca", + "bundle" + ], + "scripts": { + "build": "npx tsc", + "postbuild": "cp src/index.d.ts lib/index.d.ts", + "lint": "npx @biomejs/biome lint && prettier --check .", + "lint:fix": "npx @biomejs/biome lint --write . && prettier --write .", + "pretest": "npm run build", + "test": "poku --parallel ./test", + "test:ci": "npm run lint && npm run test" + } +} diff --git a/node_modules/axios/CHANGELOG.md b/node_modules/axios/CHANGELOG.md new file mode 100644 index 0000000..f7248aa --- /dev/null +++ b/node_modules/axios/CHANGELOG.md @@ -0,0 +1,1196 @@ +# Changelog + +# [1.9.0](https://github.com/axios/axios/compare/v1.8.4...v1.9.0) (2025-04-24) + + +### Bug Fixes + +* **core:** fix the Axios constructor implementation to treat the config argument as optional; ([#6881](https://github.com/axios/axios/issues/6881)) ([6c5d4cd](https://github.com/axios/axios/commit/6c5d4cd69286868059c5e52d45085cb9a894a983)) +* **fetch:** fixed ERR_NETWORK mapping for Safari browsers; ([#6767](https://github.com/axios/axios/issues/6767)) ([dfe8411](https://github.com/axios/axios/commit/dfe8411c9a082c3d068bdd1f8d6e73054f387f45)) +* **headers:** allow iterable objects to be a data source for the set method; ([#6873](https://github.com/axios/axios/issues/6873)) ([1b1f9cc](https://github.com/axios/axios/commit/1b1f9ccdc15f1ea745160ec9a5223de9db4673bc)) +* **headers:** fix `getSetCookie` by using 'get' method for caseless access; ([#6874](https://github.com/axios/axios/issues/6874)) ([d4f7df4](https://github.com/axios/axios/commit/d4f7df4b304af8b373488fdf8e830793ff843eb9)) +* **headers:** fixed support for setting multiple header values from an iterated source; ([#6885](https://github.com/axios/axios/issues/6885)) ([f7a3b5e](https://github.com/axios/axios/commit/f7a3b5e0f7e5e127b97defa92a132fbf1b55cf15)) +* **http:** send minimal end multipart boundary ([#6661](https://github.com/axios/axios/issues/6661)) ([987d2e2](https://github.com/axios/axios/commit/987d2e2dd3b362757550f36eab875e60640b6ddc)) +* **types:** fix autocomplete for adapter config ([#6855](https://github.com/axios/axios/issues/6855)) ([e61a893](https://github.com/axios/axios/commit/e61a8934d8f94dd429a2f309b48c67307c700df0)) + + +### Features + +* **AxiosHeaders:** add getSetCookie method to retrieve set-cookie headers values ([#5707](https://github.com/axios/axios/issues/5707)) ([80ea756](https://github.com/axios/axios/commit/80ea756e72bcf53110fa792f5d7ab76e8b11c996)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+200/-34 (#6890 #6889 #6888 #6885 #6881 #6767 #6874 #6873 )") +- avatar [Jay](https://github.com/jasonsaayman "+26/-1 ()") +- avatar [Willian Agostini](https://github.com/WillianAgostini "+21/-0 (#5707 )") +- avatar [George Cheng](https://github.com/Gerhut "+3/-3 (#5096 )") +- avatar [FatahChan](https://github.com/FatahChan "+2/-2 (#6855 )") +- avatar [Ionuศ› G. Stan](https://github.com/igstan "+1/-1 (#6661 )") + +## [1.8.4](https://github.com/axios/axios/compare/v1.8.3...v1.8.4) (2025-03-19) + + +### Bug Fixes + +* **buildFullPath:** handle `allowAbsoluteUrls: false` without `baseURL` ([#6833](https://github.com/axios/axios/issues/6833)) ([f10c2e0](https://github.com/axios/axios/commit/f10c2e0de7fde0051f848609a29c2906d0caa1d9)) + +### Contributors to this release + +- avatar [Marc Hassan](https://github.com/mhassan1 "+5/-1 (#6833 )") + +## [1.8.3](https://github.com/axios/axios/compare/v1.8.2...v1.8.3) (2025-03-10) + + +### Bug Fixes + +* add missing type for allowAbsoluteUrls ([#6818](https://github.com/axios/axios/issues/6818)) ([10fa70e](https://github.com/axios/axios/commit/10fa70ef14fe39558b15a179f0e82f5f5e5d11b2)) +* **xhr/fetch:** pass `allowAbsoluteUrls` to `buildFullPath` in `xhr` and `fetch` adapters ([#6814](https://github.com/axios/axios/issues/6814)) ([ec159e5](https://github.com/axios/axios/commit/ec159e507bdf08c04ba1a10fe7710094e9e50ec9)) + +### Contributors to this release + +- avatar [Ashcon Partovi](https://github.com/Electroid "+6/-0 (#6811 )") +- avatar [StefanBRas](https://github.com/StefanBRas "+4/-0 (#6818 )") +- avatar [Marc Hassan](https://github.com/mhassan1 "+2/-2 (#6814 )") + +## [1.8.2](https://github.com/axios/axios/compare/v1.8.1...v1.8.2) (2025-03-07) + + +### Bug Fixes + +* **http-adapter:** add allowAbsoluteUrls to path building ([#6810](https://github.com/axios/axios/issues/6810)) ([fb8eec2](https://github.com/axios/axios/commit/fb8eec214ce7744b5ca787f2c3b8339b2f54b00f)) + +### Contributors to this release + +- avatar [Fasoro-Joseph Alexander](https://github.com/lexcorp16 "+1/-1 (#6810 )") + +## [1.8.1](https://github.com/axios/axios/compare/v1.8.0...v1.8.1) (2025-02-26) + + +### Bug Fixes + +* **utils:** move `generateString` to platform utils to avoid importing crypto module into client builds; ([#6789](https://github.com/axios/axios/issues/6789)) ([36a5a62](https://github.com/axios/axios/commit/36a5a620bec0b181451927f13ac85b9888b86cec)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+51/-47 (#6789 )") + +# [1.8.0](https://github.com/axios/axios/compare/v1.7.9...v1.8.0) (2025-02-25) + + +### Bug Fixes + +* **examples:** application crashed when navigating examples in browser ([#5938](https://github.com/axios/axios/issues/5938)) ([1260ded](https://github.com/axios/axios/commit/1260ded634ec101dd5ed05d3b70f8e8f899dba6c)) +* missing word in SUPPORT_QUESTION.yml ([#6757](https://github.com/axios/axios/issues/6757)) ([1f890b1](https://github.com/axios/axios/commit/1f890b13f2c25a016f3c84ae78efb769f244133e)) +* **utils:** replace getRandomValues with crypto module ([#6788](https://github.com/axios/axios/issues/6788)) ([23a25af](https://github.com/axios/axios/commit/23a25af0688d1db2c396deb09229d2271cc24f6c)) + + +### Features + +* Add config for ignoring absolute URLs ([#5902](https://github.com/axios/axios/issues/5902)) ([#6192](https://github.com/axios/axios/issues/6192)) ([32c7bcc](https://github.com/axios/axios/commit/32c7bcc0f233285ba27dec73a4b1e81fb7a219b3)) + + +### Reverts + +* Revert "chore: expose fromDataToStream to be consumable (#6731)" (#6732) ([1317261](https://github.com/axios/axios/commit/1317261125e9c419fe9f126867f64d28f9c1efda)), closes [#6731](https://github.com/axios/axios/issues/6731) [#6732](https://github.com/axios/axios/issues/6732) + + +### BREAKING CHANGES + +* code relying on the above will now combine the URLs instead of prefer request URL + +* feat: add config option for allowing absolute URLs + +* fix: add default value for allowAbsoluteUrls in buildFullPath + +* fix: typo in flow control when setting allowAbsoluteUrls + +### Contributors to this release + +- avatar [Michael Toscano](https://github.com/GethosTheWalrus "+42/-8 (#6192 )") +- avatar [Willian Agostini](https://github.com/WillianAgostini "+26/-3 (#6788 #6777 )") +- avatar [Naron](https://github.com/naronchen "+27/-0 (#5901 )") +- avatar [shravan || เคถเฅเคฐvan](https://github.com/shravan20 "+7/-3 (#6116 )") +- avatar [Justin Dhillon](https://github.com/justindhillon "+0/-7 (#6312 )") +- avatar [yionr](https://github.com/yionr "+5/-1 (#6129 )") +- avatar [Shin'ya Ueoka](https://github.com/ueokande "+3/-3 (#5935 )") +- avatar [Dan Dascalescu](https://github.com/dandv "+3/-3 (#5908 #6757 )") +- avatar [Nitin Ramnani](https://github.com/NitinRamnani "+2/-2 (#5938 )") +- avatar [Shay Molcho](https://github.com/shaymolcho "+2/-2 (#6770 )") +- avatar [Jay](https://github.com/jasonsaayman "+0/-3 (#6732 )") +- fancy45daddy +- avatar [Habip Akyol](https://github.com/habipakyol "+1/-1 (#6030 )") +- avatar [Bailey Lissington](https://github.com/llamington "+1/-1 (#6771 )") +- avatar [Bernardo da Eira Duarte](https://github.com/bernardoduarte "+1/-1 (#6480 )") +- avatar [Shivam Batham](https://github.com/Shivam-Batham "+1/-1 (#5949 )") +- avatar [Lipin Kariappa](https://github.com/lipinnnnn "+1/-1 (#5936 )") + +## [1.7.9](https://github.com/axios/axios/compare/v1.7.8...v1.7.9) (2024-12-04) + + +### Reverts + +* Revert "fix(types): export CJS types from ESM (#6218)" (#6729) ([c44d2f2](https://github.com/axios/axios/commit/c44d2f2316ad289b38997657248ba10de11deb6c)), closes [#6218](https://github.com/axios/axios/issues/6218) [#6729](https://github.com/axios/axios/issues/6729) + +### Contributors to this release + +- avatar [Jay](https://github.com/jasonsaayman "+596/-108 (#6729 )") + +## [1.7.8](https://github.com/axios/axios/compare/v1.7.7...v1.7.8) (2024-11-25) + + +### Bug Fixes + +* allow passing a callback as paramsSerializer to buildURL ([#6680](https://github.com/axios/axios/issues/6680)) ([eac4619](https://github.com/axios/axios/commit/eac4619fe2e0926e876cd260ee21e3690381dbb5)) +* **core:** fixed config merging bug ([#6668](https://github.com/axios/axios/issues/6668)) ([5d99fe4](https://github.com/axios/axios/commit/5d99fe4491202a6268c71e5dcc09192359d73cea)) +* fixed width form to not shrink after 'Send Request' button is clicked ([#6644](https://github.com/axios/axios/issues/6644)) ([7ccd5fd](https://github.com/axios/axios/commit/7ccd5fd42402102d38712c32707bf055be72ab54)) +* **http:** add support for File objects as payload in http adapter ([#6588](https://github.com/axios/axios/issues/6588)) ([#6605](https://github.com/axios/axios/issues/6605)) ([6841d8d](https://github.com/axios/axios/commit/6841d8d18ddc71cc1bd202ffcfddb3f95622eef3)) +* **http:** fixed proxy-from-env module import ([#5222](https://github.com/axios/axios/issues/5222)) ([12b3295](https://github.com/axios/axios/commit/12b32957f1258aee94ef859809ed39f8f88f9dfa)) +* **http:** use `globalThis.TextEncoder` when available ([#6634](https://github.com/axios/axios/issues/6634)) ([df956d1](https://github.com/axios/axios/commit/df956d18febc9100a563298dfdf0f102c3d15410)) +* ios11 breaks when build ([#6608](https://github.com/axios/axios/issues/6608)) ([7638952](https://github.com/axios/axios/commit/763895270f7b50c7c780c3c9807ae8635de952cd)) +* **types:** add missing types for mergeConfig function ([#6590](https://github.com/axios/axios/issues/6590)) ([00de614](https://github.com/axios/axios/commit/00de614cd07b7149af335e202aef0e076c254f49)) +* **types:** export CJS types from ESM ([#6218](https://github.com/axios/axios/issues/6218)) ([c71811b](https://github.com/axios/axios/commit/c71811b00f2fcff558e4382ba913bdac4ad7200e)) +* updated stream aborted error message to be more clear ([#6615](https://github.com/axios/axios/issues/6615)) ([cc3217a](https://github.com/axios/axios/commit/cc3217a612024d83a663722a56d7a98d8759c6d5)) +* use URL API instead of DOM to fix a potential vulnerability warning; ([#6714](https://github.com/axios/axios/issues/6714)) ([0a8d6e1](https://github.com/axios/axios/commit/0a8d6e19da5b9899a2abafaaa06a75ee548597db)) + +### Contributors to this release + +- avatar [Remco Haszing](https://github.com/remcohaszing "+108/-596 (#6218 )") +- avatar [Jay](https://github.com/jasonsaayman "+281/-19 (#6640 #6619 )") +- avatar [Aayush Yadav](https://github.com/aayushyadav020 "+124/-111 (#6617 )") +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+12/-65 (#6714 )") +- avatar [Ell Bradshaw](https://github.com/cincodenada "+29/-0 (#6489 )") +- avatar [Amit Saini](https://github.com/amitsainii "+13/-3 (#5237 )") +- avatar [Tommaso Paulon](https://github.com/guuido "+14/-1 (#6680 )") +- avatar [Akki](https://github.com/Aakash-Rana "+5/-5 (#6668 )") +- avatar [Sampo Silvennoinen](https://github.com/stscoundrel "+3/-3 (#6633 )") +- avatar [Kasper Isager Dalsgarรฐ](https://github.com/kasperisager "+2/-2 (#6634 )") +- avatar [Christian Clauss](https://github.com/cclauss "+4/-0 (#6683 )") +- avatar [Pavan Welihinda](https://github.com/pavan168 "+2/-2 (#5222 )") +- avatar [Taylor Flatt](https://github.com/taylorflatt "+2/-2 (#6615 )") +- avatar [Kenzo Wada](https://github.com/Kenzo-Wada "+2/-2 (#6608 )") +- avatar [Ngole Lawson](https://github.com/echelonnought "+3/-0 (#6644 )") +- avatar [Haven](https://github.com/Baoyx007 "+3/-0 (#6590 )") +- avatar [Shrivali Dutt](https://github.com/shrivalidutt "+1/-1 (#6637 )") +- avatar [Henco Appel](https://github.com/hencoappel "+1/-1 (#6605 )") + +## [1.7.7](https://github.com/axios/axios/compare/v1.7.6...v1.7.7) (2024-08-31) + + +### Bug Fixes + +* **fetch:** fix stream handling in Safari by fallback to using a stream reader instead of an async iterator; ([#6584](https://github.com/axios/axios/issues/6584)) ([d198085](https://github.com/axios/axios/commit/d1980854fee1765cd02fa0787adf5d6e34dd9dcf)) +* **http:** fixed support for IPv6 literal strings in url ([#5731](https://github.com/axios/axios/issues/5731)) ([364993f](https://github.com/axios/axios/commit/364993f0d8bc6e0e06f76b8a35d2d0a35cab054c)) + +### Contributors to this release + +- avatar [Rishi556](https://github.com/Rishi556 "+39/-1 (#5731 )") +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+27/-7 (#6584 )") + +## [1.7.6](https://github.com/axios/axios/compare/v1.7.5...v1.7.6) (2024-08-30) + + +### Bug Fixes + +* **fetch:** fix content length calculation for FormData payload; ([#6524](https://github.com/axios/axios/issues/6524)) ([085f568](https://github.com/axios/axios/commit/085f56861a83e9ac02c140ad9d68dac540dfeeaa)) +* **fetch:** optimize signals composing logic; ([#6582](https://github.com/axios/axios/issues/6582)) ([df9889b](https://github.com/axios/axios/commit/df9889b83c2cc37e9e6189675a73ab70c60f031f)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+98/-46 (#6582 )") +- avatar [Jacques Germishuys](https://github.com/jacquesg "+5/-1 (#6524 )") +- avatar [kuroino721](https://github.com/kuroino721 "+3/-1 (#6575 )") + +## [1.7.5](https://github.com/axios/axios/compare/v1.7.4...v1.7.5) (2024-08-23) + + +### Bug Fixes + +* **adapter:** fix undefined reference to hasBrowserEnv ([#6572](https://github.com/axios/axios/issues/6572)) ([7004707](https://github.com/axios/axios/commit/7004707c4180b416341863bd86913fe4fc2f1df1)) +* **core:** add the missed implementation of AxiosError#status property; ([#6573](https://github.com/axios/axios/issues/6573)) ([6700a8a](https://github.com/axios/axios/commit/6700a8adac06942205f6a7a21421ecb36c4e0852)) +* **core:** fix `ReferenceError: navigator is not defined` for custom environments; ([#6567](https://github.com/axios/axios/issues/6567)) ([fed1a4b](https://github.com/axios/axios/commit/fed1a4b2d78ed4a588c84e09d32749ed01dc2794)) +* **fetch:** fix credentials handling in Cloudflare workers ([#6533](https://github.com/axios/axios/issues/6533)) ([550d885](https://github.com/axios/axios/commit/550d885eb90fd156add7b93bbdc54d30d2f9a98d)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+187/-83 (#6573 #6567 #6566 #6564 #6563 #6557 #6556 #6555 #6554 #6552 )") +- avatar [Antonin Bas](https://github.com/antoninbas "+6/-6 (#6572 )") +- avatar [Hans Otto Wirtz](https://github.com/hansottowirtz "+4/-1 (#6533 )") + +## [1.7.4](https://github.com/axios/axios/compare/v1.7.3...v1.7.4) (2024-08-13) + + +### Bug Fixes + +* **sec:** CVE-2024-39338 ([#6539](https://github.com/axios/axios/issues/6539)) ([#6543](https://github.com/axios/axios/issues/6543)) ([6b6b605](https://github.com/axios/axios/commit/6b6b605eaf73852fb2dae033f1e786155959de3a)) +* **sec:** disregard protocol-relative URL to remediate SSRF ([#6539](https://github.com/axios/axios/issues/6539)) ([07a661a](https://github.com/axios/axios/commit/07a661a2a6b9092c4aa640dcc7f724ec5e65bdda)) + +### Contributors to this release + +- avatar [Lev Pachmanov](https://github.com/levpachmanov "+47/-11 (#6543 )") +- avatar [ฤแป— Trแปng Hแบฃi](https://github.com/hainenber "+49/-4 (#6539 )") + +## [1.7.3](https://github.com/axios/axios/compare/v1.7.2...v1.7.3) (2024-08-01) + + +### Bug Fixes + +* **adapter:** fix progress event emitting; ([#6518](https://github.com/axios/axios/issues/6518)) ([e3c76fc](https://github.com/axios/axios/commit/e3c76fc9bdd03aa4d98afaf211df943e2031453f)) +* **fetch:** fix withCredentials request config ([#6505](https://github.com/axios/axios/issues/6505)) ([85d4d0e](https://github.com/axios/axios/commit/85d4d0ea0aae91082f04e303dec46510d1b4e787)) +* **xhr:** return original config on errors from XHR adapter ([#6515](https://github.com/axios/axios/issues/6515)) ([8966ee7](https://github.com/axios/axios/commit/8966ee7ea62ecbd6cfb39a905939bcdab5cf6388)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+211/-159 (#6518 #6519 )") +- avatar [Valerii Sidorenko](https://github.com/ValeraS "+3/-3 (#6515 )") +- avatar [prianYu](https://github.com/prianyu "+2/-2 (#6505 )") + +## [1.7.2](https://github.com/axios/axios/compare/v1.7.1...v1.7.2) (2024-05-21) + + +### Bug Fixes + +* **fetch:** enhance fetch API detection; ([#6413](https://github.com/axios/axios/issues/6413)) ([4f79aef](https://github.com/axios/axios/commit/4f79aef81b7c4644328365bfc33acf0a9ef595bc)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+3/-3 (#6413 )") + +## [1.7.1](https://github.com/axios/axios/compare/v1.7.0...v1.7.1) (2024-05-20) + + +### Bug Fixes + +* **fetch:** fixed ReferenceError issue when TextEncoder is not available in the environment; ([#6410](https://github.com/axios/axios/issues/6410)) ([733f15f](https://github.com/axios/axios/commit/733f15fe5bd2d67e1fadaee82e7913b70d45dc5e)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+14/-9 (#6410 )") + +# [1.7.0](https://github.com/axios/axios/compare/v1.7.0-beta.2...v1.7.0) (2024-05-19) + + +### Features + +* **adapter:** add fetch adapter; ([#6371](https://github.com/axios/axios/issues/6371)) ([a3ff99b](https://github.com/axios/axios/commit/a3ff99b59d8ec2ab5dd049e68c043617a4072e42)) + +### Bug Fixes + +* **core/axios:** handle un-writable error stack ([#6362](https://github.com/axios/axios/issues/6362)) ([81e0455](https://github.com/axios/axios/commit/81e0455b7b57fbaf2be16a73ebe0e6591cc6d8f9)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+1015/-127 (#6371 )") +- avatar [Jay](https://github.com/jasonsaayman "+30/-14 ()") +- avatar [Alexandre ABRIOUX](https://github.com/alexandre-abrioux "+56/-6 (#6362 )") + +# [1.7.0-beta.2](https://github.com/axios/axios/compare/v1.7.0-beta.1...v1.7.0-beta.2) (2024-05-19) + + +### Bug Fixes + +* **fetch:** capitalize HTTP method names; ([#6395](https://github.com/axios/axios/issues/6395)) ([ad3174a](https://github.com/axios/axios/commit/ad3174a3515c3c2573f4bcb94818d582826f3914)) +* **fetch:** fix & optimize progress capturing for cases when the request data has a nullish value or zero data length ([#6400](https://github.com/axios/axios/issues/6400)) ([95a3e8e](https://github.com/axios/axios/commit/95a3e8e346cfd6a5548e171f2341df3235d0e26b)) +* **fetch:** fix headers getting from a stream response; ([#6401](https://github.com/axios/axios/issues/6401)) ([870e0a7](https://github.com/axios/axios/commit/870e0a76f60d0094774a6a63fa606eec52a381af)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+99/-46 (#6405 #6404 #6401 #6400 #6395 )") + +# [1.7.0-beta.1](https://github.com/axios/axios/compare/v1.7.0-beta.0...v1.7.0-beta.1) (2024-05-07) + + +### Bug Fixes + +* **core/axios:** handle un-writable error stack ([#6362](https://github.com/axios/axios/issues/6362)) ([81e0455](https://github.com/axios/axios/commit/81e0455b7b57fbaf2be16a73ebe0e6591cc6d8f9)) +* **fetch:** fix cases when ReadableStream or Response.body are not available; ([#6377](https://github.com/axios/axios/issues/6377)) ([d1d359d](https://github.com/axios/axios/commit/d1d359da347704e8b28d768e61515a3e96c5b072)) +* **fetch:** treat fetch-related TypeError as an AxiosError.ERR_NETWORK error; ([#6380](https://github.com/axios/axios/issues/6380)) ([bb5f9a5](https://github.com/axios/axios/commit/bb5f9a5ab768452de9e166dc28d0ffc234245ef1)) + +### Contributors to this release + +- avatar [Alexandre ABRIOUX](https://github.com/alexandre-abrioux "+56/-6 (#6362 )") +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+42/-17 (#6380 #6377 )") + +# [1.7.0-beta.0](https://github.com/axios/axios/compare/v1.6.8...v1.7.0-beta.0) (2024-04-28) + + +### Features + +* **adapter:** add fetch adapter; ([#6371](https://github.com/axios/axios/issues/6371)) ([a3ff99b](https://github.com/axios/axios/commit/a3ff99b59d8ec2ab5dd049e68c043617a4072e42)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+1015/-127 (#6371 )") +- avatar [Jay](https://github.com/jasonsaayman "+30/-14 ()") + +## [1.6.8](https://github.com/axios/axios/compare/v1.6.7...v1.6.8) (2024-03-15) + + +### Bug Fixes + +* **AxiosHeaders:** fix AxiosHeaders conversion to an object during config merging ([#6243](https://github.com/axios/axios/issues/6243)) ([2656612](https://github.com/axios/axios/commit/2656612bc10fe2757e9832b708ed773ab340b5cb)) +* **import:** use named export for EventEmitter; ([7320430](https://github.com/axios/axios/commit/7320430aef2e1ba2b89488a0eaf42681165498b1)) +* **vulnerability:** update follow-redirects to 1.15.6 ([#6300](https://github.com/axios/axios/issues/6300)) ([8786e0f](https://github.com/axios/axios/commit/8786e0ff55a8c68d4ca989801ad26df924042e27)) + +### Contributors to this release + +- avatar [Jay](https://github.com/jasonsaayman "+4572/-3446 (#6238 )") +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+30/-0 (#6231 )") +- avatar [Mitchell](https://github.com/Creaous "+9/-9 (#6300 )") +- avatar [Emmanuel](https://github.com/mannoeu "+2/-2 (#6196 )") +- avatar [Lucas Keller](https://github.com/ljkeller "+3/-0 (#6194 )") +- avatar [Aditya Mogili](https://github.com/ADITYA-176 "+1/-1 ()") +- avatar [Miroslav Petrov](https://github.com/petrovmiroslav "+1/-1 (#6243 )") + +## [1.6.7](https://github.com/axios/axios/compare/v1.6.6...v1.6.7) (2024-01-25) + + +### Bug Fixes + +* capture async stack only for rejections with native error objects; ([#6203](https://github.com/axios/axios/issues/6203)) ([1a08f90](https://github.com/axios/axios/commit/1a08f90f402336e4d00e9ee82f211c6adb1640b0)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+30/-26 (#6203 )") +- avatar [zhoulixiang](https://github.com/zh-lx "+0/-3 (#6186 )") + +## [1.6.6](https://github.com/axios/axios/compare/v1.6.5...v1.6.6) (2024-01-24) + + +### Bug Fixes + +* fixed missed dispatchBeforeRedirect argument ([#5778](https://github.com/axios/axios/issues/5778)) ([a1938ff](https://github.com/axios/axios/commit/a1938ff073fcb0f89011f001dfbc1fa1dc995e39)) +* wrap errors to improve async stack trace ([#5987](https://github.com/axios/axios/issues/5987)) ([123f354](https://github.com/axios/axios/commit/123f354b920f154a209ea99f76b7b2ef3d9ebbab)) + +### Contributors to this release + +- avatar [Ilya Priven](https://github.com/ikonst "+91/-8 (#5987 )") +- avatar [Zao Soula](https://github.com/zaosoula "+6/-6 (#5778 )") + +## [1.6.5](https://github.com/axios/axios/compare/v1.6.4...v1.6.5) (2024-01-05) + + +### Bug Fixes + +* **ci:** refactor notify action as a job of publish action; ([#6176](https://github.com/axios/axios/issues/6176)) ([0736f95](https://github.com/axios/axios/commit/0736f95ce8776366dc9ca569f49ba505feb6373c)) +* **dns:** fixed lookup error handling; ([#6175](https://github.com/axios/axios/issues/6175)) ([f4f2b03](https://github.com/axios/axios/commit/f4f2b039dd38eb4829e8583caede4ed6d2dd59be)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+41/-6 (#6176 #6175 )") +- avatar [Jay](https://github.com/jasonsaayman "+6/-1 ()") + +## [1.6.4](https://github.com/axios/axios/compare/v1.6.3...v1.6.4) (2024-01-03) + + +### Bug Fixes + +* **security:** fixed formToJSON prototype pollution vulnerability; ([#6167](https://github.com/axios/axios/issues/6167)) ([3c0c11c](https://github.com/axios/axios/commit/3c0c11cade045c4412c242b5727308cff9897a0e)) +* **security:** fixed security vulnerability in follow-redirects ([#6163](https://github.com/axios/axios/issues/6163)) ([75af1cd](https://github.com/axios/axios/commit/75af1cdff5b3a6ca3766d3d3afbc3115bb0811b8)) + +### Contributors to this release + +- avatar [Jay](https://github.com/jasonsaayman "+34/-6 ()") +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+34/-3 (#6172 #6167 )") +- avatar [Guy Nesher](https://github.com/gnesher "+10/-10 (#6163 )") + +## [1.6.3](https://github.com/axios/axios/compare/v1.6.2...v1.6.3) (2023-12-26) + + +### Bug Fixes + +* Regular Expression Denial of Service (ReDoS) ([#6132](https://github.com/axios/axios/issues/6132)) ([5e7ad38](https://github.com/axios/axios/commit/5e7ad38fb0f819fceb19fb2ee5d5d38f56aa837d)) + +### Contributors to this release + +- avatar [Jay](https://github.com/jasonsaayman "+15/-6 (#6145 )") +- avatar [Willian Agostini](https://github.com/WillianAgostini "+17/-2 (#6132 )") +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+3/-0 (#6084 )") + +## [1.6.2](https://github.com/axios/axios/compare/v1.6.1...v1.6.2) (2023-11-14) + + +### Features + +* **withXSRFToken:** added withXSRFToken option as a workaround to achieve the old `withCredentials` behavior; ([#6046](https://github.com/axios/axios/issues/6046)) ([cff9967](https://github.com/axios/axios/commit/cff996779b272a5e94c2b52f5503ccf668bc42dc)) + +### PRs +- feat(withXSRFToken): added withXSRFToken option as a workaround to achieve the old `withCredentials` behavior; ( [#6046](https://api.github.com/repos/axios/axios/pulls/6046) ) +``` + +๐Ÿ“ข This PR added 'withXSRFToken' option as a replacement for old withCredentials behaviour. +You should now use withXSRFToken along with withCredential to get the old behavior. +This functionality is considered as a fix. +``` + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+271/-146 (#6081 #6080 #6079 #6078 #6046 #6064 #6063 )") +- avatar [Ng Choon Khon (CK)](https://github.com/ckng0221 "+4/-4 (#6073 )") +- avatar [Muhammad Noman](https://github.com/mnomanmemon "+2/-2 (#6048 )") + +## [1.6.1](https://github.com/axios/axios/compare/v1.6.0...v1.6.1) (2023-11-08) + + +### Bug Fixes + +* **formdata:** fixed content-type header normalization for non-standard browser environments; ([#6056](https://github.com/axios/axios/issues/6056)) ([dd465ab](https://github.com/axios/axios/commit/dd465ab22bbfa262c6567be6574bf46a057d5288)) +* **platform:** fixed emulated browser detection in node.js environment; ([#6055](https://github.com/axios/axios/issues/6055)) ([3dc8369](https://github.com/axios/axios/commit/3dc8369e505e32a4e12c22f154c55fd63ac67fbb)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+432/-65 (#6059 #6056 #6055 )") +- avatar [Fabian Meyer](https://github.com/meyfa "+5/-2 (#5835 )") + +### PRs +- feat(withXSRFToken): added withXSRFToken option as a workaround to achieve the old `withCredentials` behavior; ( [#6046](https://api.github.com/repos/axios/axios/pulls/6046) ) +``` + +๐Ÿ“ข This PR added 'withXSRFToken' option as a replacement for old withCredentials behaviour. +You should now use withXSRFToken along with withCredential to get the old behavior. +This functionality is considered as a fix. +``` + +# [1.6.0](https://github.com/axios/axios/compare/v1.5.1...v1.6.0) (2023-10-26) + + +### Bug Fixes + +* **CSRF:** fixed CSRF vulnerability CVE-2023-45857 ([#6028](https://github.com/axios/axios/issues/6028)) ([96ee232](https://github.com/axios/axios/commit/96ee232bd3ee4de2e657333d4d2191cd389e14d0)) +* **dns:** fixed lookup function decorator to work properly in node v20; ([#6011](https://github.com/axios/axios/issues/6011)) ([5aaff53](https://github.com/axios/axios/commit/5aaff532a6b820bb9ab6a8cd0f77131b47e2adb8)) +* **types:** fix AxiosHeaders types; ([#5931](https://github.com/axios/axios/issues/5931)) ([a1c8ad0](https://github.com/axios/axios/commit/a1c8ad008b3c13d53e135bbd0862587fb9d3fc09)) + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+449/-114 (#6032 #6021 #6011 #5932 #5931 )") +- avatar [Valentin Panov](https://github.com/valentin-panov "+4/-4 (#6028 )") +- avatar [Rinku Chaudhari](https://github.com/therealrinku "+1/-1 (#5889 )") + +## [1.5.1](https://github.com/axios/axios/compare/v1.5.0...v1.5.1) (2023-09-26) + + +### Bug Fixes + +* **adapters:** improved adapters loading logic to have clear error messages; ([#5919](https://github.com/axios/axios/issues/5919)) ([e410779](https://github.com/axios/axios/commit/e4107797a7a1376f6209fbecfbbce73d3faa7859)) +* **formdata:** fixed automatic addition of the `Content-Type` header for FormData in non-browser environments; ([#5917](https://github.com/axios/axios/issues/5917)) ([bc9af51](https://github.com/axios/axios/commit/bc9af51b1886d1b3529617702f2a21a6c0ed5d92)) +* **headers:** allow `content-encoding` header to handle case-insensitive values ([#5890](https://github.com/axios/axios/issues/5890)) ([#5892](https://github.com/axios/axios/issues/5892)) ([4c89f25](https://github.com/axios/axios/commit/4c89f25196525e90a6e75eda9cb31ae0a2e18acd)) +* **types:** removed duplicated code ([9e62056](https://github.com/axios/axios/commit/9e6205630e1c9cf863adf141c0edb9e6d8d4b149)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+89/-18 (#5919 #5917 )") +- avatar [David Dallas](https://github.com/DavidJDallas "+11/-5 ()") +- avatar [Sean Sattler](https://github.com/fb-sean "+2/-8 ()") +- avatar [Mustafa AteลŸ Uzun](https://github.com/0o001 "+4/-4 ()") +- avatar [Przemyslaw Motacki](https://github.com/sfc-gh-pmotacki "+2/-1 (#5892 )") +- avatar [Michael Di Prisco](https://github.com/Cadienvan "+1/-1 ()") + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +# [1.5.0](https://github.com/axios/axios/compare/v1.4.0...v1.5.0) (2023-08-26) + + +### Bug Fixes + +* **adapter:** make adapter loading error more clear by using platform-specific adapters explicitly ([#5837](https://github.com/axios/axios/issues/5837)) ([9a414bb](https://github.com/axios/axios/commit/9a414bb6c81796a95c6c7fe668637825458e8b6d)) +* **dns:** fixed `cacheable-lookup` integration; ([#5836](https://github.com/axios/axios/issues/5836)) ([b3e327d](https://github.com/axios/axios/commit/b3e327dcc9277bdce34c7ef57beedf644b00d628)) +* **headers:** added support for setting header names that overlap with class methods; ([#5831](https://github.com/axios/axios/issues/5831)) ([d8b4ca0](https://github.com/axios/axios/commit/d8b4ca0ea5f2f05efa4edfe1e7684593f9f68273)) +* **headers:** fixed common Content-Type header merging; ([#5832](https://github.com/axios/axios/issues/5832)) ([8fda276](https://github.com/axios/axios/commit/8fda2766b1e6bcb72c3fabc146223083ef13ce17)) + + +### Features + +* export getAdapter function ([#5324](https://github.com/axios/axios/issues/5324)) ([ca73eb8](https://github.com/axios/axios/commit/ca73eb878df0ae2dace81fe3a7f1fb5986231bf1)) +* **export:** export adapters without `unsafe` prefix ([#5839](https://github.com/axios/axios/issues/5839)) ([1601f4a](https://github.com/axios/axios/commit/1601f4a27a81ab47fea228f1e244b2c4e3ce28bf)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+66/-29 (#5839 #5837 #5836 #5832 #5831 )") +- avatar [ๅคœ่‘ฌ](https://github.com/geekact "+42/-0 (#5324 )") +- avatar [Jonathan Budiman](https://github.com/JBudiman00 "+30/-0 (#5788 )") +- avatar [Michael Di Prisco](https://github.com/Cadienvan "+3/-5 (#5791 )") + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +# [1.4.0](https://github.com/axios/axios/compare/v1.3.6...v1.4.0) (2023-04-27) + + +### Bug Fixes + +* **formdata:** add `multipart/form-data` content type for FormData payload on custom client environments; ([#5678](https://github.com/axios/axios/issues/5678)) ([bbb61e7](https://github.com/axios/axios/commit/bbb61e70cb1185adfb1cbbb86eaf6652c48d89d1)) +* **package:** export package internals with unsafe path prefix; ([#5677](https://github.com/axios/axios/issues/5677)) ([df38c94](https://github.com/axios/axios/commit/df38c949f26414d88ba29ec1e353c4d4f97eaf09)) + + +### Features + +* **dns:** added support for a custom lookup function; ([#5339](https://github.com/axios/axios/issues/5339)) ([2701911](https://github.com/axios/axios/commit/2701911260a1faa5cc5e1afe437121b330a3b7bb)) +* **types:** export `AxiosHeaderValue` type. ([#5525](https://github.com/axios/axios/issues/5525)) ([726f1c8](https://github.com/axios/axios/commit/726f1c8e00cffa0461a8813a9bdcb8f8b9d762cf)) + + +### Performance Improvements + +* **merge-config:** optimize mergeConfig performance by avoiding duplicate key visits; ([#5679](https://github.com/axios/axios/issues/5679)) ([e6f7053](https://github.com/axios/axios/commit/e6f7053bf1a3e87cf1f9da8677e12e3fe829d68e)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+151/-16 (#5684 #5339 #5679 #5678 #5677 )") +- avatar [Arthur Fiorette](https://github.com/arthurfiorette "+19/-19 (#5525 )") +- avatar [PIYUSH NEGI](https://github.com/npiyush97 "+2/-18 (#5670 )") + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.3.6](https://github.com/axios/axios/compare/v1.3.5...v1.3.6) (2023-04-19) + + +### Bug Fixes + +* **types:** added transport to RawAxiosRequestConfig ([#5445](https://github.com/axios/axios/issues/5445)) ([6f360a2](https://github.com/axios/axios/commit/6f360a2531d8d70363fd9becef6a45a323f170e2)) +* **utils:** make isFormData detection logic stricter to avoid unnecessary calling of the `toString` method on the target; ([#5661](https://github.com/axios/axios/issues/5661)) ([aa372f7](https://github.com/axios/axios/commit/aa372f7306295dfd1100c1c2c77ce95c95808e76)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+48/-10 (#5665 #5661 #5663 )") +- avatar [Michael Di Prisco](https://github.com/Cadienvan "+2/-0 (#5445 )") + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.3.5](https://github.com/axios/axios/compare/v1.3.4...v1.3.5) (2023-04-05) + + +### Bug Fixes + +* **headers:** fixed isValidHeaderName to support full list of allowed characters; ([#5584](https://github.com/axios/axios/issues/5584)) ([e7decef](https://github.com/axios/axios/commit/e7decef6a99f4627e27ed9ea5b00ce8e201c3841)) +* **params:** re-added the ability to set the function as `paramsSerializer` config; ([#5633](https://github.com/axios/axios/issues/5633)) ([a56c866](https://github.com/axios/axios/commit/a56c8661209d5ce5a645a05f294a0e08a6c1f6b3)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+28/-10 (#5633 #5584 )") + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.3.4](https://github.com/axios/axios/compare/v1.3.3...v1.3.4) (2023-02-22) + + +### Bug Fixes + +* **blob:** added a check to make sure the Blob class is available in the browser's global scope; ([#5548](https://github.com/axios/axios/issues/5548)) ([3772c8f](https://github.com/axios/axios/commit/3772c8fe74112a56e3e9551f894d899bc3a9443a)) +* **http:** fixed regression bug when handling synchronous errors inside the adapter; ([#5564](https://github.com/axios/axios/issues/5564)) ([a3b246c](https://github.com/axios/axios/commit/a3b246c9de5c3bc4b5a742e15add55b375479451)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+38/-26 (#5564 )") +- avatar [lcysgsg](https://github.com/lcysgsg "+4/-0 (#5548 )") +- avatar [Michael Di Prisco](https://github.com/Cadienvan "+3/-0 (#5444 )") + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.3.3](https://github.com/axios/axios/compare/v1.3.2...v1.3.3) (2023-02-13) + + +### Bug Fixes + +* **formdata:** added a check to make sure the FormData class is available in the browser's global scope; ([#5545](https://github.com/axios/axios/issues/5545)) ([a6dfa72](https://github.com/axios/axios/commit/a6dfa72010db5ad52db8bd13c0f98e537e8fd05d)) +* **formdata:** fixed setting NaN as Content-Length for form payload in some cases; ([#5535](https://github.com/axios/axios/issues/5535)) ([c19f7bf](https://github.com/axios/axios/commit/c19f7bf770f90ae8307f4ea3104f227056912da1)) +* **headers:** fixed the filtering logic of the clear method; ([#5542](https://github.com/axios/axios/issues/5542)) ([ea87ebf](https://github.com/axios/axios/commit/ea87ebfe6d1699af072b9e7cd40faf8f14b0ab93)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+11/-7 (#5545 #5535 #5542 )") +- avatar [้™ˆ่‹ฅๆžซ](https://github.com/ruofee "+2/-2 (#5467 )") + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.3.2](https://github.com/axios/axios/compare/v1.3.1...v1.3.2) (2023-02-03) + + +### Bug Fixes + +* **http:** treat http://localhost as base URL for relative paths to avoid `ERR_INVALID_URL` error; ([#5528](https://github.com/axios/axios/issues/5528)) ([128d56f](https://github.com/axios/axios/commit/128d56f4a0fb8f5f2ed6e0dd80bc9225fee9538c)) +* **http:** use explicit import instead of TextEncoder global; ([#5530](https://github.com/axios/axios/issues/5530)) ([6b3c305](https://github.com/axios/axios/commit/6b3c305fc40c56428e0afabedc6f4d29c2830f6f)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+2/-1 (#5530 #5528 )") + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.3.1](https://github.com/axios/axios/compare/v1.3.0...v1.3.1) (2023-02-01) + + +### Bug Fixes + +* **formdata:** add hotfix to use the asynchronous API to compute the content-length header value; ([#5521](https://github.com/axios/axios/issues/5521)) ([96d336f](https://github.com/axios/axios/commit/96d336f527619f21da012fe1f117eeb53e5a2120)) +* **serializer:** fixed serialization of array-like objects; ([#5518](https://github.com/axios/axios/issues/5518)) ([08104c0](https://github.com/axios/axios/commit/08104c028c0f9353897b1b6691d74c440fd0c32d)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+27/-8 (#5521 #5518 )") + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +# [1.3.0](https://github.com/axios/axios/compare/v1.2.6...v1.3.0) (2023-01-31) + + +### Bug Fixes + +* **headers:** fixed & optimized clear method; ([#5507](https://github.com/axios/axios/issues/5507)) ([9915635](https://github.com/axios/axios/commit/9915635c69d0ab70daca5738488421f67ca60959)) +* **http:** add zlib headers if missing ([#5497](https://github.com/axios/axios/issues/5497)) ([65e8d1e](https://github.com/axios/axios/commit/65e8d1e28ce829f47a837e45129730e541950d3c)) + + +### Features + +* **fomdata:** added support for spec-compliant FormData & Blob types; ([#5316](https://github.com/axios/axios/issues/5316)) ([6ac574e](https://github.com/axios/axios/commit/6ac574e00a06731288347acea1e8246091196953)) + +### Contributors to this release + +- avatar [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+352/-67 (#5514 #5512 #5510 #5509 #5508 #5316 #5507 )") +- avatar [ItsNotGoodName](https://github.com/ItsNotGoodName "+43/-2 (#5497 )") + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.2.6](https://github.com/axios/axios/compare/v1.2.5...v1.2.6) (2023-01-28) + + +### Bug Fixes + +* **headers:** added missed Authorization accessor; ([#5502](https://github.com/axios/axios/issues/5502)) ([342c0ba](https://github.com/axios/axios/commit/342c0ba9a16ea50f5ed7d2366c5c1a2c877e3f26)) +* **types:** fixed `CommonRequestHeadersList` & `CommonResponseHeadersList` types to be private in commonJS; ([#5503](https://github.com/axios/axios/issues/5503)) ([5a3d0a3](https://github.com/axios/axios/commit/5a3d0a3234d77361a1bc7cedee2da1e11df08e2c)) + +### Contributors to this release + +- ![avatar](https://avatars.githubusercontent.com/u/12586868?v=4&s=16) [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+24/-9 (#5503 #5502 )") + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.2.5](https://github.com/axios/axios/compare/v1.2.4...v1.2.5) (2023-01-26) + + +### Bug Fixes + +* **types:** fixed AxiosHeaders to handle spread syntax by making all methods non-enumerable; ([#5499](https://github.com/axios/axios/issues/5499)) ([580f1e8](https://github.com/axios/axios/commit/580f1e8033a61baa38149d59fd16019de3932c22)) + +### Contributors to this release + +- ![avatar](https://avatars.githubusercontent.com/u/12586868?v=4&s=16) [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+82/-54 (#5499 )") +- ![avatar](https://avatars.githubusercontent.com/u/20516159?v=4&s=16) [Elliot Ford](https://github.com/EFord36 "+1/-1 (#5462 )") + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.2.4](https://github.com/axios/axios/compare/v1.2.3...v1.2.4) (2023-01-22) + + +### Bug Fixes + +* **types:** renamed `RawAxiosRequestConfig` back to `AxiosRequestConfig`; ([#5486](https://github.com/axios/axios/issues/5486)) ([2a71f49](https://github.com/axios/axios/commit/2a71f49bc6c68495fa419003a3107ed8bd703ad0)) +* **types:** fix `AxiosRequestConfig` generic; ([#5478](https://github.com/axios/axios/issues/5478)) ([9bce81b](https://github.com/axios/axios/commit/186ea062da8b7d578ae78b1a5c220986b9bce81b)) + +### Contributors to this release + +- ![avatar](https://avatars.githubusercontent.com/u/12586868?v=4&s=16) [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+242/-108 (#5486 #5482 )") +- ![avatar](https://avatars.githubusercontent.com/u/9430821?v=4&s=16) [Daniel Hillmann](https://github.com/hilleer "+1/-1 (#5478 )") + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.2.3](https://github.com/axios/axios/compare/1.2.2...1.2.3) (2023-01-10) + + +### Bug Fixes + +* **types:** fixed AxiosRequestConfig header interface by refactoring it to RawAxiosRequestConfig; ([#5420](https://github.com/axios/axios/issues/5420)) ([0811963](https://github.com/axios/axios/commit/08119634a22f1d5b19f5c9ea0adccb6d3eebc3bc)) + +### Contributors to this release + +- ![avatar](https://avatars.githubusercontent.com/u/12586868?v=4&s=16) [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS "+938/-442 (#5456 #5455 #5453 #5451 #5449 #5447 #5446 #5443 #5442 #5439 #5420 )") + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.2.2] - 2022-12-29 + +### Fixed +- fix(ci): fix release script inputs [#5392](https://github.com/axios/axios/pull/5392) +- fix(ci): prerelease scipts [#5377](https://github.com/axios/axios/pull/5377) +- fix(ci): release scripts [#5376](https://github.com/axios/axios/pull/5376) +- fix(ci): typescript tests [#5375](https://github.com/axios/axios/pull/5375) +- fix: Brotli decompression [#5353](https://github.com/axios/axios/pull/5353) +- fix: add missing HttpStatusCode [#5345](https://github.com/axios/axios/pull/5345) + +### Chores +- chore(ci): set conventional-changelog header config [#5406](https://github.com/axios/axios/pull/5406) +- chore(ci): fix automatic contributors resolving [#5403](https://github.com/axios/axios/pull/5403) +- chore(ci): improved logging for the contributors list generator [#5398](https://github.com/axios/axios/pull/5398) +- chore(ci): fix release action [#5397](https://github.com/axios/axios/pull/5397) +- chore(ci): fix version bump script by adding bump argument for target version [#5393](https://github.com/axios/axios/pull/5393) +- chore(deps): bump decode-uri-component from 0.2.0 to 0.2.2 [#5342](https://github.com/axios/axios/pull/5342) +- chore(ci): GitHub Actions Release script [#5384](https://github.com/axios/axios/pull/5384) +- chore(ci): release scripts [#5364](https://github.com/axios/axios/pull/5364) + +### Contributors to this release +- ![avatar](https://avatars.githubusercontent.com/u/12586868?v=4&s=16) [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS) +- ![avatar](https://avatars.githubusercontent.com/u/1652293?v=4&s=16) [Winnie](https://github.com/winniehell) + +## [1.2.1] - 2022-12-05 + +### Changed +- feat(exports): export mergeConfig [#5151](https://github.com/axios/axios/pull/5151) + +### Fixed +- fix(CancelledError): include config [#4922](https://github.com/axios/axios/pull/4922) +- fix(general): removing multiple/trailing/leading whitespace [#5022](https://github.com/axios/axios/pull/5022) +- fix(headers): decompression for responses without Content-Length header [#5306](https://github.com/axios/axios/pull/5306) +- fix(webWorker): exception to sending form data in web worker [#5139](https://github.com/axios/axios/pull/5139) + +### Refactors +- refactor(types): AxiosProgressEvent.event type to any [#5308](https://github.com/axios/axios/pull/5308) +- refactor(types): add missing types for static AxiosError.from method [#4956](https://github.com/axios/axios/pull/4956) + +### Chores +- chore(docs): remove README link to non-existent upgrade guide [#5307](https://github.com/axios/axios/pull/5307) +- chore(docs): typo in issue template name [#5159](https://github.com/axios/axios/pull/5159) + +### Contributors to this release + +- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS) +- [Zachary Lysobey](https://github.com/zachlysobey) +- [Kevin Ennis](https://github.com/kevincennis) +- [Philipp Loose](https://github.com/phloose) +- [secondl1ght](https://github.com/secondl1ght) +- [wenzheng](https://github.com/0x30) +- [Ivan Barsukov](https://github.com/ovarn) +- [Arthur Fiorette](https://github.com/arthurfiorette) + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.2.0] - 2022-11-10 + +### Changed + +- changed: refactored module exports [#5162](https://github.com/axios/axios/pull/5162) +- change: re-added support for loading Axios with require('axios').default [#5225](https://github.com/axios/axios/pull/5225) + +### Fixed + +- fix: improve AxiosHeaders class [#5224](https://github.com/axios/axios/pull/5224) +- fix: TypeScript type definitions for commonjs [#5196](https://github.com/axios/axios/pull/5196) +- fix: type definition of use method on AxiosInterceptorManager to match the the README [#5071](https://github.com/axios/axios/pull/5071) +- fix: __dirname is not defined in the sandbox [#5269](https://github.com/axios/axios/pull/5269) +- fix: AxiosError.toJSON method to avoid circular references [#5247](https://github.com/axios/axios/pull/5247) +- fix: Z_BUF_ERROR when content-encoding is set but the response body is empty [#5250](https://github.com/axios/axios/pull/5250) + +### Refactors +- refactor: allowing adapters to be loaded by name [#5277](https://github.com/axios/axios/pull/5277) + +### Chores + +- chore: force CI restart [#5243](https://github.com/axios/axios/pull/5243) +- chore: update ECOSYSTEM.md [#5077](https://github.com/axios/axios/pull/5077) +- chore: update get/index.html [#5116](https://github.com/axios/axios/pull/5116) +- chore: update Sandbox UI/UX [#5205](https://github.com/axios/axios/pull/5205) +- chore:(actions): remove git credentials after checkout [#5235](https://github.com/axios/axios/pull/5235) +- chore(actions): bump actions/dependency-review-action from 2 to 3 [#5266](https://github.com/axios/axios/pull/5266) +- chore(packages): bump loader-utils from 1.4.1 to 1.4.2 [#5295](https://github.com/axios/axios/pull/5295) +- chore(packages): bump engine.io from 6.2.0 to 6.2.1 [#5294](https://github.com/axios/axios/pull/5294) +- chore(packages): bump socket.io-parser from 4.0.4 to 4.0.5 [#5241](https://github.com/axios/axios/pull/5241) +- chore(packages): bump loader-utils from 1.4.0 to 1.4.1 [#5245](https://github.com/axios/axios/pull/5245) +- chore(docs): update Resources links in README [#5119](https://github.com/axios/axios/pull/5119) +- chore(docs): update the link for JSON url [#5265](https://github.com/axios/axios/pull/5265) +- chore(docs): fix broken links [#5218](https://github.com/axios/axios/pull/5218) +- chore(docs): update and rename UPGRADE_GUIDE.md to MIGRATION_GUIDE.md [#5170](https://github.com/axios/axios/pull/5170) +- chore(docs): typo fix line #856 and #920 [#5194](https://github.com/axios/axios/pull/5194) +- chore(docs): typo fix #800 [#5193](https://github.com/axios/axios/pull/5193) +- chore(docs): fix typos [#5184](https://github.com/axios/axios/pull/5184) +- chore(docs): fix punctuation in README.md [#5197](https://github.com/axios/axios/pull/5197) +- chore(docs): update readme in the Handling Errors section - issue reference #5260 [#5261](https://github.com/axios/axios/pull/5261) +- chore: remove \b from filename [#5207](https://github.com/axios/axios/pull/5207) +- chore(docs): update CHANGELOG.md [#5137](https://github.com/axios/axios/pull/5137) +- chore: add sideEffects false to package.json [#5025](https://github.com/axios/axios/pull/5025) + +### Contributors to this release + +- [Maddy Miller](https://github.com/me4502) +- [Amit Saini](https://github.com/amitsainii) +- [ecyrbe](https://github.com/ecyrbe) +- [Ikko Ashimine](https://github.com/eltociear) +- [Geeth Gunnampalli](https://github.com/thetechie7) +- [Shreem Asati](https://github.com/shreem-123) +- [Frieder Bluemle](https://github.com/friederbluemle) +- [์œค์„ธ์˜](https://github.com/yunseyeong) +- [Claudio Busatto](https://github.com/cjcbusatto) +- [Remco Haszing](https://github.com/remcohaszing) +- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS) +- [Csaba Maulis](https://github.com/om4csaba) +- [MoPaMo](https://github.com/MoPaMo) +- [Daniel Fjeldstad](https://github.com/w3bdesign) +- [Adrien Brunet](https://github.com/adrien-may) +- [Frazer Smith](https://github.com/Fdawgs) +- [HaiTao](https://github.com/836334258) +- [AZM](https://github.com/aziyatali) +- [relbns](https://github.com/relbns) + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.1.3] - 2022-10-15 + +### Added + +- Added custom params serializer support [#5113](https://github.com/axios/axios/pull/5113) + +### Fixed + +- Fixed top-level export to keep them in-line with static properties [#5109](https://github.com/axios/axios/pull/5109) +- Stopped including null values to query string. [#5108](https://github.com/axios/axios/pull/5108) +- Restored proxy config backwards compatibility with 0.x [#5097](https://github.com/axios/axios/pull/5097) +- Added back AxiosHeaders in AxiosHeaderValue [#5103](https://github.com/axios/axios/pull/5103) +- Pin CDN install instructions to a specific version [#5060](https://github.com/axios/axios/pull/5060) +- Handling of array values fixed for AxiosHeaders [#5085](https://github.com/axios/axios/pull/5085) + +### Chores + +- docs: match badge style, add link to them [#5046](https://github.com/axios/axios/pull/5046) +- chore: fixing comments typo [#5054](https://github.com/axios/axios/pull/5054) +- chore: update issue template [#5061](https://github.com/axios/axios/pull/5061) +- chore: added progress capturing section to the docs; [#5084](https://github.com/axios/axios/pull/5084) + +### Contributors to this release + +- [Jason Saayman](https://github.com/jasonsaayman) +- [scarf](https://github.com/scarf005) +- [Lenz Weber-Tronic](https://github.com/phryneas) +- [Arvindh](https://github.com/itsarvindh) +- [Fรฉlix Legrelle](https://github.com/FelixLgr) +- [Patrick Petrovic](https://github.com/ppati000) +- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS) +- [littledian](https://github.com/littledian) +- [ChronosMasterOfAllTime](https://github.com/ChronosMasterOfAllTime) + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.1.2] - 2022-10-07 + +### Fixed + +- Fixed broken exports for UMD builds. + +### Contributors to this release + +- [Jason Saayman](https://github.com/jasonsaayman) + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.1.1] - 2022-10-07 + +### Fixed + +- Fixed broken exports for common js. This fix breaks a prior fix, I will fix both issues ASAP but the commonJS use is more impactful. + +### Contributors to this release + +- [Jason Saayman](https://github.com/jasonsaayman) + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.1.0] - 2022-10-06 + +### Fixed + +- Fixed missing exports in type definition index.d.ts [#5003](https://github.com/axios/axios/pull/5003) +- Fixed query params composing [#5018](https://github.com/axios/axios/pull/5018) +- Fixed GenericAbortSignal interface by making it more generic [#5021](https://github.com/axios/axios/pull/5021) +- Fixed adding "clear" to AxiosInterceptorManager [#5010](https://github.com/axios/axios/pull/5010) +- Fixed commonjs & umd exports [#5030](https://github.com/axios/axios/pull/5030) +- Fixed inability to access response headers when using axios 1.x with Jest [#5036](https://github.com/axios/axios/pull/5036) + +### Contributors to this release + +- [Trim21](https://github.com/trim21) +- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS) +- [shingo.sasaki](https://github.com/s-sasaki-0529) +- [Ivan Pepelko](https://github.com/ivanpepelko) +- [Richard Koล™รญnek](https://github.com/risa) + +### PRs +- CVE 2023 45857 ( [#6028](https://api.github.com/repos/axios/axios/pulls/6028) ) +``` + +โš ๏ธ Critical vulnerability fix. See https://security.snyk.io/vuln/SNYK-JS-AXIOS-6032459 +``` + +## [1.0.0] - 2022-10-04 + +### Added + +- Added stack trace to AxiosError [#4624](https://github.com/axios/axios/pull/4624) +- Add AxiosError to AxiosStatic [#4654](https://github.com/axios/axios/pull/4654) +- Replaced Rollup as our build runner [#4596](https://github.com/axios/axios/pull/4596) +- Added generic TS types for the exposed toFormData helper [#4668](https://github.com/axios/axios/pull/4668) +- Added listen callback function [#4096](https://github.com/axios/axios/pull/4096) +- Added instructions for installing using PNPM [#4207](https://github.com/axios/axios/pull/4207) +- Added generic AxiosAbortSignal TS interface to avoid importing AbortController polyfill [#4229](https://github.com/axios/axios/pull/4229) +- Added axios-url-template in ECOSYSTEM.md [#4238](https://github.com/axios/axios/pull/4238) +- Added a clear() function to the request and response interceptors object so a user can ensure that all interceptors have been removed from an axios instance [#4248](https://github.com/axios/axios/pull/4248) +- Added react hook plugin [#4319](https://github.com/axios/axios/pull/4319) +- Adding HTTP status code for transformResponse [#4580](https://github.com/axios/axios/pull/4580) +- Added blob to the list of protocols supported by the browser [#4678](https://github.com/axios/axios/pull/4678) +- Resolving proxy from env on redirect [#4436](https://github.com/axios/axios/pull/4436) +- Added enhanced toFormData implementation with additional options [4704](https://github.com/axios/axios/pull/4704) +- Adding Canceler parameters config and request [#4711](https://github.com/axios/axios/pull/4711) +- Added automatic payload serialization to application/x-www-form-urlencoded [#4714](https://github.com/axios/axios/pull/4714) +- Added the ability for webpack users to overwrite built-ins [#4715](https://github.com/axios/axios/pull/4715) +- Added string[] to AxiosRequestHeaders type [#4322](https://github.com/axios/axios/pull/4322) +- Added the ability for the url-encoded-form serializer to respect the formSerializer config [#4721](https://github.com/axios/axios/pull/4721) +- Added isCancel type assert [#4293](https://github.com/axios/axios/pull/4293) +- Added data URL support for node.js [#4725](https://github.com/axios/axios/pull/4725) +- Adding types for progress event callbacks [#4675](https://github.com/axios/axios/pull/4675) +- URL params serializer [#4734](https://github.com/axios/axios/pull/4734) +- Added axios.formToJSON method [#4735](https://github.com/axios/axios/pull/4735) +- Bower platform add data protocol [#4804](https://github.com/axios/axios/pull/4804) +- Use WHATWG URL API instead of url.parse() [#4852](https://github.com/axios/axios/pull/4852) +- Add ENUM containing Http Status Codes to typings [#4903](https://github.com/axios/axios/pull/4903) +- Improve typing of timeout in index.d.ts [#4934](https://github.com/axios/axios/pull/4934) + +### Changed + +- Updated AxiosError.config to be optional in the type definition [#4665](https://github.com/axios/axios/pull/4665) +- Updated README emphasizing the URLSearchParam built-in interface over other solutions [#4590](https://github.com/axios/axios/pull/4590) +- Include request and config when creating a CanceledError instance [#4659](https://github.com/axios/axios/pull/4659) +- Changed func-names eslint rule to as-needed [#4492](https://github.com/axios/axios/pull/4492) +- Replacing deprecated substr() with slice() as substr() is deprecated [#4468](https://github.com/axios/axios/pull/4468) +- Updating HTTP links in README.md to use HTTPS [#4387](https://github.com/axios/axios/pull/4387) +- Updated to a better trim() polyfill [#4072](https://github.com/axios/axios/pull/4072) +- Updated types to allow specifying partial default headers on instance create [#4185](https://github.com/axios/axios/pull/4185) +- Expanded isAxiosError types [#4344](https://github.com/axios/axios/pull/4344) +- Updated type definition for axios instance methods [#4224](https://github.com/axios/axios/pull/4224) +- Updated eslint config [#4722](https://github.com/axios/axios/pull/4722) +- Updated Docs [#4742](https://github.com/axios/axios/pull/4742) +- Refactored Axios to use ES2017 [#4787](https://github.com/axios/axios/pull/4787) + + +### Deprecated +- There are multiple deprecations, refactors and fixes provided in this release. Please read through the full release notes to see how this may impact your project and use case. + +### Removed + +- Removed incorrect argument for NetworkError constructor [#4656](https://github.com/axios/axios/pull/4656) +- Removed Webpack [#4596](https://github.com/axios/axios/pull/4596) +- Removed function that transform arguments to array [#4544](https://github.com/axios/axios/pull/4544) + +### Fixed + +- Fixed grammar in README [#4649](https://github.com/axios/axios/pull/4649) +- Fixed code error in README [#4599](https://github.com/axios/axios/pull/4599) +- Optimized the code that checks cancellation [#4587](https://github.com/axios/axios/pull/4587) +- Fix url pointing to defaults.js in README [#4532](https://github.com/axios/axios/pull/4532) +- Use type alias instead of interface for AxiosPromise [#4505](https://github.com/axios/axios/pull/4505) +- Fix some word spelling and lint style in code comments [#4500](https://github.com/axios/axios/pull/4500) +- Edited readme with 3 updated browser icons of Chrome, FireFox and Safari [#4414](https://github.com/axios/axios/pull/4414) +- Bump follow-redirects from 1.14.9 to 1.15.0 [#4673](https://github.com/axios/axios/pull/4673) +- Fixing http tests to avoid hanging when assertions fail [#4435](https://github.com/axios/axios/pull/4435) +- Fix TS definition for AxiosRequestTransformer [#4201](https://github.com/axios/axios/pull/4201) +- Fix grammatical issues in README [#4232](https://github.com/axios/axios/pull/4232) +- Fixing instance.defaults.headers type [#4557](https://github.com/axios/axios/pull/4557) +- Fixed race condition on immediate requests cancellation [#4261](https://github.com/axios/axios/pull/4261) +- Fixing Z_BUF_ERROR when no content [#4701](https://github.com/axios/axios/pull/4701) +- Fixing proxy beforeRedirect regression [#4708](https://github.com/axios/axios/pull/4708) +- Fixed AxiosError status code type [#4717](https://github.com/axios/axios/pull/4717) +- Fixed AxiosError stack capturing [#4718](https://github.com/axios/axios/pull/4718) +- Fixing AxiosRequestHeaders typings [#4334](https://github.com/axios/axios/pull/4334) +- Fixed max body length defaults [#4731](https://github.com/axios/axios/pull/4731) +- Fixed toFormData Blob issue on node>v17 [#4728](https://github.com/axios/axios/pull/4728) +- Bump grunt from 1.5.2 to 1.5.3 [#4743](https://github.com/axios/axios/pull/4743) +- Fixing content-type header repeated [#4745](https://github.com/axios/axios/pull/4745) +- Fixed timeout error message for http [4738](https://github.com/axios/axios/pull/4738) +- Request ignores false, 0 and empty string as body values [#4785](https://github.com/axios/axios/pull/4785) +- Added back missing minified builds [#4805](https://github.com/axios/axios/pull/4805) +- Fixed a type error [#4815](https://github.com/axios/axios/pull/4815) +- Fixed a regression bug with unsubscribing from cancel token; [#4819](https://github.com/axios/axios/pull/4819) +- Remove repeated compression algorithm [#4820](https://github.com/axios/axios/pull/4820) +- The error of calling extend to pass parameters [#4857](https://github.com/axios/axios/pull/4857) +- SerializerOptions.indexes allows boolean | null | undefined [#4862](https://github.com/axios/axios/pull/4862) +- Require interceptors to return values [#4874](https://github.com/axios/axios/pull/4874) +- Removed unused imports [#4949](https://github.com/axios/axios/pull/4949) +- Allow null indexes on formSerializer and paramsSerializer [#4960](https://github.com/axios/axios/pull/4960) + +### Chores +- Set permissions for GitHub actions [#4765](https://github.com/axios/axios/pull/4765) +- Included githubactions in the dependabot config [#4770](https://github.com/axios/axios/pull/4770) +- Included dependency review [#4771](https://github.com/axios/axios/pull/4771) +- Update security.md [#4784](https://github.com/axios/axios/pull/4784) +- Remove unnecessary spaces [#4854](https://github.com/axios/axios/pull/4854) +- Simplify the import path of AxiosError [#4875](https://github.com/axios/axios/pull/4875) +- Fix Gitpod dead link [#4941](https://github.com/axios/axios/pull/4941) +- Enable syntax highlighting for a code block [#4970](https://github.com/axios/axios/pull/4970) +- Using Logo Axios in Readme.md [#4993](https://github.com/axios/axios/pull/4993) +- Fix markup for note in README [#4825](https://github.com/axios/axios/pull/4825) +- Fix typo and formatting, add colons [#4853](https://github.com/axios/axios/pull/4853) +- Fix typo in readme [#4942](https://github.com/axios/axios/pull/4942) + +### Security + +- Update SECURITY.md [#4687](https://github.com/axios/axios/pull/4687) + +### Contributors to this release + +- [Bertrand Marron](https://github.com/tusbar) +- [Dmitriy Mozgovoy](https://github.com/DigitalBrainJS) +- [Dan Mooney](https://github.com/danmooney) +- [Michael Li](https://github.com/xiaoyu-tamu) +- [aong](https://github.com/yxwzaxns) +- [Des Preston](https://github.com/despreston) +- [Ted Robertson](https://github.com/tredondo) +- [zhoulixiang](https://github.com/zh-lx) +- [Arthur Fiorette](https://github.com/arthurfiorette) +- [Kumar Shanu](https://github.com/Kr-Shanu) +- [JALAL](https://github.com/JLL32) +- [Jingyi Lin](https://github.com/MageeLin) +- [Philipp Loose](https://github.com/phloose) +- [Alexander Shchukin](https://github.com/sashsvamir) +- [Dave Cardwell](https://github.com/davecardwell) +- [Cat Scarlet](https://github.com/catscarlet) +- [Luca Pizzini](https://github.com/lpizzinidev) +- [Kai](https://github.com/Schweinepriester) +- [Maxime Bargiel](https://github.com/mbargiel) +- [Brian Helba](https://github.com/brianhelba) +- [reslear](https://github.com/reslear) +- [Jamie Slome](https://github.com/JamieSlome) +- [Landro3](https://github.com/Landro3) +- [rafw87](https://github.com/rafw87) +- [Afzal Sayed](https://github.com/afzalsayed96) +- [Koki Oyatsu](https://github.com/kaishuu0123) +- [Dave](https://github.com/wangcch) +- [ๆšด่ตฐ่€ไธƒ](https://github.com/baozouai) +- [Spencer](https://github.com/spalger) +- [Adrian Wieprzkowicz](https://github.com/Argeento) +- [Jamie Telin](https://github.com/lejahmie) +- [ๆฏ›ๅ‘†](https://github.com/aweikalee) +- [Kirill Shakirov](https://github.com/turisap) +- [Rraji Abdelbari](https://github.com/estarossa0) +- [Jelle Schutter](https://github.com/jelleschutter) +- [Tom Ceuppens](https://github.com/KyorCode) +- [Johann Cooper](https://github.com/JohannCooper) +- [Dimitris Halatsis](https://github.com/mitsos1os) +- [chenjigeng](https://github.com/chenjigeng) +- [Joรฃo Gabriel Quaresma](https://github.com/joaoGabriel55) +- [Victor Augusto](https://github.com/VictorAugDB) +- [neilnaveen](https://github.com/neilnaveen) +- [Pavlos](https://github.com/psmoros) +- [Kiryl Valkovich](https://github.com/visortelle) +- [Naveen](https://github.com/naveensrinivasan) +- [wenzheng](https://github.com/0x30) +- [hcwhan](https://github.com/hcwhan) +- [Bassel Rachid](https://github.com/basselworkforce) +- [Grรฉgoire Pineau](https://github.com/lyrixx) +- [felipedamin](https://github.com/felipedamin) +- [Karl Horky](https://github.com/karlhorky) +- [Yue JIN](https://github.com/kingyue737) +- [Usman Ali Siddiqui](https://github.com/usman250994) +- [WD](https://github.com/techbirds) +- [Gรผnther Foidl](https://github.com/gfoidl) +- [Stephen Jennings](https://github.com/jennings) +- [C.T.Lin](https://github.com/chentsulin) +- [mia-z](https://github.com/mia-z) +- [Parth Banathia](https://github.com/Parth0105) +- [parth0105pluang](https://github.com/parth0105pluang) +- [Marco Weber](https://github.com/mrcwbr) +- [Luca Pizzini](https://github.com/lpizzinidev) +- [Willian Agostini](https://github.com/WillianAgostini) +- [Huyen Nguyen](https://github.com/huyenltnguyen) \ No newline at end of file diff --git a/node_modules/axios/LICENSE b/node_modules/axios/LICENSE new file mode 100644 index 0000000..05006a5 --- /dev/null +++ b/node_modules/axios/LICENSE @@ -0,0 +1,7 @@ +# Copyright (c) 2014-present Matt Zabriskie & Collaborators + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/axios/MIGRATION_GUIDE.md b/node_modules/axios/MIGRATION_GUIDE.md new file mode 100644 index 0000000..ec3ae0d --- /dev/null +++ b/node_modules/axios/MIGRATION_GUIDE.md @@ -0,0 +1,3 @@ +# Migration Guide + +## 0.x.x -> 1.1.0 diff --git a/node_modules/axios/README.md b/node_modules/axios/README.md new file mode 100644 index 0000000..e5b327e --- /dev/null +++ b/node_modules/axios/README.md @@ -0,0 +1,1679 @@ + +

๐Ÿฅ‡ Gold sponsors

Stytch

API-first authentication, authorization, and fraud prevention

Website | Documentation | Node.js

+
Principal Financial Group

Weโ€™re bound by one common purpose: to give you the financial tools, resources and information you ne...

www.principal.com

+
Buy Instagram Followers Twicsy

Buy real Instagram followers from Twicsy starting at only $2.97. Twicsy has been voted the best site...

twicsy.com

+
Descope

Hi, we're Descope! We are building something in the authentication space for app developers and...

Website | Docs | Community

+
Buzzoid - Buy Instagram Followers

At Buzzoid, you can buy Instagram followers quickly, safely, and easily with just a few clicks. Rate...

buzzoid.com

+
Famety - Buy Instagram Followers

At Famety, you can grow your social media following quickly, safely, and easily with just a few clic...

www.famety.com

+
Poprey - Buy Instagram Likes

Buy Instagram Likes

poprey.com

+
ะ‘ัƒะบะผะตะบะตั€

ะกั‚ะฐะฒะบะธ ะฝะฐ ัะฟะพั€ั‚, ะ‘ะš ะฒ ะฃะบั€ะฐั—ะฝั–

betking.com.ua

+
Buy Youtube Subscribers

SS Market offers professional social media services that rapidly increase your YouTube subscriber co...

ssmarket.net

+
๐Ÿ’œ Become a sponsor + ๐Ÿ’œ Become a sponsor + ๐Ÿ’œ Become a sponsor +
+ + +

+
+
+
+ +

Promise based HTTP client for the browser and node.js

+ +

+ Website โ€ข + Documentation +

+ +
+ +[![npm version](https://img.shields.io/npm/v/axios.svg?style=flat-square)](https://www.npmjs.org/package/axios) +[![CDNJS](https://img.shields.io/cdnjs/v/axios.svg?style=flat-square)](https://cdnjs.com/libraries/axios) +[![Build status](https://img.shields.io/github/actions/workflow/status/axios/axios/ci.yml?branch=v1.x&label=CI&logo=github&style=flat-square)](https://github.com/axios/axios/actions/workflows/ci.yml) +[![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-Ready--to--Code-blue?logo=gitpod&style=flat-square)](https://gitpod.io/#https://github.com/axios/axios) +[![code coverage](https://img.shields.io/coveralls/mzabriskie/axios.svg?style=flat-square)](https://coveralls.io/r/mzabriskie/axios) +[![install size](https://img.shields.io/badge/dynamic/json?url=https://packagephobia.com/v2/api.json?p=axios&query=$.install.pretty&label=install%20size&style=flat-square)](https://packagephobia.now.sh/result?p=axios) +[![npm bundle size](https://img.shields.io/bundlephobia/minzip/axios?style=flat-square)](https://bundlephobia.com/package/axios@latest) +[![npm downloads](https://img.shields.io/npm/dm/axios.svg?style=flat-square)](https://npm-stat.com/charts.html?package=axios) +[![gitter chat](https://img.shields.io/gitter/room/mzabriskie/axios.svg?style=flat-square)](https://gitter.im/mzabriskie/axios) +[![code helpers](https://www.codetriage.com/axios/axios/badges/users.svg)](https://www.codetriage.com/axios/axios) +[![Known Vulnerabilities](https://snyk.io/test/npm/axios/badge.svg)](https://snyk.io/test/npm/axios) + + + + +
+ +## Table of Contents + + - [Features](#features) + - [Browser Support](#browser-support) + - [Installing](#installing) + - [Package manager](#package-manager) + - [CDN](#cdn) + - [Example](#example) + - [Axios API](#axios-api) + - [Request method aliases](#request-method-aliases) + - [Concurrency ๐Ÿ‘Ž](#concurrency-deprecated) + - [Creating an instance](#creating-an-instance) + - [Instance methods](#instance-methods) + - [Request Config](#request-config) + - [Response Schema](#response-schema) + - [Config Defaults](#config-defaults) + - [Global axios defaults](#global-axios-defaults) + - [Custom instance defaults](#custom-instance-defaults) + - [Config order of precedence](#config-order-of-precedence) + - [Interceptors](#interceptors) + - [Multiple Interceptors](#multiple-interceptors) + - [Handling Errors](#handling-errors) + - [Cancellation](#cancellation) + - [AbortController](#abortcontroller) + - [CancelToken ๐Ÿ‘Ž](#canceltoken-deprecated) + - [Using application/x-www-form-urlencoded format](#using-applicationx-www-form-urlencoded-format) + - [URLSearchParams](#urlsearchparams) + - [Query string](#query-string-older-browsers) + - [๐Ÿ†• Automatic serialization](#-automatic-serialization-to-urlsearchparams) + - [Using multipart/form-data format](#using-multipartform-data-format) + - [FormData](#formdata) + - [๐Ÿ†• Automatic serialization](#-automatic-serialization-to-formdata) + - [Files Posting](#files-posting) + - [HTML Form Posting](#-html-form-posting-browser) + - [๐Ÿ†• Progress capturing](#-progress-capturing) + - [๐Ÿ†• Rate limiting](#-progress-capturing) + - [๐Ÿ†• AxiosHeaders](#-axiosheaders) + - [๐Ÿ”ฅ Fetch adapter](#-fetch-adapter) + - [Semver](#semver) + - [Promises](#promises) + - [TypeScript](#typescript) + - [Resources](#resources) + - [Credits](#credits) + - [License](#license) + +## Features + +- Make [XMLHttpRequests](https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest) from the browser +- Make [http](https://nodejs.org/api/http.html) requests from node.js +- Supports the [Promise](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise) API +- Intercept request and response +- Transform request and response data +- Cancel requests +- Automatic transforms for [JSON](https://www.json.org/json-en.html) data +- ๐Ÿ†• Automatic data object serialization to `multipart/form-data` and `x-www-form-urlencoded` body encodings +- Client side support for protecting against [XSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery) + +## Browser Support + +![Chrome](https://raw.githubusercontent.com/alrra/browser-logos/main/src/chrome/chrome_48x48.png) | ![Firefox](https://raw.githubusercontent.com/alrra/browser-logos/main/src/firefox/firefox_48x48.png) | ![Safari](https://raw.githubusercontent.com/alrra/browser-logos/main/src/safari/safari_48x48.png) | ![Opera](https://raw.githubusercontent.com/alrra/browser-logos/main/src/opera/opera_48x48.png) | ![Edge](https://raw.githubusercontent.com/alrra/browser-logos/main/src/edge/edge_48x48.png) | +--- | --- | --- | --- | --- | +Latest โœ” | Latest โœ” | Latest โœ” | Latest โœ” | Latest โœ” | 11 โœ” | + +[![Browser Matrix](https://saucelabs.com/open_sauce/build_matrix/axios.svg)](https://saucelabs.com/u/axios) + +## Installing + +### Package manager + +Using npm: + +```bash +$ npm install axios +``` + +Using bower: + +```bash +$ bower install axios +``` + +Using yarn: + +```bash +$ yarn add axios +``` + +Using pnpm: + +```bash +$ pnpm add axios +``` + +Using bun: + +```bash +$ bun add axios +``` + +Once the package is installed, you can import the library using `import` or `require` approach: + +```js +import axios, {isCancel, AxiosError} from 'axios'; +``` + +You can also use the default export, since the named export is just a re-export from the Axios factory: + +```js +import axios from 'axios'; + +console.log(axios.isCancel('something')); +```` + +If you use `require` for importing, **only default export is available**: + +```js +const axios = require('axios'); + +console.log(axios.isCancel('something')); +``` + +For some bundlers and some ES6 linters you may need to do the following: + +```js +import { default as axios } from 'axios'; +``` + +For cases where something went wrong when trying to import a module into a custom or legacy environment, +you can try importing the module package directly: + +```js +const axios = require('axios/dist/browser/axios.cjs'); // browser commonJS bundle (ES2017) +// const axios = require('axios/dist/node/axios.cjs'); // node commonJS bundle (ES2017) +``` + +### CDN + +Using jsDelivr CDN (ES5 UMD browser module): + +```html + +``` + +Using unpkg CDN: + +```html + +``` + +## Example + +> **Note**: CommonJS usage +> In order to gain the TypeScript typings (for intellisense / autocomplete) while using CommonJS imports with `require()`, use the following approach: + +```js +import axios from 'axios'; +//const axios = require('axios'); // legacy way + +// Make a request for a user with a given ID +axios.get('/user?ID=12345') + .then(function (response) { + // handle success + console.log(response); + }) + .catch(function (error) { + // handle error + console.log(error); + }) + .finally(function () { + // always executed + }); + +// Optionally the request above could also be done as +axios.get('/user', { + params: { + ID: 12345 + } + }) + .then(function (response) { + console.log(response); + }) + .catch(function (error) { + console.log(error); + }) + .finally(function () { + // always executed + }); + +// Want to use async/await? Add the `async` keyword to your outer function/method. +async function getUser() { + try { + const response = await axios.get('/user?ID=12345'); + console.log(response); + } catch (error) { + console.error(error); + } +} +``` + +> **Note**: `async/await` is part of ECMAScript 2017 and is not supported in Internet +> Explorer and older browsers, so use with caution. + +Performing a `POST` request + +```js +axios.post('/user', { + firstName: 'Fred', + lastName: 'Flintstone' + }) + .then(function (response) { + console.log(response); + }) + .catch(function (error) { + console.log(error); + }); +``` + +Performing multiple concurrent requests + +```js +function getUserAccount() { + return axios.get('/user/12345'); +} + +function getUserPermissions() { + return axios.get('/user/12345/permissions'); +} + +Promise.all([getUserAccount(), getUserPermissions()]) + .then(function (results) { + const acct = results[0]; + const perm = results[1]; + }); +``` + +## axios API + +Requests can be made by passing the relevant config to `axios`. + +##### axios(config) + +```js +// Send a POST request +axios({ + method: 'post', + url: '/user/12345', + data: { + firstName: 'Fred', + lastName: 'Flintstone' + } +}); +``` + +```js +// GET request for remote image in node.js +axios({ + method: 'get', + url: 'https://bit.ly/2mTM3nY', + responseType: 'stream' +}) + .then(function (response) { + response.data.pipe(fs.createWriteStream('ada_lovelace.jpg')) + }); +``` + +##### axios(url[, config]) + +```js +// Send a GET request (default method) +axios('/user/12345'); +``` + +### Request method aliases + +For convenience, aliases have been provided for all common request methods. + +##### axios.request(config) +##### axios.get(url[, config]) +##### axios.delete(url[, config]) +##### axios.head(url[, config]) +##### axios.options(url[, config]) +##### axios.post(url[, data[, config]]) +##### axios.put(url[, data[, config]]) +##### axios.patch(url[, data[, config]]) + +###### NOTE +When using the alias methods `url`, `method`, and `data` properties don't need to be specified in config. + +### Concurrency (Deprecated) +Please use `Promise.all` to replace the below functions. + +Helper functions for dealing with concurrent requests. + +axios.all(iterable) +axios.spread(callback) + +### Creating an instance + +You can create a new instance of axios with a custom config. + +##### axios.create([config]) + +```js +const instance = axios.create({ + baseURL: 'https://some-domain.com/api/', + timeout: 1000, + headers: {'X-Custom-Header': 'foobar'} +}); +``` + +### Instance methods + +The available instance methods are listed below. The specified config will be merged with the instance config. + +##### axios#request(config) +##### axios#get(url[, config]) +##### axios#delete(url[, config]) +##### axios#head(url[, config]) +##### axios#options(url[, config]) +##### axios#post(url[, data[, config]]) +##### axios#put(url[, data[, config]]) +##### axios#patch(url[, data[, config]]) +##### axios#getUri([config]) + +## Request Config + +These are the available config options for making requests. Only the `url` is required. Requests will default to `GET` if `method` is not specified. + +```js +{ + // `url` is the server URL that will be used for the request + url: '/user', + + // `method` is the request method to be used when making the request + method: 'get', // default + + // `baseURL` will be prepended to `url` unless `url` is absolute and option `allowAbsoluteUrls` is set to true. + // It can be convenient to set `baseURL` for an instance of axios to pass relative URLs + // to methods of that instance. + baseURL: 'https://some-domain.com/api/', + + // `allowAbsoluteUrls` determines whether or not absolute URLs will override a configured `baseUrl`. + // When set to true (default), absolute values for `url` will override `baseUrl`. + // When set to false, absolute values for `url` will always be prepended by `baseUrl`. + allowAbsoluteUrls: true, + + // `transformRequest` allows changes to the request data before it is sent to the server + // This is only applicable for request methods 'PUT', 'POST', 'PATCH' and 'DELETE' + // The last function in the array must return a string or an instance of Buffer, ArrayBuffer, + // FormData or Stream + // You may modify the headers object. + transformRequest: [function (data, headers) { + // Do whatever you want to transform the data + + return data; + }], + + // `transformResponse` allows changes to the response data to be made before + // it is passed to then/catch + transformResponse: [function (data) { + // Do whatever you want to transform the data + + return data; + }], + + // `headers` are custom headers to be sent + headers: {'X-Requested-With': 'XMLHttpRequest'}, + + // `params` are the URL parameters to be sent with the request + // Must be a plain object or a URLSearchParams object + params: { + ID: 12345 + }, + + // `paramsSerializer` is an optional config that allows you to customize serializing `params`. + paramsSerializer: { + + // Custom encoder function which sends key/value pairs in an iterative fashion. + encode?: (param: string): string => { /* Do custom operations here and return transformed string */ }, + + // Custom serializer function for the entire parameter. Allows user to mimic pre 1.x behaviour. + serialize?: (params: Record, options?: ParamsSerializerOptions ), + + // Configuration for formatting array indexes in the params. + indexes: false // Three available options: (1) indexes: null (leads to no brackets), (2) (default) indexes: false (leads to empty brackets), (3) indexes: true (leads to brackets with indexes). + }, + + // `data` is the data to be sent as the request body + // Only applicable for request methods 'PUT', 'POST', 'DELETE , and 'PATCH' + // When no `transformRequest` is set, must be of one of the following types: + // - string, plain object, ArrayBuffer, ArrayBufferView, URLSearchParams + // - Browser only: FormData, File, Blob + // - Node only: Stream, Buffer, FormData (form-data package) + data: { + firstName: 'Fred' + }, + + // syntax alternative to send data into the body + // method post + // only the value is sent, not the key + data: 'Country=Brasil&City=Belo Horizonte', + + // `timeout` specifies the number of milliseconds before the request times out. + // If the request takes longer than `timeout`, the request will be aborted. + timeout: 1000, // default is `0` (no timeout) + + // `withCredentials` indicates whether or not cross-site Access-Control requests + // should be made using credentials + withCredentials: false, // default + + // `adapter` allows custom handling of requests which makes testing easier. + // Return a promise and supply a valid response (see lib/adapters/README.md) + adapter: function (config) { + /* ... */ + }, + // Also, you can set the name of the built-in adapter, or provide an array with their names + // to choose the first available in the environment + adapter: 'xhr', // 'fetch' | 'http' | ['xhr', 'http', 'fetch'] + + // `auth` indicates that HTTP Basic auth should be used, and supplies credentials. + // This will set an `Authorization` header, overwriting any existing + // `Authorization` custom headers you have set using `headers`. + // Please note that only HTTP Basic auth is configurable through this parameter. + // For Bearer tokens and such, use `Authorization` custom headers instead. + auth: { + username: 'janedoe', + password: 's00pers3cret' + }, + + // `responseType` indicates the type of data that the server will respond with + // options are: 'arraybuffer', 'document', 'json', 'text', 'stream' + // browser only: 'blob' + responseType: 'json', // default + + // `responseEncoding` indicates encoding to use for decoding responses (Node.js only) + // Note: Ignored for `responseType` of 'stream' or client-side requests + // options are: 'ascii', 'ASCII', 'ansi', 'ANSI', 'binary', 'BINARY', 'base64', 'BASE64', 'base64url', + // 'BASE64URL', 'hex', 'HEX', 'latin1', 'LATIN1', 'ucs-2', 'UCS-2', 'ucs2', 'UCS2', 'utf-8', 'UTF-8', + // 'utf8', 'UTF8', 'utf16le', 'UTF16LE' + responseEncoding: 'utf8', // default + + // `xsrfCookieName` is the name of the cookie to use as a value for xsrf token + xsrfCookieName: 'XSRF-TOKEN', // default + + // `xsrfHeaderName` is the name of the http header that carries the xsrf token value + xsrfHeaderName: 'X-XSRF-TOKEN', // default + + // `undefined` (default) - set XSRF header only for the same origin requests + withXSRFToken: boolean | undefined | ((config: InternalAxiosRequestConfig) => boolean | undefined), + + // `onUploadProgress` allows handling of progress events for uploads + // browser & node.js + onUploadProgress: function ({loaded, total, progress, bytes, estimated, rate, upload = true}) { + // Do whatever you want with the Axios progress event + }, + + // `onDownloadProgress` allows handling of progress events for downloads + // browser & node.js + onDownloadProgress: function ({loaded, total, progress, bytes, estimated, rate, download = true}) { + // Do whatever you want with the Axios progress event + }, + + // `maxContentLength` defines the max size of the http response content in bytes allowed in node.js + maxContentLength: 2000, + + // `maxBodyLength` (Node only option) defines the max size of the http request content in bytes allowed + maxBodyLength: 2000, + + // `validateStatus` defines whether to resolve or reject the promise for a given + // HTTP response status code. If `validateStatus` returns `true` (or is set to `null` + // or `undefined`), the promise will be resolved; otherwise, the promise will be + // rejected. + validateStatus: function (status) { + return status >= 200 && status < 300; // default + }, + + // `maxRedirects` defines the maximum number of redirects to follow in node.js. + // If set to 0, no redirects will be followed. + maxRedirects: 21, // default + + // `beforeRedirect` defines a function that will be called before redirect. + // Use this to adjust the request options upon redirecting, + // to inspect the latest response headers, + // or to cancel the request by throwing an error + // If maxRedirects is set to 0, `beforeRedirect` is not used. + beforeRedirect: (options, { headers }) => { + if (options.hostname === "example.com") { + options.auth = "user:password"; + } + }, + + // `socketPath` defines a UNIX Socket to be used in node.js. + // e.g. '/var/run/docker.sock' to send requests to the docker daemon. + // Only either `socketPath` or `proxy` can be specified. + // If both are specified, `socketPath` is used. + socketPath: null, // default + + // `transport` determines the transport method that will be used to make the request. + // If defined, it will be used. Otherwise, if `maxRedirects` is 0, + // the default `http` or `https` library will be used, depending on the protocol specified in `protocol`. + // Otherwise, the `httpFollow` or `httpsFollow` library will be used, again depending on the protocol, + // which can handle redirects. + transport: undefined, // default + + // `httpAgent` and `httpsAgent` define a custom agent to be used when performing http + // and https requests, respectively, in node.js. This allows options to be added like + // `keepAlive` that are not enabled by default. + httpAgent: new http.Agent({ keepAlive: true }), + httpsAgent: new https.Agent({ keepAlive: true }), + + // `proxy` defines the hostname, port, and protocol of the proxy server. + // You can also define your proxy using the conventional `http_proxy` and + // `https_proxy` environment variables. If you are using environment variables + // for your proxy configuration, you can also define a `no_proxy` environment + // variable as a comma-separated list of domains that should not be proxied. + // Use `false` to disable proxies, ignoring environment variables. + // `auth` indicates that HTTP Basic auth should be used to connect to the proxy, and + // supplies credentials. + // This will set an `Proxy-Authorization` header, overwriting any existing + // `Proxy-Authorization` custom headers you have set using `headers`. + // If the proxy server uses HTTPS, then you must set the protocol to `https`. + proxy: { + protocol: 'https', + host: '127.0.0.1', + // hostname: '127.0.0.1' // Takes precedence over 'host' if both are defined + port: 9000, + auth: { + username: 'mikeymike', + password: 'rapunz3l' + } + }, + + // `cancelToken` specifies a cancel token that can be used to cancel the request + // (see Cancellation section below for details) + cancelToken: new CancelToken(function (cancel) { + }), + + // an alternative way to cancel Axios requests using AbortController + signal: new AbortController().signal, + + // `decompress` indicates whether or not the response body should be decompressed + // automatically. If set to `true` will also remove the 'content-encoding' header + // from the responses objects of all decompressed responses + // - Node only (XHR cannot turn off decompression) + decompress: true, // default + + // `insecureHTTPParser` boolean. + // Indicates where to use an insecure HTTP parser that accepts invalid HTTP headers. + // This may allow interoperability with non-conformant HTTP implementations. + // Using the insecure parser should be avoided. + // see options https://nodejs.org/dist/latest-v12.x/docs/api/http.html#http_http_request_url_options_callback + // see also https://nodejs.org/en/blog/vulnerability/february-2020-security-releases/#strict-http-header-parsing-none + insecureHTTPParser: undefined, // default + + // transitional options for backward compatibility that may be removed in the newer versions + transitional: { + // silent JSON parsing mode + // `true` - ignore JSON parsing errors and set response.data to null if parsing failed (old behaviour) + // `false` - throw SyntaxError if JSON parsing failed (Note: responseType must be set to 'json') + silentJSONParsing: true, // default value for the current Axios version + + // try to parse the response string as JSON even if `responseType` is not 'json' + forcedJSONParsing: true, + + // throw ETIMEDOUT error instead of generic ECONNABORTED on request timeouts + clarifyTimeoutError: false, + }, + + env: { + // The FormData class to be used to automatically serialize the payload into a FormData object + FormData: window?.FormData || global?.FormData + }, + + formSerializer: { + visitor: (value, key, path, helpers) => {}; // custom visitor function to serialize form values + dots: boolean; // use dots instead of brackets format + metaTokens: boolean; // keep special endings like {} in parameter key + indexes: boolean; // array indexes format null - no brackets, false - empty brackets, true - brackets with indexes + }, + + // http adapter only (node.js) + maxRate: [ + 100 * 1024, // 100KB/s upload limit, + 100 * 1024 // 100KB/s download limit + ] +} +``` + +## Response Schema + +The response for a request contains the following information. + +```js +{ + // `data` is the response that was provided by the server + data: {}, + + // `status` is the HTTP status code from the server response + status: 200, + + // `statusText` is the HTTP status message from the server response + statusText: 'OK', + + // `headers` the HTTP headers that the server responded with + // All header names are lowercase and can be accessed using the bracket notation. + // Example: `response.headers['content-type']` + headers: {}, + + // `config` is the config that was provided to `axios` for the request + config: {}, + + // `request` is the request that generated this response + // It is the last ClientRequest instance in node.js (in redirects) + // and an XMLHttpRequest instance in the browser + request: {} +} +``` + +When using `then`, you will receive the response as follows: + +```js +axios.get('/user/12345') + .then(function (response) { + console.log(response.data); + console.log(response.status); + console.log(response.statusText); + console.log(response.headers); + console.log(response.config); + }); +``` + +When using `catch`, or passing a [rejection callback](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) as second parameter of `then`, the response will be available through the `error` object as explained in the [Handling Errors](#handling-errors) section. + +## Config Defaults + +You can specify config defaults that will be applied to every request. + +### Global axios defaults + +```js +axios.defaults.baseURL = 'https://api.example.com'; + +// Important: If axios is used with multiple domains, the AUTH_TOKEN will be sent to all of them. +// See below for an example using Custom instance defaults instead. +axios.defaults.headers.common['Authorization'] = AUTH_TOKEN; + +axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; +``` + +### Custom instance defaults + +```js +// Set config defaults when creating the instance +const instance = axios.create({ + baseURL: 'https://api.example.com' +}); + +// Alter defaults after instance has been created +instance.defaults.headers.common['Authorization'] = AUTH_TOKEN; +``` + +### Config order of precedence + +Config will be merged with an order of precedence. The order is library defaults found in [lib/defaults/index.js](https://github.com/axios/axios/blob/main/lib/defaults/index.js#L49), then `defaults` property of the instance, and finally `config` argument for the request. The latter will take precedence over the former. Here's an example. + +```js +// Create an instance using the config defaults provided by the library +// At this point the timeout config value is `0` as is the default for the library +const instance = axios.create(); + +// Override timeout default for the library +// Now all requests using this instance will wait 2.5 seconds before timing out +instance.defaults.timeout = 2500; + +// Override timeout for this request as it's known to take a long time +instance.get('/longRequest', { + timeout: 5000 +}); +``` + +## Interceptors + +You can intercept requests or responses before they are handled by `then` or `catch`. + +```js + +const instance = axios.create(); + +// Add a request interceptor +instance.interceptors.request.use(function (config) { + // Do something before request is sent + return config; + }, function (error) { + // Do something with request error + return Promise.reject(error); + }); + +// Add a response interceptor +instance.interceptors.response.use(function (response) { + // Any status code that lie within the range of 2xx cause this function to trigger + // Do something with response data + return response; + }, function (error) { + // Any status codes that falls outside the range of 2xx cause this function to trigger + // Do something with response error + return Promise.reject(error); + }); +``` + +If you need to remove an interceptor later you can. + +```js +const instance = axios.create(); +const myInterceptor = instance.interceptors.request.use(function () {/*...*/}); +axios.interceptors.request.eject(myInterceptor); +``` + +You can also clear all interceptors for requests or responses. +```js +const instance = axios.create(); +instance.interceptors.request.use(function () {/*...*/}); +instance.interceptors.request.clear(); // Removes interceptors from requests +instance.interceptors.response.use(function () {/*...*/}); +instance.interceptors.response.clear(); // Removes interceptors from responses +``` + +You can add interceptors to a custom instance of axios. + +```js +const instance = axios.create(); +instance.interceptors.request.use(function () {/*...*/}); +``` + +When you add request interceptors, they are presumed to be asynchronous by default. This can cause a delay +in the execution of your axios request when the main thread is blocked (a promise is created under the hood for +the interceptor and your request gets put on the bottom of the call stack). If your request interceptors are synchronous you can add a flag +to the options object that will tell axios to run the code synchronously and avoid any delays in request execution. + +```js +axios.interceptors.request.use(function (config) { + config.headers.test = 'I am only a header!'; + return config; +}, null, { synchronous: true }); +``` + +If you want to execute a particular interceptor based on a runtime check, +you can add a `runWhen` function to the options object. The request interceptor will not be executed **if and only if** the return +of `runWhen` is `false`. The function will be called with the config +object (don't forget that you can bind your own arguments to it as well.) This can be handy when you have an +asynchronous request interceptor that only needs to run at certain times. + +```js +function onGetCall(config) { + return config.method === 'get'; +} +axios.interceptors.request.use(function (config) { + config.headers.test = 'special get headers'; + return config; +}, null, { runWhen: onGetCall }); +``` + +> **Note:** options parameter(having `synchronous` and `runWhen` properties) is only supported for request interceptors at the moment. + +### Multiple Interceptors + +Given you add multiple response interceptors +and when the response was fulfilled +- then each interceptor is executed +- then they are executed in the order they were added +- then only the last interceptor's result is returned +- then every interceptor receives the result of its predecessor +- and when the fulfillment-interceptor throws + - then the following fulfillment-interceptor is not called + - then the following rejection-interceptor is called + - once caught, another following fulfill-interceptor is called again (just like in a promise chain). + +Read [the interceptor tests](./test/specs/interceptors.spec.js) for seeing all this in code. + +## Error Types + +There are many different axios error messages that can appear that can provide basic information about the specifics of the error and where opportunities may lie in debugging. + +The general structure of axios errors is as follows: +| Property | Definition | +| -------- | ---------- | +| message | A quick summary of the error message and the status it failed with. | +| name | This defines where the error originated from. For axios, it will always be an 'AxiosError'. | +| stack | Provides the stack trace of the error. | +| config | An axios config object with specific instance configurations defined by the user from when the request was made | +| code | Represents an axios identified error. The table below lists out specific definitions for internal axios error. | +| status | HTTP response status code. See [here](https://en.wikipedia.org/wiki/List_of_HTTP_status_codes) for common HTTP response status code meanings. + +Below is a list of potential axios identified error: +| Code | Definition | +| -------- | ---------- | +| ERR_BAD_OPTION_VALUE | Invalid or unsupported value provided in axios configuration. | +| ERR_BAD_OPTION | Invalid option provided in axios configuration. | +| ECONNABORTED | Request timed out due to exceeding timeout specified in axios configuration. | +| ETIMEDOUT | Request timed out due to exceeding default axios timelimit. | +| ERR_NETWORK | Network-related issue. +| ERR_FR_TOO_MANY_REDIRECTS | Request is redirected too many times; exceeds max redirects specified in axios configuration. +| ERR_DEPRECATED | Deprecated feature or method used in axios. +| ERR_BAD_RESPONSE | Response cannot be parsed properly or is in an unexpected format. +| ERR_BAD_REQUEST | Requested has unexpected format or missing required parameters. | +| ERR_CANCELED | Feature or method is canceled explicitly by the user. +| ERR_NOT_SUPPORT | Feature or method not supported in the current axios environment. +| ERR_INVALID_URL | Invalid URL provided for axios request. + +## Handling Errors + +the default behavior is to reject every response that returns with a status code that falls out of the range of 2xx and treat it as an error. + +```js +axios.get('/user/12345') + .catch(function (error) { + if (error.response) { + // The request was made and the server responded with a status code + // that falls out of the range of 2xx + console.log(error.response.data); + console.log(error.response.status); + console.log(error.response.headers); + } else if (error.request) { + // The request was made but no response was received + // `error.request` is an instance of XMLHttpRequest in the browser and an instance of + // http.ClientRequest in node.js + console.log(error.request); + } else { + // Something happened in setting up the request that triggered an Error + console.log('Error', error.message); + } + console.log(error.config); + }); +``` + +Using the `validateStatus` config option, you can override the default condition (status >= 200 && status < 300) and define HTTP code(s) that should throw an error. + +```js +axios.get('/user/12345', { + validateStatus: function (status) { + return status < 500; // Resolve only if the status code is less than 500 + } +}) +``` + +Using `toJSON` you get an object with more information about the HTTP error. + +```js +axios.get('/user/12345') + .catch(function (error) { + console.log(error.toJSON()); + }); +``` + +## Cancellation + +### AbortController + +Starting from `v0.22.0` Axios supports AbortController to cancel requests in fetch API way: + +```js +const controller = new AbortController(); + +axios.get('/foo/bar', { + signal: controller.signal +}).then(function(response) { + //... +}); +// cancel the request +controller.abort() +``` + +### CancelToken `๐Ÿ‘Ždeprecated` + +You can also cancel a request using a *CancelToken*. + +> The axios cancel token API is based on the withdrawn [cancellable promises proposal](https://github.com/tc39/proposal-cancelable-promises). + +> This API is deprecated since v0.22.0 and shouldn't be used in new projects + +You can create a cancel token using the `CancelToken.source` factory as shown below: + +```js +const CancelToken = axios.CancelToken; +const source = CancelToken.source(); + +axios.get('/user/12345', { + cancelToken: source.token +}).catch(function (thrown) { + if (axios.isCancel(thrown)) { + console.log('Request canceled', thrown.message); + } else { + // handle error + } +}); + +axios.post('/user/12345', { + name: 'new name' +}, { + cancelToken: source.token +}) + +// cancel the request (the message parameter is optional) +source.cancel('Operation canceled by the user.'); +``` + +You can also create a cancel token by passing an executor function to the `CancelToken` constructor: + +```js +const CancelToken = axios.CancelToken; +let cancel; + +axios.get('/user/12345', { + cancelToken: new CancelToken(function executor(c) { + // An executor function receives a cancel function as a parameter + cancel = c; + }) +}); + +// cancel the request +cancel(); +``` + +> **Note:** you can cancel several requests with the same cancel token/abort controller. +> If a cancellation token is already cancelled at the moment of starting an Axios request, then the request is cancelled immediately, without any attempts to make a real request. + +> During the transition period, you can use both cancellation APIs, even for the same request: + +## Using `application/x-www-form-urlencoded` format + +### URLSearchParams + +By default, axios serializes JavaScript objects to `JSON`. To send data in the [`application/x-www-form-urlencoded` format](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods/POST) instead, you can use the [`URLSearchParams`](https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) API, which is [supported](http://www.caniuse.com/#feat=urlsearchparams) in the vast majority of browsers,and [ Node](https://nodejs.org/api/url.html#url_class_urlsearchparams) starting with v10 (released in 2018). + +```js +const params = new URLSearchParams({ foo: 'bar' }); +params.append('extraparam', 'value'); +axios.post('/foo', params); +``` + +### Query string (Older browsers) + +For compatibility with very old browsers, there is a [polyfill](https://github.com/WebReflection/url-search-params) available (make sure to polyfill the global environment). + +Alternatively, you can encode data using the [`qs`](https://github.com/ljharb/qs) library: + +```js +const qs = require('qs'); +axios.post('/foo', qs.stringify({ 'bar': 123 })); +``` + +Or in another way (ES6), + +```js +import qs from 'qs'; +const data = { 'bar': 123 }; +const options = { + method: 'POST', + headers: { 'content-type': 'application/x-www-form-urlencoded' }, + data: qs.stringify(data), + url, +}; +axios(options); +``` + +### Older Node.js versions + +For older Node.js engines, you can use the [`querystring`](https://nodejs.org/api/querystring.html) module as follows: + +```js +const querystring = require('querystring'); +axios.post('https://something.com/', querystring.stringify({ foo: 'bar' })); +``` + +You can also use the [`qs`](https://github.com/ljharb/qs) library. + +> **Note**: The `qs` library is preferable if you need to stringify nested objects, as the `querystring` method has [known issues](https://github.com/nodejs/node-v0.x-archive/issues/1665) with that use case. + +### ๐Ÿ†• Automatic serialization to URLSearchParams + +Axios will automatically serialize the data object to urlencoded format if the content-type header is set to "application/x-www-form-urlencoded". + +```js +const data = { + x: 1, + arr: [1, 2, 3], + arr2: [1, [2], 3], + users: [{name: 'Peter', surname: 'Griffin'}, {name: 'Thomas', surname: 'Anderson'}], +}; + +await axios.postForm('https://postman-echo.com/post', data, + {headers: {'content-type': 'application/x-www-form-urlencoded'}} +); +``` + +The server will handle it as: + +```js + { + x: '1', + 'arr[]': [ '1', '2', '3' ], + 'arr2[0]': '1', + 'arr2[1][0]': '2', + 'arr2[2]': '3', + 'arr3[]': [ '1', '2', '3' ], + 'users[0][name]': 'Peter', + 'users[0][surname]': 'griffin', + 'users[1][name]': 'Thomas', + 'users[1][surname]': 'Anderson' + } +```` + +If your backend body-parser (like `body-parser` of `express.js`) supports nested objects decoding, you will get the same object on the server-side automatically + +```js + var app = express(); + + app.use(bodyParser.urlencoded({ extended: true })); // support encoded bodies + + app.post('/', function (req, res, next) { + // echo body as JSON + res.send(JSON.stringify(req.body)); + }); + + server = app.listen(3000); +``` + +## Using `multipart/form-data` format + +### FormData + +To send the data as a `multipart/formdata` you need to pass a formData instance as a payload. +Setting the `Content-Type` header is not required as Axios guesses it based on the payload type. + +```js +const formData = new FormData(); +formData.append('foo', 'bar'); + +axios.post('https://httpbin.org/post', formData); +``` + +In node.js, you can use the [`form-data`](https://github.com/form-data/form-data) library as follows: + +```js +const FormData = require('form-data'); + +const form = new FormData(); +form.append('my_field', 'my value'); +form.append('my_buffer', new Buffer(10)); +form.append('my_file', fs.createReadStream('/foo/bar.jpg')); + +axios.post('https://example.com', form) +``` + +### ๐Ÿ†• Automatic serialization to FormData + +Starting from `v0.27.0`, Axios supports automatic object serialization to a FormData object if the request `Content-Type` +header is set to `multipart/form-data`. + +The following request will submit the data in a FormData format (Browser & Node.js): + +```js +import axios from 'axios'; + +axios.post('https://httpbin.org/post', {x: 1}, { + headers: { + 'Content-Type': 'multipart/form-data' + } +}).then(({data}) => console.log(data)); +``` + +In the `node.js` build, the ([`form-data`](https://github.com/form-data/form-data)) polyfill is used by default. + +You can overload the FormData class by setting the `env.FormData` config variable, +but you probably won't need it in most cases: + +```js +const axios = require('axios'); +var FormData = require('form-data'); + +axios.post('https://httpbin.org/post', {x: 1, buf: new Buffer(10)}, { + headers: { + 'Content-Type': 'multipart/form-data' + } +}).then(({data}) => console.log(data)); +``` + +Axios FormData serializer supports some special endings to perform the following operations: + +- `{}` - serialize the value with JSON.stringify +- `[]` - unwrap the array-like object as separate fields with the same key + +> **Note**: unwrap/expand operation will be used by default on arrays and FileList objects + +FormData serializer supports additional options via `config.formSerializer: object` property to handle rare cases: + +- `visitor: Function` - user-defined visitor function that will be called recursively to serialize the data object +to a `FormData` object by following custom rules. + +- `dots: boolean = false` - use dot notation instead of brackets to serialize arrays and objects; + +- `metaTokens: boolean = true` - add the special ending (e.g `user{}: '{"name": "John"}'`) in the FormData key. +The back-end body-parser could potentially use this meta-information to automatically parse the value as JSON. + +- `indexes: null|false|true = false` - controls how indexes will be added to unwrapped keys of `flat` array-like objects. + + - `null` - don't add brackets (`arr: 1`, `arr: 2`, `arr: 3`) + - `false`(default) - add empty brackets (`arr[]: 1`, `arr[]: 2`, `arr[]: 3`) + - `true` - add brackets with indexes (`arr[0]: 1`, `arr[1]: 2`, `arr[2]: 3`) + +Let's say we have an object like this one: + +```js +const obj = { + x: 1, + arr: [1, 2, 3], + arr2: [1, [2], 3], + users: [{name: 'Peter', surname: 'Griffin'}, {name: 'Thomas', surname: 'Anderson'}], + 'obj2{}': [{x:1}] +}; +``` + +The following steps will be executed by the Axios serializer internally: + +```js +const formData = new FormData(); +formData.append('x', '1'); +formData.append('arr[]', '1'); +formData.append('arr[]', '2'); +formData.append('arr[]', '3'); +formData.append('arr2[0]', '1'); +formData.append('arr2[1][0]', '2'); +formData.append('arr2[2]', '3'); +formData.append('users[0][name]', 'Peter'); +formData.append('users[0][surname]', 'Griffin'); +formData.append('users[1][name]', 'Thomas'); +formData.append('users[1][surname]', 'Anderson'); +formData.append('obj2{}', '[{"x":1}]'); +``` + +Axios supports the following shortcut methods: `postForm`, `putForm`, `patchForm` +which are just the corresponding http methods with the `Content-Type` header preset to `multipart/form-data`. + +## Files Posting + +You can easily submit a single file: + +```js +await axios.postForm('https://httpbin.org/post', { + 'myVar' : 'foo', + 'file': document.querySelector('#fileInput').files[0] +}); +``` + +or multiple files as `multipart/form-data`: + +```js +await axios.postForm('https://httpbin.org/post', { + 'files[]': document.querySelector('#fileInput').files +}); +``` + +`FileList` object can be passed directly: + +```js +await axios.postForm('https://httpbin.org/post', document.querySelector('#fileInput').files) +``` + +All files will be sent with the same field names: `files[]`. + +## ๐Ÿ†• HTML Form Posting (browser) + +Pass HTML Form element as a payload to submit it as `multipart/form-data` content. + +```js +await axios.postForm('https://httpbin.org/post', document.querySelector('#htmlForm')); +``` + +`FormData` and `HTMLForm` objects can also be posted as `JSON` by explicitly setting the `Content-Type` header to `application/json`: + +```js +await axios.post('https://httpbin.org/post', document.querySelector('#htmlForm'), { + headers: { + 'Content-Type': 'application/json' + } +}) +``` + +For example, the Form + +```html +
+ + + + + + + + + +
+``` + +will be submitted as the following JSON object: + +```js +{ + "foo": "1", + "deep": { + "prop": { + "spaced": "3" + } + }, + "baz": [ + "4", + "5" + ], + "user": { + "age": "value2" + } +} +```` + +Sending `Blobs`/`Files` as JSON (`base64`) is not currently supported. + +## ๐Ÿ†• Progress capturing + +Axios supports both browser and node environments to capture request upload/download progress. +The frequency of progress events is forced to be limited to `3` times per second. + +```js +await axios.post(url, data, { + onUploadProgress: function (axiosProgressEvent) { + /*{ + loaded: number; + total?: number; + progress?: number; // in range [0..1] + bytes: number; // how many bytes have been transferred since the last trigger (delta) + estimated?: number; // estimated time in seconds + rate?: number; // upload speed in bytes + upload: true; // upload sign + }*/ + }, + + onDownloadProgress: function (axiosProgressEvent) { + /*{ + loaded: number; + total?: number; + progress?: number; + bytes: number; + estimated?: number; + rate?: number; // download speed in bytes + download: true; // download sign + }*/ + } +}); +``` + +You can also track stream upload/download progress in node.js: + +```js +const {data} = await axios.post(SERVER_URL, readableStream, { + onUploadProgress: ({progress}) => { + console.log((progress * 100).toFixed(2)); + }, + + headers: { + 'Content-Length': contentLength + }, + + maxRedirects: 0 // avoid buffering the entire stream +}); +```` + +> **Note:** +> Capturing FormData upload progress is not currently supported in node.js environments. + +> **โš ๏ธ Warning** +> It is recommended to disable redirects by setting maxRedirects: 0 to upload the stream in the **node.js** environment, +> as follow-redirects package will buffer the entire stream in RAM without following the "backpressure" algorithm. + + +## ๐Ÿ†• Rate limiting + +Download and upload rate limits can only be set for the http adapter (node.js): + +```js +const {data} = await axios.post(LOCAL_SERVER_URL, myBuffer, { + onUploadProgress: ({progress, rate}) => { + console.log(`Upload [${(progress*100).toFixed(2)}%]: ${(rate / 1024).toFixed(2)}KB/s`) + }, + + maxRate: [100 * 1024], // 100KB/s limit +}); +``` + +## ๐Ÿ†• AxiosHeaders + +Axios has its own `AxiosHeaders` class to manipulate headers using a Map-like API that guarantees caseless work. +Although HTTP is case-insensitive in headers, Axios will retain the case of the original header for stylistic reasons +and for a workaround when servers mistakenly consider the header's case. +The old approach of directly manipulating headers object is still available, but deprecated and not recommended for future usage. + +### Working with headers + +An AxiosHeaders object instance can contain different types of internal values. that control setting and merging logic. +The final headers object with string values is obtained by Axios by calling the `toJSON` method. + +> Note: By JSON here we mean an object consisting only of string values intended to be sent over the network. + +The header value can be one of the following types: +- `string` - normal string value that will be sent to the server +- `null` - skip header when rendering to JSON +- `false` - skip header when rendering to JSON, additionally indicates that `set` method must be called with `rewrite` option set to `true` + to overwrite this value (Axios uses this internally to allow users to opt out of installing certain headers like `User-Agent` or `Content-Type`) +- `undefined` - value is not set + +> Note: The header value is considered set if it is not equal to undefined. + +The headers object is always initialized inside interceptors and transformers: + +```ts + axios.interceptors.request.use((request: InternalAxiosRequestConfig) => { + request.headers.set('My-header', 'value'); + + request.headers.set({ + "My-set-header1": "my-set-value1", + "My-set-header2": "my-set-value2" + }); + + request.headers.set('User-Agent', false); // disable subsequent setting the header by Axios + + request.headers.setContentType('text/plain'); + + request.headers['My-set-header2'] = 'newValue' // direct access is deprecated + + return request; + } + ); +```` + +You can iterate over an `AxiosHeaders` instance using a `for...of` statement: + +````js +const headers = new AxiosHeaders({ + foo: '1', + bar: '2', + baz: '3' +}); + +for(const [header, value] of headers) { + console.log(header, value); +} + +// foo 1 +// bar 2 +// baz 3 +```` + +### new AxiosHeaders(headers?) + +Constructs a new `AxiosHeaders` instance. + +``` +constructor(headers?: RawAxiosHeaders | AxiosHeaders | string); +``` + +If the headers object is a string, it will be parsed as RAW HTTP headers. + +````js +const headers = new AxiosHeaders(` +Host: www.bing.com +User-Agent: curl/7.54.0 +Accept: */*`); + +console.log(headers); + +// Object [AxiosHeaders] { +// host: 'www.bing.com', +// 'user-agent': 'curl/7.54.0', +// accept: '*/*' +// } +```` + +### AxiosHeaders#set + +```ts +set(headerName, value: Axios, rewrite?: boolean); +set(headerName, value, rewrite?: (this: AxiosHeaders, value: string, name: string, headers: RawAxiosHeaders) => boolean); +set(headers?: RawAxiosHeaders | AxiosHeaders | string, rewrite?: boolean); +``` + +The `rewrite` argument controls the overwriting behavior: +- `false` - do not overwrite if header's value is set (is not `undefined`) +- `undefined` (default) - overwrite the header unless its value is set to `false` +- `true` - rewrite anyway + +The option can also accept a user-defined function that determines whether the value should be overwritten or not. + +Returns `this`. + +### AxiosHeaders#get(header) + +``` + get(headerName: string, matcher?: true | AxiosHeaderMatcher): AxiosHeaderValue; + get(headerName: string, parser: RegExp): RegExpExecArray | null; +```` + +Returns the internal value of the header. It can take an extra argument to parse the header's value with `RegExp.exec`, +matcher function or internal key-value parser. + +```ts +const headers = new AxiosHeaders({ + 'Content-Type': 'multipart/form-data; boundary=Asrf456BGe4h' +}); + +console.log(headers.get('Content-Type')); +// multipart/form-data; boundary=Asrf456BGe4h + +console.log(headers.get('Content-Type', true)); // parse key-value pairs from a string separated with \s,;= delimiters: +// [Object: null prototype] { +// 'multipart/form-data': undefined, +// boundary: 'Asrf456BGe4h' +// } + + +console.log(headers.get('Content-Type', (value, name, headers) => { + return String(value).replace(/a/g, 'ZZZ'); +})); +// multipZZZrt/form-dZZZtZZZ; boundZZZry=Asrf456BGe4h + +console.log(headers.get('Content-Type', /boundary=(\w+)/)?.[0]); +// boundary=Asrf456BGe4h + +``` + +Returns the value of the header. + +### AxiosHeaders#has(header, matcher?) + +``` +has(header: string, matcher?: AxiosHeaderMatcher): boolean; +``` + +Returns `true` if the header is set (has no `undefined` value). + +### AxiosHeaders#delete(header, matcher?) + +``` +delete(header: string | string[], matcher?: AxiosHeaderMatcher): boolean; +``` + +Returns `true` if at least one header has been removed. + +### AxiosHeaders#clear(matcher?) + +``` +clear(matcher?: AxiosHeaderMatcher): boolean; +``` + +Removes all headers. +Unlike the `delete` method matcher, this optional matcher will be used to match against the header name rather than the value. + +```ts +const headers = new AxiosHeaders({ + 'foo': '1', + 'x-foo': '2', + 'x-bar': '3', +}); + +console.log(headers.clear(/^x-/)); // true + +console.log(headers.toJSON()); // [Object: null prototype] { foo: '1' } +``` + +Returns `true` if at least one header has been cleared. + +### AxiosHeaders#normalize(format); + +If the headers object was changed directly, it can have duplicates with the same name but in different cases. +This method normalizes the headers object by combining duplicate keys into one. +Axios uses this method internally after calling each interceptor. +Set `format` to true for converting headers name to lowercase and capitalize the initial letters (`cOntEnt-type` => `Content-Type`) + +```js +const headers = new AxiosHeaders({ + 'foo': '1', +}); + +headers.Foo = '2'; +headers.FOO = '3'; + +console.log(headers.toJSON()); // [Object: null prototype] { foo: '1', Foo: '2', FOO: '3' } +console.log(headers.normalize().toJSON()); // [Object: null prototype] { foo: '3' } +console.log(headers.normalize(true).toJSON()); // [Object: null prototype] { Foo: '3' } +``` + +Returns `this`. + +### AxiosHeaders#concat(...targets) + +``` +concat(...targets: Array): AxiosHeaders; +``` + +Merges the instance with targets into a new `AxiosHeaders` instance. If the target is a string, it will be parsed as RAW HTTP headers. + +Returns a new `AxiosHeaders` instance. + +### AxiosHeaders#toJSON(asStrings?) + +```` +toJSON(asStrings?: boolean): RawAxiosHeaders; +```` + +Resolve all internal headers values into a new null prototype object. +Set `asStrings` to true to resolve arrays as a string containing all elements, separated by commas. + +### AxiosHeaders.from(thing?) + +```` +from(thing?: AxiosHeaders | RawAxiosHeaders | string): AxiosHeaders; +```` + +Returns a new `AxiosHeaders` instance created from the raw headers passed in, +or simply returns the given headers object if it's an `AxiosHeaders` instance. + +### AxiosHeaders.concat(...targets) + +```` +concat(...targets: Array): AxiosHeaders; +```` + +Returns a new `AxiosHeaders` instance created by merging the target objects. + +### Shortcuts + +The following shortcuts are available: + +- `setContentType`, `getContentType`, `hasContentType` + +- `setContentLength`, `getContentLength`, `hasContentLength` + +- `setAccept`, `getAccept`, `hasAccept` + +- `setUserAgent`, `getUserAgent`, `hasUserAgent` + +- `setContentEncoding`, `getContentEncoding`, `hasContentEncoding` + +## ๐Ÿ”ฅ Fetch adapter + +Fetch adapter was introduced in `v1.7.0`. By default, it will be used if `xhr` and `http` adapters are not available in the build, +or not supported by the environment. +To use it by default, it must be selected explicitly: + +```js +const {data} = axios.get(url, { + adapter: 'fetch' // by default ['xhr', 'http', 'fetch'] +}) +``` + +You can create a separate instance for this: + +```js +const fetchAxios = axios.create({ + adapter: 'fetch' +}); + +const {data} = fetchAxios.get(url); +``` + +The adapter supports the same functionality as `xhr` adapter, **including upload and download progress capturing**. +Also, it supports additional response types such as `stream` and `formdata` (if supported by the environment). + +## Semver + +Until axios reaches a `1.0` release, breaking changes will be released with a new minor version. For example `0.5.1`, and `0.5.4` will have the same API, but `0.6.0` will have breaking changes. + +## Promises + +axios depends on a native ES6 Promise implementation to be [supported](https://caniuse.com/promises). +If your environment doesn't support ES6 Promises, you can [polyfill](https://github.com/jakearchibald/es6-promise). + +## TypeScript + +axios includes [TypeScript](https://typescriptlang.org) definitions and a type guard for axios errors. + +```typescript +let user: User = null; +try { + const { data } = await axios.get('/user?ID=12345'); + user = data.userDetails; +} catch (error) { + if (axios.isAxiosError(error)) { + handleAxiosError(error); + } else { + handleUnexpectedError(error); + } +} +``` + +Because axios dual publishes with an ESM default export and a CJS `module.exports`, there are some caveats. +The recommended setting is to use `"moduleResolution": "node16"` (this is implied by `"module": "node16"`). Note that this requires TypeScript 4.7 or greater. +If use ESM, your settings should be fine. +If you compile TypeScript to CJS and you canโ€™t use `"moduleResolution": "node 16"`, you have to enable `esModuleInterop`. +If you use TypeScript to type check CJS JavaScript code, your only option is to use `"moduleResolution": "node16"`. + +## Online one-click setup + +You can use Gitpod, an online IDE(which is free for Open Source) for contributing or running the examples online. + +[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/axios/axios/blob/main/examples/server.js) + + +## Resources + +* [Changelog](https://github.com/axios/axios/blob/v1.x/CHANGELOG.md) +* [Ecosystem](https://github.com/axios/axios/blob/v1.x/ECOSYSTEM.md) +* [Contributing Guide](https://github.com/axios/axios/blob/v1.x/CONTRIBUTING.md) +* [Code of Conduct](https://github.com/axios/axios/blob/v1.x/CODE_OF_CONDUCT.md) + +## Credits + +axios is heavily inspired by the [$http service](https://docs.angularjs.org/api/ng/service/$http) provided in [AngularJS](https://angularjs.org/). Ultimately axios is an effort to provide a standalone `$http`-like service for use outside of AngularJS. + +## License + +[MIT](LICENSE) diff --git a/node_modules/axios/dist/axios.js b/node_modules/axios/dist/axios.js new file mode 100644 index 0000000..a3810f9 --- /dev/null +++ b/node_modules/axios/dist/axios.js @@ -0,0 +1,4293 @@ +/*! Axios v1.9.0 Copyright (c) 2025 Matt Zabriskie and contributors */ +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.axios = factory()); +})(this, (function () { 'use strict'; + + function _AsyncGenerator(e) { + var r, t; + function resume(r, t) { + try { + var n = e[r](t), + o = n.value, + u = o instanceof _OverloadYield; + Promise.resolve(u ? o.v : o).then(function (t) { + if (u) { + var i = "return" === r ? "return" : "next"; + if (!o.k || t.done) return resume(i, t); + t = e[i](t).value; + } + settle(n.done ? "return" : "normal", t); + }, function (e) { + resume("throw", e); + }); + } catch (e) { + settle("throw", e); + } + } + function settle(e, n) { + switch (e) { + case "return": + r.resolve({ + value: n, + done: !0 + }); + break; + case "throw": + r.reject(n); + break; + default: + r.resolve({ + value: n, + done: !1 + }); + } + (r = r.next) ? resume(r.key, r.arg) : t = null; + } + this._invoke = function (e, n) { + return new Promise(function (o, u) { + var i = { + key: e, + arg: n, + resolve: o, + reject: u, + next: null + }; + t ? t = t.next = i : (r = t = i, resume(e, n)); + }); + }, "function" != typeof e.return && (this.return = void 0); + } + _AsyncGenerator.prototype["function" == typeof Symbol && Symbol.asyncIterator || "@@asyncIterator"] = function () { + return this; + }, _AsyncGenerator.prototype.next = function (e) { + return this._invoke("next", e); + }, _AsyncGenerator.prototype.throw = function (e) { + return this._invoke("throw", e); + }, _AsyncGenerator.prototype.return = function (e) { + return this._invoke("return", e); + }; + function _OverloadYield(t, e) { + this.v = t, this.k = e; + } + function _asyncGeneratorDelegate(t) { + var e = {}, + n = !1; + function pump(e, r) { + return n = !0, r = new Promise(function (n) { + n(t[e](r)); + }), { + done: !1, + value: new _OverloadYield(r, 1) + }; + } + return e["undefined" != typeof Symbol && Symbol.iterator || "@@iterator"] = function () { + return this; + }, e.next = function (t) { + return n ? (n = !1, t) : pump("next", t); + }, "function" == typeof t.throw && (e.throw = function (t) { + if (n) throw n = !1, t; + return pump("throw", t); + }), "function" == typeof t.return && (e.return = function (t) { + return n ? (n = !1, t) : pump("return", t); + }), e; + } + function _asyncIterator(r) { + var n, + t, + o, + e = 2; + for ("undefined" != typeof Symbol && (t = Symbol.asyncIterator, o = Symbol.iterator); e--;) { + if (t && null != (n = r[t])) return n.call(r); + if (o && null != (n = r[o])) return new AsyncFromSyncIterator(n.call(r)); + t = "@@asyncIterator", o = "@@iterator"; + } + throw new TypeError("Object is not async iterable"); + } + function AsyncFromSyncIterator(r) { + function AsyncFromSyncIteratorContinuation(r) { + if (Object(r) !== r) return Promise.reject(new TypeError(r + " is not an object.")); + var n = r.done; + return Promise.resolve(r.value).then(function (r) { + return { + value: r, + done: n + }; + }); + } + return AsyncFromSyncIterator = function (r) { + this.s = r, this.n = r.next; + }, AsyncFromSyncIterator.prototype = { + s: null, + n: null, + next: function () { + return AsyncFromSyncIteratorContinuation(this.n.apply(this.s, arguments)); + }, + return: function (r) { + var n = this.s.return; + return void 0 === n ? Promise.resolve({ + value: r, + done: !0 + }) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); + }, + throw: function (r) { + var n = this.s.return; + return void 0 === n ? Promise.reject(r) : AsyncFromSyncIteratorContinuation(n.apply(this.s, arguments)); + } + }, new AsyncFromSyncIterator(r); + } + function _awaitAsyncGenerator(e) { + return new _OverloadYield(e, 0); + } + function _iterableToArrayLimit(r, l) { + var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; + if (null != t) { + var e, + n, + i, + u, + a = [], + f = !0, + o = !1; + try { + if (i = (t = t.call(r)).next, 0 === l) { + if (Object(t) !== t) return; + f = !1; + } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); + } catch (r) { + o = !0, n = r; + } finally { + try { + if (!f && null != t.return && (u = t.return(), Object(u) !== u)) return; + } finally { + if (o) throw n; + } + } + return a; + } + } + function ownKeys(e, r) { + var t = Object.keys(e); + if (Object.getOwnPropertySymbols) { + var o = Object.getOwnPropertySymbols(e); + r && (o = o.filter(function (r) { + return Object.getOwnPropertyDescriptor(e, r).enumerable; + })), t.push.apply(t, o); + } + return t; + } + function _objectSpread2(e) { + for (var r = 1; r < arguments.length; r++) { + var t = null != arguments[r] ? arguments[r] : {}; + r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { + _defineProperty(e, r, t[r]); + }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { + Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); + }); + } + return e; + } + function _regeneratorRuntime() { + _regeneratorRuntime = function () { + return e; + }; + var t, + e = {}, + r = Object.prototype, + n = r.hasOwnProperty, + o = Object.defineProperty || function (t, e, r) { + t[e] = r.value; + }, + i = "function" == typeof Symbol ? Symbol : {}, + a = i.iterator || "@@iterator", + c = i.asyncIterator || "@@asyncIterator", + u = i.toStringTag || "@@toStringTag"; + function define(t, e, r) { + return Object.defineProperty(t, e, { + value: r, + enumerable: !0, + configurable: !0, + writable: !0 + }), t[e]; + } + try { + define({}, ""); + } catch (t) { + define = function (t, e, r) { + return t[e] = r; + }; + } + function wrap(t, e, r, n) { + var i = e && e.prototype instanceof Generator ? e : Generator, + a = Object.create(i.prototype), + c = new Context(n || []); + return o(a, "_invoke", { + value: makeInvokeMethod(t, r, c) + }), a; + } + function tryCatch(t, e, r) { + try { + return { + type: "normal", + arg: t.call(e, r) + }; + } catch (t) { + return { + type: "throw", + arg: t + }; + } + } + e.wrap = wrap; + var h = "suspendedStart", + l = "suspendedYield", + f = "executing", + s = "completed", + y = {}; + function Generator() {} + function GeneratorFunction() {} + function GeneratorFunctionPrototype() {} + var p = {}; + define(p, a, function () { + return this; + }); + var d = Object.getPrototypeOf, + v = d && d(d(values([]))); + v && v !== r && n.call(v, a) && (p = v); + var g = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(p); + function defineIteratorMethods(t) { + ["next", "throw", "return"].forEach(function (e) { + define(t, e, function (t) { + return this._invoke(e, t); + }); + }); + } + function AsyncIterator(t, e) { + function invoke(r, o, i, a) { + var c = tryCatch(t[r], t, o); + if ("throw" !== c.type) { + var u = c.arg, + h = u.value; + return h && "object" == typeof h && n.call(h, "__await") ? e.resolve(h.__await).then(function (t) { + invoke("next", t, i, a); + }, function (t) { + invoke("throw", t, i, a); + }) : e.resolve(h).then(function (t) { + u.value = t, i(u); + }, function (t) { + return invoke("throw", t, i, a); + }); + } + a(c.arg); + } + var r; + o(this, "_invoke", { + value: function (t, n) { + function callInvokeWithMethodAndArg() { + return new e(function (e, r) { + invoke(t, n, e, r); + }); + } + return r = r ? r.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg(); + } + }); + } + function makeInvokeMethod(e, r, n) { + var o = h; + return function (i, a) { + if (o === f) throw new Error("Generator is already running"); + if (o === s) { + if ("throw" === i) throw a; + return { + value: t, + done: !0 + }; + } + for (n.method = i, n.arg = a;;) { + var c = n.delegate; + if (c) { + var u = maybeInvokeDelegate(c, n); + if (u) { + if (u === y) continue; + return u; + } + } + if ("next" === n.method) n.sent = n._sent = n.arg;else if ("throw" === n.method) { + if (o === h) throw o = s, n.arg; + n.dispatchException(n.arg); + } else "return" === n.method && n.abrupt("return", n.arg); + o = f; + var p = tryCatch(e, r, n); + if ("normal" === p.type) { + if (o = n.done ? s : l, p.arg === y) continue; + return { + value: p.arg, + done: n.done + }; + } + "throw" === p.type && (o = s, n.method = "throw", n.arg = p.arg); + } + }; + } + function maybeInvokeDelegate(e, r) { + var n = r.method, + o = e.iterator[n]; + if (o === t) return r.delegate = null, "throw" === n && e.iterator.return && (r.method = "return", r.arg = t, maybeInvokeDelegate(e, r), "throw" === r.method) || "return" !== n && (r.method = "throw", r.arg = new TypeError("The iterator does not provide a '" + n + "' method")), y; + var i = tryCatch(o, e.iterator, r.arg); + if ("throw" === i.type) return r.method = "throw", r.arg = i.arg, r.delegate = null, y; + var a = i.arg; + return a ? a.done ? (r[e.resultName] = a.value, r.next = e.nextLoc, "return" !== r.method && (r.method = "next", r.arg = t), r.delegate = null, y) : a : (r.method = "throw", r.arg = new TypeError("iterator result is not an object"), r.delegate = null, y); + } + function pushTryEntry(t) { + var e = { + tryLoc: t[0] + }; + 1 in t && (e.catchLoc = t[1]), 2 in t && (e.finallyLoc = t[2], e.afterLoc = t[3]), this.tryEntries.push(e); + } + function resetTryEntry(t) { + var e = t.completion || {}; + e.type = "normal", delete e.arg, t.completion = e; + } + function Context(t) { + this.tryEntries = [{ + tryLoc: "root" + }], t.forEach(pushTryEntry, this), this.reset(!0); + } + function values(e) { + if (e || "" === e) { + var r = e[a]; + if (r) return r.call(e); + if ("function" == typeof e.next) return e; + if (!isNaN(e.length)) { + var o = -1, + i = function next() { + for (; ++o < e.length;) if (n.call(e, o)) return next.value = e[o], next.done = !1, next; + return next.value = t, next.done = !0, next; + }; + return i.next = i; + } + } + throw new TypeError(typeof e + " is not iterable"); + } + return GeneratorFunction.prototype = GeneratorFunctionPrototype, o(g, "constructor", { + value: GeneratorFunctionPrototype, + configurable: !0 + }), o(GeneratorFunctionPrototype, "constructor", { + value: GeneratorFunction, + configurable: !0 + }), GeneratorFunction.displayName = define(GeneratorFunctionPrototype, u, "GeneratorFunction"), e.isGeneratorFunction = function (t) { + var e = "function" == typeof t && t.constructor; + return !!e && (e === GeneratorFunction || "GeneratorFunction" === (e.displayName || e.name)); + }, e.mark = function (t) { + return Object.setPrototypeOf ? Object.setPrototypeOf(t, GeneratorFunctionPrototype) : (t.__proto__ = GeneratorFunctionPrototype, define(t, u, "GeneratorFunction")), t.prototype = Object.create(g), t; + }, e.awrap = function (t) { + return { + __await: t + }; + }, defineIteratorMethods(AsyncIterator.prototype), define(AsyncIterator.prototype, c, function () { + return this; + }), e.AsyncIterator = AsyncIterator, e.async = function (t, r, n, o, i) { + void 0 === i && (i = Promise); + var a = new AsyncIterator(wrap(t, r, n, o), i); + return e.isGeneratorFunction(r) ? a : a.next().then(function (t) { + return t.done ? t.value : a.next(); + }); + }, defineIteratorMethods(g), define(g, u, "Generator"), define(g, a, function () { + return this; + }), define(g, "toString", function () { + return "[object Generator]"; + }), e.keys = function (t) { + var e = Object(t), + r = []; + for (var n in e) r.push(n); + return r.reverse(), function next() { + for (; r.length;) { + var t = r.pop(); + if (t in e) return next.value = t, next.done = !1, next; + } + return next.done = !0, next; + }; + }, e.values = values, Context.prototype = { + constructor: Context, + reset: function (e) { + if (this.prev = 0, this.next = 0, this.sent = this._sent = t, this.done = !1, this.delegate = null, this.method = "next", this.arg = t, this.tryEntries.forEach(resetTryEntry), !e) for (var r in this) "t" === r.charAt(0) && n.call(this, r) && !isNaN(+r.slice(1)) && (this[r] = t); + }, + stop: function () { + this.done = !0; + var t = this.tryEntries[0].completion; + if ("throw" === t.type) throw t.arg; + return this.rval; + }, + dispatchException: function (e) { + if (this.done) throw e; + var r = this; + function handle(n, o) { + return a.type = "throw", a.arg = e, r.next = n, o && (r.method = "next", r.arg = t), !!o; + } + for (var o = this.tryEntries.length - 1; o >= 0; --o) { + var i = this.tryEntries[o], + a = i.completion; + if ("root" === i.tryLoc) return handle("end"); + if (i.tryLoc <= this.prev) { + var c = n.call(i, "catchLoc"), + u = n.call(i, "finallyLoc"); + if (c && u) { + if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); + if (this.prev < i.finallyLoc) return handle(i.finallyLoc); + } else if (c) { + if (this.prev < i.catchLoc) return handle(i.catchLoc, !0); + } else { + if (!u) throw new Error("try statement without catch or finally"); + if (this.prev < i.finallyLoc) return handle(i.finallyLoc); + } + } + } + }, + abrupt: function (t, e) { + for (var r = this.tryEntries.length - 1; r >= 0; --r) { + var o = this.tryEntries[r]; + if (o.tryLoc <= this.prev && n.call(o, "finallyLoc") && this.prev < o.finallyLoc) { + var i = o; + break; + } + } + i && ("break" === t || "continue" === t) && i.tryLoc <= e && e <= i.finallyLoc && (i = null); + var a = i ? i.completion : {}; + return a.type = t, a.arg = e, i ? (this.method = "next", this.next = i.finallyLoc, y) : this.complete(a); + }, + complete: function (t, e) { + if ("throw" === t.type) throw t.arg; + return "break" === t.type || "continue" === t.type ? this.next = t.arg : "return" === t.type ? (this.rval = this.arg = t.arg, this.method = "return", this.next = "end") : "normal" === t.type && e && (this.next = e), y; + }, + finish: function (t) { + for (var e = this.tryEntries.length - 1; e >= 0; --e) { + var r = this.tryEntries[e]; + if (r.finallyLoc === t) return this.complete(r.completion, r.afterLoc), resetTryEntry(r), y; + } + }, + catch: function (t) { + for (var e = this.tryEntries.length - 1; e >= 0; --e) { + var r = this.tryEntries[e]; + if (r.tryLoc === t) { + var n = r.completion; + if ("throw" === n.type) { + var o = n.arg; + resetTryEntry(r); + } + return o; + } + } + throw new Error("illegal catch attempt"); + }, + delegateYield: function (e, r, n) { + return this.delegate = { + iterator: values(e), + resultName: r, + nextLoc: n + }, "next" === this.method && (this.arg = t), y; + } + }, e; + } + function _toPrimitive(t, r) { + if ("object" != typeof t || !t) return t; + var e = t[Symbol.toPrimitive]; + if (void 0 !== e) { + var i = e.call(t, r || "default"); + if ("object" != typeof i) return i; + throw new TypeError("@@toPrimitive must return a primitive value."); + } + return ("string" === r ? String : Number)(t); + } + function _toPropertyKey(t) { + var i = _toPrimitive(t, "string"); + return "symbol" == typeof i ? i : String(i); + } + function _typeof(o) { + "@babel/helpers - typeof"; + + return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { + return typeof o; + } : function (o) { + return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; + }, _typeof(o); + } + function _wrapAsyncGenerator(fn) { + return function () { + return new _AsyncGenerator(fn.apply(this, arguments)); + }; + } + function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { + try { + var info = gen[key](arg); + var value = info.value; + } catch (error) { + reject(error); + return; + } + if (info.done) { + resolve(value); + } else { + Promise.resolve(value).then(_next, _throw); + } + } + function _asyncToGenerator(fn) { + return function () { + var self = this, + args = arguments; + return new Promise(function (resolve, reject) { + var gen = fn.apply(self, args); + function _next(value) { + asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); + } + function _throw(err) { + asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); + } + _next(undefined); + }); + }; + } + function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } + } + function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); + } + } + function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + Object.defineProperty(Constructor, "prototype", { + writable: false + }); + return Constructor; + } + function _defineProperty(obj, key, value) { + key = _toPropertyKey(key); + if (key in obj) { + Object.defineProperty(obj, key, { + value: value, + enumerable: true, + configurable: true, + writable: true + }); + } else { + obj[key] = value; + } + return obj; + } + function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); + } + function _toArray(arr) { + return _arrayWithHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableRest(); + } + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); + } + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) return _arrayLikeToArray(arr); + } + function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; + } + function _iterableToArray(iter) { + if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); + } + function _unsupportedIterableToArray(o, minLen) { + if (!o) return; + if (typeof o === "string") return _arrayLikeToArray(o, minLen); + var n = Object.prototype.toString.call(o).slice(8, -1); + if (n === "Object" && o.constructor) n = o.constructor.name; + if (n === "Map" || n === "Set") return Array.from(o); + if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); + } + function _arrayLikeToArray(arr, len) { + if (len == null || len > arr.length) len = arr.length; + for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; + return arr2; + } + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + function _createForOfIteratorHelper(o, allowArrayLike) { + var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; + if (!it) { + if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { + if (it) o = it; + var i = 0; + var F = function () {}; + return { + s: F, + n: function () { + if (i >= o.length) return { + done: true + }; + return { + done: false, + value: o[i++] + }; + }, + e: function (e) { + throw e; + }, + f: F + }; + } + throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); + } + var normalCompletion = true, + didErr = false, + err; + return { + s: function () { + it = it.call(o); + }, + n: function () { + var step = it.next(); + normalCompletion = step.done; + return step; + }, + e: function (e) { + didErr = true; + err = e; + }, + f: function () { + try { + if (!normalCompletion && it.return != null) it.return(); + } finally { + if (didErr) throw err; + } + } + }; + } + + function bind(fn, thisArg) { + return function wrap() { + return fn.apply(thisArg, arguments); + }; + } + + // utils is a library of generic helper functions non-specific to axios + + var toString = Object.prototype.toString; + var getPrototypeOf = Object.getPrototypeOf; + var iterator = Symbol.iterator, + toStringTag = Symbol.toStringTag; + var kindOf = function (cache) { + return function (thing) { + var str = toString.call(thing); + return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); + }; + }(Object.create(null)); + var kindOfTest = function kindOfTest(type) { + type = type.toLowerCase(); + return function (thing) { + return kindOf(thing) === type; + }; + }; + var typeOfTest = function typeOfTest(type) { + return function (thing) { + return _typeof(thing) === type; + }; + }; + + /** + * Determine if a value is an Array + * + * @param {Object} val The value to test + * + * @returns {boolean} True if value is an Array, otherwise false + */ + var isArray = Array.isArray; + + /** + * Determine if a value is undefined + * + * @param {*} val The value to test + * + * @returns {boolean} True if the value is undefined, otherwise false + */ + var isUndefined = typeOfTest('undefined'); + + /** + * Determine if a value is a Buffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Buffer, otherwise false + */ + function isBuffer(val) { + return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val); + } + + /** + * Determine if a value is an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ + var isArrayBuffer = kindOfTest('ArrayBuffer'); + + /** + * Determine if a value is a view on an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ + function isArrayBufferView(val) { + var result; + if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView) { + result = ArrayBuffer.isView(val); + } else { + result = val && val.buffer && isArrayBuffer(val.buffer); + } + return result; + } + + /** + * Determine if a value is a String + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a String, otherwise false + */ + var isString = typeOfTest('string'); + + /** + * Determine if a value is a Function + * + * @param {*} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ + var isFunction = typeOfTest('function'); + + /** + * Determine if a value is a Number + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Number, otherwise false + */ + var isNumber = typeOfTest('number'); + + /** + * Determine if a value is an Object + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an Object, otherwise false + */ + var isObject = function isObject(thing) { + return thing !== null && _typeof(thing) === 'object'; + }; + + /** + * Determine if a value is a Boolean + * + * @param {*} thing The value to test + * @returns {boolean} True if value is a Boolean, otherwise false + */ + var isBoolean = function isBoolean(thing) { + return thing === true || thing === false; + }; + + /** + * Determine if a value is a plain Object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a plain Object, otherwise false + */ + var isPlainObject = function isPlainObject(val) { + if (kindOf(val) !== 'object') { + return false; + } + var prototype = getPrototypeOf(val); + return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val); + }; + + /** + * Determine if a value is a Date + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Date, otherwise false + */ + var isDate = kindOfTest('Date'); + + /** + * Determine if a value is a File + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ + var isFile = kindOfTest('File'); + + /** + * Determine if a value is a Blob + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Blob, otherwise false + */ + var isBlob = kindOfTest('Blob'); + + /** + * Determine if a value is a FileList + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ + var isFileList = kindOfTest('FileList'); + + /** + * Determine if a value is a Stream + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Stream, otherwise false + */ + var isStream = function isStream(val) { + return isObject(val) && isFunction(val.pipe); + }; + + /** + * Determine if a value is a FormData + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an FormData, otherwise false + */ + var isFormData = function isFormData(thing) { + var kind; + return thing && (typeof FormData === 'function' && thing instanceof FormData || isFunction(thing.append) && ((kind = kindOf(thing)) === 'formdata' || + // detect form-data instance + kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')); + }; + + /** + * Determine if a value is a URLSearchParams object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ + var isURLSearchParams = kindOfTest('URLSearchParams'); + var _map = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest), + _map2 = _slicedToArray(_map, 4), + isReadableStream = _map2[0], + isRequest = _map2[1], + isResponse = _map2[2], + isHeaders = _map2[3]; + + /** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * + * @returns {String} The String freed of excess whitespace + */ + var trim = function trim(str) { + return str.trim ? str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + }; + + /** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + * + * @param {Boolean} [allOwnKeys = false] + * @returns {any} + */ + function forEach(obj, fn) { + var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + _ref$allOwnKeys = _ref.allOwnKeys, + allOwnKeys = _ref$allOwnKeys === void 0 ? false : _ref$allOwnKeys; + // Don't bother if no value provided + if (obj === null || typeof obj === 'undefined') { + return; + } + var i; + var l; + + // Force an array if not already something iterable + if (_typeof(obj) !== 'object') { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + if (isArray(obj)) { + // Iterate over array values + for (i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Iterate over object keys + var keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); + var len = keys.length; + var key; + for (i = 0; i < len; i++) { + key = keys[i]; + fn.call(null, obj[key], key, obj); + } + } + } + function findKey(obj, key) { + key = key.toLowerCase(); + var keys = Object.keys(obj); + var i = keys.length; + var _key; + while (i-- > 0) { + _key = keys[i]; + if (key === _key.toLowerCase()) { + return _key; + } + } + return null; + } + var _global = function () { + /*eslint no-undef:0*/ + if (typeof globalThis !== "undefined") return globalThis; + return typeof self !== "undefined" ? self : typeof window !== 'undefined' ? window : global; + }(); + var isContextDefined = function isContextDefined(context) { + return !isUndefined(context) && context !== _global; + }; + + /** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * var result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * + * @returns {Object} Result of all merge properties + */ + function merge( /* obj1, obj2, obj3, ... */ + ) { + var _ref2 = isContextDefined(this) && this || {}, + caseless = _ref2.caseless; + var result = {}; + var assignValue = function assignValue(val, key) { + var targetKey = caseless && findKey(result, key) || key; + if (isPlainObject(result[targetKey]) && isPlainObject(val)) { + result[targetKey] = merge(result[targetKey], val); + } else if (isPlainObject(val)) { + result[targetKey] = merge({}, val); + } else if (isArray(val)) { + result[targetKey] = val.slice(); + } else { + result[targetKey] = val; + } + }; + for (var i = 0, l = arguments.length; i < l; i++) { + arguments[i] && forEach(arguments[i], assignValue); + } + return result; + } + + /** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * + * @param {Boolean} [allOwnKeys] + * @returns {Object} The resulting value of object a + */ + var extend = function extend(a, b, thisArg) { + var _ref3 = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {}, + allOwnKeys = _ref3.allOwnKeys; + forEach(b, function (val, key) { + if (thisArg && isFunction(val)) { + a[key] = bind(val, thisArg); + } else { + a[key] = val; + } + }, { + allOwnKeys: allOwnKeys + }); + return a; + }; + + /** + * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + * + * @param {string} content with BOM + * + * @returns {string} content value without BOM + */ + var stripBOM = function stripBOM(content) { + if (content.charCodeAt(0) === 0xFEFF) { + content = content.slice(1); + } + return content; + }; + + /** + * Inherit the prototype methods from one constructor into another + * @param {function} constructor + * @param {function} superConstructor + * @param {object} [props] + * @param {object} [descriptors] + * + * @returns {void} + */ + var inherits = function inherits(constructor, superConstructor, props, descriptors) { + constructor.prototype = Object.create(superConstructor.prototype, descriptors); + constructor.prototype.constructor = constructor; + Object.defineProperty(constructor, 'super', { + value: superConstructor.prototype + }); + props && Object.assign(constructor.prototype, props); + }; + + /** + * Resolve object with deep prototype chain to a flat object + * @param {Object} sourceObj source object + * @param {Object} [destObj] + * @param {Function|Boolean} [filter] + * @param {Function} [propFilter] + * + * @returns {Object} + */ + var toFlatObject = function toFlatObject(sourceObj, destObj, filter, propFilter) { + var props; + var i; + var prop; + var merged = {}; + destObj = destObj || {}; + // eslint-disable-next-line no-eq-null,eqeqeq + if (sourceObj == null) return destObj; + do { + props = Object.getOwnPropertyNames(sourceObj); + i = props.length; + while (i-- > 0) { + prop = props[i]; + if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) { + destObj[prop] = sourceObj[prop]; + merged[prop] = true; + } + } + sourceObj = filter !== false && getPrototypeOf(sourceObj); + } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype); + return destObj; + }; + + /** + * Determines whether a string ends with the characters of a specified string + * + * @param {String} str + * @param {String} searchString + * @param {Number} [position= 0] + * + * @returns {boolean} + */ + var endsWith = function endsWith(str, searchString, position) { + str = String(str); + if (position === undefined || position > str.length) { + position = str.length; + } + position -= searchString.length; + var lastIndex = str.indexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; + }; + + /** + * Returns new array from array like object or null if failed + * + * @param {*} [thing] + * + * @returns {?Array} + */ + var toArray = function toArray(thing) { + if (!thing) return null; + if (isArray(thing)) return thing; + var i = thing.length; + if (!isNumber(i)) return null; + var arr = new Array(i); + while (i-- > 0) { + arr[i] = thing[i]; + } + return arr; + }; + + /** + * Checking if the Uint8Array exists and if it does, it returns a function that checks if the + * thing passed in is an instance of Uint8Array + * + * @param {TypedArray} + * + * @returns {Array} + */ + // eslint-disable-next-line func-names + var isTypedArray = function (TypedArray) { + // eslint-disable-next-line func-names + return function (thing) { + return TypedArray && thing instanceof TypedArray; + }; + }(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array)); + + /** + * For each entry in the object, call the function with the key and value. + * + * @param {Object} obj - The object to iterate over. + * @param {Function} fn - The function to call for each entry. + * + * @returns {void} + */ + var forEachEntry = function forEachEntry(obj, fn) { + var generator = obj && obj[iterator]; + var _iterator = generator.call(obj); + var result; + while ((result = _iterator.next()) && !result.done) { + var pair = result.value; + fn.call(obj, pair[0], pair[1]); + } + }; + + /** + * It takes a regular expression and a string, and returns an array of all the matches + * + * @param {string} regExp - The regular expression to match against. + * @param {string} str - The string to search. + * + * @returns {Array} + */ + var matchAll = function matchAll(regExp, str) { + var matches; + var arr = []; + while ((matches = regExp.exec(str)) !== null) { + arr.push(matches); + } + return arr; + }; + + /* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */ + var isHTMLForm = kindOfTest('HTMLFormElement'); + var toCamelCase = function toCamelCase(str) { + return str.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g, function replacer(m, p1, p2) { + return p1.toUpperCase() + p2; + }); + }; + + /* Creating a function that will check if an object has a property. */ + var hasOwnProperty = function (_ref4) { + var hasOwnProperty = _ref4.hasOwnProperty; + return function (obj, prop) { + return hasOwnProperty.call(obj, prop); + }; + }(Object.prototype); + + /** + * Determine if a value is a RegExp object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a RegExp object, otherwise false + */ + var isRegExp = kindOfTest('RegExp'); + var reduceDescriptors = function reduceDescriptors(obj, reducer) { + var descriptors = Object.getOwnPropertyDescriptors(obj); + var reducedDescriptors = {}; + forEach(descriptors, function (descriptor, name) { + var ret; + if ((ret = reducer(descriptor, name, obj)) !== false) { + reducedDescriptors[name] = ret || descriptor; + } + }); + Object.defineProperties(obj, reducedDescriptors); + }; + + /** + * Makes all methods read-only + * @param {Object} obj + */ + + var freezeMethods = function freezeMethods(obj) { + reduceDescriptors(obj, function (descriptor, name) { + // skip restricted props in strict mode + if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) { + return false; + } + var value = obj[name]; + if (!isFunction(value)) return; + descriptor.enumerable = false; + if ('writable' in descriptor) { + descriptor.writable = false; + return; + } + if (!descriptor.set) { + descriptor.set = function () { + throw Error('Can not rewrite read-only method \'' + name + '\''); + }; + } + }); + }; + var toObjectSet = function toObjectSet(arrayOrString, delimiter) { + var obj = {}; + var define = function define(arr) { + arr.forEach(function (value) { + obj[value] = true; + }); + }; + isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter)); + return obj; + }; + var noop = function noop() {}; + var toFiniteNumber = function toFiniteNumber(value, defaultValue) { + return value != null && Number.isFinite(value = +value) ? value : defaultValue; + }; + + /** + * If the thing is a FormData object, return true, otherwise return false. + * + * @param {unknown} thing - The thing to check. + * + * @returns {boolean} + */ + function isSpecCompliantForm(thing) { + return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]); + } + var toJSONObject = function toJSONObject(obj) { + var stack = new Array(10); + var visit = function visit(source, i) { + if (isObject(source)) { + if (stack.indexOf(source) >= 0) { + return; + } + if (!('toJSON' in source)) { + stack[i] = source; + var target = isArray(source) ? [] : {}; + forEach(source, function (value, key) { + var reducedValue = visit(value, i + 1); + !isUndefined(reducedValue) && (target[key] = reducedValue); + }); + stack[i] = undefined; + return target; + } + } + return source; + }; + return visit(obj, 0); + }; + var isAsyncFn = kindOfTest('AsyncFunction'); + var isThenable = function isThenable(thing) { + return thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing["catch"]); + }; + + // original code + // https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34 + + var _setImmediate = function (setImmediateSupported, postMessageSupported) { + if (setImmediateSupported) { + return setImmediate; + } + return postMessageSupported ? function (token, callbacks) { + _global.addEventListener("message", function (_ref5) { + var source = _ref5.source, + data = _ref5.data; + if (source === _global && data === token) { + callbacks.length && callbacks.shift()(); + } + }, false); + return function (cb) { + callbacks.push(cb); + _global.postMessage(token, "*"); + }; + }("axios@".concat(Math.random()), []) : function (cb) { + return setTimeout(cb); + }; + }(typeof setImmediate === 'function', isFunction(_global.postMessage)); + var asap = typeof queueMicrotask !== 'undefined' ? queueMicrotask.bind(_global) : typeof process !== 'undefined' && process.nextTick || _setImmediate; + + // ********************* + + var isIterable = function isIterable(thing) { + return thing != null && isFunction(thing[iterator]); + }; + var utils$1 = { + isArray: isArray, + isArrayBuffer: isArrayBuffer, + isBuffer: isBuffer, + isFormData: isFormData, + isArrayBufferView: isArrayBufferView, + isString: isString, + isNumber: isNumber, + isBoolean: isBoolean, + isObject: isObject, + isPlainObject: isPlainObject, + isReadableStream: isReadableStream, + isRequest: isRequest, + isResponse: isResponse, + isHeaders: isHeaders, + isUndefined: isUndefined, + isDate: isDate, + isFile: isFile, + isBlob: isBlob, + isRegExp: isRegExp, + isFunction: isFunction, + isStream: isStream, + isURLSearchParams: isURLSearchParams, + isTypedArray: isTypedArray, + isFileList: isFileList, + forEach: forEach, + merge: merge, + extend: extend, + trim: trim, + stripBOM: stripBOM, + inherits: inherits, + toFlatObject: toFlatObject, + kindOf: kindOf, + kindOfTest: kindOfTest, + endsWith: endsWith, + toArray: toArray, + forEachEntry: forEachEntry, + matchAll: matchAll, + isHTMLForm: isHTMLForm, + hasOwnProperty: hasOwnProperty, + hasOwnProp: hasOwnProperty, + // an alias to avoid ESLint no-prototype-builtins detection + reduceDescriptors: reduceDescriptors, + freezeMethods: freezeMethods, + toObjectSet: toObjectSet, + toCamelCase: toCamelCase, + noop: noop, + toFiniteNumber: toFiniteNumber, + findKey: findKey, + global: _global, + isContextDefined: isContextDefined, + isSpecCompliantForm: isSpecCompliantForm, + toJSONObject: toJSONObject, + isAsyncFn: isAsyncFn, + isThenable: isThenable, + setImmediate: _setImmediate, + asap: asap, + isIterable: isIterable + }; + + /** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [config] The config. + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * + * @returns {Error} The created error. + */ + function AxiosError(message, code, config, request, response) { + Error.call(this); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + this.stack = new Error().stack; + } + this.message = message; + this.name = 'AxiosError'; + code && (this.code = code); + config && (this.config = config); + request && (this.request = request); + if (response) { + this.response = response; + this.status = response.status ? response.status : null; + } + } + utils$1.inherits(AxiosError, Error, { + toJSON: function toJSON() { + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: utils$1.toJSONObject(this.config), + code: this.code, + status: this.status + }; + } + }); + var prototype$1 = AxiosError.prototype; + var descriptors = {}; + ['ERR_BAD_OPTION_VALUE', 'ERR_BAD_OPTION', 'ECONNABORTED', 'ETIMEDOUT', 'ERR_NETWORK', 'ERR_FR_TOO_MANY_REDIRECTS', 'ERR_DEPRECATED', 'ERR_BAD_RESPONSE', 'ERR_BAD_REQUEST', 'ERR_CANCELED', 'ERR_NOT_SUPPORT', 'ERR_INVALID_URL' + // eslint-disable-next-line func-names + ].forEach(function (code) { + descriptors[code] = { + value: code + }; + }); + Object.defineProperties(AxiosError, descriptors); + Object.defineProperty(prototype$1, 'isAxiosError', { + value: true + }); + + // eslint-disable-next-line func-names + AxiosError.from = function (error, code, config, request, response, customProps) { + var axiosError = Object.create(prototype$1); + utils$1.toFlatObject(error, axiosError, function filter(obj) { + return obj !== Error.prototype; + }, function (prop) { + return prop !== 'isAxiosError'; + }); + AxiosError.call(axiosError, error.message, code, config, request, response); + axiosError.cause = error; + axiosError.name = error.name; + customProps && Object.assign(axiosError, customProps); + return axiosError; + }; + + // eslint-disable-next-line strict + var httpAdapter = null; + + /** + * Determines if the given thing is a array or js object. + * + * @param {string} thing - The object or array to be visited. + * + * @returns {boolean} + */ + function isVisitable(thing) { + return utils$1.isPlainObject(thing) || utils$1.isArray(thing); + } + + /** + * It removes the brackets from the end of a string + * + * @param {string} key - The key of the parameter. + * + * @returns {string} the key without the brackets. + */ + function removeBrackets(key) { + return utils$1.endsWith(key, '[]') ? key.slice(0, -2) : key; + } + + /** + * It takes a path, a key, and a boolean, and returns a string + * + * @param {string} path - The path to the current key. + * @param {string} key - The key of the current object being iterated over. + * @param {string} dots - If true, the key will be rendered with dots instead of brackets. + * + * @returns {string} The path to the current key. + */ + function renderKey(path, key, dots) { + if (!path) return key; + return path.concat(key).map(function each(token, i) { + // eslint-disable-next-line no-param-reassign + token = removeBrackets(token); + return !dots && i ? '[' + token + ']' : token; + }).join(dots ? '.' : ''); + } + + /** + * If the array is an array and none of its elements are visitable, then it's a flat array. + * + * @param {Array} arr - The array to check + * + * @returns {boolean} + */ + function isFlatArray(arr) { + return utils$1.isArray(arr) && !arr.some(isVisitable); + } + var predicates = utils$1.toFlatObject(utils$1, {}, null, function filter(prop) { + return /^is[A-Z]/.test(prop); + }); + + /** + * Convert a data object to FormData + * + * @param {Object} obj + * @param {?Object} [formData] + * @param {?Object} [options] + * @param {Function} [options.visitor] + * @param {Boolean} [options.metaTokens = true] + * @param {Boolean} [options.dots = false] + * @param {?Boolean} [options.indexes = false] + * + * @returns {Object} + **/ + + /** + * It converts an object into a FormData object + * + * @param {Object} obj - The object to convert to form data. + * @param {string} formData - The FormData object to append to. + * @param {Object} options + * + * @returns + */ + function toFormData(obj, formData, options) { + if (!utils$1.isObject(obj)) { + throw new TypeError('target must be an object'); + } + + // eslint-disable-next-line no-param-reassign + formData = formData || new (FormData)(); + + // eslint-disable-next-line no-param-reassign + options = utils$1.toFlatObject(options, { + metaTokens: true, + dots: false, + indexes: false + }, false, function defined(option, source) { + // eslint-disable-next-line no-eq-null,eqeqeq + return !utils$1.isUndefined(source[option]); + }); + var metaTokens = options.metaTokens; + // eslint-disable-next-line no-use-before-define + var visitor = options.visitor || defaultVisitor; + var dots = options.dots; + var indexes = options.indexes; + var _Blob = options.Blob || typeof Blob !== 'undefined' && Blob; + var useBlob = _Blob && utils$1.isSpecCompliantForm(formData); + if (!utils$1.isFunction(visitor)) { + throw new TypeError('visitor must be a function'); + } + function convertValue(value) { + if (value === null) return ''; + if (utils$1.isDate(value)) { + return value.toISOString(); + } + if (!useBlob && utils$1.isBlob(value)) { + throw new AxiosError('Blob is not supported. Use a Buffer instead.'); + } + if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) { + return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); + } + return value; + } + + /** + * Default visitor. + * + * @param {*} value + * @param {String|Number} key + * @param {Array} path + * @this {FormData} + * + * @returns {boolean} return true to visit the each prop of the value recursively + */ + function defaultVisitor(value, key, path) { + var arr = value; + if (value && !path && _typeof(value) === 'object') { + if (utils$1.endsWith(key, '{}')) { + // eslint-disable-next-line no-param-reassign + key = metaTokens ? key : key.slice(0, -2); + // eslint-disable-next-line no-param-reassign + value = JSON.stringify(value); + } else if (utils$1.isArray(value) && isFlatArray(value) || (utils$1.isFileList(value) || utils$1.endsWith(key, '[]')) && (arr = utils$1.toArray(value))) { + // eslint-disable-next-line no-param-reassign + key = removeBrackets(key); + arr.forEach(function each(el, index) { + !(utils$1.isUndefined(el) || el === null) && formData.append( + // eslint-disable-next-line no-nested-ternary + indexes === true ? renderKey([key], index, dots) : indexes === null ? key : key + '[]', convertValue(el)); + }); + return false; + } + } + if (isVisitable(value)) { + return true; + } + formData.append(renderKey(path, key, dots), convertValue(value)); + return false; + } + var stack = []; + var exposedHelpers = Object.assign(predicates, { + defaultVisitor: defaultVisitor, + convertValue: convertValue, + isVisitable: isVisitable + }); + function build(value, path) { + if (utils$1.isUndefined(value)) return; + if (stack.indexOf(value) !== -1) { + throw Error('Circular reference detected in ' + path.join('.')); + } + stack.push(value); + utils$1.forEach(value, function each(el, key) { + var result = !(utils$1.isUndefined(el) || el === null) && visitor.call(formData, el, utils$1.isString(key) ? key.trim() : key, path, exposedHelpers); + if (result === true) { + build(el, path ? path.concat(key) : [key]); + } + }); + stack.pop(); + } + if (!utils$1.isObject(obj)) { + throw new TypeError('data must be an object'); + } + build(obj); + return formData; + } + + /** + * It encodes a string by replacing all characters that are not in the unreserved set with + * their percent-encoded equivalents + * + * @param {string} str - The string to encode. + * + * @returns {string} The encoded string. + */ + function encode$1(str) { + var charMap = { + '!': '%21', + "'": '%27', + '(': '%28', + ')': '%29', + '~': '%7E', + '%20': '+', + '%00': '\x00' + }; + return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) { + return charMap[match]; + }); + } + + /** + * It takes a params object and converts it to a FormData object + * + * @param {Object} params - The parameters to be converted to a FormData object. + * @param {Object} options - The options object passed to the Axios constructor. + * + * @returns {void} + */ + function AxiosURLSearchParams(params, options) { + this._pairs = []; + params && toFormData(params, this, options); + } + var prototype = AxiosURLSearchParams.prototype; + prototype.append = function append(name, value) { + this._pairs.push([name, value]); + }; + prototype.toString = function toString(encoder) { + var _encode = encoder ? function (value) { + return encoder.call(this, value, encode$1); + } : encode$1; + return this._pairs.map(function each(pair) { + return _encode(pair[0]) + '=' + _encode(pair[1]); + }, '').join('&'); + }; + + /** + * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their + * URI encoded counterparts + * + * @param {string} val The value to be encoded. + * + * @returns {string} The encoded value. + */ + function encode(val) { + return encodeURIComponent(val).replace(/%3A/gi, ':').replace(/%24/g, '$').replace(/%2C/gi, ',').replace(/%20/g, '+').replace(/%5B/gi, '[').replace(/%5D/gi, ']'); + } + + /** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @param {?(object|Function)} options + * + * @returns {string} The formatted url + */ + function buildURL(url, params, options) { + /*eslint no-param-reassign:0*/ + if (!params) { + return url; + } + var _encode = options && options.encode || encode; + if (utils$1.isFunction(options)) { + options = { + serialize: options + }; + } + var serializeFn = options && options.serialize; + var serializedParams; + if (serializeFn) { + serializedParams = serializeFn(params, options); + } else { + serializedParams = utils$1.isURLSearchParams(params) ? params.toString() : new AxiosURLSearchParams(params, options).toString(_encode); + } + if (serializedParams) { + var hashmarkIndex = url.indexOf("#"); + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex); + } + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + return url; + } + + var InterceptorManager = /*#__PURE__*/function () { + function InterceptorManager() { + _classCallCheck(this, InterceptorManager); + this.handlers = []; + } + + /** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * + * @return {Number} An ID used to remove interceptor later + */ + _createClass(InterceptorManager, [{ + key: "use", + value: function use(fulfilled, rejected, options) { + this.handlers.push({ + fulfilled: fulfilled, + rejected: rejected, + synchronous: options ? options.synchronous : false, + runWhen: options ? options.runWhen : null + }); + return this.handlers.length - 1; + } + + /** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + * + * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise + */ + }, { + key: "eject", + value: function eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } + } + + /** + * Clear all interceptors from the stack + * + * @returns {void} + */ + }, { + key: "clear", + value: function clear() { + if (this.handlers) { + this.handlers = []; + } + } + + /** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + * + * @returns {void} + */ + }, { + key: "forEach", + value: function forEach(fn) { + utils$1.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); + } + }]); + return InterceptorManager; + }(); + var InterceptorManager$1 = InterceptorManager; + + var transitionalDefaults = { + silentJSONParsing: true, + forcedJSONParsing: true, + clarifyTimeoutError: false + }; + + var URLSearchParams$1 = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams; + + var FormData$1 = typeof FormData !== 'undefined' ? FormData : null; + + var Blob$1 = typeof Blob !== 'undefined' ? Blob : null; + + var platform$1 = { + isBrowser: true, + classes: { + URLSearchParams: URLSearchParams$1, + FormData: FormData$1, + Blob: Blob$1 + }, + protocols: ['http', 'https', 'file', 'blob', 'url', 'data'] + }; + + var hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined'; + var _navigator = (typeof navigator === "undefined" ? "undefined" : _typeof(navigator)) === 'object' && navigator || undefined; + + /** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + * + * @returns {boolean} + */ + var hasStandardBrowserEnv = hasBrowserEnv && (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0); + + /** + * Determine if we're running in a standard browser webWorker environment + * + * Although the `isStandardBrowserEnv` method indicates that + * `allows axios to run in a web worker`, the WebWorker will still be + * filtered out due to its judgment standard + * `typeof window !== 'undefined' && typeof document !== 'undefined'`. + * This leads to a problem when axios post `FormData` in webWorker + */ + var hasStandardBrowserWebWorkerEnv = function () { + return typeof WorkerGlobalScope !== 'undefined' && + // eslint-disable-next-line no-undef + self instanceof WorkerGlobalScope && typeof self.importScripts === 'function'; + }(); + var origin = hasBrowserEnv && window.location.href || 'http://localhost'; + + var utils = /*#__PURE__*/Object.freeze({ + __proto__: null, + hasBrowserEnv: hasBrowserEnv, + hasStandardBrowserWebWorkerEnv: hasStandardBrowserWebWorkerEnv, + hasStandardBrowserEnv: hasStandardBrowserEnv, + navigator: _navigator, + origin: origin + }); + + var platform = _objectSpread2(_objectSpread2({}, utils), platform$1); + + function toURLEncodedForm(data, options) { + return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({ + visitor: function visitor(value, key, path, helpers) { + if (platform.isNode && utils$1.isBuffer(value)) { + this.append(key, value.toString('base64')); + return false; + } + return helpers.defaultVisitor.apply(this, arguments); + } + }, options)); + } + + /** + * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z'] + * + * @param {string} name - The name of the property to get. + * + * @returns An array of strings. + */ + function parsePropPath(name) { + // foo[x][y][z] + // foo.x.y.z + // foo-x-y-z + // foo x y z + return utils$1.matchAll(/\w+|\[(\w*)]/g, name).map(function (match) { + return match[0] === '[]' ? '' : match[1] || match[0]; + }); + } + + /** + * Convert an array to an object. + * + * @param {Array} arr - The array to convert to an object. + * + * @returns An object with the same keys and values as the array. + */ + function arrayToObject(arr) { + var obj = {}; + var keys = Object.keys(arr); + var i; + var len = keys.length; + var key; + for (i = 0; i < len; i++) { + key = keys[i]; + obj[key] = arr[key]; + } + return obj; + } + + /** + * It takes a FormData object and returns a JavaScript object + * + * @param {string} formData The FormData object to convert to JSON. + * + * @returns {Object | null} The converted object. + */ + function formDataToJSON(formData) { + function buildPath(path, value, target, index) { + var name = path[index++]; + if (name === '__proto__') return true; + var isNumericKey = Number.isFinite(+name); + var isLast = index >= path.length; + name = !name && utils$1.isArray(target) ? target.length : name; + if (isLast) { + if (utils$1.hasOwnProp(target, name)) { + target[name] = [target[name], value]; + } else { + target[name] = value; + } + return !isNumericKey; + } + if (!target[name] || !utils$1.isObject(target[name])) { + target[name] = []; + } + var result = buildPath(path, value, target[name], index); + if (result && utils$1.isArray(target[name])) { + target[name] = arrayToObject(target[name]); + } + return !isNumericKey; + } + if (utils$1.isFormData(formData) && utils$1.isFunction(formData.entries)) { + var obj = {}; + utils$1.forEachEntry(formData, function (name, value) { + buildPath(parsePropPath(name), value, obj, 0); + }); + return obj; + } + return null; + } + + /** + * It takes a string, tries to parse it, and if it fails, it returns the stringified version + * of the input + * + * @param {any} rawValue - The value to be stringified. + * @param {Function} parser - A function that parses a string into a JavaScript object. + * @param {Function} encoder - A function that takes a value and returns a string. + * + * @returns {string} A stringified version of the rawValue. + */ + function stringifySafely(rawValue, parser, encoder) { + if (utils$1.isString(rawValue)) { + try { + (parser || JSON.parse)(rawValue); + return utils$1.trim(rawValue); + } catch (e) { + if (e.name !== 'SyntaxError') { + throw e; + } + } + } + return (encoder || JSON.stringify)(rawValue); + } + var defaults = { + transitional: transitionalDefaults, + adapter: ['xhr', 'http', 'fetch'], + transformRequest: [function transformRequest(data, headers) { + var contentType = headers.getContentType() || ''; + var hasJSONContentType = contentType.indexOf('application/json') > -1; + var isObjectPayload = utils$1.isObject(data); + if (isObjectPayload && utils$1.isHTMLForm(data)) { + data = new FormData(data); + } + var isFormData = utils$1.isFormData(data); + if (isFormData) { + return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data; + } + if (utils$1.isArrayBuffer(data) || utils$1.isBuffer(data) || utils$1.isStream(data) || utils$1.isFile(data) || utils$1.isBlob(data) || utils$1.isReadableStream(data)) { + return data; + } + if (utils$1.isArrayBufferView(data)) { + return data.buffer; + } + if (utils$1.isURLSearchParams(data)) { + headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false); + return data.toString(); + } + var isFileList; + if (isObjectPayload) { + if (contentType.indexOf('application/x-www-form-urlencoded') > -1) { + return toURLEncodedForm(data, this.formSerializer).toString(); + } + if ((isFileList = utils$1.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { + var _FormData = this.env && this.env.FormData; + return toFormData(isFileList ? { + 'files[]': data + } : data, _FormData && new _FormData(), this.formSerializer); + } + } + if (isObjectPayload || hasJSONContentType) { + headers.setContentType('application/json', false); + return stringifySafely(data); + } + return data; + }], + transformResponse: [function transformResponse(data) { + var transitional = this.transitional || defaults.transitional; + var forcedJSONParsing = transitional && transitional.forcedJSONParsing; + var JSONRequested = this.responseType === 'json'; + if (utils$1.isResponse(data) || utils$1.isReadableStream(data)) { + return data; + } + if (data && utils$1.isString(data) && (forcedJSONParsing && !this.responseType || JSONRequested)) { + var silentJSONParsing = transitional && transitional.silentJSONParsing; + var strictJSONParsing = !silentJSONParsing && JSONRequested; + try { + return JSON.parse(data); + } catch (e) { + if (strictJSONParsing) { + if (e.name === 'SyntaxError') { + throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response); + } + throw e; + } + } + } + return data; + }], + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + maxContentLength: -1, + maxBodyLength: -1, + env: { + FormData: platform.classes.FormData, + Blob: platform.classes.Blob + }, + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + }, + headers: { + common: { + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': undefined + } + } + }; + utils$1.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], function (method) { + defaults.headers[method] = {}; + }); + var defaults$1 = defaults; + + // RawAxiosHeaders whose duplicates are ignored by node + // c.f. https://nodejs.org/api/http.html#http_message_headers + var ignoreDuplicateOf = utils$1.toObjectSet(['age', 'authorization', 'content-length', 'content-type', 'etag', 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', 'last-modified', 'location', 'max-forwards', 'proxy-authorization', 'referer', 'retry-after', 'user-agent']); + + /** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} rawHeaders Headers needing to be parsed + * + * @returns {Object} Headers parsed into an object + */ + var parseHeaders = (function (rawHeaders) { + var parsed = {}; + var key; + var val; + var i; + rawHeaders && rawHeaders.split('\n').forEach(function parser(line) { + i = line.indexOf(':'); + key = line.substring(0, i).trim().toLowerCase(); + val = line.substring(i + 1).trim(); + if (!key || parsed[key] && ignoreDuplicateOf[key]) { + return; + } + if (key === 'set-cookie') { + if (parsed[key]) { + parsed[key].push(val); + } else { + parsed[key] = [val]; + } + } else { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + }); + return parsed; + }); + + var $internals = Symbol('internals'); + function normalizeHeader(header) { + return header && String(header).trim().toLowerCase(); + } + function normalizeValue(value) { + if (value === false || value == null) { + return value; + } + return utils$1.isArray(value) ? value.map(normalizeValue) : String(value); + } + function parseTokens(str) { + var tokens = Object.create(null); + var tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g; + var match; + while (match = tokensRE.exec(str)) { + tokens[match[1]] = match[2]; + } + return tokens; + } + var isValidHeaderName = function isValidHeaderName(str) { + return /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim()); + }; + function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) { + if (utils$1.isFunction(filter)) { + return filter.call(this, value, header); + } + if (isHeaderNameFilter) { + value = header; + } + if (!utils$1.isString(value)) return; + if (utils$1.isString(filter)) { + return value.indexOf(filter) !== -1; + } + if (utils$1.isRegExp(filter)) { + return filter.test(value); + } + } + function formatHeader(header) { + return header.trim().toLowerCase().replace(/([a-z\d])(\w*)/g, function (w, _char, str) { + return _char.toUpperCase() + str; + }); + } + function buildAccessors(obj, header) { + var accessorName = utils$1.toCamelCase(' ' + header); + ['get', 'set', 'has'].forEach(function (methodName) { + Object.defineProperty(obj, methodName + accessorName, { + value: function value(arg1, arg2, arg3) { + return this[methodName].call(this, header, arg1, arg2, arg3); + }, + configurable: true + }); + }); + } + var AxiosHeaders = /*#__PURE__*/function (_Symbol$iterator, _Symbol$toStringTag) { + function AxiosHeaders(headers) { + _classCallCheck(this, AxiosHeaders); + headers && this.set(headers); + } + _createClass(AxiosHeaders, [{ + key: "set", + value: function set(header, valueOrRewrite, rewrite) { + var self = this; + function setHeader(_value, _header, _rewrite) { + var lHeader = normalizeHeader(_header); + if (!lHeader) { + throw new Error('header name must be a non-empty string'); + } + var key = utils$1.findKey(self, lHeader); + if (!key || self[key] === undefined || _rewrite === true || _rewrite === undefined && self[key] !== false) { + self[key || _header] = normalizeValue(_value); + } + } + var setHeaders = function setHeaders(headers, _rewrite) { + return utils$1.forEach(headers, function (_value, _header) { + return setHeader(_value, _header, _rewrite); + }); + }; + if (utils$1.isPlainObject(header) || header instanceof this.constructor) { + setHeaders(header, valueOrRewrite); + } else if (utils$1.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { + setHeaders(parseHeaders(header), valueOrRewrite); + } else if (utils$1.isObject(header) && utils$1.isIterable(header)) { + var obj = {}, + dest, + key; + var _iterator = _createForOfIteratorHelper(header), + _step; + try { + for (_iterator.s(); !(_step = _iterator.n()).done;) { + var entry = _step.value; + if (!utils$1.isArray(entry)) { + throw TypeError('Object iterator must return a key-value pair'); + } + obj[key = entry[0]] = (dest = obj[key]) ? utils$1.isArray(dest) ? [].concat(_toConsumableArray(dest), [entry[1]]) : [dest, entry[1]] : entry[1]; + } + } catch (err) { + _iterator.e(err); + } finally { + _iterator.f(); + } + setHeaders(obj, valueOrRewrite); + } else { + header != null && setHeader(valueOrRewrite, header, rewrite); + } + return this; + } + }, { + key: "get", + value: function get(header, parser) { + header = normalizeHeader(header); + if (header) { + var key = utils$1.findKey(this, header); + if (key) { + var value = this[key]; + if (!parser) { + return value; + } + if (parser === true) { + return parseTokens(value); + } + if (utils$1.isFunction(parser)) { + return parser.call(this, value, key); + } + if (utils$1.isRegExp(parser)) { + return parser.exec(value); + } + throw new TypeError('parser must be boolean|regexp|function'); + } + } + } + }, { + key: "has", + value: function has(header, matcher) { + header = normalizeHeader(header); + if (header) { + var key = utils$1.findKey(this, header); + return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher))); + } + return false; + } + }, { + key: "delete", + value: function _delete(header, matcher) { + var self = this; + var deleted = false; + function deleteHeader(_header) { + _header = normalizeHeader(_header); + if (_header) { + var key = utils$1.findKey(self, _header); + if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) { + delete self[key]; + deleted = true; + } + } + } + if (utils$1.isArray(header)) { + header.forEach(deleteHeader); + } else { + deleteHeader(header); + } + return deleted; + } + }, { + key: "clear", + value: function clear(matcher) { + var keys = Object.keys(this); + var i = keys.length; + var deleted = false; + while (i--) { + var key = keys[i]; + if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) { + delete this[key]; + deleted = true; + } + } + return deleted; + } + }, { + key: "normalize", + value: function normalize(format) { + var self = this; + var headers = {}; + utils$1.forEach(this, function (value, header) { + var key = utils$1.findKey(headers, header); + if (key) { + self[key] = normalizeValue(value); + delete self[header]; + return; + } + var normalized = format ? formatHeader(header) : String(header).trim(); + if (normalized !== header) { + delete self[header]; + } + self[normalized] = normalizeValue(value); + headers[normalized] = true; + }); + return this; + } + }, { + key: "concat", + value: function concat() { + var _this$constructor; + for (var _len = arguments.length, targets = new Array(_len), _key = 0; _key < _len; _key++) { + targets[_key] = arguments[_key]; + } + return (_this$constructor = this.constructor).concat.apply(_this$constructor, [this].concat(targets)); + } + }, { + key: "toJSON", + value: function toJSON(asStrings) { + var obj = Object.create(null); + utils$1.forEach(this, function (value, header) { + value != null && value !== false && (obj[header] = asStrings && utils$1.isArray(value) ? value.join(', ') : value); + }); + return obj; + } + }, { + key: _Symbol$iterator, + value: function value() { + return Object.entries(this.toJSON())[Symbol.iterator](); + } + }, { + key: "toString", + value: function toString() { + return Object.entries(this.toJSON()).map(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + header = _ref2[0], + value = _ref2[1]; + return header + ': ' + value; + }).join('\n'); + } + }, { + key: "getSetCookie", + value: function getSetCookie() { + return this.get("set-cookie") || []; + } + }, { + key: _Symbol$toStringTag, + get: function get() { + return 'AxiosHeaders'; + } + }], [{ + key: "from", + value: function from(thing) { + return thing instanceof this ? thing : new this(thing); + } + }, { + key: "concat", + value: function concat(first) { + var computed = new this(first); + for (var _len2 = arguments.length, targets = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { + targets[_key2 - 1] = arguments[_key2]; + } + targets.forEach(function (target) { + return computed.set(target); + }); + return computed; + } + }, { + key: "accessor", + value: function accessor(header) { + var internals = this[$internals] = this[$internals] = { + accessors: {} + }; + var accessors = internals.accessors; + var prototype = this.prototype; + function defineAccessor(_header) { + var lHeader = normalizeHeader(_header); + if (!accessors[lHeader]) { + buildAccessors(prototype, _header); + accessors[lHeader] = true; + } + } + utils$1.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header); + return this; + } + }]); + return AxiosHeaders; + }(Symbol.iterator, Symbol.toStringTag); + AxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']); + + // reserved names hotfix + utils$1.reduceDescriptors(AxiosHeaders.prototype, function (_ref3, key) { + var value = _ref3.value; + var mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set` + return { + get: function get() { + return value; + }, + set: function set(headerValue) { + this[mapped] = headerValue; + } + }; + }); + utils$1.freezeMethods(AxiosHeaders); + var AxiosHeaders$1 = AxiosHeaders; + + /** + * Transform the data for a request or a response + * + * @param {Array|Function} fns A single function or Array of functions + * @param {?Object} response The response object + * + * @returns {*} The resulting transformed data + */ + function transformData(fns, response) { + var config = this || defaults$1; + var context = response || config; + var headers = AxiosHeaders$1.from(context.headers); + var data = context.data; + utils$1.forEach(fns, function transform(fn) { + data = fn.call(config, data, headers.normalize(), response ? response.status : undefined); + }); + headers.normalize(); + return data; + } + + function isCancel(value) { + return !!(value && value.__CANCEL__); + } + + /** + * A `CanceledError` is an object that is thrown when an operation is canceled. + * + * @param {string=} message The message. + * @param {Object=} config The config. + * @param {Object=} request The request. + * + * @returns {CanceledError} The created error. + */ + function CanceledError(message, config, request) { + // eslint-disable-next-line no-eq-null,eqeqeq + AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request); + this.name = 'CanceledError'; + } + utils$1.inherits(CanceledError, AxiosError, { + __CANCEL__: true + }); + + /** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + * + * @returns {object} The response. + */ + function settle(resolve, reject, response) { + var validateStatus = response.config.validateStatus; + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(new AxiosError('Request failed with status code ' + response.status, [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], response.config, response.request, response)); + } + } + + function parseProtocol(url) { + var match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); + return match && match[1] || ''; + } + + /** + * Calculate data maxRate + * @param {Number} [samplesCount= 10] + * @param {Number} [min= 1000] + * @returns {Function} + */ + function speedometer(samplesCount, min) { + samplesCount = samplesCount || 10; + var bytes = new Array(samplesCount); + var timestamps = new Array(samplesCount); + var head = 0; + var tail = 0; + var firstSampleTS; + min = min !== undefined ? min : 1000; + return function push(chunkLength) { + var now = Date.now(); + var startedAt = timestamps[tail]; + if (!firstSampleTS) { + firstSampleTS = now; + } + bytes[head] = chunkLength; + timestamps[head] = now; + var i = tail; + var bytesCount = 0; + while (i !== head) { + bytesCount += bytes[i++]; + i = i % samplesCount; + } + head = (head + 1) % samplesCount; + if (head === tail) { + tail = (tail + 1) % samplesCount; + } + if (now - firstSampleTS < min) { + return; + } + var passed = startedAt && now - startedAt; + return passed ? Math.round(bytesCount * 1000 / passed) : undefined; + }; + } + + /** + * Throttle decorator + * @param {Function} fn + * @param {Number} freq + * @return {Function} + */ + function throttle(fn, freq) { + var timestamp = 0; + var threshold = 1000 / freq; + var lastArgs; + var timer; + var invoke = function invoke(args) { + var now = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : Date.now(); + timestamp = now; + lastArgs = null; + if (timer) { + clearTimeout(timer); + timer = null; + } + fn.apply(null, args); + }; + var throttled = function throttled() { + var now = Date.now(); + var passed = now - timestamp; + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + if (passed >= threshold) { + invoke(args, now); + } else { + lastArgs = args; + if (!timer) { + timer = setTimeout(function () { + timer = null; + invoke(lastArgs); + }, threshold - passed); + } + } + }; + var flush = function flush() { + return lastArgs && invoke(lastArgs); + }; + return [throttled, flush]; + } + + var progressEventReducer = function progressEventReducer(listener, isDownloadStream) { + var freq = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3; + var bytesNotified = 0; + var _speedometer = speedometer(50, 250); + return throttle(function (e) { + var loaded = e.loaded; + var total = e.lengthComputable ? e.total : undefined; + var progressBytes = loaded - bytesNotified; + var rate = _speedometer(progressBytes); + var inRange = loaded <= total; + bytesNotified = loaded; + var data = _defineProperty({ + loaded: loaded, + total: total, + progress: total ? loaded / total : undefined, + bytes: progressBytes, + rate: rate ? rate : undefined, + estimated: rate && total && inRange ? (total - loaded) / rate : undefined, + event: e, + lengthComputable: total != null + }, isDownloadStream ? 'download' : 'upload', true); + listener(data); + }, freq); + }; + var progressEventDecorator = function progressEventDecorator(total, throttled) { + var lengthComputable = total != null; + return [function (loaded) { + return throttled[0]({ + lengthComputable: lengthComputable, + total: total, + loaded: loaded + }); + }, throttled[1]]; + }; + var asyncDecorator = function asyncDecorator(fn) { + return function () { + for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + return utils$1.asap(function () { + return fn.apply(void 0, args); + }); + }; + }; + + var isURLSameOrigin = platform.hasStandardBrowserEnv ? function (origin, isMSIE) { + return function (url) { + url = new URL(url, platform.origin); + return origin.protocol === url.protocol && origin.host === url.host && (isMSIE || origin.port === url.port); + }; + }(new URL(platform.origin), platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)) : function () { + return true; + }; + + var cookies = platform.hasStandardBrowserEnv ? + // Standard browser envs support document.cookie + { + write: function write(name, value, expires, path, domain, secure) { + var cookie = [name + '=' + encodeURIComponent(value)]; + utils$1.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString()); + utils$1.isString(path) && cookie.push('path=' + path); + utils$1.isString(domain) && cookie.push('domain=' + domain); + secure === true && cookie.push('secure'); + document.cookie = cookie.join('; '); + }, + read: function read(name) { + var match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); + return match ? decodeURIComponent(match[3]) : null; + }, + remove: function remove(name) { + this.write(name, '', Date.now() - 86400000); + } + } : + // Non-standard browser env (web workers, react-native) lack needed support. + { + write: function write() {}, + read: function read() { + return null; + }, + remove: function remove() {} + }; + + /** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ + function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); + } + + /** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * + * @returns {string} The combined URL + */ + function combineURLs(baseURL, relativeURL) { + return relativeURL ? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '') : baseURL; + } + + /** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * + * @returns {string} The combined full path + */ + function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) { + var isRelativeUrl = !isAbsoluteURL(requestedURL); + if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; + } + + var headersToObject = function headersToObject(thing) { + return thing instanceof AxiosHeaders$1 ? _objectSpread2({}, thing) : thing; + }; + + /** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * + * @returns {Object} New object resulting from merging config2 to config1 + */ + function mergeConfig(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {}; + var config = {}; + function getMergedValue(target, source, prop, caseless) { + if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) { + return utils$1.merge.call({ + caseless: caseless + }, target, source); + } else if (utils$1.isPlainObject(source)) { + return utils$1.merge({}, source); + } else if (utils$1.isArray(source)) { + return source.slice(); + } + return source; + } + + // eslint-disable-next-line consistent-return + function mergeDeepProperties(a, b, prop, caseless) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(a, b, prop, caseless); + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a, prop, caseless); + } + } + + // eslint-disable-next-line consistent-return + function valueFromConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b); + } + } + + // eslint-disable-next-line consistent-return + function defaultToConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b); + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a); + } + } + + // eslint-disable-next-line consistent-return + function mergeDirectKeys(a, b, prop) { + if (prop in config2) { + return getMergedValue(a, b); + } else if (prop in config1) { + return getMergedValue(undefined, a); + } + } + var mergeMap = { + url: valueFromConfig2, + method: valueFromConfig2, + data: valueFromConfig2, + baseURL: defaultToConfig2, + transformRequest: defaultToConfig2, + transformResponse: defaultToConfig2, + paramsSerializer: defaultToConfig2, + timeout: defaultToConfig2, + timeoutMessage: defaultToConfig2, + withCredentials: defaultToConfig2, + withXSRFToken: defaultToConfig2, + adapter: defaultToConfig2, + responseType: defaultToConfig2, + xsrfCookieName: defaultToConfig2, + xsrfHeaderName: defaultToConfig2, + onUploadProgress: defaultToConfig2, + onDownloadProgress: defaultToConfig2, + decompress: defaultToConfig2, + maxContentLength: defaultToConfig2, + maxBodyLength: defaultToConfig2, + beforeRedirect: defaultToConfig2, + transport: defaultToConfig2, + httpAgent: defaultToConfig2, + httpsAgent: defaultToConfig2, + cancelToken: defaultToConfig2, + socketPath: defaultToConfig2, + responseEncoding: defaultToConfig2, + validateStatus: mergeDirectKeys, + headers: function headers(a, b, prop) { + return mergeDeepProperties(headersToObject(a), headersToObject(b), prop, true); + } + }; + utils$1.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) { + var merge = mergeMap[prop] || mergeDeepProperties; + var configValue = merge(config1[prop], config2[prop], prop); + utils$1.isUndefined(configValue) && merge !== mergeDirectKeys || (config[prop] = configValue); + }); + return config; + } + + var resolveConfig = (function (config) { + var newConfig = mergeConfig({}, config); + var data = newConfig.data, + withXSRFToken = newConfig.withXSRFToken, + xsrfHeaderName = newConfig.xsrfHeaderName, + xsrfCookieName = newConfig.xsrfCookieName, + headers = newConfig.headers, + auth = newConfig.auth; + newConfig.headers = headers = AxiosHeaders$1.from(headers); + newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer); + + // HTTP basic authentication + if (auth) { + headers.set('Authorization', 'Basic ' + btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))); + } + var contentType; + if (utils$1.isFormData(data)) { + if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) { + headers.setContentType(undefined); // Let the browser set it + } else if ((contentType = headers.getContentType()) !== false) { + // fix semicolon duplication issue for ReactNative FormData implementation + var _ref = contentType ? contentType.split(';').map(function (token) { + return token.trim(); + }).filter(Boolean) : [], + _ref2 = _toArray(_ref), + type = _ref2[0], + tokens = _ref2.slice(1); + headers.setContentType([type || 'multipart/form-data'].concat(_toConsumableArray(tokens)).join('; ')); + } + } + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + + if (platform.hasStandardBrowserEnv) { + withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig)); + if (withXSRFToken || withXSRFToken !== false && isURLSameOrigin(newConfig.url)) { + // Add xsrf header + var xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName); + if (xsrfValue) { + headers.set(xsrfHeaderName, xsrfValue); + } + } + } + return newConfig; + }); + + var isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined'; + var xhrAdapter = isXHRAdapterSupported && function (config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + var _config = resolveConfig(config); + var requestData = _config.data; + var requestHeaders = AxiosHeaders$1.from(_config.headers).normalize(); + var responseType = _config.responseType, + onUploadProgress = _config.onUploadProgress, + onDownloadProgress = _config.onDownloadProgress; + var onCanceled; + var uploadThrottled, downloadThrottled; + var flushUpload, flushDownload; + function done() { + flushUpload && flushUpload(); // flush events + flushDownload && flushDownload(); // flush events + + _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled); + _config.signal && _config.signal.removeEventListener('abort', onCanceled); + } + var request = new XMLHttpRequest(); + request.open(_config.method.toUpperCase(), _config.url, true); + + // Set the request timeout in MS + request.timeout = _config.timeout; + function onloadend() { + if (!request) { + return; + } + // Prepare the response + var responseHeaders = AxiosHeaders$1.from('getAllResponseHeaders' in request && request.getAllResponseHeaders()); + var responseData = !responseType || responseType === 'text' || responseType === 'json' ? request.responseText : request.response; + var response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config: config, + request: request + }; + settle(function _resolve(value) { + resolve(value); + done(); + }, function _reject(err) { + reject(err); + done(); + }, response); + + // Clean up request + request = null; + } + if ('onloadend' in request) { + // Use onloadend if available + request.onloadend = onloadend; + } else { + // Listen for ready state to emulate onloadend + request.onreadystatechange = function handleLoad() { + if (!request || request.readyState !== 4) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { + return; + } + // readystate handler is calling before onerror or ontimeout handlers, + // so we should call onloadend on the next 'tick' + setTimeout(onloadend); + }; + } + + // Handle browser request cancellation (as opposed to a manual cancellation) + request.onabort = function handleAbort() { + if (!request) { + return; + } + reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request)); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError() { + // Real errors are hidden from us by the browser + // onerror should only fire if it's a network error + reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request)); + + // Clean up request + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + var timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded'; + var transitional = _config.transitional || transitionalDefaults; + if (_config.timeoutErrorMessage) { + timeoutErrorMessage = _config.timeoutErrorMessage; + } + reject(new AxiosError(timeoutErrorMessage, transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED, config, request)); + + // Clean up request + request = null; + }; + + // Remove Content-Type if data is undefined + requestData === undefined && requestHeaders.setContentType(null); + + // Add headers to the request + if ('setRequestHeader' in request) { + utils$1.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) { + request.setRequestHeader(key, val); + }); + } + + // Add withCredentials to request if needed + if (!utils$1.isUndefined(_config.withCredentials)) { + request.withCredentials = !!_config.withCredentials; + } + + // Add responseType to request if needed + if (responseType && responseType !== 'json') { + request.responseType = _config.responseType; + } + + // Handle progress if needed + if (onDownloadProgress) { + var _progressEventReducer = progressEventReducer(onDownloadProgress, true); + var _progressEventReducer2 = _slicedToArray(_progressEventReducer, 2); + downloadThrottled = _progressEventReducer2[0]; + flushDownload = _progressEventReducer2[1]; + request.addEventListener('progress', downloadThrottled); + } + + // Not all browsers support upload events + if (onUploadProgress && request.upload) { + var _progressEventReducer3 = progressEventReducer(onUploadProgress); + var _progressEventReducer4 = _slicedToArray(_progressEventReducer3, 2); + uploadThrottled = _progressEventReducer4[0]; + flushUpload = _progressEventReducer4[1]; + request.upload.addEventListener('progress', uploadThrottled); + request.upload.addEventListener('loadend', flushUpload); + } + if (_config.cancelToken || _config.signal) { + // Handle cancellation + // eslint-disable-next-line func-names + onCanceled = function onCanceled(cancel) { + if (!request) { + return; + } + reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel); + request.abort(); + request = null; + }; + _config.cancelToken && _config.cancelToken.subscribe(onCanceled); + if (_config.signal) { + _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled); + } + } + var protocol = parseProtocol(_config.url); + if (protocol && platform.protocols.indexOf(protocol) === -1) { + reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config)); + return; + } + + // Send the request + request.send(requestData || null); + }); + }; + + var composeSignals = function composeSignals(signals, timeout) { + var _signals = signals = signals ? signals.filter(Boolean) : [], + length = _signals.length; + if (timeout || length) { + var controller = new AbortController(); + var aborted; + var onabort = function onabort(reason) { + if (!aborted) { + aborted = true; + unsubscribe(); + var err = reason instanceof Error ? reason : this.reason; + controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err)); + } + }; + var timer = timeout && setTimeout(function () { + timer = null; + onabort(new AxiosError("timeout ".concat(timeout, " of ms exceeded"), AxiosError.ETIMEDOUT)); + }, timeout); + var unsubscribe = function unsubscribe() { + if (signals) { + timer && clearTimeout(timer); + timer = null; + signals.forEach(function (signal) { + signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort); + }); + signals = null; + } + }; + signals.forEach(function (signal) { + return signal.addEventListener('abort', onabort); + }); + var signal = controller.signal; + signal.unsubscribe = function () { + return utils$1.asap(unsubscribe); + }; + return signal; + } + }; + var composeSignals$1 = composeSignals; + + var streamChunk = /*#__PURE__*/_regeneratorRuntime().mark(function streamChunk(chunk, chunkSize) { + var len, pos, end; + return _regeneratorRuntime().wrap(function streamChunk$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + len = chunk.byteLength; + if (!(!chunkSize || len < chunkSize)) { + _context.next = 5; + break; + } + _context.next = 4; + return chunk; + case 4: + return _context.abrupt("return"); + case 5: + pos = 0; + case 6: + if (!(pos < len)) { + _context.next = 13; + break; + } + end = pos + chunkSize; + _context.next = 10; + return chunk.slice(pos, end); + case 10: + pos = end; + _context.next = 6; + break; + case 13: + case "end": + return _context.stop(); + } + }, streamChunk); + }); + var readBytes = /*#__PURE__*/function () { + var _ref = _wrapAsyncGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(iterable, chunkSize) { + var _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, chunk; + return _regeneratorRuntime().wrap(function _callee$(_context2) { + while (1) switch (_context2.prev = _context2.next) { + case 0: + _iteratorAbruptCompletion = false; + _didIteratorError = false; + _context2.prev = 2; + _iterator = _asyncIterator(readStream(iterable)); + case 4: + _context2.next = 6; + return _awaitAsyncGenerator(_iterator.next()); + case 6: + if (!(_iteratorAbruptCompletion = !(_step = _context2.sent).done)) { + _context2.next = 12; + break; + } + chunk = _step.value; + return _context2.delegateYield(_asyncGeneratorDelegate(_asyncIterator(streamChunk(chunk, chunkSize))), "t0", 9); + case 9: + _iteratorAbruptCompletion = false; + _context2.next = 4; + break; + case 12: + _context2.next = 18; + break; + case 14: + _context2.prev = 14; + _context2.t1 = _context2["catch"](2); + _didIteratorError = true; + _iteratorError = _context2.t1; + case 18: + _context2.prev = 18; + _context2.prev = 19; + if (!(_iteratorAbruptCompletion && _iterator["return"] != null)) { + _context2.next = 23; + break; + } + _context2.next = 23; + return _awaitAsyncGenerator(_iterator["return"]()); + case 23: + _context2.prev = 23; + if (!_didIteratorError) { + _context2.next = 26; + break; + } + throw _iteratorError; + case 26: + return _context2.finish(23); + case 27: + return _context2.finish(18); + case 28: + case "end": + return _context2.stop(); + } + }, _callee, null, [[2, 14, 18, 28], [19,, 23, 27]]); + })); + return function readBytes(_x, _x2) { + return _ref.apply(this, arguments); + }; + }(); + var readStream = /*#__PURE__*/function () { + var _ref2 = _wrapAsyncGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(stream) { + var reader, _yield$_awaitAsyncGen, done, value; + return _regeneratorRuntime().wrap(function _callee2$(_context3) { + while (1) switch (_context3.prev = _context3.next) { + case 0: + if (!stream[Symbol.asyncIterator]) { + _context3.next = 3; + break; + } + return _context3.delegateYield(_asyncGeneratorDelegate(_asyncIterator(stream)), "t0", 2); + case 2: + return _context3.abrupt("return"); + case 3: + reader = stream.getReader(); + _context3.prev = 4; + case 5: + _context3.next = 7; + return _awaitAsyncGenerator(reader.read()); + case 7: + _yield$_awaitAsyncGen = _context3.sent; + done = _yield$_awaitAsyncGen.done; + value = _yield$_awaitAsyncGen.value; + if (!done) { + _context3.next = 12; + break; + } + return _context3.abrupt("break", 16); + case 12: + _context3.next = 14; + return value; + case 14: + _context3.next = 5; + break; + case 16: + _context3.prev = 16; + _context3.next = 19; + return _awaitAsyncGenerator(reader.cancel()); + case 19: + return _context3.finish(16); + case 20: + case "end": + return _context3.stop(); + } + }, _callee2, null, [[4,, 16, 20]]); + })); + return function readStream(_x3) { + return _ref2.apply(this, arguments); + }; + }(); + var trackStream = function trackStream(stream, chunkSize, onProgress, onFinish) { + var iterator = readBytes(stream, chunkSize); + var bytes = 0; + var done; + var _onFinish = function _onFinish(e) { + if (!done) { + done = true; + onFinish && onFinish(e); + } + }; + return new ReadableStream({ + pull: function pull(controller) { + return _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3() { + var _yield$iterator$next, _done, value, len, loadedBytes; + return _regeneratorRuntime().wrap(function _callee3$(_context4) { + while (1) switch (_context4.prev = _context4.next) { + case 0: + _context4.prev = 0; + _context4.next = 3; + return iterator.next(); + case 3: + _yield$iterator$next = _context4.sent; + _done = _yield$iterator$next.done; + value = _yield$iterator$next.value; + if (!_done) { + _context4.next = 10; + break; + } + _onFinish(); + controller.close(); + return _context4.abrupt("return"); + case 10: + len = value.byteLength; + if (onProgress) { + loadedBytes = bytes += len; + onProgress(loadedBytes); + } + controller.enqueue(new Uint8Array(value)); + _context4.next = 19; + break; + case 15: + _context4.prev = 15; + _context4.t0 = _context4["catch"](0); + _onFinish(_context4.t0); + throw _context4.t0; + case 19: + case "end": + return _context4.stop(); + } + }, _callee3, null, [[0, 15]]); + }))(); + }, + cancel: function cancel(reason) { + _onFinish(reason); + return iterator["return"](); + } + }, { + highWaterMark: 2 + }); + }; + + var isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function'; + var isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function'; + + // used only inside the fetch adapter + var encodeText = isFetchSupported && (typeof TextEncoder === 'function' ? function (encoder) { + return function (str) { + return encoder.encode(str); + }; + }(new TextEncoder()) : ( /*#__PURE__*/function () { + var _ref = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(str) { + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + _context.t0 = Uint8Array; + _context.next = 3; + return new Response(str).arrayBuffer(); + case 3: + _context.t1 = _context.sent; + return _context.abrupt("return", new _context.t0(_context.t1)); + case 5: + case "end": + return _context.stop(); + } + }, _callee); + })); + return function (_x) { + return _ref.apply(this, arguments); + }; + }())); + var test = function test(fn) { + try { + for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } + return !!fn.apply(void 0, args); + } catch (e) { + return false; + } + }; + var supportsRequestStream = isReadableStreamSupported && test(function () { + var duplexAccessed = false; + var hasContentType = new Request(platform.origin, { + body: new ReadableStream(), + method: 'POST', + get duplex() { + duplexAccessed = true; + return 'half'; + } + }).headers.has('Content-Type'); + return duplexAccessed && !hasContentType; + }); + var DEFAULT_CHUNK_SIZE = 64 * 1024; + var supportsResponseStream = isReadableStreamSupported && test(function () { + return utils$1.isReadableStream(new Response('').body); + }); + var resolvers = { + stream: supportsResponseStream && function (res) { + return res.body; + } + }; + isFetchSupported && function (res) { + ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(function (type) { + !resolvers[type] && (resolvers[type] = utils$1.isFunction(res[type]) ? function (res) { + return res[type](); + } : function (_, config) { + throw new AxiosError("Response type '".concat(type, "' is not supported"), AxiosError.ERR_NOT_SUPPORT, config); + }); + }); + }(new Response()); + var getBodyLength = /*#__PURE__*/function () { + var _ref2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee2(body) { + var _request; + return _regeneratorRuntime().wrap(function _callee2$(_context2) { + while (1) switch (_context2.prev = _context2.next) { + case 0: + if (!(body == null)) { + _context2.next = 2; + break; + } + return _context2.abrupt("return", 0); + case 2: + if (!utils$1.isBlob(body)) { + _context2.next = 4; + break; + } + return _context2.abrupt("return", body.size); + case 4: + if (!utils$1.isSpecCompliantForm(body)) { + _context2.next = 9; + break; + } + _request = new Request(platform.origin, { + method: 'POST', + body: body + }); + _context2.next = 8; + return _request.arrayBuffer(); + case 8: + return _context2.abrupt("return", _context2.sent.byteLength); + case 9: + if (!(utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body))) { + _context2.next = 11; + break; + } + return _context2.abrupt("return", body.byteLength); + case 11: + if (utils$1.isURLSearchParams(body)) { + body = body + ''; + } + if (!utils$1.isString(body)) { + _context2.next = 16; + break; + } + _context2.next = 15; + return encodeText(body); + case 15: + return _context2.abrupt("return", _context2.sent.byteLength); + case 16: + case "end": + return _context2.stop(); + } + }, _callee2); + })); + return function getBodyLength(_x2) { + return _ref2.apply(this, arguments); + }; + }(); + var resolveBodyLength = /*#__PURE__*/function () { + var _ref3 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee3(headers, body) { + var length; + return _regeneratorRuntime().wrap(function _callee3$(_context3) { + while (1) switch (_context3.prev = _context3.next) { + case 0: + length = utils$1.toFiniteNumber(headers.getContentLength()); + return _context3.abrupt("return", length == null ? getBodyLength(body) : length); + case 2: + case "end": + return _context3.stop(); + } + }, _callee3); + })); + return function resolveBodyLength(_x3, _x4) { + return _ref3.apply(this, arguments); + }; + }(); + var fetchAdapter = isFetchSupported && ( /*#__PURE__*/function () { + var _ref4 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee4(config) { + var _resolveConfig, url, method, data, signal, cancelToken, timeout, onDownloadProgress, onUploadProgress, responseType, headers, _resolveConfig$withCr, withCredentials, fetchOptions, composedSignal, request, unsubscribe, requestContentLength, _request, contentTypeHeader, _progressEventDecorat, _progressEventDecorat2, onProgress, flush, isCredentialsSupported, response, isStreamResponse, options, responseContentLength, _ref5, _ref6, _onProgress, _flush, responseData; + return _regeneratorRuntime().wrap(function _callee4$(_context4) { + while (1) switch (_context4.prev = _context4.next) { + case 0: + _resolveConfig = resolveConfig(config), url = _resolveConfig.url, method = _resolveConfig.method, data = _resolveConfig.data, signal = _resolveConfig.signal, cancelToken = _resolveConfig.cancelToken, timeout = _resolveConfig.timeout, onDownloadProgress = _resolveConfig.onDownloadProgress, onUploadProgress = _resolveConfig.onUploadProgress, responseType = _resolveConfig.responseType, headers = _resolveConfig.headers, _resolveConfig$withCr = _resolveConfig.withCredentials, withCredentials = _resolveConfig$withCr === void 0 ? 'same-origin' : _resolveConfig$withCr, fetchOptions = _resolveConfig.fetchOptions; + responseType = responseType ? (responseType + '').toLowerCase() : 'text'; + composedSignal = composeSignals$1([signal, cancelToken && cancelToken.toAbortSignal()], timeout); + unsubscribe = composedSignal && composedSignal.unsubscribe && function () { + composedSignal.unsubscribe(); + }; + _context4.prev = 4; + _context4.t0 = onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head'; + if (!_context4.t0) { + _context4.next = 11; + break; + } + _context4.next = 9; + return resolveBodyLength(headers, data); + case 9: + _context4.t1 = requestContentLength = _context4.sent; + _context4.t0 = _context4.t1 !== 0; + case 11: + if (!_context4.t0) { + _context4.next = 15; + break; + } + _request = new Request(url, { + method: 'POST', + body: data, + duplex: "half" + }); + if (utils$1.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) { + headers.setContentType(contentTypeHeader); + } + if (_request.body) { + _progressEventDecorat = progressEventDecorator(requestContentLength, progressEventReducer(asyncDecorator(onUploadProgress))), _progressEventDecorat2 = _slicedToArray(_progressEventDecorat, 2), onProgress = _progressEventDecorat2[0], flush = _progressEventDecorat2[1]; + data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush); + } + case 15: + if (!utils$1.isString(withCredentials)) { + withCredentials = withCredentials ? 'include' : 'omit'; + } + + // Cloudflare Workers throws when credentials are defined + // see https://github.com/cloudflare/workerd/issues/902 + isCredentialsSupported = "credentials" in Request.prototype; + request = new Request(url, _objectSpread2(_objectSpread2({}, fetchOptions), {}, { + signal: composedSignal, + method: method.toUpperCase(), + headers: headers.normalize().toJSON(), + body: data, + duplex: "half", + credentials: isCredentialsSupported ? withCredentials : undefined + })); + _context4.next = 20; + return fetch(request); + case 20: + response = _context4.sent; + isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response'); + if (supportsResponseStream && (onDownloadProgress || isStreamResponse && unsubscribe)) { + options = {}; + ['status', 'statusText', 'headers'].forEach(function (prop) { + options[prop] = response[prop]; + }); + responseContentLength = utils$1.toFiniteNumber(response.headers.get('content-length')); + _ref5 = onDownloadProgress && progressEventDecorator(responseContentLength, progressEventReducer(asyncDecorator(onDownloadProgress), true)) || [], _ref6 = _slicedToArray(_ref5, 2), _onProgress = _ref6[0], _flush = _ref6[1]; + response = new Response(trackStream(response.body, DEFAULT_CHUNK_SIZE, _onProgress, function () { + _flush && _flush(); + unsubscribe && unsubscribe(); + }), options); + } + responseType = responseType || 'text'; + _context4.next = 26; + return resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config); + case 26: + responseData = _context4.sent; + !isStreamResponse && unsubscribe && unsubscribe(); + _context4.next = 30; + return new Promise(function (resolve, reject) { + settle(resolve, reject, { + data: responseData, + headers: AxiosHeaders$1.from(response.headers), + status: response.status, + statusText: response.statusText, + config: config, + request: request + }); + }); + case 30: + return _context4.abrupt("return", _context4.sent); + case 33: + _context4.prev = 33; + _context4.t2 = _context4["catch"](4); + unsubscribe && unsubscribe(); + if (!(_context4.t2 && _context4.t2.name === 'TypeError' && /Load failed|fetch/i.test(_context4.t2.message))) { + _context4.next = 38; + break; + } + throw Object.assign(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request), { + cause: _context4.t2.cause || _context4.t2 + }); + case 38: + throw AxiosError.from(_context4.t2, _context4.t2 && _context4.t2.code, config, request); + case 39: + case "end": + return _context4.stop(); + } + }, _callee4, null, [[4, 33]]); + })); + return function (_x5) { + return _ref4.apply(this, arguments); + }; + }()); + + var knownAdapters = { + http: httpAdapter, + xhr: xhrAdapter, + fetch: fetchAdapter + }; + utils$1.forEach(knownAdapters, function (fn, value) { + if (fn) { + try { + Object.defineProperty(fn, 'name', { + value: value + }); + } catch (e) { + // eslint-disable-next-line no-empty + } + Object.defineProperty(fn, 'adapterName', { + value: value + }); + } + }); + var renderReason = function renderReason(reason) { + return "- ".concat(reason); + }; + var isResolvedHandle = function isResolvedHandle(adapter) { + return utils$1.isFunction(adapter) || adapter === null || adapter === false; + }; + var adapters = { + getAdapter: function getAdapter(adapters) { + adapters = utils$1.isArray(adapters) ? adapters : [adapters]; + var _adapters = adapters, + length = _adapters.length; + var nameOrAdapter; + var adapter; + var rejectedReasons = {}; + for (var i = 0; i < length; i++) { + nameOrAdapter = adapters[i]; + var id = void 0; + adapter = nameOrAdapter; + if (!isResolvedHandle(nameOrAdapter)) { + adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()]; + if (adapter === undefined) { + throw new AxiosError("Unknown adapter '".concat(id, "'")); + } + } + if (adapter) { + break; + } + rejectedReasons[id || '#' + i] = adapter; + } + if (!adapter) { + var reasons = Object.entries(rejectedReasons).map(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + id = _ref2[0], + state = _ref2[1]; + return "adapter ".concat(id, " ") + (state === false ? 'is not supported by the environment' : 'is not available in the build'); + }); + var s = length ? reasons.length > 1 ? 'since :\n' + reasons.map(renderReason).join('\n') : ' ' + renderReason(reasons[0]) : 'as no adapter specified'; + throw new AxiosError("There is no suitable adapter to dispatch the request " + s, 'ERR_NOT_SUPPORT'); + } + return adapter; + }, + adapters: knownAdapters + }; + + /** + * Throws a `CanceledError` if cancellation has been requested. + * + * @param {Object} config The config that is to be used for the request + * + * @returns {void} + */ + function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested(); + } + if (config.signal && config.signal.aborted) { + throw new CanceledError(null, config); + } + } + + /** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * + * @returns {Promise} The Promise to be fulfilled + */ + function dispatchRequest(config) { + throwIfCancellationRequested(config); + config.headers = AxiosHeaders$1.from(config.headers); + + // Transform request data + config.data = transformData.call(config, config.transformRequest); + if (['post', 'put', 'patch'].indexOf(config.method) !== -1) { + config.headers.setContentType('application/x-www-form-urlencoded', false); + } + var adapter = adapters.getAdapter(config.adapter || defaults$1.adapter); + return adapter(config).then(function onAdapterResolution(response) { + throwIfCancellationRequested(config); + + // Transform response data + response.data = transformData.call(config, config.transformResponse, response); + response.headers = AxiosHeaders$1.from(response.headers); + return response; + }, function onAdapterRejection(reason) { + if (!isCancel(reason)) { + throwIfCancellationRequested(config); + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData.call(config, config.transformResponse, reason.response); + reason.response.headers = AxiosHeaders$1.from(reason.response.headers); + } + } + return Promise.reject(reason); + }); + } + + var VERSION = "1.9.0"; + + var validators$1 = {}; + + // eslint-disable-next-line func-names + ['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach(function (type, i) { + validators$1[type] = function validator(thing) { + return _typeof(thing) === type || 'a' + (i < 1 ? 'n ' : ' ') + type; + }; + }); + var deprecatedWarnings = {}; + + /** + * Transitional option validator + * + * @param {function|boolean?} validator - set to false if the transitional option has been removed + * @param {string?} version - deprecated version / removed since version + * @param {string?} message - some message with additional info + * + * @returns {function} + */ + validators$1.transitional = function transitional(validator, version, message) { + function formatMessage(opt, desc) { + return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); + } + + // eslint-disable-next-line func-names + return function (value, opt, opts) { + if (validator === false) { + throw new AxiosError(formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), AxiosError.ERR_DEPRECATED); + } + if (version && !deprecatedWarnings[opt]) { + deprecatedWarnings[opt] = true; + // eslint-disable-next-line no-console + console.warn(formatMessage(opt, ' has been deprecated since v' + version + ' and will be removed in the near future')); + } + return validator ? validator(value, opt, opts) : true; + }; + }; + validators$1.spelling = function spelling(correctSpelling) { + return function (value, opt) { + // eslint-disable-next-line no-console + console.warn("".concat(opt, " is likely a misspelling of ").concat(correctSpelling)); + return true; + }; + }; + + /** + * Assert object's properties type + * + * @param {object} options + * @param {object} schema + * @param {boolean?} allowUnknown + * + * @returns {object} + */ + + function assertOptions(options, schema, allowUnknown) { + if (_typeof(options) !== 'object') { + throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE); + } + var keys = Object.keys(options); + var i = keys.length; + while (i-- > 0) { + var opt = keys[i]; + var validator = schema[opt]; + if (validator) { + var value = options[opt]; + var result = value === undefined || validator(value, opt, options); + if (result !== true) { + throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE); + } + continue; + } + if (allowUnknown !== true) { + throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION); + } + } + } + var validator = { + assertOptions: assertOptions, + validators: validators$1 + }; + + var validators = validator.validators; + + /** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + * + * @return {Axios} A new instance of Axios + */ + var Axios = /*#__PURE__*/function () { + function Axios(instanceConfig) { + _classCallCheck(this, Axios); + this.defaults = instanceConfig || {}; + this.interceptors = { + request: new InterceptorManager$1(), + response: new InterceptorManager$1() + }; + } + + /** + * Dispatch a request + * + * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults) + * @param {?Object} config + * + * @returns {Promise} The Promise to be fulfilled + */ + _createClass(Axios, [{ + key: "request", + value: (function () { + var _request2 = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime().mark(function _callee(configOrUrl, config) { + var dummy, stack; + return _regeneratorRuntime().wrap(function _callee$(_context) { + while (1) switch (_context.prev = _context.next) { + case 0: + _context.prev = 0; + _context.next = 3; + return this._request(configOrUrl, config); + case 3: + return _context.abrupt("return", _context.sent); + case 6: + _context.prev = 6; + _context.t0 = _context["catch"](0); + if (_context.t0 instanceof Error) { + dummy = {}; + Error.captureStackTrace ? Error.captureStackTrace(dummy) : dummy = new Error(); + + // slice off the Error: ... line + stack = dummy.stack ? dummy.stack.replace(/^.+\n/, '') : ''; + try { + if (!_context.t0.stack) { + _context.t0.stack = stack; + // match without the 2 top stack lines + } else if (stack && !String(_context.t0.stack).endsWith(stack.replace(/^.+\n.+\n/, ''))) { + _context.t0.stack += '\n' + stack; + } + } catch (e) { + // ignore the case where "stack" is an un-writable property + } + } + throw _context.t0; + case 10: + case "end": + return _context.stop(); + } + }, _callee, this, [[0, 6]]); + })); + function request(_x, _x2) { + return _request2.apply(this, arguments); + } + return request; + }()) + }, { + key: "_request", + value: function _request(configOrUrl, config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof configOrUrl === 'string') { + config = config || {}; + config.url = configOrUrl; + } else { + config = configOrUrl || {}; + } + config = mergeConfig(this.defaults, config); + var _config = config, + transitional = _config.transitional, + paramsSerializer = _config.paramsSerializer, + headers = _config.headers; + if (transitional !== undefined) { + validator.assertOptions(transitional, { + silentJSONParsing: validators.transitional(validators["boolean"]), + forcedJSONParsing: validators.transitional(validators["boolean"]), + clarifyTimeoutError: validators.transitional(validators["boolean"]) + }, false); + } + if (paramsSerializer != null) { + if (utils$1.isFunction(paramsSerializer)) { + config.paramsSerializer = { + serialize: paramsSerializer + }; + } else { + validator.assertOptions(paramsSerializer, { + encode: validators["function"], + serialize: validators["function"] + }, true); + } + } + + // Set config.allowAbsoluteUrls + if (config.allowAbsoluteUrls !== undefined) ; else if (this.defaults.allowAbsoluteUrls !== undefined) { + config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls; + } else { + config.allowAbsoluteUrls = true; + } + validator.assertOptions(config, { + baseUrl: validators.spelling('baseURL'), + withXsrfToken: validators.spelling('withXSRFToken') + }, true); + + // Set config.method + config.method = (config.method || this.defaults.method || 'get').toLowerCase(); + + // Flatten headers + var contextHeaders = headers && utils$1.merge(headers.common, headers[config.method]); + headers && utils$1.forEach(['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], function (method) { + delete headers[method]; + }); + config.headers = AxiosHeaders$1.concat(contextHeaders, headers); + + // filter out skipped interceptors + var requestInterceptorChain = []; + var synchronousRequestInterceptors = true; + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { + return; + } + synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; + requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); + }); + var responseInterceptorChain = []; + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + }); + var promise; + var i = 0; + var len; + if (!synchronousRequestInterceptors) { + var chain = [dispatchRequest.bind(this), undefined]; + chain.unshift.apply(chain, requestInterceptorChain); + chain.push.apply(chain, responseInterceptorChain); + len = chain.length; + promise = Promise.resolve(config); + while (i < len) { + promise = promise.then(chain[i++], chain[i++]); + } + return promise; + } + len = requestInterceptorChain.length; + var newConfig = config; + i = 0; + while (i < len) { + var onFulfilled = requestInterceptorChain[i++]; + var onRejected = requestInterceptorChain[i++]; + try { + newConfig = onFulfilled(newConfig); + } catch (error) { + onRejected.call(this, error); + break; + } + } + try { + promise = dispatchRequest.call(this, newConfig); + } catch (error) { + return Promise.reject(error); + } + i = 0; + len = responseInterceptorChain.length; + while (i < len) { + promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]); + } + return promise; + } + }, { + key: "getUri", + value: function getUri(config) { + config = mergeConfig(this.defaults, config); + var fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls); + return buildURL(fullPath, config.params, config.paramsSerializer); + } + }]); + return Axios; + }(); // Provide aliases for supported request methods + utils$1.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function (url, config) { + return this.request(mergeConfig(config || {}, { + method: method, + url: url, + data: (config || {}).data + })); + }; + }); + utils$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + + function generateHTTPMethod(isForm) { + return function httpMethod(url, data, config) { + return this.request(mergeConfig(config || {}, { + method: method, + headers: isForm ? { + 'Content-Type': 'multipart/form-data' + } : {}, + url: url, + data: data + })); + }; + } + Axios.prototype[method] = generateHTTPMethod(); + Axios.prototype[method + 'Form'] = generateHTTPMethod(true); + }); + var Axios$1 = Axios; + + /** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @param {Function} executor The executor function. + * + * @returns {CancelToken} + */ + var CancelToken = /*#__PURE__*/function () { + function CancelToken(executor) { + _classCallCheck(this, CancelToken); + if (typeof executor !== 'function') { + throw new TypeError('executor must be a function.'); + } + var resolvePromise; + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve; + }); + var token = this; + + // eslint-disable-next-line func-names + this.promise.then(function (cancel) { + if (!token._listeners) return; + var i = token._listeners.length; + while (i-- > 0) { + token._listeners[i](cancel); + } + token._listeners = null; + }); + + // eslint-disable-next-line func-names + this.promise.then = function (onfulfilled) { + var _resolve; + // eslint-disable-next-line func-names + var promise = new Promise(function (resolve) { + token.subscribe(resolve); + _resolve = resolve; + }).then(onfulfilled); + promise.cancel = function reject() { + token.unsubscribe(_resolve); + }; + return promise; + }; + executor(function cancel(message, config, request) { + if (token.reason) { + // Cancellation has already been requested + return; + } + token.reason = new CanceledError(message, config, request); + resolvePromise(token.reason); + }); + } + + /** + * Throws a `CanceledError` if cancellation has been requested. + */ + _createClass(CancelToken, [{ + key: "throwIfRequested", + value: function throwIfRequested() { + if (this.reason) { + throw this.reason; + } + } + + /** + * Subscribe to the cancel signal + */ + }, { + key: "subscribe", + value: function subscribe(listener) { + if (this.reason) { + listener(this.reason); + return; + } + if (this._listeners) { + this._listeners.push(listener); + } else { + this._listeners = [listener]; + } + } + + /** + * Unsubscribe from the cancel signal + */ + }, { + key: "unsubscribe", + value: function unsubscribe(listener) { + if (!this._listeners) { + return; + } + var index = this._listeners.indexOf(listener); + if (index !== -1) { + this._listeners.splice(index, 1); + } + } + }, { + key: "toAbortSignal", + value: function toAbortSignal() { + var _this = this; + var controller = new AbortController(); + var abort = function abort(err) { + controller.abort(err); + }; + this.subscribe(abort); + controller.signal.unsubscribe = function () { + return _this.unsubscribe(abort); + }; + return controller.signal; + } + + /** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ + }], [{ + key: "source", + value: function source() { + var cancel; + var token = new CancelToken(function executor(c) { + cancel = c; + }); + return { + token: token, + cancel: cancel + }; + } + }]); + return CancelToken; + }(); + var CancelToken$1 = CancelToken; + + /** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * var args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * + * @returns {Function} + */ + function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; + } + + /** + * Determines whether the payload is an error thrown by Axios + * + * @param {*} payload The value to test + * + * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false + */ + function isAxiosError(payload) { + return utils$1.isObject(payload) && payload.isAxiosError === true; + } + + var HttpStatusCode = { + Continue: 100, + SwitchingProtocols: 101, + Processing: 102, + EarlyHints: 103, + Ok: 200, + Created: 201, + Accepted: 202, + NonAuthoritativeInformation: 203, + NoContent: 204, + ResetContent: 205, + PartialContent: 206, + MultiStatus: 207, + AlreadyReported: 208, + ImUsed: 226, + MultipleChoices: 300, + MovedPermanently: 301, + Found: 302, + SeeOther: 303, + NotModified: 304, + UseProxy: 305, + Unused: 306, + TemporaryRedirect: 307, + PermanentRedirect: 308, + BadRequest: 400, + Unauthorized: 401, + PaymentRequired: 402, + Forbidden: 403, + NotFound: 404, + MethodNotAllowed: 405, + NotAcceptable: 406, + ProxyAuthenticationRequired: 407, + RequestTimeout: 408, + Conflict: 409, + Gone: 410, + LengthRequired: 411, + PreconditionFailed: 412, + PayloadTooLarge: 413, + UriTooLong: 414, + UnsupportedMediaType: 415, + RangeNotSatisfiable: 416, + ExpectationFailed: 417, + ImATeapot: 418, + MisdirectedRequest: 421, + UnprocessableEntity: 422, + Locked: 423, + FailedDependency: 424, + TooEarly: 425, + UpgradeRequired: 426, + PreconditionRequired: 428, + TooManyRequests: 429, + RequestHeaderFieldsTooLarge: 431, + UnavailableForLegalReasons: 451, + InternalServerError: 500, + NotImplemented: 501, + BadGateway: 502, + ServiceUnavailable: 503, + GatewayTimeout: 504, + HttpVersionNotSupported: 505, + VariantAlsoNegotiates: 506, + InsufficientStorage: 507, + LoopDetected: 508, + NotExtended: 510, + NetworkAuthenticationRequired: 511 + }; + Object.entries(HttpStatusCode).forEach(function (_ref) { + var _ref2 = _slicedToArray(_ref, 2), + key = _ref2[0], + value = _ref2[1]; + HttpStatusCode[value] = key; + }); + var HttpStatusCode$1 = HttpStatusCode; + + /** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * + * @returns {Axios} A new instance of Axios + */ + function createInstance(defaultConfig) { + var context = new Axios$1(defaultConfig); + var instance = bind(Axios$1.prototype.request, context); + + // Copy axios.prototype to instance + utils$1.extend(instance, Axios$1.prototype, context, { + allOwnKeys: true + }); + + // Copy context to instance + utils$1.extend(instance, context, null, { + allOwnKeys: true + }); + + // Factory for creating new instances + instance.create = function create(instanceConfig) { + return createInstance(mergeConfig(defaultConfig, instanceConfig)); + }; + return instance; + } + + // Create the default instance to be exported + var axios = createInstance(defaults$1); + + // Expose Axios class to allow class inheritance + axios.Axios = Axios$1; + + // Expose Cancel & CancelToken + axios.CanceledError = CanceledError; + axios.CancelToken = CancelToken$1; + axios.isCancel = isCancel; + axios.VERSION = VERSION; + axios.toFormData = toFormData; + + // Expose AxiosError class + axios.AxiosError = AxiosError; + + // alias for CanceledError for backward compatibility + axios.Cancel = axios.CanceledError; + + // Expose all/spread + axios.all = function all(promises) { + return Promise.all(promises); + }; + axios.spread = spread; + + // Expose isAxiosError + axios.isAxiosError = isAxiosError; + + // Expose mergeConfig + axios.mergeConfig = mergeConfig; + axios.AxiosHeaders = AxiosHeaders$1; + axios.formToJSON = function (thing) { + return formDataToJSON(utils$1.isHTMLForm(thing) ? new FormData(thing) : thing); + }; + axios.getAdapter = adapters.getAdapter; + axios.HttpStatusCode = HttpStatusCode$1; + axios["default"] = axios; + + return axios; + +})); +//# sourceMappingURL=axios.js.map diff --git a/node_modules/axios/dist/axios.js.map b/node_modules/axios/dist/axios.js.map new file mode 100644 index 0000000..cb73ebf --- /dev/null +++ b/node_modules/axios/dist/axios.js.map @@ -0,0 +1 @@ +{"version":3,"file":"axios.js","sources":["../lib/helpers/bind.js","../lib/utils.js","../lib/core/AxiosError.js","../lib/helpers/null.js","../lib/helpers/toFormData.js","../lib/helpers/AxiosURLSearchParams.js","../lib/helpers/buildURL.js","../lib/core/InterceptorManager.js","../lib/defaults/transitional.js","../lib/platform/browser/classes/URLSearchParams.js","../lib/platform/browser/classes/FormData.js","../lib/platform/browser/classes/Blob.js","../lib/platform/browser/index.js","../lib/platform/common/utils.js","../lib/platform/index.js","../lib/helpers/toURLEncodedForm.js","../lib/helpers/formDataToJSON.js","../lib/defaults/index.js","../lib/helpers/parseHeaders.js","../lib/core/AxiosHeaders.js","../lib/core/transformData.js","../lib/cancel/isCancel.js","../lib/cancel/CanceledError.js","../lib/core/settle.js","../lib/helpers/parseProtocol.js","../lib/helpers/speedometer.js","../lib/helpers/throttle.js","../lib/helpers/progressEventReducer.js","../lib/helpers/isURLSameOrigin.js","../lib/helpers/cookies.js","../lib/helpers/isAbsoluteURL.js","../lib/helpers/combineURLs.js","../lib/core/buildFullPath.js","../lib/core/mergeConfig.js","../lib/helpers/resolveConfig.js","../lib/adapters/xhr.js","../lib/helpers/composeSignals.js","../lib/helpers/trackStream.js","../lib/adapters/fetch.js","../lib/adapters/adapters.js","../lib/core/dispatchRequest.js","../lib/env/data.js","../lib/helpers/validator.js","../lib/core/Axios.js","../lib/cancel/CancelToken.js","../lib/helpers/spread.js","../lib/helpers/isAxiosError.js","../lib/helpers/HttpStatusCode.js","../lib/axios.js"],"sourcesContent":["'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\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 *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\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 (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 const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\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 *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && 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 *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.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 {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\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: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\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 * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\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 */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\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 *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\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 *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\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 *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\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 maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\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} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.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 *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" 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","'use strict';\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 *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\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 *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\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\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\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 // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\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(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, 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(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\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 *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(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.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\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.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.9.0\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(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 {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\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(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\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 *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n"],"names":["bind","fn","thisArg","wrap","apply","arguments","toString","Object","prototype","getPrototypeOf","iterator","Symbol","toStringTag","kindOf","cache","thing","str","call","slice","toLowerCase","create","kindOfTest","type","typeOfTest","_typeof","isArray","Array","isUndefined","isBuffer","val","constructor","isFunction","isArrayBuffer","isArrayBufferView","result","ArrayBuffer","isView","buffer","isString","isNumber","isObject","isBoolean","isPlainObject","isDate","isFile","isBlob","isFileList","isStream","pipe","isFormData","kind","FormData","append","isURLSearchParams","_map","map","_map2","_slicedToArray","isReadableStream","isRequest","isResponse","isHeaders","trim","replace","forEach","obj","_ref","length","undefined","_ref$allOwnKeys","allOwnKeys","i","l","keys","getOwnPropertyNames","len","key","findKey","_key","_global","globalThis","self","window","global","isContextDefined","context","merge","_ref2","caseless","assignValue","targetKey","extend","a","b","_ref3","stripBOM","content","charCodeAt","inherits","superConstructor","props","descriptors","defineProperty","value","assign","toFlatObject","sourceObj","destObj","filter","propFilter","prop","merged","endsWith","searchString","position","String","lastIndex","indexOf","toArray","arr","isTypedArray","TypedArray","Uint8Array","forEachEntry","generator","_iterator","next","done","pair","matchAll","regExp","matches","exec","push","isHTMLForm","toCamelCase","replacer","m","p1","p2","toUpperCase","hasOwnProperty","_ref4","isRegExp","reduceDescriptors","reducer","getOwnPropertyDescriptors","reducedDescriptors","descriptor","name","ret","defineProperties","freezeMethods","enumerable","writable","set","Error","toObjectSet","arrayOrString","delimiter","define","split","noop","toFiniteNumber","defaultValue","Number","isFinite","isSpecCompliantForm","toJSONObject","stack","visit","source","target","reducedValue","isAsyncFn","isThenable","then","_setImmediate","setImmediateSupported","postMessageSupported","setImmediate","token","callbacks","addEventListener","_ref5","data","shift","cb","postMessage","concat","Math","random","setTimeout","asap","queueMicrotask","process","nextTick","isIterable","hasOwnProp","AxiosError","message","code","config","request","response","captureStackTrace","status","utils","toJSON","description","number","fileName","lineNumber","columnNumber","from","error","customProps","axiosError","cause","isVisitable","removeBrackets","renderKey","path","dots","each","join","isFlatArray","some","predicates","test","toFormData","formData","options","TypeError","metaTokens","indexes","defined","option","visitor","defaultVisitor","_Blob","Blob","useBlob","convertValue","toISOString","Buffer","JSON","stringify","el","index","exposedHelpers","build","pop","encode","charMap","encodeURIComponent","match","AxiosURLSearchParams","params","_pairs","encoder","_encode","buildURL","url","serialize","serializeFn","serializedParams","hashmarkIndex","InterceptorManager","_classCallCheck","handlers","_createClass","use","fulfilled","rejected","synchronous","runWhen","eject","id","clear","forEachHandler","h","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","URLSearchParams","isBrowser","classes","protocols","hasBrowserEnv","document","_navigator","navigator","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","location","href","_objectSpread","platform","toURLEncodedForm","helpers","isNode","parsePropPath","arrayToObject","formDataToJSON","buildPath","isNumericKey","isLast","entries","stringifySafely","rawValue","parser","parse","e","defaults","transitional","transitionalDefaults","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","formSerializer","_FormData","env","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","method","ignoreDuplicateOf","rawHeaders","parsed","line","substring","$internals","normalizeHeader","header","normalizeValue","parseTokens","tokens","tokensRE","isValidHeaderName","matchHeaderValue","isHeaderNameFilter","formatHeader","w","char","buildAccessors","accessorName","methodName","arg1","arg2","arg3","configurable","AxiosHeaders","_Symbol$iterator","_Symbol$toStringTag","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","parseHeaders","dest","_createForOfIteratorHelper","_step","s","n","entry","_toConsumableArray","err","f","get","has","matcher","_delete","deleted","deleteHeader","normalize","format","normalized","_this$constructor","_len","targets","asStrings","getSetCookie","first","computed","_len2","_key2","accessor","internals","accessors","defineAccessor","mapped","headerValue","transformData","fns","transform","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","resolve","reject","ERR_BAD_REQUEST","floor","parseProtocol","speedometer","samplesCount","min","bytes","timestamps","head","tail","firstSampleTS","chunkLength","now","Date","startedAt","bytesCount","passed","round","throttle","freq","timestamp","threshold","lastArgs","timer","invoke","args","clearTimeout","throttled","flush","progressEventReducer","listener","isDownloadStream","bytesNotified","_speedometer","loaded","total","lengthComputable","progressBytes","rate","inRange","_defineProperty","progress","estimated","event","progressEventDecorator","asyncDecorator","isMSIE","URL","protocol","host","port","userAgent","write","expires","domain","secure","cookie","toGMTString","read","RegExp","decodeURIComponent","remove","isAbsoluteURL","combineURLs","baseURL","relativeURL","buildFullPath","requestedURL","allowAbsoluteUrls","isRelativeUrl","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","computeConfigValue","configValue","newConfig","auth","btoa","username","password","unescape","Boolean","_toArray","isURLSameOrigin","xsrfValue","cookies","isXHRAdapterSupported","XMLHttpRequest","Promise","dispatchXhrRequest","_config","resolveConfig","requestData","requestHeaders","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","unsubscribe","signal","removeEventListener","open","onloadend","responseHeaders","getAllResponseHeaders","responseData","responseText","statusText","_resolve","_reject","onreadystatechange","handleLoad","readyState","responseURL","onabort","handleAbort","ECONNABORTED","onerror","handleError","ERR_NETWORK","ontimeout","handleTimeout","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","_progressEventReducer","_progressEventReducer2","upload","_progressEventReducer3","_progressEventReducer4","cancel","abort","subscribe","aborted","send","composeSignals","signals","_signals","controller","AbortController","reason","streamChunk","_regeneratorRuntime","mark","chunk","chunkSize","pos","end","streamChunk$","_context","prev","byteLength","abrupt","stop","readBytes","_wrapAsyncGenerator","_callee","iterable","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_callee$","_context2","_asyncIterator","readStream","_awaitAsyncGenerator","sent","delegateYield","_asyncGeneratorDelegate","t1","finish","_x","_x2","_callee2","stream","reader","_yield$_awaitAsyncGen","_callee2$","_context3","asyncIterator","getReader","_x3","trackStream","onProgress","onFinish","_onFinish","ReadableStream","pull","_asyncToGenerator","_callee3","_yield$iterator$next","_done","loadedBytes","_callee3$","_context4","close","enqueue","t0","highWaterMark","isFetchSupported","fetch","Request","Response","isReadableStreamSupported","encodeText","TextEncoder","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","body","duplex","DEFAULT_CHUNK_SIZE","supportsResponseStream","resolvers","res","_","ERR_NOT_SUPPORT","getBodyLength","_request","size","resolveBodyLength","getContentLength","_x4","_callee4","_resolveConfig","_resolveConfig$withCr","fetchOptions","composedSignal","requestContentLength","contentTypeHeader","_progressEventDecorat","_progressEventDecorat2","isCredentialsSupported","isStreamResponse","responseContentLength","_ref6","_onProgress","_flush","_callee4$","toAbortSignal","credentials","t2","_x5","knownAdapters","http","httpAdapter","xhr","xhrAdapter","fetchAdapter","renderReason","isResolvedHandle","getAdapter","adapters","_adapters","nameOrAdapter","rejectedReasons","reasons","state","throwIfCancellationRequested","throwIfRequested","dispatchRequest","onAdapterResolution","onAdapterRejection","VERSION","validators","validator","deprecatedWarnings","version","formatMessage","opt","desc","opts","ERR_DEPRECATED","console","warn","spelling","correctSpelling","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","_request2","configOrUrl","dummy","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","unshiftRequestInterceptors","interceptor","unshift","responseInterceptorChain","pushResponseInterceptors","promise","chain","onFulfilled","onRejected","getUri","fullPath","forEachMethodNoData","forEachMethodWithData","generateHTTPMethod","isForm","httpMethod","CancelToken","executor","resolvePromise","promiseExecutor","_listeners","onfulfilled","splice","_this","c","spread","callback","isAxiosError","payload","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","createInstance","defaultConfig","instance","axios","Cancel","all","promises","formToJSON"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/axios/dist/axios.min.js b/node_modules/axios/dist/axios.min.js new file mode 100644 index 0000000..fac5c0c --- /dev/null +++ b/node_modules/axios/dist/axios.min.js @@ -0,0 +1,3 @@ +/*! Axios v1.9.0 Copyright (c) 2025 Matt Zabriskie and contributors */ +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).axios=t()}(this,(function(){"use strict";function e(e){var r,n;function o(r,n){try{var a=e[r](n),s=a.value,u=s instanceof t;Promise.resolve(u?s.v:s).then((function(t){if(u){var n="return"===r?"return":"next";if(!s.k||t.done)return o(n,t);t=e[n](t).value}i(a.done?"return":"normal",t)}),(function(e){o("throw",e)}))}catch(e){i("throw",e)}}function i(e,t){switch(e){case"return":r.resolve({value:t,done:!0});break;case"throw":r.reject(t);break;default:r.resolve({value:t,done:!1})}(r=r.next)?o(r.key,r.arg):n=null}this._invoke=function(e,t){return new Promise((function(i,a){var s={key:e,arg:t,resolve:i,reject:a,next:null};n?n=n.next=s:(r=n=s,o(e,t))}))},"function"!=typeof e.return&&(this.return=void 0)}function t(e,t){this.v=e,this.k=t}function r(e){var r={},n=!1;function o(r,o){return n=!0,o=new Promise((function(t){t(e[r](o))})),{done:!1,value:new t(o,1)}}return r["undefined"!=typeof Symbol&&Symbol.iterator||"@@iterator"]=function(){return this},r.next=function(e){return n?(n=!1,e):o("next",e)},"function"==typeof e.throw&&(r.throw=function(e){if(n)throw n=!1,e;return o("throw",e)}),"function"==typeof e.return&&(r.return=function(e){return n?(n=!1,e):o("return",e)}),r}function n(e){var t,r,n,i=2;for("undefined"!=typeof Symbol&&(r=Symbol.asyncIterator,n=Symbol.iterator);i--;){if(r&&null!=(t=e[r]))return t.call(e);if(n&&null!=(t=e[n]))return new o(t.call(e));r="@@asyncIterator",n="@@iterator"}throw new TypeError("Object is not async iterable")}function o(e){function t(e){if(Object(e)!==e)return Promise.reject(new TypeError(e+" is not an object."));var t=e.done;return Promise.resolve(e.value).then((function(e){return{value:e,done:t}}))}return o=function(e){this.s=e,this.n=e.next},o.prototype={s:null,n:null,next:function(){return t(this.n.apply(this.s,arguments))},return:function(e){var r=this.s.return;return void 0===r?Promise.resolve({value:e,done:!0}):t(r.apply(this.s,arguments))},throw:function(e){var r=this.s.return;return void 0===r?Promise.reject(e):t(r.apply(this.s,arguments))}},new o(e)}function i(e){return new t(e,0)}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function s(e){for(var t=1;t=0;--i){var a=this.tryEntries[i],s=a.completion;if("root"===a.tryLoc)return o("end");if(a.tryLoc<=this.prev){var u=n.call(a,"catchLoc"),c=n.call(a,"finallyLoc");if(u&&c){if(this.prev=0;--r){var o=this.tryEntries[r];if(o.tryLoc<=this.prev&&n.call(o,"finallyLoc")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),A(r),y}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if("throw"===n.type){var o=n.arg;A(r)}return o}}throw new Error("illegal catch attempt")},delegateYield:function(t,r,n){return this.delegate={iterator:L(t),resultName:r,nextLoc:n},"next"===this.method&&(this.arg=e),y}},t}function c(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var r=e[Symbol.toPrimitive];if(void 0!==r){var n=r.call(e,t||"default");if("object"!=typeof n)return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}function f(e){return f="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},f(e)}function l(t){return function(){return new e(t.apply(this,arguments))}}function p(e,t,r,n,o,i,a){try{var s=e[i](a),u=s.value}catch(e){return void r(e)}s.done?t(u):Promise.resolve(u).then(n,o)}function h(e){return function(){var t=this,r=arguments;return new Promise((function(n,o){var i=e.apply(t,r);function a(e){p(i,n,o,a,s,"next",e)}function s(e){p(i,n,o,a,s,"throw",e)}a(void 0)}))}}function d(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function v(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&void 0!==arguments[2]?arguments[2]:{},i=o.allOwnKeys,a=void 0!==i&&i;if(null!=e)if("object"!==f(e)&&(e=[e]),C(e))for(r=0,n=e.length;r0;)if(t===(r=n[o]).toLowerCase())return r;return null}var ee="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,te=function(e){return!U(e)&&e!==ee};var re,ne=(re="undefined"!=typeof Uint8Array&&j(Uint8Array),function(e){return re&&e instanceof re}),oe=N("HTMLFormElement"),ie=function(e){var t=Object.prototype.hasOwnProperty;return function(e,r){return t.call(e,r)}}(),ae=N("RegExp"),se=function(e,t){var r=Object.getOwnPropertyDescriptors(e),n={};Q(r,(function(r,o){var i;!1!==(i=t(r,o,e))&&(n[o]=i||r)})),Object.defineProperties(e,n)};var ue,ce,fe,le,pe=N("AsyncFunction"),he=(ue="function"==typeof setImmediate,ce=D(ee.postMessage),ue?setImmediate:ce?(fe="axios@".concat(Math.random()),le=[],ee.addEventListener("message",(function(e){var t=e.source,r=e.data;t===ee&&r===fe&&le.length&&le.shift()()}),!1),function(e){le.push(e),ee.postMessage(fe,"*")}):function(e){return setTimeout(e)}),de="undefined"!=typeof queueMicrotask?queueMicrotask.bind(ee):"undefined"!=typeof process&&process.nextTick||he,ve={isArray:C,isArrayBuffer:F,isBuffer:function(e){return null!==e&&!U(e)&&null!==e.constructor&&!U(e.constructor)&&D(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:function(e){var t;return e&&("function"==typeof FormData&&e instanceof FormData||D(e.append)&&("formdata"===(t=L(e))||"object"===t&&D(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){return"undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&F(e.buffer)},isString:B,isNumber:q,isBoolean:function(e){return!0===e||!1===e},isObject:I,isPlainObject:M,isReadableStream:G,isRequest:X,isResponse:$,isHeaders:Y,isUndefined:U,isDate:z,isFile:H,isBlob:J,isRegExp:ae,isFunction:D,isStream:function(e){return I(e)&&D(e.pipe)},isURLSearchParams:K,isTypedArray:ne,isFileList:W,forEach:Q,merge:function e(){for(var t=te(this)&&this||{},r=t.caseless,n={},o=function(t,o){var i=r&&Z(n,o)||o;M(n[i])&&M(t)?n[i]=e(n[i],t):M(t)?n[i]=e({},t):C(t)?n[i]=t.slice():n[i]=t},i=0,a=arguments.length;i3&&void 0!==arguments[3]?arguments[3]:{},o=n.allOwnKeys;return Q(t,(function(t,n){r&&D(t)?e[n]=R(t,r):e[n]=t}),{allOwnKeys:o}),e},trim:function(e){return e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"")},stripBOM:function(e){return 65279===e.charCodeAt(0)&&(e=e.slice(1)),e},inherits:function(e,t,r,n){e.prototype=Object.create(t.prototype,n),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),r&&Object.assign(e.prototype,r)},toFlatObject:function(e,t,r,n){var o,i,a,s={};if(t=t||{},null==e)return t;do{for(i=(o=Object.getOwnPropertyNames(e)).length;i-- >0;)a=o[i],n&&!n(a,e,t)||s[a]||(t[a]=e[a],s[a]=!0);e=!1!==r&&j(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:L,kindOfTest:N,endsWith:function(e,t,r){e=String(e),(void 0===r||r>e.length)&&(r=e.length),r-=t.length;var n=e.indexOf(t,r);return-1!==n&&n===r},toArray:function(e){if(!e)return null;if(C(e))return e;var t=e.length;if(!q(t))return null;for(var r=new Array(t);t-- >0;)r[t]=e[t];return r},forEachEntry:function(e,t){for(var r,n=(e&&e[A]).call(e);(r=n.next())&&!r.done;){var o=r.value;t.call(e,o[0],o[1])}},matchAll:function(e,t){for(var r,n=[];null!==(r=e.exec(t));)n.push(r);return n},isHTMLForm:oe,hasOwnProperty:ie,hasOwnProp:ie,reduceDescriptors:se,freezeMethods:function(e){se(e,(function(t,r){if(D(e)&&-1!==["arguments","caller","callee"].indexOf(r))return!1;var n=e[r];D(n)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=function(){throw Error("Can not rewrite read-only method '"+r+"'")}))}))},toObjectSet:function(e,t){var r={},n=function(e){e.forEach((function(e){r[e]=!0}))};return C(e)?n(e):n(String(e).split(t)),r},toCamelCase:function(e){return e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,r){return t.toUpperCase()+r}))},noop:function(){},toFiniteNumber:function(e,t){return null!=e&&Number.isFinite(e=+e)?e:t},findKey:Z,global:ee,isContextDefined:te,isSpecCompliantForm:function(e){return!!(e&&D(e.append)&&"FormData"===e[P]&&e[A])},toJSONObject:function(e){var t=new Array(10);return function e(r,n){if(I(r)){if(t.indexOf(r)>=0)return;if(!("toJSON"in r)){t[n]=r;var o=C(r)?[]:{};return Q(r,(function(t,r){var i=e(t,n+1);!U(i)&&(o[r]=i)})),t[n]=void 0,o}}return r}(e,0)},isAsyncFn:pe,isThenable:function(e){return e&&(I(e)||D(e))&&D(e.then)&&D(e.catch)},setImmediate:he,asap:de,isIterable:function(e){return null!=e&&D(e[A])}};function ye(e,t,r,n,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),n&&(this.request=n),o&&(this.response=o,this.status=o.status?o.status:null)}ve.inherits(ye,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:ve.toJSONObject(this.config),code:this.code,status:this.status}}});var me=ye.prototype,be={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((function(e){be[e]={value:e}})),Object.defineProperties(ye,be),Object.defineProperty(me,"isAxiosError",{value:!0}),ye.from=function(e,t,r,n,o,i){var a=Object.create(me);return ve.toFlatObject(e,a,(function(e){return e!==Error.prototype}),(function(e){return"isAxiosError"!==e})),ye.call(a,e.message,t,r,n,o),a.cause=e,a.name=e.name,i&&Object.assign(a,i),a};function ge(e){return ve.isPlainObject(e)||ve.isArray(e)}function we(e){return ve.endsWith(e,"[]")?e.slice(0,-2):e}function Ee(e,t,r){return e?e.concat(t).map((function(e,t){return e=we(e),!r&&t?"["+e+"]":e})).join(r?".":""):t}var Oe=ve.toFlatObject(ve,{},null,(function(e){return/^is[A-Z]/.test(e)}));function Se(e,t,r){if(!ve.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;var n=(r=ve.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!ve.isUndefined(t[e])}))).metaTokens,o=r.visitor||c,i=r.dots,a=r.indexes,s=(r.Blob||"undefined"!=typeof Blob&&Blob)&&ve.isSpecCompliantForm(t);if(!ve.isFunction(o))throw new TypeError("visitor must be a function");function u(e){if(null===e)return"";if(ve.isDate(e))return e.toISOString();if(!s&&ve.isBlob(e))throw new ye("Blob is not supported. Use a Buffer instead.");return ve.isArrayBuffer(e)||ve.isTypedArray(e)?s&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function c(e,r,o){var s=e;if(e&&!o&&"object"===f(e))if(ve.endsWith(r,"{}"))r=n?r:r.slice(0,-2),e=JSON.stringify(e);else if(ve.isArray(e)&&function(e){return ve.isArray(e)&&!e.some(ge)}(e)||(ve.isFileList(e)||ve.endsWith(r,"[]"))&&(s=ve.toArray(e)))return r=we(r),s.forEach((function(e,n){!ve.isUndefined(e)&&null!==e&&t.append(!0===a?Ee([r],n,i):null===a?r:r+"[]",u(e))})),!1;return!!ge(e)||(t.append(Ee(o,r,i),u(e)),!1)}var l=[],p=Object.assign(Oe,{defaultVisitor:c,convertValue:u,isVisitable:ge});if(!ve.isObject(e))throw new TypeError("data must be an object");return function e(r,n){if(!ve.isUndefined(r)){if(-1!==l.indexOf(r))throw Error("Circular reference detected in "+n.join("."));l.push(r),ve.forEach(r,(function(r,i){!0===(!(ve.isUndefined(r)||null===r)&&o.call(t,r,ve.isString(i)?i.trim():i,n,p))&&e(r,n?n.concat(i):[i])})),l.pop()}}(e),t}function xe(e){var t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function Re(e,t){this._pairs=[],e&&Se(e,this,t)}var ke=Re.prototype;function Te(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function je(e,t,r){if(!t)return e;var n=r&&r.encode||Te;ve.isFunction(r)&&(r={serialize:r});var o,i=r&&r.serialize;if(o=i?i(t,r):ve.isURLSearchParams(t)?t.toString():new Re(t,r).toString(n)){var a=e.indexOf("#");-1!==a&&(e=e.slice(0,a)),e+=(-1===e.indexOf("?")?"?":"&")+o}return e}ke.append=function(e,t){this._pairs.push([e,t])},ke.toString=function(e){var t=e?function(t){return e.call(this,t,xe)}:xe;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};var Ae=function(){function e(){d(this,e),this.handlers=[]}return y(e,[{key:"use",value:function(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1}},{key:"eject",value:function(e){this.handlers[e]&&(this.handlers[e]=null)}},{key:"clear",value:function(){this.handlers&&(this.handlers=[])}},{key:"forEach",value:function(e){ve.forEach(this.handlers,(function(t){null!==t&&e(t)}))}}]),e}(),Pe={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},Le={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:Re,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},Ne="undefined"!=typeof window&&"undefined"!=typeof document,_e="object"===("undefined"==typeof navigator?"undefined":f(navigator))&&navigator||void 0,Ce=Ne&&(!_e||["ReactNative","NativeScript","NS"].indexOf(_e.product)<0),Ue="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,Fe=Ne&&window.location.href||"http://localhost",Be=s(s({},Object.freeze({__proto__:null,hasBrowserEnv:Ne,hasStandardBrowserWebWorkerEnv:Ue,hasStandardBrowserEnv:Ce,navigator:_e,origin:Fe})),Le);function De(e){function t(e,r,n,o){var i=e[o++];if("__proto__"===i)return!0;var a=Number.isFinite(+i),s=o>=e.length;return i=!i&&ve.isArray(n)?n.length:i,s?(ve.hasOwnProp(n,i)?n[i]=[n[i],r]:n[i]=r,!a):(n[i]&&ve.isObject(n[i])||(n[i]=[]),t(e,r,n[i],o)&&ve.isArray(n[i])&&(n[i]=function(e){var t,r,n={},o=Object.keys(e),i=o.length;for(t=0;t-1,i=ve.isObject(e);if(i&&ve.isHTMLForm(e)&&(e=new FormData(e)),ve.isFormData(e))return o?JSON.stringify(De(e)):e;if(ve.isArrayBuffer(e)||ve.isBuffer(e)||ve.isStream(e)||ve.isFile(e)||ve.isBlob(e)||ve.isReadableStream(e))return e;if(ve.isArrayBufferView(e))return e.buffer;if(ve.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();if(i){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return Se(e,new Be.classes.URLSearchParams,Object.assign({visitor:function(e,t,r,n){return Be.isNode&&ve.isBuffer(e)?(this.append(t,e.toString("base64")),!1):n.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((r=ve.isFileList(e))||n.indexOf("multipart/form-data")>-1){var a=this.env&&this.env.FormData;return Se(r?{"files[]":e}:e,a&&new a,this.formSerializer)}}return i||o?(t.setContentType("application/json",!1),function(e,t,r){if(ve.isString(e))try{return(t||JSON.parse)(e),ve.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(r||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||qe.transitional,r=t&&t.forcedJSONParsing,n="json"===this.responseType;if(ve.isResponse(e)||ve.isReadableStream(e))return e;if(e&&ve.isString(e)&&(r&&!this.responseType||n)){var o=!(t&&t.silentJSONParsing)&&n;try{return JSON.parse(e)}catch(e){if(o){if("SyntaxError"===e.name)throw ye.from(e,ye.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:Be.classes.FormData,Blob:Be.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};ve.forEach(["delete","get","head","post","put","patch"],(function(e){qe.headers[e]={}}));var Ie=qe,Me=ve.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),ze=Symbol("internals");function He(e){return e&&String(e).trim().toLowerCase()}function Je(e){return!1===e||null==e?e:ve.isArray(e)?e.map(Je):String(e)}function We(e,t,r,n,o){return ve.isFunction(n)?n.call(this,t,r):(o&&(t=r),ve.isString(t)?ve.isString(n)?-1!==t.indexOf(n):ve.isRegExp(n)?n.test(t):void 0:void 0)}var Ke=function(e,t){function r(e){d(this,r),e&&this.set(e)}return y(r,[{key:"set",value:function(e,t,r){var n=this;function o(e,t,r){var o=He(t);if(!o)throw new Error("header name must be a non-empty string");var i=ve.findKey(n,o);(!i||void 0===n[i]||!0===r||void 0===r&&!1!==n[i])&&(n[i||t]=Je(e))}var i=function(e,t){return ve.forEach(e,(function(e,r){return o(e,r,t)}))};if(ve.isPlainObject(e)||e instanceof this.constructor)i(e,t);else if(ve.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))i(function(e){var t,r,n,o={};return e&&e.split("\n").forEach((function(e){n=e.indexOf(":"),t=e.substring(0,n).trim().toLowerCase(),r=e.substring(n+1).trim(),!t||o[t]&&Me[t]||("set-cookie"===t?o[t]?o[t].push(r):o[t]=[r]:o[t]=o[t]?o[t]+", "+r:r)})),o}(e),t);else if(ve.isObject(e)&&ve.isIterable(e)){var a,s,u,c={},f=function(e,t){var r="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!r){if(Array.isArray(e)||(r=O(e))||t&&e&&"number"==typeof e.length){r&&(e=r);var n=0,o=function(){};return{s:o,n:function(){return n>=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(e){throw e},f:o}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,a=!0,s=!1;return{s:function(){r=r.call(e)},n:function(){var e=r.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==r.return||r.return()}finally{if(s)throw i}}}}(e);try{for(f.s();!(u=f.n()).done;){var l=u.value;if(!ve.isArray(l))throw TypeError("Object iterator must return a key-value pair");c[s=l[0]]=(a=c[s])?ve.isArray(a)?[].concat(g(a),[l[1]]):[a,l[1]]:l[1]}}catch(e){f.e(e)}finally{f.f()}i(c,t)}else null!=e&&o(t,e,r);return this}},{key:"get",value:function(e,t){if(e=He(e)){var r=ve.findKey(this,e);if(r){var n=this[r];if(!t)return n;if(!0===t)return function(e){for(var t,r=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;t=n.exec(e);)r[t[1]]=t[2];return r}(n);if(ve.isFunction(t))return t.call(this,n,r);if(ve.isRegExp(t))return t.exec(n);throw new TypeError("parser must be boolean|regexp|function")}}}},{key:"has",value:function(e,t){if(e=He(e)){var r=ve.findKey(this,e);return!(!r||void 0===this[r]||t&&!We(0,this[r],r,t))}return!1}},{key:"delete",value:function(e,t){var r=this,n=!1;function o(e){if(e=He(e)){var o=ve.findKey(r,e);!o||t&&!We(0,r[o],o,t)||(delete r[o],n=!0)}}return ve.isArray(e)?e.forEach(o):o(e),n}},{key:"clear",value:function(e){for(var t=Object.keys(this),r=t.length,n=!1;r--;){var o=t[r];e&&!We(0,this[o],o,e,!0)||(delete this[o],n=!0)}return n}},{key:"normalize",value:function(e){var t=this,r={};return ve.forEach(this,(function(n,o){var i=ve.findKey(r,o);if(i)return t[i]=Je(n),void delete t[o];var a=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,(function(e,t,r){return t.toUpperCase()+r}))}(o):String(o).trim();a!==o&&delete t[o],t[a]=Je(n),r[a]=!0})),this}},{key:"concat",value:function(){for(var e,t=arguments.length,r=new Array(t),n=0;n1?r-1:0),o=1;o1&&void 0!==arguments[1]?arguments[1]:Date.now();o=i,r=null,n&&(clearTimeout(n),n=null),e.apply(null,t)};return[function(){for(var e=Date.now(),t=e-o,s=arguments.length,u=new Array(s),c=0;c=i?a(u,e):(r=u,n||(n=setTimeout((function(){n=null,a(r)}),i-t)))},function(){return r&&a(r)}]}ve.inherits($e,ye,{__CANCEL__:!0});var et=function(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:3,n=0,o=Qe(50,250);return Ze((function(r){var i=r.loaded,a=r.lengthComputable?r.total:void 0,s=i-n,u=o(s);n=i;var c=m({loaded:i,total:a,progress:a?i/a:void 0,bytes:s,rate:u||void 0,estimated:u&&a&&i<=a?(a-i)/u:void 0,event:r,lengthComputable:null!=a},t?"download":"upload",!0);e(c)}),r)},tt=function(e,t){var r=null!=e;return[function(n){return t[0]({lengthComputable:r,total:e,loaded:n})},t[1]]},rt=function(e){return function(){for(var t=arguments.length,r=new Array(t),n=0;n1?t-1:0),n=1;n1?"since :\n"+s.map(jt).join("\n"):" "+jt(s[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return r};function Lt(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new $e(null,e)}function Nt(e){return Lt(e),e.headers=Ve.from(e.headers),e.data=Ge.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1),Pt(e.adapter||Ie.adapter)(e).then((function(t){return Lt(e),t.data=Ge.call(e,e.transformResponse,t),t.headers=Ve.from(t.headers),t}),(function(t){return Xe(t)||(Lt(e),t&&t.response&&(t.response.data=Ge.call(e,e.transformResponse,t.response),t.response.headers=Ve.from(t.response.headers))),Promise.reject(t)}))}var _t="1.9.0",Ct={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){Ct[e]=function(r){return f(r)===e||"a"+(t<1?"n ":" ")+e}}));var Ut={};Ct.transitional=function(e,t,r){function n(e,t){return"[Axios v1.9.0] Transitional option '"+e+"'"+t+(r?". "+r:"")}return function(r,o,i){if(!1===e)throw new ye(n(o," has been removed"+(t?" in "+t:"")),ye.ERR_DEPRECATED);return t&&!Ut[o]&&(Ut[o]=!0,console.warn(n(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,o,i)}},Ct.spelling=function(e){return function(t,r){return console.warn("".concat(r," is likely a misspelling of ").concat(e)),!0}};var Ft={assertOptions:function(e,t,r){if("object"!==f(e))throw new ye("options must be an object",ye.ERR_BAD_OPTION_VALUE);for(var n=Object.keys(e),o=n.length;o-- >0;){var i=n[o],a=t[i];if(a){var s=e[i],u=void 0===s||a(s,i,e);if(!0!==u)throw new ye("option "+i+" must be "+u,ye.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new ye("Unknown option "+i,ye.ERR_BAD_OPTION)}},validators:Ct},Bt=Ft.validators,Dt=function(){function e(t){d(this,e),this.defaults=t||{},this.interceptors={request:new Ae,response:new Ae}}var t;return y(e,[{key:"request",value:(t=h(u().mark((function e(t,r){var n,o;return u().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.prev=0,e.next=3,this._request(t,r);case 3:return e.abrupt("return",e.sent);case 6:if(e.prev=6,e.t0=e.catch(0),e.t0 instanceof Error){n={},Error.captureStackTrace?Error.captureStackTrace(n):n=new Error,o=n.stack?n.stack.replace(/^.+\n/,""):"";try{e.t0.stack?o&&!String(e.t0.stack).endsWith(o.replace(/^.+\n.+\n/,""))&&(e.t0.stack+="\n"+o):e.t0.stack=o}catch(e){}}throw e.t0;case 10:case"end":return e.stop()}}),e,this,[[0,6]])}))),function(e,r){return t.apply(this,arguments)})},{key:"_request",value:function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{};var r=t=st(this.defaults,t),n=r.transitional,o=r.paramsSerializer,i=r.headers;void 0!==n&&Ft.assertOptions(n,{silentJSONParsing:Bt.transitional(Bt.boolean),forcedJSONParsing:Bt.transitional(Bt.boolean),clarifyTimeoutError:Bt.transitional(Bt.boolean)},!1),null!=o&&(ve.isFunction(o)?t.paramsSerializer={serialize:o}:Ft.assertOptions(o,{encode:Bt.function,serialize:Bt.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),Ft.assertOptions(t,{baseUrl:Bt.spelling("baseURL"),withXsrfToken:Bt.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();var a=i&&ve.merge(i.common,i[t.method]);i&&ve.forEach(["delete","get","head","post","put","patch","common"],(function(e){delete i[e]})),t.headers=Ve.concat(a,i);var s=[],u=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(u=u&&e.synchronous,s.unshift(e.fulfilled,e.rejected))}));var c,f=[];this.interceptors.response.forEach((function(e){f.push(e.fulfilled,e.rejected)}));var l,p=0;if(!u){var h=[Nt.bind(this),void 0];for(h.unshift.apply(h,s),h.push.apply(h,f),l=h.length,c=Promise.resolve(t);p0;)n._listeners[t](e);n._listeners=null}})),this.promise.then=function(e){var t,r=new Promise((function(e){n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},t((function(e,t,o){n.reason||(n.reason=new $e(e,t,o),r(n.reason))}))}return y(e,[{key:"throwIfRequested",value:function(){if(this.reason)throw this.reason}},{key:"subscribe",value:function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}},{key:"unsubscribe",value:function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}}},{key:"toAbortSignal",value:function(){var e=this,t=new AbortController,r=function(e){t.abort(e)};return this.subscribe(r),t.signal.unsubscribe=function(){return e.unsubscribe(r)},t.signal}}],[{key:"source",value:function(){var t;return{token:new e((function(e){t=e})),cancel:t}}}]),e}(),Mt=It;var zt={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(zt).forEach((function(e){var t=b(e,2),r=t[0],n=t[1];zt[n]=r}));var Ht=zt;var Jt=function e(t){var r=new qt(t),n=R(qt.prototype.request,r);return ve.extend(n,qt.prototype,r,{allOwnKeys:!0}),ve.extend(n,r,null,{allOwnKeys:!0}),n.create=function(r){return e(st(t,r))},n}(Ie);return Jt.Axios=qt,Jt.CanceledError=$e,Jt.CancelToken=Mt,Jt.isCancel=Xe,Jt.VERSION=_t,Jt.toFormData=Se,Jt.AxiosError=ye,Jt.Cancel=Jt.CanceledError,Jt.all=function(e){return Promise.all(e)},Jt.spread=function(e){return function(t){return e.apply(null,t)}},Jt.isAxiosError=function(e){return ve.isObject(e)&&!0===e.isAxiosError},Jt.mergeConfig=st,Jt.AxiosHeaders=Ve,Jt.formToJSON=function(e){return De(ve.isHTMLForm(e)?new FormData(e):e)},Jt.getAdapter=Pt,Jt.HttpStatusCode=Ht,Jt.default=Jt,Jt})); +//# sourceMappingURL=axios.min.js.map diff --git a/node_modules/axios/dist/axios.min.js.map b/node_modules/axios/dist/axios.min.js.map new file mode 100644 index 0000000..3a2fba6 --- /dev/null +++ b/node_modules/axios/dist/axios.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"axios.min.js","sources":["../lib/helpers/bind.js","../lib/utils.js","../lib/core/AxiosError.js","../lib/helpers/toFormData.js","../lib/helpers/AxiosURLSearchParams.js","../lib/helpers/buildURL.js","../lib/core/InterceptorManager.js","../lib/defaults/transitional.js","../lib/platform/browser/index.js","../lib/platform/browser/classes/URLSearchParams.js","../lib/platform/browser/classes/FormData.js","../lib/platform/browser/classes/Blob.js","../lib/platform/common/utils.js","../lib/platform/index.js","../lib/helpers/formDataToJSON.js","../lib/defaults/index.js","../lib/helpers/toURLEncodedForm.js","../lib/helpers/parseHeaders.js","../lib/core/AxiosHeaders.js","../lib/core/transformData.js","../lib/cancel/isCancel.js","../lib/cancel/CanceledError.js","../lib/core/settle.js","../lib/helpers/speedometer.js","../lib/helpers/throttle.js","../lib/helpers/progressEventReducer.js","../lib/helpers/isURLSameOrigin.js","../lib/helpers/cookies.js","../lib/core/buildFullPath.js","../lib/helpers/isAbsoluteURL.js","../lib/helpers/combineURLs.js","../lib/core/mergeConfig.js","../lib/helpers/resolveConfig.js","../lib/adapters/fetch.js","../lib/adapters/xhr.js","../lib/helpers/parseProtocol.js","../lib/helpers/composeSignals.js","../lib/helpers/trackStream.js","../lib/adapters/adapters.js","../lib/helpers/null.js","../lib/core/dispatchRequest.js","../lib/env/data.js","../lib/helpers/validator.js","../lib/core/Axios.js","../lib/cancel/CancelToken.js","../lib/helpers/HttpStatusCode.js","../lib/axios.js","../lib/helpers/spread.js","../lib/helpers/isAxiosError.js"],"sourcesContent":["'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\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 *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\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 (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 const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\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 *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && 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 *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.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 {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\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: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\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 * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\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 */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\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 *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\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 *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\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 *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\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 maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\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} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.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 *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" 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","'use strict';\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 *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\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 *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\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\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\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 // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\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(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, 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(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\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 *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(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.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\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.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.9.0\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(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 {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\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(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\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 *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n"],"names":["bind","fn","thisArg","apply","arguments","cache","toString","Object","prototype","getPrototypeOf","iterator","Symbol","toStringTag","kindOf","create","thing","str","call","slice","toLowerCase","kindOfTest","type","typeOfTest","_typeof","isArray","Array","isUndefined","isArrayBuffer","isString","isFunction","isNumber","isObject","isPlainObject","val","isDate","isFile","isBlob","isFileList","isURLSearchParams","_map2","_slicedToArray","map","isReadableStream","isRequest","isResponse","isHeaders","forEach","obj","i","l","_ref","length","undefined","_ref$allOwnKeys","allOwnKeys","key","keys","getOwnPropertyNames","len","findKey","_key","_global","globalThis","self","window","global","isContextDefined","context","TypedArray","isTypedArray","Uint8Array","isHTMLForm","hasOwnProperty","_ref4","prop","isRegExp","reduceDescriptors","reducer","descriptors","getOwnPropertyDescriptors","reducedDescriptors","descriptor","name","ret","defineProperties","setImmediateSupported","postMessageSupported","token","callbacks","isAsyncFn","_setImmediate","setImmediate","postMessage","concat","Math","random","addEventListener","_ref5","source","data","shift","cb","push","setTimeout","asap","queueMicrotask","process","nextTick","utils$1","isBuffer","constructor","isFormData","kind","FormData","append","isArrayBufferView","ArrayBuffer","isView","buffer","isBoolean","isStream","pipe","merge","_ref2","this","caseless","result","assignValue","targetKey","extend","a","b","_ref3","trim","replace","stripBOM","content","charCodeAt","inherits","superConstructor","props","defineProperty","value","assign","toFlatObject","sourceObj","destObj","filter","propFilter","merged","endsWith","searchString","position","String","lastIndex","indexOf","toArray","arr","forEachEntry","_iterator","next","done","pair","matchAll","regExp","matches","exec","hasOwnProp","freezeMethods","enumerable","writable","set","Error","toObjectSet","arrayOrString","delimiter","define","split","toCamelCase","m","p1","p2","toUpperCase","noop","toFiniteNumber","defaultValue","Number","isFinite","isSpecCompliantForm","toJSONObject","stack","visit","target","reducedValue","isThenable","then","isIterable","AxiosError","message","code","config","request","response","captureStackTrace","status","utils","toJSON","description","number","fileName","lineNumber","columnNumber","from","error","customProps","axiosError","cause","isVisitable","removeBrackets","renderKey","path","dots","join","predicates","test","toFormData","formData","options","TypeError","metaTokens","indexes","option","visitor","defaultVisitor","useBlob","Blob","convertValue","toISOString","Buffer","JSON","stringify","some","isFlatArray","el","index","exposedHelpers","build","pop","encode","charMap","encodeURIComponent","match","AxiosURLSearchParams","params","_pairs","buildURL","url","_encode","serialize","serializedParams","serializeFn","hashmarkIndex","encoder","InterceptorManager$1","InterceptorManager","_classCallCheck","handlers","_createClass","fulfilled","rejected","synchronous","runWhen","id","h","transitionalDefaults","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","platform$1","isBrowser","classes","URLSearchParams","protocols","hasBrowserEnv","document","_navigator","navigator","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","location","href","_objectSpread","platform","formDataToJSON","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","defaults","transitional","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","env","rawValue","parser","parse","e","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","Accept","method","defaults$1","ignoreDuplicateOf","$internals","normalizeHeader","header","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","_Symbol$iterator","_Symbol$toStringTag","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","rawHeaders","parsed","line","substring","parseHeaders","dest","_step","_createForOfIteratorHelper","s","n","entry","_toConsumableArray","err","f","tokens","tokensRE","parseTokens","matcher","deleted","deleteHeader","format","normalized","w","char","formatHeader","_this$constructor","_len","targets","asStrings","get","first","computed","_len2","_key2","accessors","defineAccessor","accessorName","methodName","arg1","arg2","arg3","configurable","buildAccessors","accessor","mapped","headerValue","AxiosHeaders$1","transformData","fns","normalize","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","resolve","reject","ERR_BAD_REQUEST","floor","speedometer","samplesCount","min","firstSampleTS","bytes","timestamps","head","tail","chunkLength","now","Date","startedAt","bytesCount","passed","round","throttle","freq","lastArgs","timer","timestamp","threshold","invoke","args","clearTimeout","progressEventReducer","listener","isDownloadStream","bytesNotified","_speedometer","loaded","total","lengthComputable","progressBytes","rate","_defineProperty","progress","estimated","event","progressEventDecorator","throttled","asyncDecorator","isMSIE","URL","protocol","host","port","userAgent","write","expires","domain","secure","cookie","toGMTString","read","RegExp","decodeURIComponent","remove","buildFullPath","baseURL","requestedURL","allowAbsoluteUrls","isRelativeUrl","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","res","resolveConfig","newConfig","auth","btoa","username","password","unescape","Boolean","isURLSameOrigin","xsrfValue","cookies","xhrAdapter","XMLHttpRequest","Promise","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","_config","requestData","requestHeaders","unsubscribe","signal","removeEventListener","onloadend","responseHeaders","getAllResponseHeaders","responseText","statusText","open","onreadystatechange","readyState","responseURL","onabort","ECONNABORTED","onerror","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","_progressEventReducer2","upload","_progressEventReducer4","cancel","abort","subscribe","aborted","send","composeSignals$1","signals","controller","AbortController","reason","streamChunk","_regeneratorRuntime","mark","chunk","chunkSize","pos","end","wrap","_context","prev","byteLength","abrupt","stop","readBytes","_wrapAsyncGenerator","_callee","iterable","_iteratorAbruptCompletion","_didIteratorError","_iteratorError","_context2","_asyncIterator","readStream","_awaitAsyncGenerator","sent","delegateYield","_asyncGeneratorDelegate","t1","finish","_x","_x2","_callee2","stream","reader","_yield$_awaitAsyncGen","_context3","asyncIterator","getReader","_x3","trackStream","onProgress","onFinish","_onFinish","ReadableStream","pull","_asyncToGenerator","_callee3","_yield$iterator$next","_done","loadedBytes","_context4","close","enqueue","t0","highWaterMark","isFetchSupported","fetch","Request","Response","isReadableStreamSupported","encodeText","TextEncoder","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","body","duplex","has","supportsResponseStream","resolvers","_","ERR_NOT_SUPPORT","getBodyLength","_request","size","resolveBodyLength","getContentLength","_x4","_callee4","_resolveConfig","_resolveConfig$withCr","fetchOptions","composedSignal","requestContentLength","contentTypeHeader","_progressEventDecorat","_progressEventDecorat2","flush","isCredentialsSupported","isStreamResponse","responseContentLength","_ref6","_onProgress","_flush","responseData","composeSignals","toAbortSignal","credentials","t2","_x5","knownAdapters","http","xhr","fetchAdapter","renderReason","isResolvedHandle","adapters","nameOrAdapter","rejectedReasons","reasons","state","throwIfCancellationRequested","throwIfRequested","dispatchRequest","VERSION","validators","deprecatedWarnings","validators$1","validator","version","formatMessage","opt","desc","opts","ERR_DEPRECATED","console","warn","spelling","correctSpelling","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","_request2","configOrUrl","dummy","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","unshift","promise","responseInterceptorChain","chain","onFulfilled","onRejected","generateHTTPMethod","isForm","Axios$1","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","splice","_this","c","CancelToken$1","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","HttpStatusCode$1","axios","createInstance","defaultConfig","instance","Cancel","all","promises","spread","callback","isAxiosError","payload","formToJSON","getAdapter"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/axios/dist/browser/axios.cjs b/node_modules/axios/dist/browser/axios.cjs new file mode 100644 index 0000000..033e388 --- /dev/null +++ b/node_modules/axios/dist/browser/axios.cjs @@ -0,0 +1,3726 @@ +/*! Axios v1.9.0 Copyright (c) 2025 Matt Zabriskie and contributors */ +'use strict'; + +function bind(fn, thisArg) { + return function wrap() { + return fn.apply(thisArg, arguments); + }; +} + +// utils is a library of generic helper functions non-specific to axios + +const {toString} = Object.prototype; +const {getPrototypeOf} = Object; +const {iterator, toStringTag} = Symbol; + +const kindOf = (cache => thing => { + const str = toString.call(thing); + return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); +})(Object.create(null)); + +const kindOfTest = (type) => { + type = type.toLowerCase(); + return (thing) => kindOf(thing) === type +}; + +const typeOfTest = type => thing => typeof thing === type; + +/** + * Determine if a value is an Array + * + * @param {Object} val The value to test + * + * @returns {boolean} True if value is an Array, otherwise false + */ +const {isArray} = Array; + +/** + * Determine if a value is undefined + * + * @param {*} val The value to test + * + * @returns {boolean} True if the value is undefined, otherwise false + */ +const isUndefined = typeOfTest('undefined'); + +/** + * Determine if a value is a Buffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Buffer, otherwise false + */ +function isBuffer(val) { + return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) + && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val); +} + +/** + * Determine if a value is an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ +const isArrayBuffer = kindOfTest('ArrayBuffer'); + + +/** + * Determine if a value is a view on an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ +function isArrayBufferView(val) { + let result; + if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { + result = ArrayBuffer.isView(val); + } else { + result = (val) && (val.buffer) && (isArrayBuffer(val.buffer)); + } + return result; +} + +/** + * Determine if a value is a String + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a String, otherwise false + */ +const isString = typeOfTest('string'); + +/** + * Determine if a value is a Function + * + * @param {*} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ +const isFunction = typeOfTest('function'); + +/** + * Determine if a value is a Number + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Number, otherwise false + */ +const isNumber = typeOfTest('number'); + +/** + * Determine if a value is an Object + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an Object, otherwise false + */ +const isObject = (thing) => thing !== null && typeof thing === 'object'; + +/** + * Determine if a value is a Boolean + * + * @param {*} thing The value to test + * @returns {boolean} True if value is a Boolean, otherwise false + */ +const isBoolean = thing => thing === true || thing === false; + +/** + * Determine if a value is a plain Object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a plain Object, otherwise false + */ +const isPlainObject = (val) => { + if (kindOf(val) !== 'object') { + return false; + } + + const prototype = getPrototypeOf(val); + return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val); +}; + +/** + * Determine if a value is a Date + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Date, otherwise false + */ +const isDate = kindOfTest('Date'); + +/** + * Determine if a value is a File + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ +const isFile = kindOfTest('File'); + +/** + * Determine if a value is a Blob + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Blob, otherwise false + */ +const isBlob = kindOfTest('Blob'); + +/** + * Determine if a value is a FileList + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ +const isFileList = kindOfTest('FileList'); + +/** + * Determine if a value is a Stream + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Stream, otherwise false + */ +const isStream = (val) => isObject(val) && isFunction(val.pipe); + +/** + * Determine if a value is a FormData + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an FormData, otherwise false + */ +const isFormData = (thing) => { + let kind; + return thing && ( + (typeof FormData === 'function' && thing instanceof FormData) || ( + isFunction(thing.append) && ( + (kind = kindOf(thing)) === 'formdata' || + // detect form-data instance + (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]') + ) + ) + ) +}; + +/** + * Determine if a value is a URLSearchParams object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ +const isURLSearchParams = kindOfTest('URLSearchParams'); + +const [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest); + +/** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * + * @returns {String} The String freed of excess whitespace + */ +const trim = (str) => str.trim ? + str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + +/** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + * + * @param {Boolean} [allOwnKeys = false] + * @returns {any} + */ +function forEach(obj, fn, {allOwnKeys = false} = {}) { + // Don't bother if no value provided + if (obj === null || typeof obj === 'undefined') { + return; + } + + let i; + let l; + + // Force an array if not already something iterable + if (typeof obj !== 'object') { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + + if (isArray(obj)) { + // Iterate over array values + for (i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Iterate over object keys + const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); + const len = keys.length; + let key; + + for (i = 0; i < len; i++) { + key = keys[i]; + fn.call(null, obj[key], key, obj); + } + } +} + +function findKey(obj, key) { + key = key.toLowerCase(); + const keys = Object.keys(obj); + let i = keys.length; + let _key; + while (i-- > 0) { + _key = keys[i]; + if (key === _key.toLowerCase()) { + return _key; + } + } + return null; +} + +const _global = (() => { + /*eslint no-undef:0*/ + if (typeof globalThis !== "undefined") return globalThis; + return typeof self !== "undefined" ? self : (typeof window !== 'undefined' ? window : global) +})(); + +const isContextDefined = (context) => !isUndefined(context) && context !== _global; + +/** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * var result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * + * @returns {Object} Result of all merge properties + */ +function merge(/* obj1, obj2, obj3, ... */) { + const {caseless} = isContextDefined(this) && this || {}; + const result = {}; + const assignValue = (val, key) => { + const targetKey = caseless && findKey(result, key) || key; + if (isPlainObject(result[targetKey]) && isPlainObject(val)) { + result[targetKey] = merge(result[targetKey], val); + } else if (isPlainObject(val)) { + result[targetKey] = merge({}, val); + } else if (isArray(val)) { + result[targetKey] = val.slice(); + } else { + result[targetKey] = val; + } + }; + + for (let i = 0, l = arguments.length; i < l; i++) { + arguments[i] && forEach(arguments[i], assignValue); + } + return result; +} + +/** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * + * @param {Boolean} [allOwnKeys] + * @returns {Object} The resulting value of object a + */ +const extend = (a, b, thisArg, {allOwnKeys}= {}) => { + forEach(b, (val, key) => { + if (thisArg && isFunction(val)) { + a[key] = bind(val, thisArg); + } else { + a[key] = val; + } + }, {allOwnKeys}); + return a; +}; + +/** + * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + * + * @param {string} content with BOM + * + * @returns {string} content value without BOM + */ +const stripBOM = (content) => { + if (content.charCodeAt(0) === 0xFEFF) { + content = content.slice(1); + } + return content; +}; + +/** + * Inherit the prototype methods from one constructor into another + * @param {function} constructor + * @param {function} superConstructor + * @param {object} [props] + * @param {object} [descriptors] + * + * @returns {void} + */ +const inherits = (constructor, superConstructor, props, descriptors) => { + constructor.prototype = Object.create(superConstructor.prototype, descriptors); + constructor.prototype.constructor = constructor; + Object.defineProperty(constructor, 'super', { + value: superConstructor.prototype + }); + props && Object.assign(constructor.prototype, props); +}; + +/** + * Resolve object with deep prototype chain to a flat object + * @param {Object} sourceObj source object + * @param {Object} [destObj] + * @param {Function|Boolean} [filter] + * @param {Function} [propFilter] + * + * @returns {Object} + */ +const toFlatObject = (sourceObj, destObj, filter, propFilter) => { + let props; + let i; + let prop; + const merged = {}; + + destObj = destObj || {}; + // eslint-disable-next-line no-eq-null,eqeqeq + if (sourceObj == null) return destObj; + + do { + props = Object.getOwnPropertyNames(sourceObj); + i = props.length; + while (i-- > 0) { + prop = props[i]; + if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) { + destObj[prop] = sourceObj[prop]; + merged[prop] = true; + } + } + sourceObj = filter !== false && getPrototypeOf(sourceObj); + } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype); + + return destObj; +}; + +/** + * Determines whether a string ends with the characters of a specified string + * + * @param {String} str + * @param {String} searchString + * @param {Number} [position= 0] + * + * @returns {boolean} + */ +const endsWith = (str, searchString, position) => { + str = String(str); + if (position === undefined || position > str.length) { + position = str.length; + } + position -= searchString.length; + const lastIndex = str.indexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; +}; + + +/** + * Returns new array from array like object or null if failed + * + * @param {*} [thing] + * + * @returns {?Array} + */ +const toArray = (thing) => { + if (!thing) return null; + if (isArray(thing)) return thing; + let i = thing.length; + if (!isNumber(i)) return null; + const arr = new Array(i); + while (i-- > 0) { + arr[i] = thing[i]; + } + return arr; +}; + +/** + * Checking if the Uint8Array exists and if it does, it returns a function that checks if the + * thing passed in is an instance of Uint8Array + * + * @param {TypedArray} + * + * @returns {Array} + */ +// eslint-disable-next-line func-names +const isTypedArray = (TypedArray => { + // eslint-disable-next-line func-names + return thing => { + return TypedArray && thing instanceof TypedArray; + }; +})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array)); + +/** + * For each entry in the object, call the function with the key and value. + * + * @param {Object} obj - The object to iterate over. + * @param {Function} fn - The function to call for each entry. + * + * @returns {void} + */ +const forEachEntry = (obj, fn) => { + const generator = obj && obj[iterator]; + + const _iterator = generator.call(obj); + + let result; + + while ((result = _iterator.next()) && !result.done) { + const pair = result.value; + fn.call(obj, pair[0], pair[1]); + } +}; + +/** + * It takes a regular expression and a string, and returns an array of all the matches + * + * @param {string} regExp - The regular expression to match against. + * @param {string} str - The string to search. + * + * @returns {Array} + */ +const matchAll = (regExp, str) => { + let matches; + const arr = []; + + while ((matches = regExp.exec(str)) !== null) { + arr.push(matches); + } + + return arr; +}; + +/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */ +const isHTMLForm = kindOfTest('HTMLFormElement'); + +const toCamelCase = str => { + return str.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g, + function replacer(m, p1, p2) { + return p1.toUpperCase() + p2; + } + ); +}; + +/* Creating a function that will check if an object has a property. */ +const hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype); + +/** + * Determine if a value is a RegExp object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a RegExp object, otherwise false + */ +const isRegExp = kindOfTest('RegExp'); + +const reduceDescriptors = (obj, reducer) => { + const descriptors = Object.getOwnPropertyDescriptors(obj); + const reducedDescriptors = {}; + + forEach(descriptors, (descriptor, name) => { + let ret; + if ((ret = reducer(descriptor, name, obj)) !== false) { + reducedDescriptors[name] = ret || descriptor; + } + }); + + Object.defineProperties(obj, reducedDescriptors); +}; + +/** + * Makes all methods read-only + * @param {Object} obj + */ + +const freezeMethods = (obj) => { + reduceDescriptors(obj, (descriptor, name) => { + // skip restricted props in strict mode + if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) { + return false; + } + + const value = obj[name]; + + if (!isFunction(value)) return; + + descriptor.enumerable = false; + + if ('writable' in descriptor) { + descriptor.writable = false; + return; + } + + if (!descriptor.set) { + descriptor.set = () => { + throw Error('Can not rewrite read-only method \'' + name + '\''); + }; + } + }); +}; + +const toObjectSet = (arrayOrString, delimiter) => { + const obj = {}; + + const define = (arr) => { + arr.forEach(value => { + obj[value] = true; + }); + }; + + isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter)); + + return obj; +}; + +const noop = () => {}; + +const toFiniteNumber = (value, defaultValue) => { + return value != null && Number.isFinite(value = +value) ? value : defaultValue; +}; + +/** + * If the thing is a FormData object, return true, otherwise return false. + * + * @param {unknown} thing - The thing to check. + * + * @returns {boolean} + */ +function isSpecCompliantForm(thing) { + return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]); +} + +const toJSONObject = (obj) => { + const stack = new Array(10); + + const visit = (source, i) => { + + if (isObject(source)) { + if (stack.indexOf(source) >= 0) { + return; + } + + if(!('toJSON' in source)) { + stack[i] = source; + const target = isArray(source) ? [] : {}; + + forEach(source, (value, key) => { + const reducedValue = visit(value, i + 1); + !isUndefined(reducedValue) && (target[key] = reducedValue); + }); + + stack[i] = undefined; + + return target; + } + } + + return source; + }; + + return visit(obj, 0); +}; + +const isAsyncFn = kindOfTest('AsyncFunction'); + +const isThenable = (thing) => + thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch); + +// original code +// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34 + +const _setImmediate = ((setImmediateSupported, postMessageSupported) => { + if (setImmediateSupported) { + return setImmediate; + } + + return postMessageSupported ? ((token, callbacks) => { + _global.addEventListener("message", ({source, data}) => { + if (source === _global && data === token) { + callbacks.length && callbacks.shift()(); + } + }, false); + + return (cb) => { + callbacks.push(cb); + _global.postMessage(token, "*"); + } + })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb); +})( + typeof setImmediate === 'function', + isFunction(_global.postMessage) +); + +const asap = typeof queueMicrotask !== 'undefined' ? + queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate); + +// ********************* + + +const isIterable = (thing) => thing != null && isFunction(thing[iterator]); + + +var utils$1 = { + isArray, + isArrayBuffer, + isBuffer, + isFormData, + isArrayBufferView, + isString, + isNumber, + isBoolean, + isObject, + isPlainObject, + isReadableStream, + isRequest, + isResponse, + isHeaders, + isUndefined, + isDate, + isFile, + isBlob, + isRegExp, + isFunction, + isStream, + isURLSearchParams, + isTypedArray, + isFileList, + forEach, + merge, + extend, + trim, + stripBOM, + inherits, + toFlatObject, + kindOf, + kindOfTest, + endsWith, + toArray, + forEachEntry, + matchAll, + isHTMLForm, + hasOwnProperty, + hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection + reduceDescriptors, + freezeMethods, + toObjectSet, + toCamelCase, + noop, + toFiniteNumber, + findKey, + global: _global, + isContextDefined, + isSpecCompliantForm, + toJSONObject, + isAsyncFn, + isThenable, + setImmediate: _setImmediate, + asap, + isIterable +}; + +/** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [config] The config. + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * + * @returns {Error} The created error. + */ +function AxiosError(message, code, config, request, response) { + Error.call(this); + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + this.stack = (new Error()).stack; + } + + this.message = message; + this.name = 'AxiosError'; + code && (this.code = code); + config && (this.config = config); + request && (this.request = request); + if (response) { + this.response = response; + this.status = response.status ? response.status : null; + } +} + +utils$1.inherits(AxiosError, Error, { + toJSON: function toJSON() { + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: utils$1.toJSONObject(this.config), + code: this.code, + status: this.status + }; + } +}); + +const prototype$1 = AxiosError.prototype; +const descriptors = {}; + +[ + 'ERR_BAD_OPTION_VALUE', + 'ERR_BAD_OPTION', + 'ECONNABORTED', + 'ETIMEDOUT', + 'ERR_NETWORK', + 'ERR_FR_TOO_MANY_REDIRECTS', + 'ERR_DEPRECATED', + 'ERR_BAD_RESPONSE', + 'ERR_BAD_REQUEST', + 'ERR_CANCELED', + 'ERR_NOT_SUPPORT', + 'ERR_INVALID_URL' +// eslint-disable-next-line func-names +].forEach(code => { + descriptors[code] = {value: code}; +}); + +Object.defineProperties(AxiosError, descriptors); +Object.defineProperty(prototype$1, 'isAxiosError', {value: true}); + +// eslint-disable-next-line func-names +AxiosError.from = (error, code, config, request, response, customProps) => { + const axiosError = Object.create(prototype$1); + + utils$1.toFlatObject(error, axiosError, function filter(obj) { + return obj !== Error.prototype; + }, prop => { + return prop !== 'isAxiosError'; + }); + + AxiosError.call(axiosError, error.message, code, config, request, response); + + axiosError.cause = error; + + axiosError.name = error.name; + + customProps && Object.assign(axiosError, customProps); + + return axiosError; +}; + +// eslint-disable-next-line strict +var httpAdapter = null; + +/** + * Determines if the given thing is a array or js object. + * + * @param {string} thing - The object or array to be visited. + * + * @returns {boolean} + */ +function isVisitable(thing) { + return utils$1.isPlainObject(thing) || utils$1.isArray(thing); +} + +/** + * It removes the brackets from the end of a string + * + * @param {string} key - The key of the parameter. + * + * @returns {string} the key without the brackets. + */ +function removeBrackets(key) { + return utils$1.endsWith(key, '[]') ? key.slice(0, -2) : key; +} + +/** + * It takes a path, a key, and a boolean, and returns a string + * + * @param {string} path - The path to the current key. + * @param {string} key - The key of the current object being iterated over. + * @param {string} dots - If true, the key will be rendered with dots instead of brackets. + * + * @returns {string} The path to the current key. + */ +function renderKey(path, key, dots) { + if (!path) return key; + return path.concat(key).map(function each(token, i) { + // eslint-disable-next-line no-param-reassign + token = removeBrackets(token); + return !dots && i ? '[' + token + ']' : token; + }).join(dots ? '.' : ''); +} + +/** + * If the array is an array and none of its elements are visitable, then it's a flat array. + * + * @param {Array} arr - The array to check + * + * @returns {boolean} + */ +function isFlatArray(arr) { + return utils$1.isArray(arr) && !arr.some(isVisitable); +} + +const predicates = utils$1.toFlatObject(utils$1, {}, null, function filter(prop) { + return /^is[A-Z]/.test(prop); +}); + +/** + * Convert a data object to FormData + * + * @param {Object} obj + * @param {?Object} [formData] + * @param {?Object} [options] + * @param {Function} [options.visitor] + * @param {Boolean} [options.metaTokens = true] + * @param {Boolean} [options.dots = false] + * @param {?Boolean} [options.indexes = false] + * + * @returns {Object} + **/ + +/** + * It converts an object into a FormData object + * + * @param {Object} obj - The object to convert to form data. + * @param {string} formData - The FormData object to append to. + * @param {Object} options + * + * @returns + */ +function toFormData(obj, formData, options) { + if (!utils$1.isObject(obj)) { + throw new TypeError('target must be an object'); + } + + // eslint-disable-next-line no-param-reassign + formData = formData || new (FormData)(); + + // eslint-disable-next-line no-param-reassign + options = utils$1.toFlatObject(options, { + metaTokens: true, + dots: false, + indexes: false + }, false, function defined(option, source) { + // eslint-disable-next-line no-eq-null,eqeqeq + return !utils$1.isUndefined(source[option]); + }); + + const metaTokens = options.metaTokens; + // eslint-disable-next-line no-use-before-define + const visitor = options.visitor || defaultVisitor; + const dots = options.dots; + const indexes = options.indexes; + const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob; + const useBlob = _Blob && utils$1.isSpecCompliantForm(formData); + + if (!utils$1.isFunction(visitor)) { + throw new TypeError('visitor must be a function'); + } + + function convertValue(value) { + if (value === null) return ''; + + if (utils$1.isDate(value)) { + return value.toISOString(); + } + + if (!useBlob && utils$1.isBlob(value)) { + throw new AxiosError('Blob is not supported. Use a Buffer instead.'); + } + + if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) { + return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); + } + + return value; + } + + /** + * Default visitor. + * + * @param {*} value + * @param {String|Number} key + * @param {Array} path + * @this {FormData} + * + * @returns {boolean} return true to visit the each prop of the value recursively + */ + function defaultVisitor(value, key, path) { + let arr = value; + + if (value && !path && typeof value === 'object') { + if (utils$1.endsWith(key, '{}')) { + // eslint-disable-next-line no-param-reassign + key = metaTokens ? key : key.slice(0, -2); + // eslint-disable-next-line no-param-reassign + value = JSON.stringify(value); + } else if ( + (utils$1.isArray(value) && isFlatArray(value)) || + ((utils$1.isFileList(value) || utils$1.endsWith(key, '[]')) && (arr = utils$1.toArray(value)) + )) { + // eslint-disable-next-line no-param-reassign + key = removeBrackets(key); + + arr.forEach(function each(el, index) { + !(utils$1.isUndefined(el) || el === null) && formData.append( + // eslint-disable-next-line no-nested-ternary + indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'), + convertValue(el) + ); + }); + return false; + } + } + + if (isVisitable(value)) { + return true; + } + + formData.append(renderKey(path, key, dots), convertValue(value)); + + return false; + } + + const stack = []; + + const exposedHelpers = Object.assign(predicates, { + defaultVisitor, + convertValue, + isVisitable + }); + + function build(value, path) { + if (utils$1.isUndefined(value)) return; + + if (stack.indexOf(value) !== -1) { + throw Error('Circular reference detected in ' + path.join('.')); + } + + stack.push(value); + + utils$1.forEach(value, function each(el, key) { + const result = !(utils$1.isUndefined(el) || el === null) && visitor.call( + formData, el, utils$1.isString(key) ? key.trim() : key, path, exposedHelpers + ); + + if (result === true) { + build(el, path ? path.concat(key) : [key]); + } + }); + + stack.pop(); + } + + if (!utils$1.isObject(obj)) { + throw new TypeError('data must be an object'); + } + + build(obj); + + return formData; +} + +/** + * It encodes a string by replacing all characters that are not in the unreserved set with + * their percent-encoded equivalents + * + * @param {string} str - The string to encode. + * + * @returns {string} The encoded string. + */ +function encode$1(str) { + const charMap = { + '!': '%21', + "'": '%27', + '(': '%28', + ')': '%29', + '~': '%7E', + '%20': '+', + '%00': '\x00' + }; + return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) { + return charMap[match]; + }); +} + +/** + * It takes a params object and converts it to a FormData object + * + * @param {Object} params - The parameters to be converted to a FormData object. + * @param {Object} options - The options object passed to the Axios constructor. + * + * @returns {void} + */ +function AxiosURLSearchParams(params, options) { + this._pairs = []; + + params && toFormData(params, this, options); +} + +const prototype = AxiosURLSearchParams.prototype; + +prototype.append = function append(name, value) { + this._pairs.push([name, value]); +}; + +prototype.toString = function toString(encoder) { + const _encode = encoder ? function(value) { + return encoder.call(this, value, encode$1); + } : encode$1; + + return this._pairs.map(function each(pair) { + return _encode(pair[0]) + '=' + _encode(pair[1]); + }, '').join('&'); +}; + +/** + * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their + * URI encoded counterparts + * + * @param {string} val The value to be encoded. + * + * @returns {string} The encoded value. + */ +function encode(val) { + return encodeURIComponent(val). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, '+'). + replace(/%5B/gi, '['). + replace(/%5D/gi, ']'); +} + +/** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @param {?(object|Function)} options + * + * @returns {string} The formatted url + */ +function buildURL(url, params, options) { + /*eslint no-param-reassign:0*/ + if (!params) { + return url; + } + + const _encode = options && options.encode || encode; + + if (utils$1.isFunction(options)) { + options = { + serialize: options + }; + } + + const serializeFn = options && options.serialize; + + let serializedParams; + + if (serializeFn) { + serializedParams = serializeFn(params, options); + } else { + serializedParams = utils$1.isURLSearchParams(params) ? + params.toString() : + new AxiosURLSearchParams(params, options).toString(_encode); + } + + if (serializedParams) { + const hashmarkIndex = url.indexOf("#"); + + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex); + } + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; +} + +class InterceptorManager { + constructor() { + this.handlers = []; + } + + /** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * + * @return {Number} An ID used to remove interceptor later + */ + use(fulfilled, rejected, options) { + this.handlers.push({ + fulfilled, + rejected, + synchronous: options ? options.synchronous : false, + runWhen: options ? options.runWhen : null + }); + return this.handlers.length - 1; + } + + /** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + * + * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise + */ + eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } + } + + /** + * Clear all interceptors from the stack + * + * @returns {void} + */ + clear() { + if (this.handlers) { + this.handlers = []; + } + } + + /** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + * + * @returns {void} + */ + forEach(fn) { + utils$1.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); + } +} + +var InterceptorManager$1 = InterceptorManager; + +var transitionalDefaults = { + silentJSONParsing: true, + forcedJSONParsing: true, + clarifyTimeoutError: false +}; + +var URLSearchParams$1 = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams; + +var FormData$1 = typeof FormData !== 'undefined' ? FormData : null; + +var Blob$1 = typeof Blob !== 'undefined' ? Blob : null; + +var platform$1 = { + isBrowser: true, + classes: { + URLSearchParams: URLSearchParams$1, + FormData: FormData$1, + Blob: Blob$1 + }, + protocols: ['http', 'https', 'file', 'blob', 'url', 'data'] +}; + +const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined'; + +const _navigator = typeof navigator === 'object' && navigator || undefined; + +/** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + * + * @returns {boolean} + */ +const hasStandardBrowserEnv = hasBrowserEnv && + (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0); + +/** + * Determine if we're running in a standard browser webWorker environment + * + * Although the `isStandardBrowserEnv` method indicates that + * `allows axios to run in a web worker`, the WebWorker will still be + * filtered out due to its judgment standard + * `typeof window !== 'undefined' && typeof document !== 'undefined'`. + * This leads to a problem when axios post `FormData` in webWorker + */ +const hasStandardBrowserWebWorkerEnv = (() => { + return ( + typeof WorkerGlobalScope !== 'undefined' && + // eslint-disable-next-line no-undef + self instanceof WorkerGlobalScope && + typeof self.importScripts === 'function' + ); +})(); + +const origin = hasBrowserEnv && window.location.href || 'http://localhost'; + +var utils = /*#__PURE__*/Object.freeze({ + __proto__: null, + hasBrowserEnv: hasBrowserEnv, + hasStandardBrowserWebWorkerEnv: hasStandardBrowserWebWorkerEnv, + hasStandardBrowserEnv: hasStandardBrowserEnv, + navigator: _navigator, + origin: origin +}); + +var platform = { + ...utils, + ...platform$1 +}; + +function toURLEncodedForm(data, options) { + return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({ + visitor: function(value, key, path, helpers) { + if (platform.isNode && utils$1.isBuffer(value)) { + this.append(key, value.toString('base64')); + return false; + } + + return helpers.defaultVisitor.apply(this, arguments); + } + }, options)); +} + +/** + * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z'] + * + * @param {string} name - The name of the property to get. + * + * @returns An array of strings. + */ +function parsePropPath(name) { + // foo[x][y][z] + // foo.x.y.z + // foo-x-y-z + // foo x y z + return utils$1.matchAll(/\w+|\[(\w*)]/g, name).map(match => { + return match[0] === '[]' ? '' : match[1] || match[0]; + }); +} + +/** + * Convert an array to an object. + * + * @param {Array} arr - The array to convert to an object. + * + * @returns An object with the same keys and values as the array. + */ +function arrayToObject(arr) { + const obj = {}; + const keys = Object.keys(arr); + let i; + const len = keys.length; + let key; + for (i = 0; i < len; i++) { + key = keys[i]; + obj[key] = arr[key]; + } + return obj; +} + +/** + * It takes a FormData object and returns a JavaScript object + * + * @param {string} formData The FormData object to convert to JSON. + * + * @returns {Object | null} The converted object. + */ +function formDataToJSON(formData) { + function buildPath(path, value, target, index) { + let name = path[index++]; + + if (name === '__proto__') return true; + + const isNumericKey = Number.isFinite(+name); + const isLast = index >= path.length; + name = !name && utils$1.isArray(target) ? target.length : name; + + if (isLast) { + if (utils$1.hasOwnProp(target, name)) { + target[name] = [target[name], value]; + } else { + target[name] = value; + } + + return !isNumericKey; + } + + if (!target[name] || !utils$1.isObject(target[name])) { + target[name] = []; + } + + const result = buildPath(path, value, target[name], index); + + if (result && utils$1.isArray(target[name])) { + target[name] = arrayToObject(target[name]); + } + + return !isNumericKey; + } + + if (utils$1.isFormData(formData) && utils$1.isFunction(formData.entries)) { + const obj = {}; + + utils$1.forEachEntry(formData, (name, value) => { + buildPath(parsePropPath(name), value, obj, 0); + }); + + return obj; + } + + return null; +} + +/** + * It takes a string, tries to parse it, and if it fails, it returns the stringified version + * of the input + * + * @param {any} rawValue - The value to be stringified. + * @param {Function} parser - A function that parses a string into a JavaScript object. + * @param {Function} encoder - A function that takes a value and returns a string. + * + * @returns {string} A stringified version of the rawValue. + */ +function stringifySafely(rawValue, parser, encoder) { + if (utils$1.isString(rawValue)) { + try { + (parser || JSON.parse)(rawValue); + return utils$1.trim(rawValue); + } catch (e) { + if (e.name !== 'SyntaxError') { + throw e; + } + } + } + + return (encoder || JSON.stringify)(rawValue); +} + +const defaults = { + + transitional: transitionalDefaults, + + adapter: ['xhr', 'http', 'fetch'], + + transformRequest: [function transformRequest(data, headers) { + const contentType = headers.getContentType() || ''; + const hasJSONContentType = contentType.indexOf('application/json') > -1; + const isObjectPayload = utils$1.isObject(data); + + if (isObjectPayload && utils$1.isHTMLForm(data)) { + data = new FormData(data); + } + + const isFormData = utils$1.isFormData(data); + + if (isFormData) { + return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data; + } + + if (utils$1.isArrayBuffer(data) || + utils$1.isBuffer(data) || + utils$1.isStream(data) || + utils$1.isFile(data) || + utils$1.isBlob(data) || + utils$1.isReadableStream(data) + ) { + return data; + } + if (utils$1.isArrayBufferView(data)) { + return data.buffer; + } + if (utils$1.isURLSearchParams(data)) { + headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false); + return data.toString(); + } + + let isFileList; + + if (isObjectPayload) { + if (contentType.indexOf('application/x-www-form-urlencoded') > -1) { + return toURLEncodedForm(data, this.formSerializer).toString(); + } + + if ((isFileList = utils$1.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { + const _FormData = this.env && this.env.FormData; + + return toFormData( + isFileList ? {'files[]': data} : data, + _FormData && new _FormData(), + this.formSerializer + ); + } + } + + if (isObjectPayload || hasJSONContentType ) { + headers.setContentType('application/json', false); + return stringifySafely(data); + } + + return data; + }], + + transformResponse: [function transformResponse(data) { + const transitional = this.transitional || defaults.transitional; + const forcedJSONParsing = transitional && transitional.forcedJSONParsing; + const JSONRequested = this.responseType === 'json'; + + if (utils$1.isResponse(data) || utils$1.isReadableStream(data)) { + return data; + } + + if (data && utils$1.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) { + const silentJSONParsing = transitional && transitional.silentJSONParsing; + const strictJSONParsing = !silentJSONParsing && JSONRequested; + + try { + return JSON.parse(data); + } catch (e) { + if (strictJSONParsing) { + if (e.name === 'SyntaxError') { + throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response); + } + throw e; + } + } + } + + return data; + }], + + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + maxBodyLength: -1, + + env: { + FormData: platform.classes.FormData, + Blob: platform.classes.Blob + }, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + }, + + headers: { + common: { + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': undefined + } + } +}; + +utils$1.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => { + defaults.headers[method] = {}; +}); + +var defaults$1 = defaults; + +// RawAxiosHeaders whose duplicates are ignored by node +// c.f. https://nodejs.org/api/http.html#http_message_headers +const ignoreDuplicateOf = utils$1.toObjectSet([ + 'age', 'authorization', 'content-length', 'content-type', 'etag', + 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', + 'last-modified', 'location', 'max-forwards', 'proxy-authorization', + 'referer', 'retry-after', 'user-agent' +]); + +/** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} rawHeaders Headers needing to be parsed + * + * @returns {Object} Headers parsed into an object + */ +var parseHeaders = rawHeaders => { + const parsed = {}; + let key; + let val; + let i; + + rawHeaders && rawHeaders.split('\n').forEach(function parser(line) { + i = line.indexOf(':'); + key = line.substring(0, i).trim().toLowerCase(); + val = line.substring(i + 1).trim(); + + if (!key || (parsed[key] && ignoreDuplicateOf[key])) { + return; + } + + if (key === 'set-cookie') { + if (parsed[key]) { + parsed[key].push(val); + } else { + parsed[key] = [val]; + } + } else { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + }); + + return parsed; +}; + +const $internals = Symbol('internals'); + +function normalizeHeader(header) { + return header && String(header).trim().toLowerCase(); +} + +function normalizeValue(value) { + if (value === false || value == null) { + return value; + } + + return utils$1.isArray(value) ? value.map(normalizeValue) : String(value); +} + +function parseTokens(str) { + const tokens = Object.create(null); + const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g; + let match; + + while ((match = tokensRE.exec(str))) { + tokens[match[1]] = match[2]; + } + + return tokens; +} + +const isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim()); + +function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) { + if (utils$1.isFunction(filter)) { + return filter.call(this, value, header); + } + + if (isHeaderNameFilter) { + value = header; + } + + if (!utils$1.isString(value)) return; + + if (utils$1.isString(filter)) { + return value.indexOf(filter) !== -1; + } + + if (utils$1.isRegExp(filter)) { + return filter.test(value); + } +} + +function formatHeader(header) { + return header.trim() + .toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => { + return char.toUpperCase() + str; + }); +} + +function buildAccessors(obj, header) { + const accessorName = utils$1.toCamelCase(' ' + header); + + ['get', 'set', 'has'].forEach(methodName => { + Object.defineProperty(obj, methodName + accessorName, { + value: function(arg1, arg2, arg3) { + return this[methodName].call(this, header, arg1, arg2, arg3); + }, + configurable: true + }); + }); +} + +class AxiosHeaders { + constructor(headers) { + headers && this.set(headers); + } + + set(header, valueOrRewrite, rewrite) { + const self = this; + + function setHeader(_value, _header, _rewrite) { + const lHeader = normalizeHeader(_header); + + if (!lHeader) { + throw new Error('header name must be a non-empty string'); + } + + const key = utils$1.findKey(self, lHeader); + + if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) { + self[key || _header] = normalizeValue(_value); + } + } + + const setHeaders = (headers, _rewrite) => + utils$1.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite)); + + if (utils$1.isPlainObject(header) || header instanceof this.constructor) { + setHeaders(header, valueOrRewrite); + } else if(utils$1.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { + setHeaders(parseHeaders(header), valueOrRewrite); + } else if (utils$1.isObject(header) && utils$1.isIterable(header)) { + let obj = {}, dest, key; + for (const entry of header) { + if (!utils$1.isArray(entry)) { + throw TypeError('Object iterator must return a key-value pair'); + } + + obj[key = entry[0]] = (dest = obj[key]) ? + (utils$1.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1]; + } + + setHeaders(obj, valueOrRewrite); + } else { + header != null && setHeader(valueOrRewrite, header, rewrite); + } + + return this; + } + + get(header, parser) { + header = normalizeHeader(header); + + if (header) { + const key = utils$1.findKey(this, header); + + if (key) { + const value = this[key]; + + if (!parser) { + return value; + } + + if (parser === true) { + return parseTokens(value); + } + + if (utils$1.isFunction(parser)) { + return parser.call(this, value, key); + } + + if (utils$1.isRegExp(parser)) { + return parser.exec(value); + } + + throw new TypeError('parser must be boolean|regexp|function'); + } + } + } + + has(header, matcher) { + header = normalizeHeader(header); + + if (header) { + const key = utils$1.findKey(this, header); + + return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher))); + } + + return false; + } + + delete(header, matcher) { + const self = this; + let deleted = false; + + function deleteHeader(_header) { + _header = normalizeHeader(_header); + + if (_header) { + const key = utils$1.findKey(self, _header); + + if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) { + delete self[key]; + + deleted = true; + } + } + } + + if (utils$1.isArray(header)) { + header.forEach(deleteHeader); + } else { + deleteHeader(header); + } + + return deleted; + } + + clear(matcher) { + const keys = Object.keys(this); + let i = keys.length; + let deleted = false; + + while (i--) { + const key = keys[i]; + if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) { + delete this[key]; + deleted = true; + } + } + + return deleted; + } + + normalize(format) { + const self = this; + const headers = {}; + + utils$1.forEach(this, (value, header) => { + const key = utils$1.findKey(headers, header); + + if (key) { + self[key] = normalizeValue(value); + delete self[header]; + return; + } + + const normalized = format ? formatHeader(header) : String(header).trim(); + + if (normalized !== header) { + delete self[header]; + } + + self[normalized] = normalizeValue(value); + + headers[normalized] = true; + }); + + return this; + } + + concat(...targets) { + return this.constructor.concat(this, ...targets); + } + + toJSON(asStrings) { + const obj = Object.create(null); + + utils$1.forEach(this, (value, header) => { + value != null && value !== false && (obj[header] = asStrings && utils$1.isArray(value) ? value.join(', ') : value); + }); + + return obj; + } + + [Symbol.iterator]() { + return Object.entries(this.toJSON())[Symbol.iterator](); + } + + toString() { + return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\n'); + } + + getSetCookie() { + return this.get("set-cookie") || []; + } + + get [Symbol.toStringTag]() { + return 'AxiosHeaders'; + } + + static from(thing) { + return thing instanceof this ? thing : new this(thing); + } + + static concat(first, ...targets) { + const computed = new this(first); + + targets.forEach((target) => computed.set(target)); + + return computed; + } + + static accessor(header) { + const internals = this[$internals] = (this[$internals] = { + accessors: {} + }); + + const accessors = internals.accessors; + const prototype = this.prototype; + + function defineAccessor(_header) { + const lHeader = normalizeHeader(_header); + + if (!accessors[lHeader]) { + buildAccessors(prototype, _header); + accessors[lHeader] = true; + } + } + + utils$1.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header); + + return this; + } +} + +AxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']); + +// reserved names hotfix +utils$1.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => { + let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set` + return { + get: () => value, + set(headerValue) { + this[mapped] = headerValue; + } + } +}); + +utils$1.freezeMethods(AxiosHeaders); + +var AxiosHeaders$1 = AxiosHeaders; + +/** + * Transform the data for a request or a response + * + * @param {Array|Function} fns A single function or Array of functions + * @param {?Object} response The response object + * + * @returns {*} The resulting transformed data + */ +function transformData(fns, response) { + const config = this || defaults$1; + const context = response || config; + const headers = AxiosHeaders$1.from(context.headers); + let data = context.data; + + utils$1.forEach(fns, function transform(fn) { + data = fn.call(config, data, headers.normalize(), response ? response.status : undefined); + }); + + headers.normalize(); + + return data; +} + +function isCancel(value) { + return !!(value && value.__CANCEL__); +} + +/** + * A `CanceledError` is an object that is thrown when an operation is canceled. + * + * @param {string=} message The message. + * @param {Object=} config The config. + * @param {Object=} request The request. + * + * @returns {CanceledError} The created error. + */ +function CanceledError(message, config, request) { + // eslint-disable-next-line no-eq-null,eqeqeq + AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request); + this.name = 'CanceledError'; +} + +utils$1.inherits(CanceledError, AxiosError, { + __CANCEL__: true +}); + +/** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + * + * @returns {object} The response. + */ +function settle(resolve, reject, response) { + const validateStatus = response.config.validateStatus; + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(new AxiosError( + 'Request failed with status code ' + response.status, + [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], + response.config, + response.request, + response + )); + } +} + +function parseProtocol(url) { + const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); + return match && match[1] || ''; +} + +/** + * Calculate data maxRate + * @param {Number} [samplesCount= 10] + * @param {Number} [min= 1000] + * @returns {Function} + */ +function speedometer(samplesCount, min) { + samplesCount = samplesCount || 10; + const bytes = new Array(samplesCount); + const timestamps = new Array(samplesCount); + let head = 0; + let tail = 0; + let firstSampleTS; + + min = min !== undefined ? min : 1000; + + return function push(chunkLength) { + const now = Date.now(); + + const startedAt = timestamps[tail]; + + if (!firstSampleTS) { + firstSampleTS = now; + } + + bytes[head] = chunkLength; + timestamps[head] = now; + + let i = tail; + let bytesCount = 0; + + while (i !== head) { + bytesCount += bytes[i++]; + i = i % samplesCount; + } + + head = (head + 1) % samplesCount; + + if (head === tail) { + tail = (tail + 1) % samplesCount; + } + + if (now - firstSampleTS < min) { + return; + } + + const passed = startedAt && now - startedAt; + + return passed ? Math.round(bytesCount * 1000 / passed) : undefined; + }; +} + +/** + * Throttle decorator + * @param {Function} fn + * @param {Number} freq + * @return {Function} + */ +function throttle(fn, freq) { + let timestamp = 0; + let threshold = 1000 / freq; + let lastArgs; + let timer; + + const invoke = (args, now = Date.now()) => { + timestamp = now; + lastArgs = null; + if (timer) { + clearTimeout(timer); + timer = null; + } + fn.apply(null, args); + }; + + const throttled = (...args) => { + const now = Date.now(); + const passed = now - timestamp; + if ( passed >= threshold) { + invoke(args, now); + } else { + lastArgs = args; + if (!timer) { + timer = setTimeout(() => { + timer = null; + invoke(lastArgs); + }, threshold - passed); + } + } + }; + + const flush = () => lastArgs && invoke(lastArgs); + + return [throttled, flush]; +} + +const progressEventReducer = (listener, isDownloadStream, freq = 3) => { + let bytesNotified = 0; + const _speedometer = speedometer(50, 250); + + return throttle(e => { + const loaded = e.loaded; + const total = e.lengthComputable ? e.total : undefined; + const progressBytes = loaded - bytesNotified; + const rate = _speedometer(progressBytes); + const inRange = loaded <= total; + + bytesNotified = loaded; + + const data = { + loaded, + total, + progress: total ? (loaded / total) : undefined, + bytes: progressBytes, + rate: rate ? rate : undefined, + estimated: rate && total && inRange ? (total - loaded) / rate : undefined, + event: e, + lengthComputable: total != null, + [isDownloadStream ? 'download' : 'upload']: true + }; + + listener(data); + }, freq); +}; + +const progressEventDecorator = (total, throttled) => { + const lengthComputable = total != null; + + return [(loaded) => throttled[0]({ + lengthComputable, + total, + loaded + }), throttled[1]]; +}; + +const asyncDecorator = (fn) => (...args) => utils$1.asap(() => fn(...args)); + +var isURLSameOrigin = platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => { + url = new URL(url, platform.origin); + + return ( + origin.protocol === url.protocol && + origin.host === url.host && + (isMSIE || origin.port === url.port) + ); +})( + new URL(platform.origin), + platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent) +) : () => true; + +var cookies = platform.hasStandardBrowserEnv ? + + // Standard browser envs support document.cookie + { + write(name, value, expires, path, domain, secure) { + const cookie = [name + '=' + encodeURIComponent(value)]; + + utils$1.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString()); + + utils$1.isString(path) && cookie.push('path=' + path); + + utils$1.isString(domain) && cookie.push('domain=' + domain); + + secure === true && cookie.push('secure'); + + document.cookie = cookie.join('; '); + }, + + read(name) { + const match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); + return (match ? decodeURIComponent(match[3]) : null); + }, + + remove(name) { + this.write(name, '', Date.now() - 86400000); + } + } + + : + + // Non-standard browser env (web workers, react-native) lack needed support. + { + write() {}, + read() { + return null; + }, + remove() {} + }; + +/** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ +function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); +} + +/** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * + * @returns {string} The combined URL + */ +function combineURLs(baseURL, relativeURL) { + return relativeURL + ? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '') + : baseURL; +} + +/** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * + * @returns {string} The combined full path + */ +function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) { + let isRelativeUrl = !isAbsoluteURL(requestedURL); + if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; +} + +const headersToObject = (thing) => thing instanceof AxiosHeaders$1 ? { ...thing } : thing; + +/** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * + * @returns {Object} New object resulting from merging config2 to config1 + */ +function mergeConfig(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {}; + const config = {}; + + function getMergedValue(target, source, prop, caseless) { + if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) { + return utils$1.merge.call({caseless}, target, source); + } else if (utils$1.isPlainObject(source)) { + return utils$1.merge({}, source); + } else if (utils$1.isArray(source)) { + return source.slice(); + } + return source; + } + + // eslint-disable-next-line consistent-return + function mergeDeepProperties(a, b, prop , caseless) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(a, b, prop , caseless); + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a, prop , caseless); + } + } + + // eslint-disable-next-line consistent-return + function valueFromConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b); + } + } + + // eslint-disable-next-line consistent-return + function defaultToConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b); + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a); + } + } + + // eslint-disable-next-line consistent-return + function mergeDirectKeys(a, b, prop) { + if (prop in config2) { + return getMergedValue(a, b); + } else if (prop in config1) { + return getMergedValue(undefined, a); + } + } + + const mergeMap = { + url: valueFromConfig2, + method: valueFromConfig2, + data: valueFromConfig2, + baseURL: defaultToConfig2, + transformRequest: defaultToConfig2, + transformResponse: defaultToConfig2, + paramsSerializer: defaultToConfig2, + timeout: defaultToConfig2, + timeoutMessage: defaultToConfig2, + withCredentials: defaultToConfig2, + withXSRFToken: defaultToConfig2, + adapter: defaultToConfig2, + responseType: defaultToConfig2, + xsrfCookieName: defaultToConfig2, + xsrfHeaderName: defaultToConfig2, + onUploadProgress: defaultToConfig2, + onDownloadProgress: defaultToConfig2, + decompress: defaultToConfig2, + maxContentLength: defaultToConfig2, + maxBodyLength: defaultToConfig2, + beforeRedirect: defaultToConfig2, + transport: defaultToConfig2, + httpAgent: defaultToConfig2, + httpsAgent: defaultToConfig2, + cancelToken: defaultToConfig2, + socketPath: defaultToConfig2, + responseEncoding: defaultToConfig2, + validateStatus: mergeDirectKeys, + headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true) + }; + + utils$1.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) { + const merge = mergeMap[prop] || mergeDeepProperties; + const configValue = merge(config1[prop], config2[prop], prop); + (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); + }); + + return config; +} + +var resolveConfig = (config) => { + const newConfig = mergeConfig({}, config); + + let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig; + + newConfig.headers = headers = AxiosHeaders$1.from(headers); + + newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer); + + // HTTP basic authentication + if (auth) { + headers.set('Authorization', 'Basic ' + + btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : '')) + ); + } + + let contentType; + + if (utils$1.isFormData(data)) { + if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) { + headers.setContentType(undefined); // Let the browser set it + } else if ((contentType = headers.getContentType()) !== false) { + // fix semicolon duplication issue for ReactNative FormData implementation + const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : []; + headers.setContentType([type || 'multipart/form-data', ...tokens].join('; ')); + } + } + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + + if (platform.hasStandardBrowserEnv) { + withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig)); + + if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) { + // Add xsrf header + const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName); + + if (xsrfValue) { + headers.set(xsrfHeaderName, xsrfValue); + } + } + } + + return newConfig; +}; + +const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined'; + +var xhrAdapter = isXHRAdapterSupported && function (config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + const _config = resolveConfig(config); + let requestData = _config.data; + const requestHeaders = AxiosHeaders$1.from(_config.headers).normalize(); + let {responseType, onUploadProgress, onDownloadProgress} = _config; + let onCanceled; + let uploadThrottled, downloadThrottled; + let flushUpload, flushDownload; + + function done() { + flushUpload && flushUpload(); // flush events + flushDownload && flushDownload(); // flush events + + _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled); + + _config.signal && _config.signal.removeEventListener('abort', onCanceled); + } + + let request = new XMLHttpRequest(); + + request.open(_config.method.toUpperCase(), _config.url, true); + + // Set the request timeout in MS + request.timeout = _config.timeout; + + function onloadend() { + if (!request) { + return; + } + // Prepare the response + const responseHeaders = AxiosHeaders$1.from( + 'getAllResponseHeaders' in request && request.getAllResponseHeaders() + ); + const responseData = !responseType || responseType === 'text' || responseType === 'json' ? + request.responseText : request.response; + const response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config, + request + }; + + settle(function _resolve(value) { + resolve(value); + done(); + }, function _reject(err) { + reject(err); + done(); + }, response); + + // Clean up request + request = null; + } + + if ('onloadend' in request) { + // Use onloadend if available + request.onloadend = onloadend; + } else { + // Listen for ready state to emulate onloadend + request.onreadystatechange = function handleLoad() { + if (!request || request.readyState !== 4) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { + return; + } + // readystate handler is calling before onerror or ontimeout handlers, + // so we should call onloadend on the next 'tick' + setTimeout(onloadend); + }; + } + + // Handle browser request cancellation (as opposed to a manual cancellation) + request.onabort = function handleAbort() { + if (!request) { + return; + } + + reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request)); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError() { + // Real errors are hidden from us by the browser + // onerror should only fire if it's a network error + reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request)); + + // Clean up request + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded'; + const transitional = _config.transitional || transitionalDefaults; + if (_config.timeoutErrorMessage) { + timeoutErrorMessage = _config.timeoutErrorMessage; + } + reject(new AxiosError( + timeoutErrorMessage, + transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED, + config, + request)); + + // Clean up request + request = null; + }; + + // Remove Content-Type if data is undefined + requestData === undefined && requestHeaders.setContentType(null); + + // Add headers to the request + if ('setRequestHeader' in request) { + utils$1.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) { + request.setRequestHeader(key, val); + }); + } + + // Add withCredentials to request if needed + if (!utils$1.isUndefined(_config.withCredentials)) { + request.withCredentials = !!_config.withCredentials; + } + + // Add responseType to request if needed + if (responseType && responseType !== 'json') { + request.responseType = _config.responseType; + } + + // Handle progress if needed + if (onDownloadProgress) { + ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true)); + request.addEventListener('progress', downloadThrottled); + } + + // Not all browsers support upload events + if (onUploadProgress && request.upload) { + ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress)); + + request.upload.addEventListener('progress', uploadThrottled); + + request.upload.addEventListener('loadend', flushUpload); + } + + if (_config.cancelToken || _config.signal) { + // Handle cancellation + // eslint-disable-next-line func-names + onCanceled = cancel => { + if (!request) { + return; + } + reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel); + request.abort(); + request = null; + }; + + _config.cancelToken && _config.cancelToken.subscribe(onCanceled); + if (_config.signal) { + _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled); + } + } + + const protocol = parseProtocol(_config.url); + + if (protocol && platform.protocols.indexOf(protocol) === -1) { + reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config)); + return; + } + + + // Send the request + request.send(requestData || null); + }); +}; + +const composeSignals = (signals, timeout) => { + const {length} = (signals = signals ? signals.filter(Boolean) : []); + + if (timeout || length) { + let controller = new AbortController(); + + let aborted; + + const onabort = function (reason) { + if (!aborted) { + aborted = true; + unsubscribe(); + const err = reason instanceof Error ? reason : this.reason; + controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err)); + } + }; + + let timer = timeout && setTimeout(() => { + timer = null; + onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT)); + }, timeout); + + const unsubscribe = () => { + if (signals) { + timer && clearTimeout(timer); + timer = null; + signals.forEach(signal => { + signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort); + }); + signals = null; + } + }; + + signals.forEach((signal) => signal.addEventListener('abort', onabort)); + + const {signal} = controller; + + signal.unsubscribe = () => utils$1.asap(unsubscribe); + + return signal; + } +}; + +var composeSignals$1 = composeSignals; + +const streamChunk = function* (chunk, chunkSize) { + let len = chunk.byteLength; + + if (!chunkSize || len < chunkSize) { + yield chunk; + return; + } + + let pos = 0; + let end; + + while (pos < len) { + end = pos + chunkSize; + yield chunk.slice(pos, end); + pos = end; + } +}; + +const readBytes = async function* (iterable, chunkSize) { + for await (const chunk of readStream(iterable)) { + yield* streamChunk(chunk, chunkSize); + } +}; + +const readStream = async function* (stream) { + if (stream[Symbol.asyncIterator]) { + yield* stream; + return; + } + + const reader = stream.getReader(); + try { + for (;;) { + const {done, value} = await reader.read(); + if (done) { + break; + } + yield value; + } + } finally { + await reader.cancel(); + } +}; + +const trackStream = (stream, chunkSize, onProgress, onFinish) => { + const iterator = readBytes(stream, chunkSize); + + let bytes = 0; + let done; + let _onFinish = (e) => { + if (!done) { + done = true; + onFinish && onFinish(e); + } + }; + + return new ReadableStream({ + async pull(controller) { + try { + const {done, value} = await iterator.next(); + + if (done) { + _onFinish(); + controller.close(); + return; + } + + let len = value.byteLength; + if (onProgress) { + let loadedBytes = bytes += len; + onProgress(loadedBytes); + } + controller.enqueue(new Uint8Array(value)); + } catch (err) { + _onFinish(err); + throw err; + } + }, + cancel(reason) { + _onFinish(reason); + return iterator.return(); + } + }, { + highWaterMark: 2 + }) +}; + +const isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function'; +const isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function'; + +// used only inside the fetch adapter +const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ? + ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) : + async (str) => new Uint8Array(await new Response(str).arrayBuffer()) +); + +const test = (fn, ...args) => { + try { + return !!fn(...args); + } catch (e) { + return false + } +}; + +const supportsRequestStream = isReadableStreamSupported && test(() => { + let duplexAccessed = false; + + const hasContentType = new Request(platform.origin, { + body: new ReadableStream(), + method: 'POST', + get duplex() { + duplexAccessed = true; + return 'half'; + }, + }).headers.has('Content-Type'); + + return duplexAccessed && !hasContentType; +}); + +const DEFAULT_CHUNK_SIZE = 64 * 1024; + +const supportsResponseStream = isReadableStreamSupported && + test(() => utils$1.isReadableStream(new Response('').body)); + + +const resolvers = { + stream: supportsResponseStream && ((res) => res.body) +}; + +isFetchSupported && (((res) => { + ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => { + !resolvers[type] && (resolvers[type] = utils$1.isFunction(res[type]) ? (res) => res[type]() : + (_, config) => { + throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config); + }); + }); +})(new Response)); + +const getBodyLength = async (body) => { + if (body == null) { + return 0; + } + + if(utils$1.isBlob(body)) { + return body.size; + } + + if(utils$1.isSpecCompliantForm(body)) { + const _request = new Request(platform.origin, { + method: 'POST', + body, + }); + return (await _request.arrayBuffer()).byteLength; + } + + if(utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body)) { + return body.byteLength; + } + + if(utils$1.isURLSearchParams(body)) { + body = body + ''; + } + + if(utils$1.isString(body)) { + return (await encodeText(body)).byteLength; + } +}; + +const resolveBodyLength = async (headers, body) => { + const length = utils$1.toFiniteNumber(headers.getContentLength()); + + return length == null ? getBodyLength(body) : length; +}; + +var fetchAdapter = isFetchSupported && (async (config) => { + let { + url, + method, + data, + signal, + cancelToken, + timeout, + onDownloadProgress, + onUploadProgress, + responseType, + headers, + withCredentials = 'same-origin', + fetchOptions + } = resolveConfig(config); + + responseType = responseType ? (responseType + '').toLowerCase() : 'text'; + + let composedSignal = composeSignals$1([signal, cancelToken && cancelToken.toAbortSignal()], timeout); + + let request; + + const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => { + composedSignal.unsubscribe(); + }); + + let requestContentLength; + + try { + if ( + onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' && + (requestContentLength = await resolveBodyLength(headers, data)) !== 0 + ) { + let _request = new Request(url, { + method: 'POST', + body: data, + duplex: "half" + }); + + let contentTypeHeader; + + if (utils$1.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) { + headers.setContentType(contentTypeHeader); + } + + if (_request.body) { + const [onProgress, flush] = progressEventDecorator( + requestContentLength, + progressEventReducer(asyncDecorator(onUploadProgress)) + ); + + data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush); + } + } + + if (!utils$1.isString(withCredentials)) { + withCredentials = withCredentials ? 'include' : 'omit'; + } + + // Cloudflare Workers throws when credentials are defined + // see https://github.com/cloudflare/workerd/issues/902 + const isCredentialsSupported = "credentials" in Request.prototype; + request = new Request(url, { + ...fetchOptions, + signal: composedSignal, + method: method.toUpperCase(), + headers: headers.normalize().toJSON(), + body: data, + duplex: "half", + credentials: isCredentialsSupported ? withCredentials : undefined + }); + + let response = await fetch(request); + + const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response'); + + if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) { + const options = {}; + + ['status', 'statusText', 'headers'].forEach(prop => { + options[prop] = response[prop]; + }); + + const responseContentLength = utils$1.toFiniteNumber(response.headers.get('content-length')); + + const [onProgress, flush] = onDownloadProgress && progressEventDecorator( + responseContentLength, + progressEventReducer(asyncDecorator(onDownloadProgress), true) + ) || []; + + response = new Response( + trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => { + flush && flush(); + unsubscribe && unsubscribe(); + }), + options + ); + } + + responseType = responseType || 'text'; + + let responseData = await resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config); + + !isStreamResponse && unsubscribe && unsubscribe(); + + return await new Promise((resolve, reject) => { + settle(resolve, reject, { + data: responseData, + headers: AxiosHeaders$1.from(response.headers), + status: response.status, + statusText: response.statusText, + config, + request + }); + }) + } catch (err) { + unsubscribe && unsubscribe(); + + if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) { + throw Object.assign( + new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request), + { + cause: err.cause || err + } + ) + } + + throw AxiosError.from(err, err && err.code, config, request); + } +}); + +const knownAdapters = { + http: httpAdapter, + xhr: xhrAdapter, + fetch: fetchAdapter +}; + +utils$1.forEach(knownAdapters, (fn, value) => { + if (fn) { + try { + Object.defineProperty(fn, 'name', {value}); + } catch (e) { + // eslint-disable-next-line no-empty + } + Object.defineProperty(fn, 'adapterName', {value}); + } +}); + +const renderReason = (reason) => `- ${reason}`; + +const isResolvedHandle = (adapter) => utils$1.isFunction(adapter) || adapter === null || adapter === false; + +var adapters = { + getAdapter: (adapters) => { + adapters = utils$1.isArray(adapters) ? adapters : [adapters]; + + const {length} = adapters; + let nameOrAdapter; + let adapter; + + const rejectedReasons = {}; + + for (let i = 0; i < length; i++) { + nameOrAdapter = adapters[i]; + let id; + + adapter = nameOrAdapter; + + if (!isResolvedHandle(nameOrAdapter)) { + adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()]; + + if (adapter === undefined) { + throw new AxiosError(`Unknown adapter '${id}'`); + } + } + + if (adapter) { + break; + } + + rejectedReasons[id || '#' + i] = adapter; + } + + if (!adapter) { + + const reasons = Object.entries(rejectedReasons) + .map(([id, state]) => `adapter ${id} ` + + (state === false ? 'is not supported by the environment' : 'is not available in the build') + ); + + let s = length ? + (reasons.length > 1 ? 'since :\n' + reasons.map(renderReason).join('\n') : ' ' + renderReason(reasons[0])) : + 'as no adapter specified'; + + throw new AxiosError( + `There is no suitable adapter to dispatch the request ` + s, + 'ERR_NOT_SUPPORT' + ); + } + + return adapter; + }, + adapters: knownAdapters +}; + +/** + * Throws a `CanceledError` if cancellation has been requested. + * + * @param {Object} config The config that is to be used for the request + * + * @returns {void} + */ +function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested(); + } + + if (config.signal && config.signal.aborted) { + throw new CanceledError(null, config); + } +} + +/** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * + * @returns {Promise} The Promise to be fulfilled + */ +function dispatchRequest(config) { + throwIfCancellationRequested(config); + + config.headers = AxiosHeaders$1.from(config.headers); + + // Transform request data + config.data = transformData.call( + config, + config.transformRequest + ); + + if (['post', 'put', 'patch'].indexOf(config.method) !== -1) { + config.headers.setContentType('application/x-www-form-urlencoded', false); + } + + const adapter = adapters.getAdapter(config.adapter || defaults$1.adapter); + + return adapter(config).then(function onAdapterResolution(response) { + throwIfCancellationRequested(config); + + // Transform response data + response.data = transformData.call( + config, + config.transformResponse, + response + ); + + response.headers = AxiosHeaders$1.from(response.headers); + + return response; + }, function onAdapterRejection(reason) { + if (!isCancel(reason)) { + throwIfCancellationRequested(config); + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData.call( + config, + config.transformResponse, + reason.response + ); + reason.response.headers = AxiosHeaders$1.from(reason.response.headers); + } + } + + return Promise.reject(reason); + }); +} + +const VERSION = "1.9.0"; + +const validators$1 = {}; + +// eslint-disable-next-line func-names +['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => { + validators$1[type] = function validator(thing) { + return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; + }; +}); + +const deprecatedWarnings = {}; + +/** + * Transitional option validator + * + * @param {function|boolean?} validator - set to false if the transitional option has been removed + * @param {string?} version - deprecated version / removed since version + * @param {string?} message - some message with additional info + * + * @returns {function} + */ +validators$1.transitional = function transitional(validator, version, message) { + function formatMessage(opt, desc) { + return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); + } + + // eslint-disable-next-line func-names + return (value, opt, opts) => { + if (validator === false) { + throw new AxiosError( + formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), + AxiosError.ERR_DEPRECATED + ); + } + + if (version && !deprecatedWarnings[opt]) { + deprecatedWarnings[opt] = true; + // eslint-disable-next-line no-console + console.warn( + formatMessage( + opt, + ' has been deprecated since v' + version + ' and will be removed in the near future' + ) + ); + } + + return validator ? validator(value, opt, opts) : true; + }; +}; + +validators$1.spelling = function spelling(correctSpelling) { + return (value, opt) => { + // eslint-disable-next-line no-console + console.warn(`${opt} is likely a misspelling of ${correctSpelling}`); + return true; + } +}; + +/** + * Assert object's properties type + * + * @param {object} options + * @param {object} schema + * @param {boolean?} allowUnknown + * + * @returns {object} + */ + +function assertOptions(options, schema, allowUnknown) { + if (typeof options !== 'object') { + throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE); + } + const keys = Object.keys(options); + let i = keys.length; + while (i-- > 0) { + const opt = keys[i]; + const validator = schema[opt]; + if (validator) { + const value = options[opt]; + const result = value === undefined || validator(value, opt, options); + if (result !== true) { + throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE); + } + continue; + } + if (allowUnknown !== true) { + throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION); + } + } +} + +var validator = { + assertOptions, + validators: validators$1 +}; + +const validators = validator.validators; + +/** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + * + * @return {Axios} A new instance of Axios + */ +class Axios { + constructor(instanceConfig) { + this.defaults = instanceConfig || {}; + this.interceptors = { + request: new InterceptorManager$1(), + response: new InterceptorManager$1() + }; + } + + /** + * Dispatch a request + * + * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults) + * @param {?Object} config + * + * @returns {Promise} The Promise to be fulfilled + */ + async request(configOrUrl, config) { + try { + return await this._request(configOrUrl, config); + } catch (err) { + if (err instanceof Error) { + let dummy = {}; + + Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error()); + + // slice off the Error: ... line + const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, '') : ''; + try { + if (!err.stack) { + err.stack = stack; + // match without the 2 top stack lines + } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\n.+\n/, ''))) { + err.stack += '\n' + stack; + } + } catch (e) { + // ignore the case where "stack" is an un-writable property + } + } + + throw err; + } + } + + _request(configOrUrl, config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof configOrUrl === 'string') { + config = config || {}; + config.url = configOrUrl; + } else { + config = configOrUrl || {}; + } + + config = mergeConfig(this.defaults, config); + + const {transitional, paramsSerializer, headers} = config; + + if (transitional !== undefined) { + validator.assertOptions(transitional, { + silentJSONParsing: validators.transitional(validators.boolean), + forcedJSONParsing: validators.transitional(validators.boolean), + clarifyTimeoutError: validators.transitional(validators.boolean) + }, false); + } + + if (paramsSerializer != null) { + if (utils$1.isFunction(paramsSerializer)) { + config.paramsSerializer = { + serialize: paramsSerializer + }; + } else { + validator.assertOptions(paramsSerializer, { + encode: validators.function, + serialize: validators.function + }, true); + } + } + + // Set config.allowAbsoluteUrls + if (config.allowAbsoluteUrls !== undefined) ; else if (this.defaults.allowAbsoluteUrls !== undefined) { + config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls; + } else { + config.allowAbsoluteUrls = true; + } + + validator.assertOptions(config, { + baseUrl: validators.spelling('baseURL'), + withXsrfToken: validators.spelling('withXSRFToken') + }, true); + + // Set config.method + config.method = (config.method || this.defaults.method || 'get').toLowerCase(); + + // Flatten headers + let contextHeaders = headers && utils$1.merge( + headers.common, + headers[config.method] + ); + + headers && utils$1.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + (method) => { + delete headers[method]; + } + ); + + config.headers = AxiosHeaders$1.concat(contextHeaders, headers); + + // filter out skipped interceptors + const requestInterceptorChain = []; + let synchronousRequestInterceptors = true; + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { + return; + } + + synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; + + requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); + }); + + const responseInterceptorChain = []; + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + }); + + let promise; + let i = 0; + let len; + + if (!synchronousRequestInterceptors) { + const chain = [dispatchRequest.bind(this), undefined]; + chain.unshift.apply(chain, requestInterceptorChain); + chain.push.apply(chain, responseInterceptorChain); + len = chain.length; + + promise = Promise.resolve(config); + + while (i < len) { + promise = promise.then(chain[i++], chain[i++]); + } + + return promise; + } + + len = requestInterceptorChain.length; + + let newConfig = config; + + i = 0; + + while (i < len) { + const onFulfilled = requestInterceptorChain[i++]; + const onRejected = requestInterceptorChain[i++]; + try { + newConfig = onFulfilled(newConfig); + } catch (error) { + onRejected.call(this, error); + break; + } + } + + try { + promise = dispatchRequest.call(this, newConfig); + } catch (error) { + return Promise.reject(error); + } + + i = 0; + len = responseInterceptorChain.length; + + while (i < len) { + promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]); + } + + return promise; + } + + getUri(config) { + config = mergeConfig(this.defaults, config); + const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls); + return buildURL(fullPath, config.params, config.paramsSerializer); + } +} + +// Provide aliases for supported request methods +utils$1.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, config) { + return this.request(mergeConfig(config || {}, { + method, + url, + data: (config || {}).data + })); + }; +}); + +utils$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + + function generateHTTPMethod(isForm) { + return function httpMethod(url, data, config) { + return this.request(mergeConfig(config || {}, { + method, + headers: isForm ? { + 'Content-Type': 'multipart/form-data' + } : {}, + url, + data + })); + }; + } + + Axios.prototype[method] = generateHTTPMethod(); + + Axios.prototype[method + 'Form'] = generateHTTPMethod(true); +}); + +var Axios$1 = Axios; + +/** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @param {Function} executor The executor function. + * + * @returns {CancelToken} + */ +class CancelToken { + constructor(executor) { + if (typeof executor !== 'function') { + throw new TypeError('executor must be a function.'); + } + + let resolvePromise; + + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve; + }); + + const token = this; + + // eslint-disable-next-line func-names + this.promise.then(cancel => { + if (!token._listeners) return; + + let i = token._listeners.length; + + while (i-- > 0) { + token._listeners[i](cancel); + } + token._listeners = null; + }); + + // eslint-disable-next-line func-names + this.promise.then = onfulfilled => { + let _resolve; + // eslint-disable-next-line func-names + const promise = new Promise(resolve => { + token.subscribe(resolve); + _resolve = resolve; + }).then(onfulfilled); + + promise.cancel = function reject() { + token.unsubscribe(_resolve); + }; + + return promise; + }; + + executor(function cancel(message, config, request) { + if (token.reason) { + // Cancellation has already been requested + return; + } + + token.reason = new CanceledError(message, config, request); + resolvePromise(token.reason); + }); + } + + /** + * Throws a `CanceledError` if cancellation has been requested. + */ + throwIfRequested() { + if (this.reason) { + throw this.reason; + } + } + + /** + * Subscribe to the cancel signal + */ + + subscribe(listener) { + if (this.reason) { + listener(this.reason); + return; + } + + if (this._listeners) { + this._listeners.push(listener); + } else { + this._listeners = [listener]; + } + } + + /** + * Unsubscribe from the cancel signal + */ + + unsubscribe(listener) { + if (!this._listeners) { + return; + } + const index = this._listeners.indexOf(listener); + if (index !== -1) { + this._listeners.splice(index, 1); + } + } + + toAbortSignal() { + const controller = new AbortController(); + + const abort = (err) => { + controller.abort(err); + }; + + this.subscribe(abort); + + controller.signal.unsubscribe = () => this.unsubscribe(abort); + + return controller.signal; + } + + /** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ + static source() { + let cancel; + const token = new CancelToken(function executor(c) { + cancel = c; + }); + return { + token, + cancel + }; + } +} + +var CancelToken$1 = CancelToken; + +/** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * var args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * + * @returns {Function} + */ +function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; +} + +/** + * Determines whether the payload is an error thrown by Axios + * + * @param {*} payload The value to test + * + * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false + */ +function isAxiosError(payload) { + return utils$1.isObject(payload) && (payload.isAxiosError === true); +} + +const HttpStatusCode = { + Continue: 100, + SwitchingProtocols: 101, + Processing: 102, + EarlyHints: 103, + Ok: 200, + Created: 201, + Accepted: 202, + NonAuthoritativeInformation: 203, + NoContent: 204, + ResetContent: 205, + PartialContent: 206, + MultiStatus: 207, + AlreadyReported: 208, + ImUsed: 226, + MultipleChoices: 300, + MovedPermanently: 301, + Found: 302, + SeeOther: 303, + NotModified: 304, + UseProxy: 305, + Unused: 306, + TemporaryRedirect: 307, + PermanentRedirect: 308, + BadRequest: 400, + Unauthorized: 401, + PaymentRequired: 402, + Forbidden: 403, + NotFound: 404, + MethodNotAllowed: 405, + NotAcceptable: 406, + ProxyAuthenticationRequired: 407, + RequestTimeout: 408, + Conflict: 409, + Gone: 410, + LengthRequired: 411, + PreconditionFailed: 412, + PayloadTooLarge: 413, + UriTooLong: 414, + UnsupportedMediaType: 415, + RangeNotSatisfiable: 416, + ExpectationFailed: 417, + ImATeapot: 418, + MisdirectedRequest: 421, + UnprocessableEntity: 422, + Locked: 423, + FailedDependency: 424, + TooEarly: 425, + UpgradeRequired: 426, + PreconditionRequired: 428, + TooManyRequests: 429, + RequestHeaderFieldsTooLarge: 431, + UnavailableForLegalReasons: 451, + InternalServerError: 500, + NotImplemented: 501, + BadGateway: 502, + ServiceUnavailable: 503, + GatewayTimeout: 504, + HttpVersionNotSupported: 505, + VariantAlsoNegotiates: 506, + InsufficientStorage: 507, + LoopDetected: 508, + NotExtended: 510, + NetworkAuthenticationRequired: 511, +}; + +Object.entries(HttpStatusCode).forEach(([key, value]) => { + HttpStatusCode[value] = key; +}); + +var HttpStatusCode$1 = HttpStatusCode; + +/** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * + * @returns {Axios} A new instance of Axios + */ +function createInstance(defaultConfig) { + const context = new Axios$1(defaultConfig); + const instance = bind(Axios$1.prototype.request, context); + + // Copy axios.prototype to instance + utils$1.extend(instance, Axios$1.prototype, context, {allOwnKeys: true}); + + // Copy context to instance + utils$1.extend(instance, context, null, {allOwnKeys: true}); + + // Factory for creating new instances + instance.create = function create(instanceConfig) { + return createInstance(mergeConfig(defaultConfig, instanceConfig)); + }; + + return instance; +} + +// Create the default instance to be exported +const axios = createInstance(defaults$1); + +// Expose Axios class to allow class inheritance +axios.Axios = Axios$1; + +// Expose Cancel & CancelToken +axios.CanceledError = CanceledError; +axios.CancelToken = CancelToken$1; +axios.isCancel = isCancel; +axios.VERSION = VERSION; +axios.toFormData = toFormData; + +// Expose AxiosError class +axios.AxiosError = AxiosError; + +// alias for CanceledError for backward compatibility +axios.Cancel = axios.CanceledError; + +// Expose all/spread +axios.all = function all(promises) { + return Promise.all(promises); +}; + +axios.spread = spread; + +// Expose isAxiosError +axios.isAxiosError = isAxiosError; + +// Expose mergeConfig +axios.mergeConfig = mergeConfig; + +axios.AxiosHeaders = AxiosHeaders$1; + +axios.formToJSON = thing => formDataToJSON(utils$1.isHTMLForm(thing) ? new FormData(thing) : thing); + +axios.getAdapter = adapters.getAdapter; + +axios.HttpStatusCode = HttpStatusCode$1; + +axios.default = axios; + +module.exports = axios; +//# sourceMappingURL=axios.cjs.map diff --git a/node_modules/axios/dist/browser/axios.cjs.map b/node_modules/axios/dist/browser/axios.cjs.map new file mode 100644 index 0000000..ebe5f2e --- /dev/null +++ b/node_modules/axios/dist/browser/axios.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"axios.cjs","sources":["../../lib/helpers/bind.js","../../lib/utils.js","../../lib/core/AxiosError.js","../../lib/helpers/null.js","../../lib/helpers/toFormData.js","../../lib/helpers/AxiosURLSearchParams.js","../../lib/helpers/buildURL.js","../../lib/core/InterceptorManager.js","../../lib/defaults/transitional.js","../../lib/platform/browser/classes/URLSearchParams.js","../../lib/platform/browser/classes/FormData.js","../../lib/platform/browser/classes/Blob.js","../../lib/platform/browser/index.js","../../lib/platform/common/utils.js","../../lib/platform/index.js","../../lib/helpers/toURLEncodedForm.js","../../lib/helpers/formDataToJSON.js","../../lib/defaults/index.js","../../lib/helpers/parseHeaders.js","../../lib/core/AxiosHeaders.js","../../lib/core/transformData.js","../../lib/cancel/isCancel.js","../../lib/cancel/CanceledError.js","../../lib/core/settle.js","../../lib/helpers/parseProtocol.js","../../lib/helpers/speedometer.js","../../lib/helpers/throttle.js","../../lib/helpers/progressEventReducer.js","../../lib/helpers/isURLSameOrigin.js","../../lib/helpers/cookies.js","../../lib/helpers/isAbsoluteURL.js","../../lib/helpers/combineURLs.js","../../lib/core/buildFullPath.js","../../lib/core/mergeConfig.js","../../lib/helpers/resolveConfig.js","../../lib/adapters/xhr.js","../../lib/helpers/composeSignals.js","../../lib/helpers/trackStream.js","../../lib/adapters/fetch.js","../../lib/adapters/adapters.js","../../lib/core/dispatchRequest.js","../../lib/env/data.js","../../lib/helpers/validator.js","../../lib/core/Axios.js","../../lib/cancel/CancelToken.js","../../lib/helpers/spread.js","../../lib/helpers/isAxiosError.js","../../lib/helpers/HttpStatusCode.js","../../lib/axios.js"],"sourcesContent":["'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\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 *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\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 (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 const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\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 *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && 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 *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.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 {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\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: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\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 * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\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 */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\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 *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\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 *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\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 *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\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 maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\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} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.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 *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" 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","'use strict';\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 *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\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 *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\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\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\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 // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\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(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, 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(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\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 *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(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.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\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.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.9.0\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(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 {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\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(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\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 *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n"],"names":["utils","prototype","encode","URLSearchParams","FormData","Blob","platform","defaults","AxiosHeaders","composeSignals","validators","InterceptorManager","Axios","CancelToken","HttpStatusCode"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/axios/dist/esm/axios.js b/node_modules/axios/dist/esm/axios.js new file mode 100644 index 0000000..7fc1205 --- /dev/null +++ b/node_modules/axios/dist/esm/axios.js @@ -0,0 +1,3749 @@ +/*! Axios v1.9.0 Copyright (c) 2025 Matt Zabriskie and contributors */ +function bind(fn, thisArg) { + return function wrap() { + return fn.apply(thisArg, arguments); + }; +} + +// utils is a library of generic helper functions non-specific to axios + +const {toString} = Object.prototype; +const {getPrototypeOf} = Object; +const {iterator, toStringTag} = Symbol; + +const kindOf = (cache => thing => { + const str = toString.call(thing); + return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); +})(Object.create(null)); + +const kindOfTest = (type) => { + type = type.toLowerCase(); + return (thing) => kindOf(thing) === type +}; + +const typeOfTest = type => thing => typeof thing === type; + +/** + * Determine if a value is an Array + * + * @param {Object} val The value to test + * + * @returns {boolean} True if value is an Array, otherwise false + */ +const {isArray} = Array; + +/** + * Determine if a value is undefined + * + * @param {*} val The value to test + * + * @returns {boolean} True if the value is undefined, otherwise false + */ +const isUndefined = typeOfTest('undefined'); + +/** + * Determine if a value is a Buffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Buffer, otherwise false + */ +function isBuffer(val) { + return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) + && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val); +} + +/** + * Determine if a value is an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ +const isArrayBuffer = kindOfTest('ArrayBuffer'); + + +/** + * Determine if a value is a view on an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ +function isArrayBufferView(val) { + let result; + if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { + result = ArrayBuffer.isView(val); + } else { + result = (val) && (val.buffer) && (isArrayBuffer(val.buffer)); + } + return result; +} + +/** + * Determine if a value is a String + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a String, otherwise false + */ +const isString = typeOfTest('string'); + +/** + * Determine if a value is a Function + * + * @param {*} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ +const isFunction = typeOfTest('function'); + +/** + * Determine if a value is a Number + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Number, otherwise false + */ +const isNumber = typeOfTest('number'); + +/** + * Determine if a value is an Object + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an Object, otherwise false + */ +const isObject = (thing) => thing !== null && typeof thing === 'object'; + +/** + * Determine if a value is a Boolean + * + * @param {*} thing The value to test + * @returns {boolean} True if value is a Boolean, otherwise false + */ +const isBoolean = thing => thing === true || thing === false; + +/** + * Determine if a value is a plain Object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a plain Object, otherwise false + */ +const isPlainObject = (val) => { + if (kindOf(val) !== 'object') { + return false; + } + + const prototype = getPrototypeOf(val); + return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val); +}; + +/** + * Determine if a value is a Date + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Date, otherwise false + */ +const isDate = kindOfTest('Date'); + +/** + * Determine if a value is a File + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ +const isFile = kindOfTest('File'); + +/** + * Determine if a value is a Blob + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Blob, otherwise false + */ +const isBlob = kindOfTest('Blob'); + +/** + * Determine if a value is a FileList + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ +const isFileList = kindOfTest('FileList'); + +/** + * Determine if a value is a Stream + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Stream, otherwise false + */ +const isStream = (val) => isObject(val) && isFunction(val.pipe); + +/** + * Determine if a value is a FormData + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an FormData, otherwise false + */ +const isFormData = (thing) => { + let kind; + return thing && ( + (typeof FormData === 'function' && thing instanceof FormData) || ( + isFunction(thing.append) && ( + (kind = kindOf(thing)) === 'formdata' || + // detect form-data instance + (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]') + ) + ) + ) +}; + +/** + * Determine if a value is a URLSearchParams object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ +const isURLSearchParams = kindOfTest('URLSearchParams'); + +const [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest); + +/** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * + * @returns {String} The String freed of excess whitespace + */ +const trim = (str) => str.trim ? + str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + +/** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + * + * @param {Boolean} [allOwnKeys = false] + * @returns {any} + */ +function forEach(obj, fn, {allOwnKeys = false} = {}) { + // Don't bother if no value provided + if (obj === null || typeof obj === 'undefined') { + return; + } + + let i; + let l; + + // Force an array if not already something iterable + if (typeof obj !== 'object') { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + + if (isArray(obj)) { + // Iterate over array values + for (i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Iterate over object keys + const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); + const len = keys.length; + let key; + + for (i = 0; i < len; i++) { + key = keys[i]; + fn.call(null, obj[key], key, obj); + } + } +} + +function findKey(obj, key) { + key = key.toLowerCase(); + const keys = Object.keys(obj); + let i = keys.length; + let _key; + while (i-- > 0) { + _key = keys[i]; + if (key === _key.toLowerCase()) { + return _key; + } + } + return null; +} + +const _global = (() => { + /*eslint no-undef:0*/ + if (typeof globalThis !== "undefined") return globalThis; + return typeof self !== "undefined" ? self : (typeof window !== 'undefined' ? window : global) +})(); + +const isContextDefined = (context) => !isUndefined(context) && context !== _global; + +/** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * var result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * + * @returns {Object} Result of all merge properties + */ +function merge(/* obj1, obj2, obj3, ... */) { + const {caseless} = isContextDefined(this) && this || {}; + const result = {}; + const assignValue = (val, key) => { + const targetKey = caseless && findKey(result, key) || key; + if (isPlainObject(result[targetKey]) && isPlainObject(val)) { + result[targetKey] = merge(result[targetKey], val); + } else if (isPlainObject(val)) { + result[targetKey] = merge({}, val); + } else if (isArray(val)) { + result[targetKey] = val.slice(); + } else { + result[targetKey] = val; + } + }; + + for (let i = 0, l = arguments.length; i < l; i++) { + arguments[i] && forEach(arguments[i], assignValue); + } + return result; +} + +/** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * + * @param {Boolean} [allOwnKeys] + * @returns {Object} The resulting value of object a + */ +const extend = (a, b, thisArg, {allOwnKeys}= {}) => { + forEach(b, (val, key) => { + if (thisArg && isFunction(val)) { + a[key] = bind(val, thisArg); + } else { + a[key] = val; + } + }, {allOwnKeys}); + return a; +}; + +/** + * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + * + * @param {string} content with BOM + * + * @returns {string} content value without BOM + */ +const stripBOM = (content) => { + if (content.charCodeAt(0) === 0xFEFF) { + content = content.slice(1); + } + return content; +}; + +/** + * Inherit the prototype methods from one constructor into another + * @param {function} constructor + * @param {function} superConstructor + * @param {object} [props] + * @param {object} [descriptors] + * + * @returns {void} + */ +const inherits = (constructor, superConstructor, props, descriptors) => { + constructor.prototype = Object.create(superConstructor.prototype, descriptors); + constructor.prototype.constructor = constructor; + Object.defineProperty(constructor, 'super', { + value: superConstructor.prototype + }); + props && Object.assign(constructor.prototype, props); +}; + +/** + * Resolve object with deep prototype chain to a flat object + * @param {Object} sourceObj source object + * @param {Object} [destObj] + * @param {Function|Boolean} [filter] + * @param {Function} [propFilter] + * + * @returns {Object} + */ +const toFlatObject = (sourceObj, destObj, filter, propFilter) => { + let props; + let i; + let prop; + const merged = {}; + + destObj = destObj || {}; + // eslint-disable-next-line no-eq-null,eqeqeq + if (sourceObj == null) return destObj; + + do { + props = Object.getOwnPropertyNames(sourceObj); + i = props.length; + while (i-- > 0) { + prop = props[i]; + if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) { + destObj[prop] = sourceObj[prop]; + merged[prop] = true; + } + } + sourceObj = filter !== false && getPrototypeOf(sourceObj); + } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype); + + return destObj; +}; + +/** + * Determines whether a string ends with the characters of a specified string + * + * @param {String} str + * @param {String} searchString + * @param {Number} [position= 0] + * + * @returns {boolean} + */ +const endsWith = (str, searchString, position) => { + str = String(str); + if (position === undefined || position > str.length) { + position = str.length; + } + position -= searchString.length; + const lastIndex = str.indexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; +}; + + +/** + * Returns new array from array like object or null if failed + * + * @param {*} [thing] + * + * @returns {?Array} + */ +const toArray = (thing) => { + if (!thing) return null; + if (isArray(thing)) return thing; + let i = thing.length; + if (!isNumber(i)) return null; + const arr = new Array(i); + while (i-- > 0) { + arr[i] = thing[i]; + } + return arr; +}; + +/** + * Checking if the Uint8Array exists and if it does, it returns a function that checks if the + * thing passed in is an instance of Uint8Array + * + * @param {TypedArray} + * + * @returns {Array} + */ +// eslint-disable-next-line func-names +const isTypedArray = (TypedArray => { + // eslint-disable-next-line func-names + return thing => { + return TypedArray && thing instanceof TypedArray; + }; +})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array)); + +/** + * For each entry in the object, call the function with the key and value. + * + * @param {Object} obj - The object to iterate over. + * @param {Function} fn - The function to call for each entry. + * + * @returns {void} + */ +const forEachEntry = (obj, fn) => { + const generator = obj && obj[iterator]; + + const _iterator = generator.call(obj); + + let result; + + while ((result = _iterator.next()) && !result.done) { + const pair = result.value; + fn.call(obj, pair[0], pair[1]); + } +}; + +/** + * It takes a regular expression and a string, and returns an array of all the matches + * + * @param {string} regExp - The regular expression to match against. + * @param {string} str - The string to search. + * + * @returns {Array} + */ +const matchAll = (regExp, str) => { + let matches; + const arr = []; + + while ((matches = regExp.exec(str)) !== null) { + arr.push(matches); + } + + return arr; +}; + +/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */ +const isHTMLForm = kindOfTest('HTMLFormElement'); + +const toCamelCase = str => { + return str.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g, + function replacer(m, p1, p2) { + return p1.toUpperCase() + p2; + } + ); +}; + +/* Creating a function that will check if an object has a property. */ +const hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype); + +/** + * Determine if a value is a RegExp object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a RegExp object, otherwise false + */ +const isRegExp = kindOfTest('RegExp'); + +const reduceDescriptors = (obj, reducer) => { + const descriptors = Object.getOwnPropertyDescriptors(obj); + const reducedDescriptors = {}; + + forEach(descriptors, (descriptor, name) => { + let ret; + if ((ret = reducer(descriptor, name, obj)) !== false) { + reducedDescriptors[name] = ret || descriptor; + } + }); + + Object.defineProperties(obj, reducedDescriptors); +}; + +/** + * Makes all methods read-only + * @param {Object} obj + */ + +const freezeMethods = (obj) => { + reduceDescriptors(obj, (descriptor, name) => { + // skip restricted props in strict mode + if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) { + return false; + } + + const value = obj[name]; + + if (!isFunction(value)) return; + + descriptor.enumerable = false; + + if ('writable' in descriptor) { + descriptor.writable = false; + return; + } + + if (!descriptor.set) { + descriptor.set = () => { + throw Error('Can not rewrite read-only method \'' + name + '\''); + }; + } + }); +}; + +const toObjectSet = (arrayOrString, delimiter) => { + const obj = {}; + + const define = (arr) => { + arr.forEach(value => { + obj[value] = true; + }); + }; + + isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter)); + + return obj; +}; + +const noop = () => {}; + +const toFiniteNumber = (value, defaultValue) => { + return value != null && Number.isFinite(value = +value) ? value : defaultValue; +}; + +/** + * If the thing is a FormData object, return true, otherwise return false. + * + * @param {unknown} thing - The thing to check. + * + * @returns {boolean} + */ +function isSpecCompliantForm(thing) { + return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]); +} + +const toJSONObject = (obj) => { + const stack = new Array(10); + + const visit = (source, i) => { + + if (isObject(source)) { + if (stack.indexOf(source) >= 0) { + return; + } + + if(!('toJSON' in source)) { + stack[i] = source; + const target = isArray(source) ? [] : {}; + + forEach(source, (value, key) => { + const reducedValue = visit(value, i + 1); + !isUndefined(reducedValue) && (target[key] = reducedValue); + }); + + stack[i] = undefined; + + return target; + } + } + + return source; + }; + + return visit(obj, 0); +}; + +const isAsyncFn = kindOfTest('AsyncFunction'); + +const isThenable = (thing) => + thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch); + +// original code +// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34 + +const _setImmediate = ((setImmediateSupported, postMessageSupported) => { + if (setImmediateSupported) { + return setImmediate; + } + + return postMessageSupported ? ((token, callbacks) => { + _global.addEventListener("message", ({source, data}) => { + if (source === _global && data === token) { + callbacks.length && callbacks.shift()(); + } + }, false); + + return (cb) => { + callbacks.push(cb); + _global.postMessage(token, "*"); + } + })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb); +})( + typeof setImmediate === 'function', + isFunction(_global.postMessage) +); + +const asap = typeof queueMicrotask !== 'undefined' ? + queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate); + +// ********************* + + +const isIterable = (thing) => thing != null && isFunction(thing[iterator]); + + +const utils$1 = { + isArray, + isArrayBuffer, + isBuffer, + isFormData, + isArrayBufferView, + isString, + isNumber, + isBoolean, + isObject, + isPlainObject, + isReadableStream, + isRequest, + isResponse, + isHeaders, + isUndefined, + isDate, + isFile, + isBlob, + isRegExp, + isFunction, + isStream, + isURLSearchParams, + isTypedArray, + isFileList, + forEach, + merge, + extend, + trim, + stripBOM, + inherits, + toFlatObject, + kindOf, + kindOfTest, + endsWith, + toArray, + forEachEntry, + matchAll, + isHTMLForm, + hasOwnProperty, + hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection + reduceDescriptors, + freezeMethods, + toObjectSet, + toCamelCase, + noop, + toFiniteNumber, + findKey, + global: _global, + isContextDefined, + isSpecCompliantForm, + toJSONObject, + isAsyncFn, + isThenable, + setImmediate: _setImmediate, + asap, + isIterable +}; + +/** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [config] The config. + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * + * @returns {Error} The created error. + */ +function AxiosError$1(message, code, config, request, response) { + Error.call(this); + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + this.stack = (new Error()).stack; + } + + this.message = message; + this.name = 'AxiosError'; + code && (this.code = code); + config && (this.config = config); + request && (this.request = request); + if (response) { + this.response = response; + this.status = response.status ? response.status : null; + } +} + +utils$1.inherits(AxiosError$1, Error, { + toJSON: function toJSON() { + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: utils$1.toJSONObject(this.config), + code: this.code, + status: this.status + }; + } +}); + +const prototype$1 = AxiosError$1.prototype; +const descriptors = {}; + +[ + 'ERR_BAD_OPTION_VALUE', + 'ERR_BAD_OPTION', + 'ECONNABORTED', + 'ETIMEDOUT', + 'ERR_NETWORK', + 'ERR_FR_TOO_MANY_REDIRECTS', + 'ERR_DEPRECATED', + 'ERR_BAD_RESPONSE', + 'ERR_BAD_REQUEST', + 'ERR_CANCELED', + 'ERR_NOT_SUPPORT', + 'ERR_INVALID_URL' +// eslint-disable-next-line func-names +].forEach(code => { + descriptors[code] = {value: code}; +}); + +Object.defineProperties(AxiosError$1, descriptors); +Object.defineProperty(prototype$1, 'isAxiosError', {value: true}); + +// eslint-disable-next-line func-names +AxiosError$1.from = (error, code, config, request, response, customProps) => { + const axiosError = Object.create(prototype$1); + + utils$1.toFlatObject(error, axiosError, function filter(obj) { + return obj !== Error.prototype; + }, prop => { + return prop !== 'isAxiosError'; + }); + + AxiosError$1.call(axiosError, error.message, code, config, request, response); + + axiosError.cause = error; + + axiosError.name = error.name; + + customProps && Object.assign(axiosError, customProps); + + return axiosError; +}; + +// eslint-disable-next-line strict +const httpAdapter = null; + +/** + * Determines if the given thing is a array or js object. + * + * @param {string} thing - The object or array to be visited. + * + * @returns {boolean} + */ +function isVisitable(thing) { + return utils$1.isPlainObject(thing) || utils$1.isArray(thing); +} + +/** + * It removes the brackets from the end of a string + * + * @param {string} key - The key of the parameter. + * + * @returns {string} the key without the brackets. + */ +function removeBrackets(key) { + return utils$1.endsWith(key, '[]') ? key.slice(0, -2) : key; +} + +/** + * It takes a path, a key, and a boolean, and returns a string + * + * @param {string} path - The path to the current key. + * @param {string} key - The key of the current object being iterated over. + * @param {string} dots - If true, the key will be rendered with dots instead of brackets. + * + * @returns {string} The path to the current key. + */ +function renderKey(path, key, dots) { + if (!path) return key; + return path.concat(key).map(function each(token, i) { + // eslint-disable-next-line no-param-reassign + token = removeBrackets(token); + return !dots && i ? '[' + token + ']' : token; + }).join(dots ? '.' : ''); +} + +/** + * If the array is an array and none of its elements are visitable, then it's a flat array. + * + * @param {Array} arr - The array to check + * + * @returns {boolean} + */ +function isFlatArray(arr) { + return utils$1.isArray(arr) && !arr.some(isVisitable); +} + +const predicates = utils$1.toFlatObject(utils$1, {}, null, function filter(prop) { + return /^is[A-Z]/.test(prop); +}); + +/** + * Convert a data object to FormData + * + * @param {Object} obj + * @param {?Object} [formData] + * @param {?Object} [options] + * @param {Function} [options.visitor] + * @param {Boolean} [options.metaTokens = true] + * @param {Boolean} [options.dots = false] + * @param {?Boolean} [options.indexes = false] + * + * @returns {Object} + **/ + +/** + * It converts an object into a FormData object + * + * @param {Object} obj - The object to convert to form data. + * @param {string} formData - The FormData object to append to. + * @param {Object} options + * + * @returns + */ +function toFormData$1(obj, formData, options) { + if (!utils$1.isObject(obj)) { + throw new TypeError('target must be an object'); + } + + // eslint-disable-next-line no-param-reassign + formData = formData || new (FormData)(); + + // eslint-disable-next-line no-param-reassign + options = utils$1.toFlatObject(options, { + metaTokens: true, + dots: false, + indexes: false + }, false, function defined(option, source) { + // eslint-disable-next-line no-eq-null,eqeqeq + return !utils$1.isUndefined(source[option]); + }); + + const metaTokens = options.metaTokens; + // eslint-disable-next-line no-use-before-define + const visitor = options.visitor || defaultVisitor; + const dots = options.dots; + const indexes = options.indexes; + const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob; + const useBlob = _Blob && utils$1.isSpecCompliantForm(formData); + + if (!utils$1.isFunction(visitor)) { + throw new TypeError('visitor must be a function'); + } + + function convertValue(value) { + if (value === null) return ''; + + if (utils$1.isDate(value)) { + return value.toISOString(); + } + + if (!useBlob && utils$1.isBlob(value)) { + throw new AxiosError$1('Blob is not supported. Use a Buffer instead.'); + } + + if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) { + return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); + } + + return value; + } + + /** + * Default visitor. + * + * @param {*} value + * @param {String|Number} key + * @param {Array} path + * @this {FormData} + * + * @returns {boolean} return true to visit the each prop of the value recursively + */ + function defaultVisitor(value, key, path) { + let arr = value; + + if (value && !path && typeof value === 'object') { + if (utils$1.endsWith(key, '{}')) { + // eslint-disable-next-line no-param-reassign + key = metaTokens ? key : key.slice(0, -2); + // eslint-disable-next-line no-param-reassign + value = JSON.stringify(value); + } else if ( + (utils$1.isArray(value) && isFlatArray(value)) || + ((utils$1.isFileList(value) || utils$1.endsWith(key, '[]')) && (arr = utils$1.toArray(value)) + )) { + // eslint-disable-next-line no-param-reassign + key = removeBrackets(key); + + arr.forEach(function each(el, index) { + !(utils$1.isUndefined(el) || el === null) && formData.append( + // eslint-disable-next-line no-nested-ternary + indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'), + convertValue(el) + ); + }); + return false; + } + } + + if (isVisitable(value)) { + return true; + } + + formData.append(renderKey(path, key, dots), convertValue(value)); + + return false; + } + + const stack = []; + + const exposedHelpers = Object.assign(predicates, { + defaultVisitor, + convertValue, + isVisitable + }); + + function build(value, path) { + if (utils$1.isUndefined(value)) return; + + if (stack.indexOf(value) !== -1) { + throw Error('Circular reference detected in ' + path.join('.')); + } + + stack.push(value); + + utils$1.forEach(value, function each(el, key) { + const result = !(utils$1.isUndefined(el) || el === null) && visitor.call( + formData, el, utils$1.isString(key) ? key.trim() : key, path, exposedHelpers + ); + + if (result === true) { + build(el, path ? path.concat(key) : [key]); + } + }); + + stack.pop(); + } + + if (!utils$1.isObject(obj)) { + throw new TypeError('data must be an object'); + } + + build(obj); + + return formData; +} + +/** + * It encodes a string by replacing all characters that are not in the unreserved set with + * their percent-encoded equivalents + * + * @param {string} str - The string to encode. + * + * @returns {string} The encoded string. + */ +function encode$1(str) { + const charMap = { + '!': '%21', + "'": '%27', + '(': '%28', + ')': '%29', + '~': '%7E', + '%20': '+', + '%00': '\x00' + }; + return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) { + return charMap[match]; + }); +} + +/** + * It takes a params object and converts it to a FormData object + * + * @param {Object} params - The parameters to be converted to a FormData object. + * @param {Object} options - The options object passed to the Axios constructor. + * + * @returns {void} + */ +function AxiosURLSearchParams(params, options) { + this._pairs = []; + + params && toFormData$1(params, this, options); +} + +const prototype = AxiosURLSearchParams.prototype; + +prototype.append = function append(name, value) { + this._pairs.push([name, value]); +}; + +prototype.toString = function toString(encoder) { + const _encode = encoder ? function(value) { + return encoder.call(this, value, encode$1); + } : encode$1; + + return this._pairs.map(function each(pair) { + return _encode(pair[0]) + '=' + _encode(pair[1]); + }, '').join('&'); +}; + +/** + * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their + * URI encoded counterparts + * + * @param {string} val The value to be encoded. + * + * @returns {string} The encoded value. + */ +function encode(val) { + return encodeURIComponent(val). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, '+'). + replace(/%5B/gi, '['). + replace(/%5D/gi, ']'); +} + +/** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @param {?(object|Function)} options + * + * @returns {string} The formatted url + */ +function buildURL(url, params, options) { + /*eslint no-param-reassign:0*/ + if (!params) { + return url; + } + + const _encode = options && options.encode || encode; + + if (utils$1.isFunction(options)) { + options = { + serialize: options + }; + } + + const serializeFn = options && options.serialize; + + let serializedParams; + + if (serializeFn) { + serializedParams = serializeFn(params, options); + } else { + serializedParams = utils$1.isURLSearchParams(params) ? + params.toString() : + new AxiosURLSearchParams(params, options).toString(_encode); + } + + if (serializedParams) { + const hashmarkIndex = url.indexOf("#"); + + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex); + } + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; +} + +class InterceptorManager { + constructor() { + this.handlers = []; + } + + /** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * + * @return {Number} An ID used to remove interceptor later + */ + use(fulfilled, rejected, options) { + this.handlers.push({ + fulfilled, + rejected, + synchronous: options ? options.synchronous : false, + runWhen: options ? options.runWhen : null + }); + return this.handlers.length - 1; + } + + /** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + * + * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise + */ + eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } + } + + /** + * Clear all interceptors from the stack + * + * @returns {void} + */ + clear() { + if (this.handlers) { + this.handlers = []; + } + } + + /** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + * + * @returns {void} + */ + forEach(fn) { + utils$1.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); + } +} + +const InterceptorManager$1 = InterceptorManager; + +const transitionalDefaults = { + silentJSONParsing: true, + forcedJSONParsing: true, + clarifyTimeoutError: false +}; + +const URLSearchParams$1 = typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams; + +const FormData$1 = typeof FormData !== 'undefined' ? FormData : null; + +const Blob$1 = typeof Blob !== 'undefined' ? Blob : null; + +const platform$1 = { + isBrowser: true, + classes: { + URLSearchParams: URLSearchParams$1, + FormData: FormData$1, + Blob: Blob$1 + }, + protocols: ['http', 'https', 'file', 'blob', 'url', 'data'] +}; + +const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined'; + +const _navigator = typeof navigator === 'object' && navigator || undefined; + +/** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + * + * @returns {boolean} + */ +const hasStandardBrowserEnv = hasBrowserEnv && + (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0); + +/** + * Determine if we're running in a standard browser webWorker environment + * + * Although the `isStandardBrowserEnv` method indicates that + * `allows axios to run in a web worker`, the WebWorker will still be + * filtered out due to its judgment standard + * `typeof window !== 'undefined' && typeof document !== 'undefined'`. + * This leads to a problem when axios post `FormData` in webWorker + */ +const hasStandardBrowserWebWorkerEnv = (() => { + return ( + typeof WorkerGlobalScope !== 'undefined' && + // eslint-disable-next-line no-undef + self instanceof WorkerGlobalScope && + typeof self.importScripts === 'function' + ); +})(); + +const origin = hasBrowserEnv && window.location.href || 'http://localhost'; + +const utils = /*#__PURE__*/Object.freeze({ + __proto__: null, + hasBrowserEnv: hasBrowserEnv, + hasStandardBrowserWebWorkerEnv: hasStandardBrowserWebWorkerEnv, + hasStandardBrowserEnv: hasStandardBrowserEnv, + navigator: _navigator, + origin: origin +}); + +const platform = { + ...utils, + ...platform$1 +}; + +function toURLEncodedForm(data, options) { + return toFormData$1(data, new platform.classes.URLSearchParams(), Object.assign({ + visitor: function(value, key, path, helpers) { + if (platform.isNode && utils$1.isBuffer(value)) { + this.append(key, value.toString('base64')); + return false; + } + + return helpers.defaultVisitor.apply(this, arguments); + } + }, options)); +} + +/** + * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z'] + * + * @param {string} name - The name of the property to get. + * + * @returns An array of strings. + */ +function parsePropPath(name) { + // foo[x][y][z] + // foo.x.y.z + // foo-x-y-z + // foo x y z + return utils$1.matchAll(/\w+|\[(\w*)]/g, name).map(match => { + return match[0] === '[]' ? '' : match[1] || match[0]; + }); +} + +/** + * Convert an array to an object. + * + * @param {Array} arr - The array to convert to an object. + * + * @returns An object with the same keys and values as the array. + */ +function arrayToObject(arr) { + const obj = {}; + const keys = Object.keys(arr); + let i; + const len = keys.length; + let key; + for (i = 0; i < len; i++) { + key = keys[i]; + obj[key] = arr[key]; + } + return obj; +} + +/** + * It takes a FormData object and returns a JavaScript object + * + * @param {string} formData The FormData object to convert to JSON. + * + * @returns {Object | null} The converted object. + */ +function formDataToJSON(formData) { + function buildPath(path, value, target, index) { + let name = path[index++]; + + if (name === '__proto__') return true; + + const isNumericKey = Number.isFinite(+name); + const isLast = index >= path.length; + name = !name && utils$1.isArray(target) ? target.length : name; + + if (isLast) { + if (utils$1.hasOwnProp(target, name)) { + target[name] = [target[name], value]; + } else { + target[name] = value; + } + + return !isNumericKey; + } + + if (!target[name] || !utils$1.isObject(target[name])) { + target[name] = []; + } + + const result = buildPath(path, value, target[name], index); + + if (result && utils$1.isArray(target[name])) { + target[name] = arrayToObject(target[name]); + } + + return !isNumericKey; + } + + if (utils$1.isFormData(formData) && utils$1.isFunction(formData.entries)) { + const obj = {}; + + utils$1.forEachEntry(formData, (name, value) => { + buildPath(parsePropPath(name), value, obj, 0); + }); + + return obj; + } + + return null; +} + +/** + * It takes a string, tries to parse it, and if it fails, it returns the stringified version + * of the input + * + * @param {any} rawValue - The value to be stringified. + * @param {Function} parser - A function that parses a string into a JavaScript object. + * @param {Function} encoder - A function that takes a value and returns a string. + * + * @returns {string} A stringified version of the rawValue. + */ +function stringifySafely(rawValue, parser, encoder) { + if (utils$1.isString(rawValue)) { + try { + (parser || JSON.parse)(rawValue); + return utils$1.trim(rawValue); + } catch (e) { + if (e.name !== 'SyntaxError') { + throw e; + } + } + } + + return (encoder || JSON.stringify)(rawValue); +} + +const defaults = { + + transitional: transitionalDefaults, + + adapter: ['xhr', 'http', 'fetch'], + + transformRequest: [function transformRequest(data, headers) { + const contentType = headers.getContentType() || ''; + const hasJSONContentType = contentType.indexOf('application/json') > -1; + const isObjectPayload = utils$1.isObject(data); + + if (isObjectPayload && utils$1.isHTMLForm(data)) { + data = new FormData(data); + } + + const isFormData = utils$1.isFormData(data); + + if (isFormData) { + return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data; + } + + if (utils$1.isArrayBuffer(data) || + utils$1.isBuffer(data) || + utils$1.isStream(data) || + utils$1.isFile(data) || + utils$1.isBlob(data) || + utils$1.isReadableStream(data) + ) { + return data; + } + if (utils$1.isArrayBufferView(data)) { + return data.buffer; + } + if (utils$1.isURLSearchParams(data)) { + headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false); + return data.toString(); + } + + let isFileList; + + if (isObjectPayload) { + if (contentType.indexOf('application/x-www-form-urlencoded') > -1) { + return toURLEncodedForm(data, this.formSerializer).toString(); + } + + if ((isFileList = utils$1.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { + const _FormData = this.env && this.env.FormData; + + return toFormData$1( + isFileList ? {'files[]': data} : data, + _FormData && new _FormData(), + this.formSerializer + ); + } + } + + if (isObjectPayload || hasJSONContentType ) { + headers.setContentType('application/json', false); + return stringifySafely(data); + } + + return data; + }], + + transformResponse: [function transformResponse(data) { + const transitional = this.transitional || defaults.transitional; + const forcedJSONParsing = transitional && transitional.forcedJSONParsing; + const JSONRequested = this.responseType === 'json'; + + if (utils$1.isResponse(data) || utils$1.isReadableStream(data)) { + return data; + } + + if (data && utils$1.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) { + const silentJSONParsing = transitional && transitional.silentJSONParsing; + const strictJSONParsing = !silentJSONParsing && JSONRequested; + + try { + return JSON.parse(data); + } catch (e) { + if (strictJSONParsing) { + if (e.name === 'SyntaxError') { + throw AxiosError$1.from(e, AxiosError$1.ERR_BAD_RESPONSE, this, null, this.response); + } + throw e; + } + } + } + + return data; + }], + + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + maxBodyLength: -1, + + env: { + FormData: platform.classes.FormData, + Blob: platform.classes.Blob + }, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + }, + + headers: { + common: { + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': undefined + } + } +}; + +utils$1.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => { + defaults.headers[method] = {}; +}); + +const defaults$1 = defaults; + +// RawAxiosHeaders whose duplicates are ignored by node +// c.f. https://nodejs.org/api/http.html#http_message_headers +const ignoreDuplicateOf = utils$1.toObjectSet([ + 'age', 'authorization', 'content-length', 'content-type', 'etag', + 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', + 'last-modified', 'location', 'max-forwards', 'proxy-authorization', + 'referer', 'retry-after', 'user-agent' +]); + +/** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} rawHeaders Headers needing to be parsed + * + * @returns {Object} Headers parsed into an object + */ +const parseHeaders = rawHeaders => { + const parsed = {}; + let key; + let val; + let i; + + rawHeaders && rawHeaders.split('\n').forEach(function parser(line) { + i = line.indexOf(':'); + key = line.substring(0, i).trim().toLowerCase(); + val = line.substring(i + 1).trim(); + + if (!key || (parsed[key] && ignoreDuplicateOf[key])) { + return; + } + + if (key === 'set-cookie') { + if (parsed[key]) { + parsed[key].push(val); + } else { + parsed[key] = [val]; + } + } else { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + }); + + return parsed; +}; + +const $internals = Symbol('internals'); + +function normalizeHeader(header) { + return header && String(header).trim().toLowerCase(); +} + +function normalizeValue(value) { + if (value === false || value == null) { + return value; + } + + return utils$1.isArray(value) ? value.map(normalizeValue) : String(value); +} + +function parseTokens(str) { + const tokens = Object.create(null); + const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g; + let match; + + while ((match = tokensRE.exec(str))) { + tokens[match[1]] = match[2]; + } + + return tokens; +} + +const isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim()); + +function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) { + if (utils$1.isFunction(filter)) { + return filter.call(this, value, header); + } + + if (isHeaderNameFilter) { + value = header; + } + + if (!utils$1.isString(value)) return; + + if (utils$1.isString(filter)) { + return value.indexOf(filter) !== -1; + } + + if (utils$1.isRegExp(filter)) { + return filter.test(value); + } +} + +function formatHeader(header) { + return header.trim() + .toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => { + return char.toUpperCase() + str; + }); +} + +function buildAccessors(obj, header) { + const accessorName = utils$1.toCamelCase(' ' + header); + + ['get', 'set', 'has'].forEach(methodName => { + Object.defineProperty(obj, methodName + accessorName, { + value: function(arg1, arg2, arg3) { + return this[methodName].call(this, header, arg1, arg2, arg3); + }, + configurable: true + }); + }); +} + +class AxiosHeaders$1 { + constructor(headers) { + headers && this.set(headers); + } + + set(header, valueOrRewrite, rewrite) { + const self = this; + + function setHeader(_value, _header, _rewrite) { + const lHeader = normalizeHeader(_header); + + if (!lHeader) { + throw new Error('header name must be a non-empty string'); + } + + const key = utils$1.findKey(self, lHeader); + + if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) { + self[key || _header] = normalizeValue(_value); + } + } + + const setHeaders = (headers, _rewrite) => + utils$1.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite)); + + if (utils$1.isPlainObject(header) || header instanceof this.constructor) { + setHeaders(header, valueOrRewrite); + } else if(utils$1.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { + setHeaders(parseHeaders(header), valueOrRewrite); + } else if (utils$1.isObject(header) && utils$1.isIterable(header)) { + let obj = {}, dest, key; + for (const entry of header) { + if (!utils$1.isArray(entry)) { + throw TypeError('Object iterator must return a key-value pair'); + } + + obj[key = entry[0]] = (dest = obj[key]) ? + (utils$1.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1]; + } + + setHeaders(obj, valueOrRewrite); + } else { + header != null && setHeader(valueOrRewrite, header, rewrite); + } + + return this; + } + + get(header, parser) { + header = normalizeHeader(header); + + if (header) { + const key = utils$1.findKey(this, header); + + if (key) { + const value = this[key]; + + if (!parser) { + return value; + } + + if (parser === true) { + return parseTokens(value); + } + + if (utils$1.isFunction(parser)) { + return parser.call(this, value, key); + } + + if (utils$1.isRegExp(parser)) { + return parser.exec(value); + } + + throw new TypeError('parser must be boolean|regexp|function'); + } + } + } + + has(header, matcher) { + header = normalizeHeader(header); + + if (header) { + const key = utils$1.findKey(this, header); + + return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher))); + } + + return false; + } + + delete(header, matcher) { + const self = this; + let deleted = false; + + function deleteHeader(_header) { + _header = normalizeHeader(_header); + + if (_header) { + const key = utils$1.findKey(self, _header); + + if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) { + delete self[key]; + + deleted = true; + } + } + } + + if (utils$1.isArray(header)) { + header.forEach(deleteHeader); + } else { + deleteHeader(header); + } + + return deleted; + } + + clear(matcher) { + const keys = Object.keys(this); + let i = keys.length; + let deleted = false; + + while (i--) { + const key = keys[i]; + if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) { + delete this[key]; + deleted = true; + } + } + + return deleted; + } + + normalize(format) { + const self = this; + const headers = {}; + + utils$1.forEach(this, (value, header) => { + const key = utils$1.findKey(headers, header); + + if (key) { + self[key] = normalizeValue(value); + delete self[header]; + return; + } + + const normalized = format ? formatHeader(header) : String(header).trim(); + + if (normalized !== header) { + delete self[header]; + } + + self[normalized] = normalizeValue(value); + + headers[normalized] = true; + }); + + return this; + } + + concat(...targets) { + return this.constructor.concat(this, ...targets); + } + + toJSON(asStrings) { + const obj = Object.create(null); + + utils$1.forEach(this, (value, header) => { + value != null && value !== false && (obj[header] = asStrings && utils$1.isArray(value) ? value.join(', ') : value); + }); + + return obj; + } + + [Symbol.iterator]() { + return Object.entries(this.toJSON())[Symbol.iterator](); + } + + toString() { + return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\n'); + } + + getSetCookie() { + return this.get("set-cookie") || []; + } + + get [Symbol.toStringTag]() { + return 'AxiosHeaders'; + } + + static from(thing) { + return thing instanceof this ? thing : new this(thing); + } + + static concat(first, ...targets) { + const computed = new this(first); + + targets.forEach((target) => computed.set(target)); + + return computed; + } + + static accessor(header) { + const internals = this[$internals] = (this[$internals] = { + accessors: {} + }); + + const accessors = internals.accessors; + const prototype = this.prototype; + + function defineAccessor(_header) { + const lHeader = normalizeHeader(_header); + + if (!accessors[lHeader]) { + buildAccessors(prototype, _header); + accessors[lHeader] = true; + } + } + + utils$1.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header); + + return this; + } +} + +AxiosHeaders$1.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']); + +// reserved names hotfix +utils$1.reduceDescriptors(AxiosHeaders$1.prototype, ({value}, key) => { + let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set` + return { + get: () => value, + set(headerValue) { + this[mapped] = headerValue; + } + } +}); + +utils$1.freezeMethods(AxiosHeaders$1); + +const AxiosHeaders$2 = AxiosHeaders$1; + +/** + * Transform the data for a request or a response + * + * @param {Array|Function} fns A single function or Array of functions + * @param {?Object} response The response object + * + * @returns {*} The resulting transformed data + */ +function transformData(fns, response) { + const config = this || defaults$1; + const context = response || config; + const headers = AxiosHeaders$2.from(context.headers); + let data = context.data; + + utils$1.forEach(fns, function transform(fn) { + data = fn.call(config, data, headers.normalize(), response ? response.status : undefined); + }); + + headers.normalize(); + + return data; +} + +function isCancel$1(value) { + return !!(value && value.__CANCEL__); +} + +/** + * A `CanceledError` is an object that is thrown when an operation is canceled. + * + * @param {string=} message The message. + * @param {Object=} config The config. + * @param {Object=} request The request. + * + * @returns {CanceledError} The created error. + */ +function CanceledError$1(message, config, request) { + // eslint-disable-next-line no-eq-null,eqeqeq + AxiosError$1.call(this, message == null ? 'canceled' : message, AxiosError$1.ERR_CANCELED, config, request); + this.name = 'CanceledError'; +} + +utils$1.inherits(CanceledError$1, AxiosError$1, { + __CANCEL__: true +}); + +/** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + * + * @returns {object} The response. + */ +function settle(resolve, reject, response) { + const validateStatus = response.config.validateStatus; + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(new AxiosError$1( + 'Request failed with status code ' + response.status, + [AxiosError$1.ERR_BAD_REQUEST, AxiosError$1.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], + response.config, + response.request, + response + )); + } +} + +function parseProtocol(url) { + const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); + return match && match[1] || ''; +} + +/** + * Calculate data maxRate + * @param {Number} [samplesCount= 10] + * @param {Number} [min= 1000] + * @returns {Function} + */ +function speedometer(samplesCount, min) { + samplesCount = samplesCount || 10; + const bytes = new Array(samplesCount); + const timestamps = new Array(samplesCount); + let head = 0; + let tail = 0; + let firstSampleTS; + + min = min !== undefined ? min : 1000; + + return function push(chunkLength) { + const now = Date.now(); + + const startedAt = timestamps[tail]; + + if (!firstSampleTS) { + firstSampleTS = now; + } + + bytes[head] = chunkLength; + timestamps[head] = now; + + let i = tail; + let bytesCount = 0; + + while (i !== head) { + bytesCount += bytes[i++]; + i = i % samplesCount; + } + + head = (head + 1) % samplesCount; + + if (head === tail) { + tail = (tail + 1) % samplesCount; + } + + if (now - firstSampleTS < min) { + return; + } + + const passed = startedAt && now - startedAt; + + return passed ? Math.round(bytesCount * 1000 / passed) : undefined; + }; +} + +/** + * Throttle decorator + * @param {Function} fn + * @param {Number} freq + * @return {Function} + */ +function throttle(fn, freq) { + let timestamp = 0; + let threshold = 1000 / freq; + let lastArgs; + let timer; + + const invoke = (args, now = Date.now()) => { + timestamp = now; + lastArgs = null; + if (timer) { + clearTimeout(timer); + timer = null; + } + fn.apply(null, args); + }; + + const throttled = (...args) => { + const now = Date.now(); + const passed = now - timestamp; + if ( passed >= threshold) { + invoke(args, now); + } else { + lastArgs = args; + if (!timer) { + timer = setTimeout(() => { + timer = null; + invoke(lastArgs); + }, threshold - passed); + } + } + }; + + const flush = () => lastArgs && invoke(lastArgs); + + return [throttled, flush]; +} + +const progressEventReducer = (listener, isDownloadStream, freq = 3) => { + let bytesNotified = 0; + const _speedometer = speedometer(50, 250); + + return throttle(e => { + const loaded = e.loaded; + const total = e.lengthComputable ? e.total : undefined; + const progressBytes = loaded - bytesNotified; + const rate = _speedometer(progressBytes); + const inRange = loaded <= total; + + bytesNotified = loaded; + + const data = { + loaded, + total, + progress: total ? (loaded / total) : undefined, + bytes: progressBytes, + rate: rate ? rate : undefined, + estimated: rate && total && inRange ? (total - loaded) / rate : undefined, + event: e, + lengthComputable: total != null, + [isDownloadStream ? 'download' : 'upload']: true + }; + + listener(data); + }, freq); +}; + +const progressEventDecorator = (total, throttled) => { + const lengthComputable = total != null; + + return [(loaded) => throttled[0]({ + lengthComputable, + total, + loaded + }), throttled[1]]; +}; + +const asyncDecorator = (fn) => (...args) => utils$1.asap(() => fn(...args)); + +const isURLSameOrigin = platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => { + url = new URL(url, platform.origin); + + return ( + origin.protocol === url.protocol && + origin.host === url.host && + (isMSIE || origin.port === url.port) + ); +})( + new URL(platform.origin), + platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent) +) : () => true; + +const cookies = platform.hasStandardBrowserEnv ? + + // Standard browser envs support document.cookie + { + write(name, value, expires, path, domain, secure) { + const cookie = [name + '=' + encodeURIComponent(value)]; + + utils$1.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString()); + + utils$1.isString(path) && cookie.push('path=' + path); + + utils$1.isString(domain) && cookie.push('domain=' + domain); + + secure === true && cookie.push('secure'); + + document.cookie = cookie.join('; '); + }, + + read(name) { + const match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); + return (match ? decodeURIComponent(match[3]) : null); + }, + + remove(name) { + this.write(name, '', Date.now() - 86400000); + } + } + + : + + // Non-standard browser env (web workers, react-native) lack needed support. + { + write() {}, + read() { + return null; + }, + remove() {} + }; + +/** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ +function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); +} + +/** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * + * @returns {string} The combined URL + */ +function combineURLs(baseURL, relativeURL) { + return relativeURL + ? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '') + : baseURL; +} + +/** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * + * @returns {string} The combined full path + */ +function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) { + let isRelativeUrl = !isAbsoluteURL(requestedURL); + if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; +} + +const headersToObject = (thing) => thing instanceof AxiosHeaders$2 ? { ...thing } : thing; + +/** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * + * @returns {Object} New object resulting from merging config2 to config1 + */ +function mergeConfig$1(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {}; + const config = {}; + + function getMergedValue(target, source, prop, caseless) { + if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) { + return utils$1.merge.call({caseless}, target, source); + } else if (utils$1.isPlainObject(source)) { + return utils$1.merge({}, source); + } else if (utils$1.isArray(source)) { + return source.slice(); + } + return source; + } + + // eslint-disable-next-line consistent-return + function mergeDeepProperties(a, b, prop , caseless) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(a, b, prop , caseless); + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a, prop , caseless); + } + } + + // eslint-disable-next-line consistent-return + function valueFromConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b); + } + } + + // eslint-disable-next-line consistent-return + function defaultToConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b); + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a); + } + } + + // eslint-disable-next-line consistent-return + function mergeDirectKeys(a, b, prop) { + if (prop in config2) { + return getMergedValue(a, b); + } else if (prop in config1) { + return getMergedValue(undefined, a); + } + } + + const mergeMap = { + url: valueFromConfig2, + method: valueFromConfig2, + data: valueFromConfig2, + baseURL: defaultToConfig2, + transformRequest: defaultToConfig2, + transformResponse: defaultToConfig2, + paramsSerializer: defaultToConfig2, + timeout: defaultToConfig2, + timeoutMessage: defaultToConfig2, + withCredentials: defaultToConfig2, + withXSRFToken: defaultToConfig2, + adapter: defaultToConfig2, + responseType: defaultToConfig2, + xsrfCookieName: defaultToConfig2, + xsrfHeaderName: defaultToConfig2, + onUploadProgress: defaultToConfig2, + onDownloadProgress: defaultToConfig2, + decompress: defaultToConfig2, + maxContentLength: defaultToConfig2, + maxBodyLength: defaultToConfig2, + beforeRedirect: defaultToConfig2, + transport: defaultToConfig2, + httpAgent: defaultToConfig2, + httpsAgent: defaultToConfig2, + cancelToken: defaultToConfig2, + socketPath: defaultToConfig2, + responseEncoding: defaultToConfig2, + validateStatus: mergeDirectKeys, + headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true) + }; + + utils$1.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) { + const merge = mergeMap[prop] || mergeDeepProperties; + const configValue = merge(config1[prop], config2[prop], prop); + (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); + }); + + return config; +} + +const resolveConfig = (config) => { + const newConfig = mergeConfig$1({}, config); + + let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig; + + newConfig.headers = headers = AxiosHeaders$2.from(headers); + + newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer); + + // HTTP basic authentication + if (auth) { + headers.set('Authorization', 'Basic ' + + btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : '')) + ); + } + + let contentType; + + if (utils$1.isFormData(data)) { + if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) { + headers.setContentType(undefined); // Let the browser set it + } else if ((contentType = headers.getContentType()) !== false) { + // fix semicolon duplication issue for ReactNative FormData implementation + const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : []; + headers.setContentType([type || 'multipart/form-data', ...tokens].join('; ')); + } + } + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + + if (platform.hasStandardBrowserEnv) { + withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig)); + + if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) { + // Add xsrf header + const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName); + + if (xsrfValue) { + headers.set(xsrfHeaderName, xsrfValue); + } + } + } + + return newConfig; +}; + +const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined'; + +const xhrAdapter = isXHRAdapterSupported && function (config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + const _config = resolveConfig(config); + let requestData = _config.data; + const requestHeaders = AxiosHeaders$2.from(_config.headers).normalize(); + let {responseType, onUploadProgress, onDownloadProgress} = _config; + let onCanceled; + let uploadThrottled, downloadThrottled; + let flushUpload, flushDownload; + + function done() { + flushUpload && flushUpload(); // flush events + flushDownload && flushDownload(); // flush events + + _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled); + + _config.signal && _config.signal.removeEventListener('abort', onCanceled); + } + + let request = new XMLHttpRequest(); + + request.open(_config.method.toUpperCase(), _config.url, true); + + // Set the request timeout in MS + request.timeout = _config.timeout; + + function onloadend() { + if (!request) { + return; + } + // Prepare the response + const responseHeaders = AxiosHeaders$2.from( + 'getAllResponseHeaders' in request && request.getAllResponseHeaders() + ); + const responseData = !responseType || responseType === 'text' || responseType === 'json' ? + request.responseText : request.response; + const response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config, + request + }; + + settle(function _resolve(value) { + resolve(value); + done(); + }, function _reject(err) { + reject(err); + done(); + }, response); + + // Clean up request + request = null; + } + + if ('onloadend' in request) { + // Use onloadend if available + request.onloadend = onloadend; + } else { + // Listen for ready state to emulate onloadend + request.onreadystatechange = function handleLoad() { + if (!request || request.readyState !== 4) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { + return; + } + // readystate handler is calling before onerror or ontimeout handlers, + // so we should call onloadend on the next 'tick' + setTimeout(onloadend); + }; + } + + // Handle browser request cancellation (as opposed to a manual cancellation) + request.onabort = function handleAbort() { + if (!request) { + return; + } + + reject(new AxiosError$1('Request aborted', AxiosError$1.ECONNABORTED, config, request)); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError() { + // Real errors are hidden from us by the browser + // onerror should only fire if it's a network error + reject(new AxiosError$1('Network Error', AxiosError$1.ERR_NETWORK, config, request)); + + // Clean up request + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded'; + const transitional = _config.transitional || transitionalDefaults; + if (_config.timeoutErrorMessage) { + timeoutErrorMessage = _config.timeoutErrorMessage; + } + reject(new AxiosError$1( + timeoutErrorMessage, + transitional.clarifyTimeoutError ? AxiosError$1.ETIMEDOUT : AxiosError$1.ECONNABORTED, + config, + request)); + + // Clean up request + request = null; + }; + + // Remove Content-Type if data is undefined + requestData === undefined && requestHeaders.setContentType(null); + + // Add headers to the request + if ('setRequestHeader' in request) { + utils$1.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) { + request.setRequestHeader(key, val); + }); + } + + // Add withCredentials to request if needed + if (!utils$1.isUndefined(_config.withCredentials)) { + request.withCredentials = !!_config.withCredentials; + } + + // Add responseType to request if needed + if (responseType && responseType !== 'json') { + request.responseType = _config.responseType; + } + + // Handle progress if needed + if (onDownloadProgress) { + ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true)); + request.addEventListener('progress', downloadThrottled); + } + + // Not all browsers support upload events + if (onUploadProgress && request.upload) { + ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress)); + + request.upload.addEventListener('progress', uploadThrottled); + + request.upload.addEventListener('loadend', flushUpload); + } + + if (_config.cancelToken || _config.signal) { + // Handle cancellation + // eslint-disable-next-line func-names + onCanceled = cancel => { + if (!request) { + return; + } + reject(!cancel || cancel.type ? new CanceledError$1(null, config, request) : cancel); + request.abort(); + request = null; + }; + + _config.cancelToken && _config.cancelToken.subscribe(onCanceled); + if (_config.signal) { + _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled); + } + } + + const protocol = parseProtocol(_config.url); + + if (protocol && platform.protocols.indexOf(protocol) === -1) { + reject(new AxiosError$1('Unsupported protocol ' + protocol + ':', AxiosError$1.ERR_BAD_REQUEST, config)); + return; + } + + + // Send the request + request.send(requestData || null); + }); +}; + +const composeSignals = (signals, timeout) => { + const {length} = (signals = signals ? signals.filter(Boolean) : []); + + if (timeout || length) { + let controller = new AbortController(); + + let aborted; + + const onabort = function (reason) { + if (!aborted) { + aborted = true; + unsubscribe(); + const err = reason instanceof Error ? reason : this.reason; + controller.abort(err instanceof AxiosError$1 ? err : new CanceledError$1(err instanceof Error ? err.message : err)); + } + }; + + let timer = timeout && setTimeout(() => { + timer = null; + onabort(new AxiosError$1(`timeout ${timeout} of ms exceeded`, AxiosError$1.ETIMEDOUT)); + }, timeout); + + const unsubscribe = () => { + if (signals) { + timer && clearTimeout(timer); + timer = null; + signals.forEach(signal => { + signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort); + }); + signals = null; + } + }; + + signals.forEach((signal) => signal.addEventListener('abort', onabort)); + + const {signal} = controller; + + signal.unsubscribe = () => utils$1.asap(unsubscribe); + + return signal; + } +}; + +const composeSignals$1 = composeSignals; + +const streamChunk = function* (chunk, chunkSize) { + let len = chunk.byteLength; + + if (!chunkSize || len < chunkSize) { + yield chunk; + return; + } + + let pos = 0; + let end; + + while (pos < len) { + end = pos + chunkSize; + yield chunk.slice(pos, end); + pos = end; + } +}; + +const readBytes = async function* (iterable, chunkSize) { + for await (const chunk of readStream(iterable)) { + yield* streamChunk(chunk, chunkSize); + } +}; + +const readStream = async function* (stream) { + if (stream[Symbol.asyncIterator]) { + yield* stream; + return; + } + + const reader = stream.getReader(); + try { + for (;;) { + const {done, value} = await reader.read(); + if (done) { + break; + } + yield value; + } + } finally { + await reader.cancel(); + } +}; + +const trackStream = (stream, chunkSize, onProgress, onFinish) => { + const iterator = readBytes(stream, chunkSize); + + let bytes = 0; + let done; + let _onFinish = (e) => { + if (!done) { + done = true; + onFinish && onFinish(e); + } + }; + + return new ReadableStream({ + async pull(controller) { + try { + const {done, value} = await iterator.next(); + + if (done) { + _onFinish(); + controller.close(); + return; + } + + let len = value.byteLength; + if (onProgress) { + let loadedBytes = bytes += len; + onProgress(loadedBytes); + } + controller.enqueue(new Uint8Array(value)); + } catch (err) { + _onFinish(err); + throw err; + } + }, + cancel(reason) { + _onFinish(reason); + return iterator.return(); + } + }, { + highWaterMark: 2 + }) +}; + +const isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function'; +const isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function'; + +// used only inside the fetch adapter +const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ? + ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) : + async (str) => new Uint8Array(await new Response(str).arrayBuffer()) +); + +const test = (fn, ...args) => { + try { + return !!fn(...args); + } catch (e) { + return false + } +}; + +const supportsRequestStream = isReadableStreamSupported && test(() => { + let duplexAccessed = false; + + const hasContentType = new Request(platform.origin, { + body: new ReadableStream(), + method: 'POST', + get duplex() { + duplexAccessed = true; + return 'half'; + }, + }).headers.has('Content-Type'); + + return duplexAccessed && !hasContentType; +}); + +const DEFAULT_CHUNK_SIZE = 64 * 1024; + +const supportsResponseStream = isReadableStreamSupported && + test(() => utils$1.isReadableStream(new Response('').body)); + + +const resolvers = { + stream: supportsResponseStream && ((res) => res.body) +}; + +isFetchSupported && (((res) => { + ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => { + !resolvers[type] && (resolvers[type] = utils$1.isFunction(res[type]) ? (res) => res[type]() : + (_, config) => { + throw new AxiosError$1(`Response type '${type}' is not supported`, AxiosError$1.ERR_NOT_SUPPORT, config); + }); + }); +})(new Response)); + +const getBodyLength = async (body) => { + if (body == null) { + return 0; + } + + if(utils$1.isBlob(body)) { + return body.size; + } + + if(utils$1.isSpecCompliantForm(body)) { + const _request = new Request(platform.origin, { + method: 'POST', + body, + }); + return (await _request.arrayBuffer()).byteLength; + } + + if(utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body)) { + return body.byteLength; + } + + if(utils$1.isURLSearchParams(body)) { + body = body + ''; + } + + if(utils$1.isString(body)) { + return (await encodeText(body)).byteLength; + } +}; + +const resolveBodyLength = async (headers, body) => { + const length = utils$1.toFiniteNumber(headers.getContentLength()); + + return length == null ? getBodyLength(body) : length; +}; + +const fetchAdapter = isFetchSupported && (async (config) => { + let { + url, + method, + data, + signal, + cancelToken, + timeout, + onDownloadProgress, + onUploadProgress, + responseType, + headers, + withCredentials = 'same-origin', + fetchOptions + } = resolveConfig(config); + + responseType = responseType ? (responseType + '').toLowerCase() : 'text'; + + let composedSignal = composeSignals$1([signal, cancelToken && cancelToken.toAbortSignal()], timeout); + + let request; + + const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => { + composedSignal.unsubscribe(); + }); + + let requestContentLength; + + try { + if ( + onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' && + (requestContentLength = await resolveBodyLength(headers, data)) !== 0 + ) { + let _request = new Request(url, { + method: 'POST', + body: data, + duplex: "half" + }); + + let contentTypeHeader; + + if (utils$1.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) { + headers.setContentType(contentTypeHeader); + } + + if (_request.body) { + const [onProgress, flush] = progressEventDecorator( + requestContentLength, + progressEventReducer(asyncDecorator(onUploadProgress)) + ); + + data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush); + } + } + + if (!utils$1.isString(withCredentials)) { + withCredentials = withCredentials ? 'include' : 'omit'; + } + + // Cloudflare Workers throws when credentials are defined + // see https://github.com/cloudflare/workerd/issues/902 + const isCredentialsSupported = "credentials" in Request.prototype; + request = new Request(url, { + ...fetchOptions, + signal: composedSignal, + method: method.toUpperCase(), + headers: headers.normalize().toJSON(), + body: data, + duplex: "half", + credentials: isCredentialsSupported ? withCredentials : undefined + }); + + let response = await fetch(request); + + const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response'); + + if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) { + const options = {}; + + ['status', 'statusText', 'headers'].forEach(prop => { + options[prop] = response[prop]; + }); + + const responseContentLength = utils$1.toFiniteNumber(response.headers.get('content-length')); + + const [onProgress, flush] = onDownloadProgress && progressEventDecorator( + responseContentLength, + progressEventReducer(asyncDecorator(onDownloadProgress), true) + ) || []; + + response = new Response( + trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => { + flush && flush(); + unsubscribe && unsubscribe(); + }), + options + ); + } + + responseType = responseType || 'text'; + + let responseData = await resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config); + + !isStreamResponse && unsubscribe && unsubscribe(); + + return await new Promise((resolve, reject) => { + settle(resolve, reject, { + data: responseData, + headers: AxiosHeaders$2.from(response.headers), + status: response.status, + statusText: response.statusText, + config, + request + }); + }) + } catch (err) { + unsubscribe && unsubscribe(); + + if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) { + throw Object.assign( + new AxiosError$1('Network Error', AxiosError$1.ERR_NETWORK, config, request), + { + cause: err.cause || err + } + ) + } + + throw AxiosError$1.from(err, err && err.code, config, request); + } +}); + +const knownAdapters = { + http: httpAdapter, + xhr: xhrAdapter, + fetch: fetchAdapter +}; + +utils$1.forEach(knownAdapters, (fn, value) => { + if (fn) { + try { + Object.defineProperty(fn, 'name', {value}); + } catch (e) { + // eslint-disable-next-line no-empty + } + Object.defineProperty(fn, 'adapterName', {value}); + } +}); + +const renderReason = (reason) => `- ${reason}`; + +const isResolvedHandle = (adapter) => utils$1.isFunction(adapter) || adapter === null || adapter === false; + +const adapters = { + getAdapter: (adapters) => { + adapters = utils$1.isArray(adapters) ? adapters : [adapters]; + + const {length} = adapters; + let nameOrAdapter; + let adapter; + + const rejectedReasons = {}; + + for (let i = 0; i < length; i++) { + nameOrAdapter = adapters[i]; + let id; + + adapter = nameOrAdapter; + + if (!isResolvedHandle(nameOrAdapter)) { + adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()]; + + if (adapter === undefined) { + throw new AxiosError$1(`Unknown adapter '${id}'`); + } + } + + if (adapter) { + break; + } + + rejectedReasons[id || '#' + i] = adapter; + } + + if (!adapter) { + + const reasons = Object.entries(rejectedReasons) + .map(([id, state]) => `adapter ${id} ` + + (state === false ? 'is not supported by the environment' : 'is not available in the build') + ); + + let s = length ? + (reasons.length > 1 ? 'since :\n' + reasons.map(renderReason).join('\n') : ' ' + renderReason(reasons[0])) : + 'as no adapter specified'; + + throw new AxiosError$1( + `There is no suitable adapter to dispatch the request ` + s, + 'ERR_NOT_SUPPORT' + ); + } + + return adapter; + }, + adapters: knownAdapters +}; + +/** + * Throws a `CanceledError` if cancellation has been requested. + * + * @param {Object} config The config that is to be used for the request + * + * @returns {void} + */ +function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested(); + } + + if (config.signal && config.signal.aborted) { + throw new CanceledError$1(null, config); + } +} + +/** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * + * @returns {Promise} The Promise to be fulfilled + */ +function dispatchRequest(config) { + throwIfCancellationRequested(config); + + config.headers = AxiosHeaders$2.from(config.headers); + + // Transform request data + config.data = transformData.call( + config, + config.transformRequest + ); + + if (['post', 'put', 'patch'].indexOf(config.method) !== -1) { + config.headers.setContentType('application/x-www-form-urlencoded', false); + } + + const adapter = adapters.getAdapter(config.adapter || defaults$1.adapter); + + return adapter(config).then(function onAdapterResolution(response) { + throwIfCancellationRequested(config); + + // Transform response data + response.data = transformData.call( + config, + config.transformResponse, + response + ); + + response.headers = AxiosHeaders$2.from(response.headers); + + return response; + }, function onAdapterRejection(reason) { + if (!isCancel$1(reason)) { + throwIfCancellationRequested(config); + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData.call( + config, + config.transformResponse, + reason.response + ); + reason.response.headers = AxiosHeaders$2.from(reason.response.headers); + } + } + + return Promise.reject(reason); + }); +} + +const VERSION$1 = "1.9.0"; + +const validators$1 = {}; + +// eslint-disable-next-line func-names +['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => { + validators$1[type] = function validator(thing) { + return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; + }; +}); + +const deprecatedWarnings = {}; + +/** + * Transitional option validator + * + * @param {function|boolean?} validator - set to false if the transitional option has been removed + * @param {string?} version - deprecated version / removed since version + * @param {string?} message - some message with additional info + * + * @returns {function} + */ +validators$1.transitional = function transitional(validator, version, message) { + function formatMessage(opt, desc) { + return '[Axios v' + VERSION$1 + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); + } + + // eslint-disable-next-line func-names + return (value, opt, opts) => { + if (validator === false) { + throw new AxiosError$1( + formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), + AxiosError$1.ERR_DEPRECATED + ); + } + + if (version && !deprecatedWarnings[opt]) { + deprecatedWarnings[opt] = true; + // eslint-disable-next-line no-console + console.warn( + formatMessage( + opt, + ' has been deprecated since v' + version + ' and will be removed in the near future' + ) + ); + } + + return validator ? validator(value, opt, opts) : true; + }; +}; + +validators$1.spelling = function spelling(correctSpelling) { + return (value, opt) => { + // eslint-disable-next-line no-console + console.warn(`${opt} is likely a misspelling of ${correctSpelling}`); + return true; + } +}; + +/** + * Assert object's properties type + * + * @param {object} options + * @param {object} schema + * @param {boolean?} allowUnknown + * + * @returns {object} + */ + +function assertOptions(options, schema, allowUnknown) { + if (typeof options !== 'object') { + throw new AxiosError$1('options must be an object', AxiosError$1.ERR_BAD_OPTION_VALUE); + } + const keys = Object.keys(options); + let i = keys.length; + while (i-- > 0) { + const opt = keys[i]; + const validator = schema[opt]; + if (validator) { + const value = options[opt]; + const result = value === undefined || validator(value, opt, options); + if (result !== true) { + throw new AxiosError$1('option ' + opt + ' must be ' + result, AxiosError$1.ERR_BAD_OPTION_VALUE); + } + continue; + } + if (allowUnknown !== true) { + throw new AxiosError$1('Unknown option ' + opt, AxiosError$1.ERR_BAD_OPTION); + } + } +} + +const validator = { + assertOptions, + validators: validators$1 +}; + +const validators = validator.validators; + +/** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + * + * @return {Axios} A new instance of Axios + */ +class Axios$1 { + constructor(instanceConfig) { + this.defaults = instanceConfig || {}; + this.interceptors = { + request: new InterceptorManager$1(), + response: new InterceptorManager$1() + }; + } + + /** + * Dispatch a request + * + * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults) + * @param {?Object} config + * + * @returns {Promise} The Promise to be fulfilled + */ + async request(configOrUrl, config) { + try { + return await this._request(configOrUrl, config); + } catch (err) { + if (err instanceof Error) { + let dummy = {}; + + Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error()); + + // slice off the Error: ... line + const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, '') : ''; + try { + if (!err.stack) { + err.stack = stack; + // match without the 2 top stack lines + } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\n.+\n/, ''))) { + err.stack += '\n' + stack; + } + } catch (e) { + // ignore the case where "stack" is an un-writable property + } + } + + throw err; + } + } + + _request(configOrUrl, config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof configOrUrl === 'string') { + config = config || {}; + config.url = configOrUrl; + } else { + config = configOrUrl || {}; + } + + config = mergeConfig$1(this.defaults, config); + + const {transitional, paramsSerializer, headers} = config; + + if (transitional !== undefined) { + validator.assertOptions(transitional, { + silentJSONParsing: validators.transitional(validators.boolean), + forcedJSONParsing: validators.transitional(validators.boolean), + clarifyTimeoutError: validators.transitional(validators.boolean) + }, false); + } + + if (paramsSerializer != null) { + if (utils$1.isFunction(paramsSerializer)) { + config.paramsSerializer = { + serialize: paramsSerializer + }; + } else { + validator.assertOptions(paramsSerializer, { + encode: validators.function, + serialize: validators.function + }, true); + } + } + + // Set config.allowAbsoluteUrls + if (config.allowAbsoluteUrls !== undefined) ; else if (this.defaults.allowAbsoluteUrls !== undefined) { + config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls; + } else { + config.allowAbsoluteUrls = true; + } + + validator.assertOptions(config, { + baseUrl: validators.spelling('baseURL'), + withXsrfToken: validators.spelling('withXSRFToken') + }, true); + + // Set config.method + config.method = (config.method || this.defaults.method || 'get').toLowerCase(); + + // Flatten headers + let contextHeaders = headers && utils$1.merge( + headers.common, + headers[config.method] + ); + + headers && utils$1.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + (method) => { + delete headers[method]; + } + ); + + config.headers = AxiosHeaders$2.concat(contextHeaders, headers); + + // filter out skipped interceptors + const requestInterceptorChain = []; + let synchronousRequestInterceptors = true; + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { + return; + } + + synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; + + requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); + }); + + const responseInterceptorChain = []; + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + }); + + let promise; + let i = 0; + let len; + + if (!synchronousRequestInterceptors) { + const chain = [dispatchRequest.bind(this), undefined]; + chain.unshift.apply(chain, requestInterceptorChain); + chain.push.apply(chain, responseInterceptorChain); + len = chain.length; + + promise = Promise.resolve(config); + + while (i < len) { + promise = promise.then(chain[i++], chain[i++]); + } + + return promise; + } + + len = requestInterceptorChain.length; + + let newConfig = config; + + i = 0; + + while (i < len) { + const onFulfilled = requestInterceptorChain[i++]; + const onRejected = requestInterceptorChain[i++]; + try { + newConfig = onFulfilled(newConfig); + } catch (error) { + onRejected.call(this, error); + break; + } + } + + try { + promise = dispatchRequest.call(this, newConfig); + } catch (error) { + return Promise.reject(error); + } + + i = 0; + len = responseInterceptorChain.length; + + while (i < len) { + promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]); + } + + return promise; + } + + getUri(config) { + config = mergeConfig$1(this.defaults, config); + const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls); + return buildURL(fullPath, config.params, config.paramsSerializer); + } +} + +// Provide aliases for supported request methods +utils$1.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios$1.prototype[method] = function(url, config) { + return this.request(mergeConfig$1(config || {}, { + method, + url, + data: (config || {}).data + })); + }; +}); + +utils$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + + function generateHTTPMethod(isForm) { + return function httpMethod(url, data, config) { + return this.request(mergeConfig$1(config || {}, { + method, + headers: isForm ? { + 'Content-Type': 'multipart/form-data' + } : {}, + url, + data + })); + }; + } + + Axios$1.prototype[method] = generateHTTPMethod(); + + Axios$1.prototype[method + 'Form'] = generateHTTPMethod(true); +}); + +const Axios$2 = Axios$1; + +/** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @param {Function} executor The executor function. + * + * @returns {CancelToken} + */ +class CancelToken$1 { + constructor(executor) { + if (typeof executor !== 'function') { + throw new TypeError('executor must be a function.'); + } + + let resolvePromise; + + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve; + }); + + const token = this; + + // eslint-disable-next-line func-names + this.promise.then(cancel => { + if (!token._listeners) return; + + let i = token._listeners.length; + + while (i-- > 0) { + token._listeners[i](cancel); + } + token._listeners = null; + }); + + // eslint-disable-next-line func-names + this.promise.then = onfulfilled => { + let _resolve; + // eslint-disable-next-line func-names + const promise = new Promise(resolve => { + token.subscribe(resolve); + _resolve = resolve; + }).then(onfulfilled); + + promise.cancel = function reject() { + token.unsubscribe(_resolve); + }; + + return promise; + }; + + executor(function cancel(message, config, request) { + if (token.reason) { + // Cancellation has already been requested + return; + } + + token.reason = new CanceledError$1(message, config, request); + resolvePromise(token.reason); + }); + } + + /** + * Throws a `CanceledError` if cancellation has been requested. + */ + throwIfRequested() { + if (this.reason) { + throw this.reason; + } + } + + /** + * Subscribe to the cancel signal + */ + + subscribe(listener) { + if (this.reason) { + listener(this.reason); + return; + } + + if (this._listeners) { + this._listeners.push(listener); + } else { + this._listeners = [listener]; + } + } + + /** + * Unsubscribe from the cancel signal + */ + + unsubscribe(listener) { + if (!this._listeners) { + return; + } + const index = this._listeners.indexOf(listener); + if (index !== -1) { + this._listeners.splice(index, 1); + } + } + + toAbortSignal() { + const controller = new AbortController(); + + const abort = (err) => { + controller.abort(err); + }; + + this.subscribe(abort); + + controller.signal.unsubscribe = () => this.unsubscribe(abort); + + return controller.signal; + } + + /** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ + static source() { + let cancel; + const token = new CancelToken$1(function executor(c) { + cancel = c; + }); + return { + token, + cancel + }; + } +} + +const CancelToken$2 = CancelToken$1; + +/** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * var args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * + * @returns {Function} + */ +function spread$1(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; +} + +/** + * Determines whether the payload is an error thrown by Axios + * + * @param {*} payload The value to test + * + * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false + */ +function isAxiosError$1(payload) { + return utils$1.isObject(payload) && (payload.isAxiosError === true); +} + +const HttpStatusCode$1 = { + Continue: 100, + SwitchingProtocols: 101, + Processing: 102, + EarlyHints: 103, + Ok: 200, + Created: 201, + Accepted: 202, + NonAuthoritativeInformation: 203, + NoContent: 204, + ResetContent: 205, + PartialContent: 206, + MultiStatus: 207, + AlreadyReported: 208, + ImUsed: 226, + MultipleChoices: 300, + MovedPermanently: 301, + Found: 302, + SeeOther: 303, + NotModified: 304, + UseProxy: 305, + Unused: 306, + TemporaryRedirect: 307, + PermanentRedirect: 308, + BadRequest: 400, + Unauthorized: 401, + PaymentRequired: 402, + Forbidden: 403, + NotFound: 404, + MethodNotAllowed: 405, + NotAcceptable: 406, + ProxyAuthenticationRequired: 407, + RequestTimeout: 408, + Conflict: 409, + Gone: 410, + LengthRequired: 411, + PreconditionFailed: 412, + PayloadTooLarge: 413, + UriTooLong: 414, + UnsupportedMediaType: 415, + RangeNotSatisfiable: 416, + ExpectationFailed: 417, + ImATeapot: 418, + MisdirectedRequest: 421, + UnprocessableEntity: 422, + Locked: 423, + FailedDependency: 424, + TooEarly: 425, + UpgradeRequired: 426, + PreconditionRequired: 428, + TooManyRequests: 429, + RequestHeaderFieldsTooLarge: 431, + UnavailableForLegalReasons: 451, + InternalServerError: 500, + NotImplemented: 501, + BadGateway: 502, + ServiceUnavailable: 503, + GatewayTimeout: 504, + HttpVersionNotSupported: 505, + VariantAlsoNegotiates: 506, + InsufficientStorage: 507, + LoopDetected: 508, + NotExtended: 510, + NetworkAuthenticationRequired: 511, +}; + +Object.entries(HttpStatusCode$1).forEach(([key, value]) => { + HttpStatusCode$1[value] = key; +}); + +const HttpStatusCode$2 = HttpStatusCode$1; + +/** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * + * @returns {Axios} A new instance of Axios + */ +function createInstance(defaultConfig) { + const context = new Axios$2(defaultConfig); + const instance = bind(Axios$2.prototype.request, context); + + // Copy axios.prototype to instance + utils$1.extend(instance, Axios$2.prototype, context, {allOwnKeys: true}); + + // Copy context to instance + utils$1.extend(instance, context, null, {allOwnKeys: true}); + + // Factory for creating new instances + instance.create = function create(instanceConfig) { + return createInstance(mergeConfig$1(defaultConfig, instanceConfig)); + }; + + return instance; +} + +// Create the default instance to be exported +const axios = createInstance(defaults$1); + +// Expose Axios class to allow class inheritance +axios.Axios = Axios$2; + +// Expose Cancel & CancelToken +axios.CanceledError = CanceledError$1; +axios.CancelToken = CancelToken$2; +axios.isCancel = isCancel$1; +axios.VERSION = VERSION$1; +axios.toFormData = toFormData$1; + +// Expose AxiosError class +axios.AxiosError = AxiosError$1; + +// alias for CanceledError for backward compatibility +axios.Cancel = axios.CanceledError; + +// Expose all/spread +axios.all = function all(promises) { + return Promise.all(promises); +}; + +axios.spread = spread$1; + +// Expose isAxiosError +axios.isAxiosError = isAxiosError$1; + +// Expose mergeConfig +axios.mergeConfig = mergeConfig$1; + +axios.AxiosHeaders = AxiosHeaders$2; + +axios.formToJSON = thing => formDataToJSON(utils$1.isHTMLForm(thing) ? new FormData(thing) : thing); + +axios.getAdapter = adapters.getAdapter; + +axios.HttpStatusCode = HttpStatusCode$2; + +axios.default = axios; + +// this module should only have a default export +const axios$1 = axios; + +// This module is intended to unwrap Axios default export as named. +// Keep top-level export same with static properties +// so that it can keep same with es module or cjs +const { + Axios, + AxiosError, + CanceledError, + isCancel, + CancelToken, + VERSION, + all, + Cancel, + isAxiosError, + spread, + toFormData, + AxiosHeaders, + HttpStatusCode, + formToJSON, + getAdapter, + mergeConfig +} = axios$1; + +export { Axios, AxiosError, AxiosHeaders, Cancel, CancelToken, CanceledError, HttpStatusCode, VERSION, all, axios$1 as default, formToJSON, getAdapter, isAxiosError, isCancel, mergeConfig, spread, toFormData }; +//# sourceMappingURL=axios.js.map diff --git a/node_modules/axios/dist/esm/axios.js.map b/node_modules/axios/dist/esm/axios.js.map new file mode 100644 index 0000000..981ce0c --- /dev/null +++ b/node_modules/axios/dist/esm/axios.js.map @@ -0,0 +1 @@ +{"version":3,"file":"axios.js","sources":["../../lib/helpers/bind.js","../../lib/utils.js","../../lib/core/AxiosError.js","../../lib/helpers/null.js","../../lib/helpers/toFormData.js","../../lib/helpers/AxiosURLSearchParams.js","../../lib/helpers/buildURL.js","../../lib/core/InterceptorManager.js","../../lib/defaults/transitional.js","../../lib/platform/browser/classes/URLSearchParams.js","../../lib/platform/browser/classes/FormData.js","../../lib/platform/browser/classes/Blob.js","../../lib/platform/browser/index.js","../../lib/platform/common/utils.js","../../lib/platform/index.js","../../lib/helpers/toURLEncodedForm.js","../../lib/helpers/formDataToJSON.js","../../lib/defaults/index.js","../../lib/helpers/parseHeaders.js","../../lib/core/AxiosHeaders.js","../../lib/core/transformData.js","../../lib/cancel/isCancel.js","../../lib/cancel/CanceledError.js","../../lib/core/settle.js","../../lib/helpers/parseProtocol.js","../../lib/helpers/speedometer.js","../../lib/helpers/throttle.js","../../lib/helpers/progressEventReducer.js","../../lib/helpers/isURLSameOrigin.js","../../lib/helpers/cookies.js","../../lib/helpers/isAbsoluteURL.js","../../lib/helpers/combineURLs.js","../../lib/core/buildFullPath.js","../../lib/core/mergeConfig.js","../../lib/helpers/resolveConfig.js","../../lib/adapters/xhr.js","../../lib/helpers/composeSignals.js","../../lib/helpers/trackStream.js","../../lib/adapters/fetch.js","../../lib/adapters/adapters.js","../../lib/core/dispatchRequest.js","../../lib/env/data.js","../../lib/helpers/validator.js","../../lib/core/Axios.js","../../lib/cancel/CancelToken.js","../../lib/helpers/spread.js","../../lib/helpers/isAxiosError.js","../../lib/helpers/HttpStatusCode.js","../../lib/axios.js","../../index.js"],"sourcesContent":["'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\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 *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\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 (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 const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\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 *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && 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 *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.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 {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\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: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\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 * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\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 */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\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 *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\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 *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\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 *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\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 maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\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} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.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 *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" 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","'use strict';\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 *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\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 *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\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\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\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 // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\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(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, 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(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\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 *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(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.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\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.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.9.0\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(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 {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\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(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\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 *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n"],"names":["AxiosError","utils","prototype","toFormData","encode","URLSearchParams","FormData","Blob","platform","AxiosHeaders","defaults","isCancel","CanceledError","mergeConfig","composeSignals","VERSION","validators","Axios","InterceptorManager","CancelToken","spread","isAxiosError","HttpStatusCode","axios"],"mappings":";AAEe,SAAS,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE;AAC1C,EAAE,OAAO,SAAS,IAAI,GAAG;AACzB,IAAI,OAAO,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;AACxC,GAAG,CAAC;AACJ;;ACFA;AACA;AACA,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC;AACpC,MAAM,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC;AAChC,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,GAAG,MAAM,CAAC;AACvC;AACA,MAAM,MAAM,GAAG,CAAC,KAAK,IAAI,KAAK,IAAI;AAClC,IAAI,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AACvE,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACxB;AACA,MAAM,UAAU,GAAG,CAAC,IAAI,KAAK;AAC7B,EAAE,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAC5B,EAAE,OAAO,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI;AAC1C,EAAC;AACD;AACA,MAAM,UAAU,GAAG,IAAI,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,IAAI,CAAC;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;AACxB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,WAAW,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;AAC5C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,GAAG,EAAE;AACvB,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,WAAW,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,WAAW,CAAC;AACvG,OAAO,UAAU,CAAC,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;AAC7E,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,aAAa,GAAG,UAAU,CAAC,aAAa,CAAC,CAAC;AAChD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,iBAAiB,CAAC,GAAG,EAAE;AAChC,EAAE,IAAI,MAAM,CAAC;AACb,EAAE,IAAI,CAAC,OAAO,WAAW,KAAK,WAAW,MAAM,WAAW,CAAC,MAAM,CAAC,EAAE;AACpE,IAAI,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACrC,GAAG,MAAM;AACT,IAAI,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AAClE,GAAG;AACH,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,QAAQ,GAAG,CAAC,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC;AACxE;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,SAAS,GAAG,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,KAAK,CAAC;AAC7D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,aAAa,GAAG,CAAC,GAAG,KAAK;AAC/B,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,KAAK,QAAQ,EAAE;AAChC,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA,EAAE,MAAM,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;AACxC,EAAE,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,SAAS,KAAK,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,KAAK,IAAI,KAAK,EAAE,WAAW,IAAI,GAAG,CAAC,IAAI,EAAE,QAAQ,IAAI,GAAG,CAAC,CAAC;AAC5J,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;AAClC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC,CAAC;AAC1C;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAChE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,UAAU,GAAG,CAAC,KAAK,KAAK;AAC9B,EAAE,IAAI,IAAI,CAAC;AACX,EAAE,OAAO,KAAK;AACd,IAAI,CAAC,OAAO,QAAQ,KAAK,UAAU,IAAI,KAAK,YAAY,QAAQ;AAChE,MAAM,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC;AAC9B,QAAQ,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,UAAU;AAC7C;AACA,SAAS,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,QAAQ,EAAE,KAAK,mBAAmB,CAAC;AACrG,OAAO;AACP,KAAK;AACL,GAAG;AACH,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACxD;AACA,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,GAAG,CAAC,gBAAgB,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AAClI;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI;AAC9B,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC,oCAAoC,EAAE,EAAE,CAAC,CAAC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,UAAU,GAAG,KAAK,CAAC,GAAG,EAAE,EAAE;AACrD;AACA,EAAE,IAAI,GAAG,KAAK,IAAI,IAAI,OAAO,GAAG,KAAK,WAAW,EAAE;AAClD,IAAI,OAAO;AACX,GAAG;AACH;AACA,EAAE,IAAI,CAAC,CAAC;AACR,EAAE,IAAI,CAAC,CAAC;AACR;AACA;AACA,EAAE,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE;AAC/B;AACA,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AAChB,GAAG;AACH;AACA,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;AACpB;AACA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC5C,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;AACpC,KAAK;AACL,GAAG,MAAM;AACT;AACA,IAAI,MAAM,IAAI,GAAG,UAAU,GAAG,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjF,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;AAC5B,IAAI,IAAI,GAAG,CAAC;AACZ;AACA,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,MAAM,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;AACxC,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA,SAAS,OAAO,CAAC,GAAG,EAAE,GAAG,EAAE;AAC3B,EAAE,GAAG,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;AAC1B,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACtB,EAAE,IAAI,IAAI,CAAC;AACX,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE;AAClB,IAAI,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACnB,IAAI,IAAI,GAAG,KAAK,IAAI,CAAC,WAAW,EAAE,EAAE;AACpC,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL,GAAG;AACH,EAAE,OAAO,IAAI,CAAC;AACd,CAAC;AACD;AACA,MAAM,OAAO,GAAG,CAAC,MAAM;AACvB;AACA,EAAE,IAAI,OAAO,UAAU,KAAK,WAAW,EAAE,OAAO,UAAU,CAAC;AAC3D,EAAE,OAAO,OAAO,IAAI,KAAK,WAAW,GAAG,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;AAC/F,CAAC,GAAG,CAAC;AACL;AACA,MAAM,gBAAgB,GAAG,CAAC,OAAO,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,OAAO,CAAC;AACnF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,KAAK,8BAA8B;AAC5C,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;AAC1D,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AACpB,EAAE,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,GAAG,KAAK;AACpC,IAAI,MAAM,SAAS,GAAG,QAAQ,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,GAAG,CAAC;AAC9D,IAAI,IAAI,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE;AAChE,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,CAAC;AACxD,KAAK,MAAM,IAAI,aAAa,CAAC,GAAG,CAAC,EAAE;AACnC,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AACzC,KAAK,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE;AAC7B,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;AACtC,KAAK,MAAM;AACX,MAAM,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC;AAC9B,KAAK;AACL,IAAG;AACH;AACA,EAAE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AACpD,IAAI,SAAS,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AACvD,GAAG;AACH,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK;AACpD,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK;AAC3B,IAAI,IAAI,OAAO,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE;AACpC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;AAClC,KAAK,MAAM;AACX,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;AACnB,KAAK;AACL,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;AACnB,EAAE,OAAO,CAAC,CAAC;AACX,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,QAAQ,GAAG,CAAC,OAAO,KAAK;AAC9B,EAAE,IAAI,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE;AACxC,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/B,GAAG;AACH,EAAE,OAAO,OAAO,CAAC;AACjB,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,QAAQ,GAAG,CAAC,WAAW,EAAE,gBAAgB,EAAE,KAAK,EAAE,WAAW,KAAK;AACxE,EAAE,WAAW,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AACjF,EAAE,WAAW,CAAC,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;AAClD,EAAE,MAAM,CAAC,cAAc,CAAC,WAAW,EAAE,OAAO,EAAE;AAC9C,IAAI,KAAK,EAAE,gBAAgB,CAAC,SAAS;AACrC,GAAG,CAAC,CAAC;AACL,EAAE,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACvD,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,YAAY,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,KAAK;AACjE,EAAE,IAAI,KAAK,CAAC;AACZ,EAAE,IAAI,CAAC,CAAC;AACR,EAAE,IAAI,IAAI,CAAC;AACX,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AACpB;AACA,EAAE,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AAC1B;AACA,EAAE,IAAI,SAAS,IAAI,IAAI,EAAE,OAAO,OAAO,CAAC;AACxC;AACA,EAAE,GAAG;AACL,IAAI,KAAK,GAAG,MAAM,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;AAClD,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;AACrB,IAAI,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE;AACpB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACtB,MAAM,IAAI,CAAC,CAAC,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AAClF,QAAQ,OAAO,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AACxC,QAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAC5B,OAAO;AACP,KAAK;AACL,IAAI,SAAS,GAAG,MAAM,KAAK,KAAK,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;AAC9D,GAAG,QAAQ,SAAS,KAAK,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,SAAS,KAAK,MAAM,CAAC,SAAS,EAAE;AACnG;AACA,EAAE,OAAO,OAAO,CAAC;AACjB,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,QAAQ,GAAG,CAAC,GAAG,EAAE,YAAY,EAAE,QAAQ,KAAK;AAClD,EAAE,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AACpB,EAAE,IAAI,QAAQ,KAAK,SAAS,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE;AACvD,IAAI,QAAQ,GAAG,GAAG,CAAC,MAAM,CAAC;AAC1B,GAAG;AACH,EAAE,QAAQ,IAAI,YAAY,CAAC,MAAM,CAAC;AAClC,EAAE,MAAM,SAAS,GAAG,GAAG,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;AACxD,EAAE,OAAO,SAAS,KAAK,CAAC,CAAC,IAAI,SAAS,KAAK,QAAQ,CAAC;AACpD,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,OAAO,GAAG,CAAC,KAAK,KAAK;AAC3B,EAAE,IAAI,CAAC,KAAK,EAAE,OAAO,IAAI,CAAC;AAC1B,EAAE,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,KAAK,CAAC;AACnC,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;AACvB,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,IAAI,CAAC;AAChC,EAAE,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3B,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE;AAClB,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACtB,GAAG;AACH,EAAE,OAAO,GAAG,CAAC;AACb,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,YAAY,GAAG,CAAC,UAAU,IAAI;AACpC;AACA,EAAE,OAAO,KAAK,IAAI;AAClB,IAAI,OAAO,UAAU,IAAI,KAAK,YAAY,UAAU,CAAC;AACrD,GAAG,CAAC;AACJ,CAAC,EAAE,OAAO,UAAU,KAAK,WAAW,IAAI,cAAc,CAAC,UAAU,CAAC,CAAC,CAAC;AACpE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK;AAClC,EAAE,MAAM,SAAS,GAAG,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,CAAC;AACzC;AACA,EAAE,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxC;AACA,EAAE,IAAI,MAAM,CAAC;AACb;AACA,EAAE,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;AACtD,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;AAC9B,IAAI,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACnC,GAAG;AACH,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,QAAQ,GAAG,CAAC,MAAM,EAAE,GAAG,KAAK;AAClC,EAAE,IAAI,OAAO,CAAC;AACd,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;AACjB;AACA,EAAE,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE;AAChD,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACtB,GAAG;AACH;AACA,EAAE,OAAO,GAAG,CAAC;AACb,EAAC;AACD;AACA;AACA,MAAM,UAAU,GAAG,UAAU,CAAC,iBAAiB,CAAC,CAAC;AACjD;AACA,MAAM,WAAW,GAAG,GAAG,IAAI;AAC3B,EAAE,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,uBAAuB;AAC1D,IAAI,SAAS,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;AACjC,MAAM,OAAO,EAAE,CAAC,WAAW,EAAE,GAAG,EAAE,CAAC;AACnC,KAAK;AACL,GAAG,CAAC;AACJ,CAAC,CAAC;AACF;AACA;AACA,MAAM,cAAc,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,KAAK,cAAc,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;AAC/G;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;AACtC;AACA,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,OAAO,KAAK;AAC5C,EAAE,MAAM,WAAW,GAAG,MAAM,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC;AAC5D,EAAE,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAChC;AACA,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,UAAU,EAAE,IAAI,KAAK;AAC7C,IAAI,IAAI,GAAG,CAAC;AACZ,IAAI,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,GAAG,CAAC,MAAM,KAAK,EAAE;AAC1D,MAAM,kBAAkB,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,UAAU,CAAC;AACnD,KAAK;AACL,GAAG,CAAC,CAAC;AACL;AACA,EAAE,MAAM,CAAC,gBAAgB,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC;AACnD,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,aAAa,GAAG,CAAC,GAAG,KAAK;AAC/B,EAAE,iBAAiB,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,IAAI,KAAK;AAC/C;AACA,IAAI,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACnF,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL;AACA,IAAI,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;AAC5B;AACA,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,OAAO;AACnC;AACA,IAAI,UAAU,CAAC,UAAU,GAAG,KAAK,CAAC;AAClC;AACA,IAAI,IAAI,UAAU,IAAI,UAAU,EAAE;AAClC,MAAM,UAAU,CAAC,QAAQ,GAAG,KAAK,CAAC;AAClC,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE;AACzB,MAAM,UAAU,CAAC,GAAG,GAAG,MAAM;AAC7B,QAAQ,MAAM,KAAK,CAAC,qCAAqC,GAAG,IAAI,GAAG,IAAI,CAAC,CAAC;AACzE,OAAO,CAAC;AACR,KAAK;AACL,GAAG,CAAC,CAAC;AACL,EAAC;AACD;AACA,MAAM,WAAW,GAAG,CAAC,aAAa,EAAE,SAAS,KAAK;AAClD,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;AACjB;AACA,EAAE,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK;AAC1B,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI;AACzB,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AACxB,KAAK,CAAC,CAAC;AACP,IAAG;AACH;AACA,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;AAClG;AACA,EAAE,OAAO,GAAG,CAAC;AACb,EAAC;AACD;AACA,MAAM,IAAI,GAAG,MAAM,GAAE;AACrB;AACA,MAAM,cAAc,GAAG,CAAC,KAAK,EAAE,YAAY,KAAK;AAChD,EAAE,OAAO,KAAK,IAAI,IAAI,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,YAAY,CAAC;AACjF,EAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,mBAAmB,CAAC,KAAK,EAAE;AACpC,EAAE,OAAO,CAAC,EAAE,KAAK,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,UAAU,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AACvG,CAAC;AACD;AACA,MAAM,YAAY,GAAG,CAAC,GAAG,KAAK;AAC9B,EAAE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC,CAAC;AAC9B;AACA,EAAE,MAAM,KAAK,GAAG,CAAC,MAAM,EAAE,CAAC,KAAK;AAC/B;AACA,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC1B,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACtC,QAAQ,OAAO;AACf,OAAO;AACP;AACA,MAAM,GAAG,EAAE,QAAQ,IAAI,MAAM,CAAC,EAAE;AAChC,QAAQ,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;AAC1B,QAAQ,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AACjD;AACA,QAAQ,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK;AACxC,UAAU,MAAM,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACnD,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,KAAK,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;AACrE,SAAS,CAAC,CAAC;AACX;AACA,QAAQ,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AAC7B;AACA,QAAQ,OAAO,MAAM,CAAC;AACtB,OAAO;AACP,KAAK;AACL;AACA,IAAI,OAAO,MAAM,CAAC;AAClB,IAAG;AACH;AACA,EAAE,OAAO,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACvB,EAAC;AACD;AACA,MAAM,SAAS,GAAG,UAAU,CAAC,eAAe,CAAC,CAAC;AAC9C;AACA,MAAM,UAAU,GAAG,CAAC,KAAK;AACzB,EAAE,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACvG;AACA;AACA;AACA;AACA,MAAM,aAAa,GAAG,CAAC,CAAC,qBAAqB,EAAE,oBAAoB,KAAK;AACxE,EAAE,IAAI,qBAAqB,EAAE;AAC7B,IAAI,OAAO,YAAY,CAAC;AACxB,GAAG;AACH;AACA,EAAE,OAAO,oBAAoB,GAAG,CAAC,CAAC,KAAK,EAAE,SAAS,KAAK;AACvD,IAAI,OAAO,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK;AAC5D,MAAM,IAAI,MAAM,KAAK,OAAO,IAAI,IAAI,KAAK,KAAK,EAAE;AAChD,QAAQ,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,KAAK,EAAE,EAAE,CAAC;AAChD,OAAO;AACP,KAAK,EAAE,KAAK,CAAC,CAAC;AACd;AACA,IAAI,OAAO,CAAC,EAAE,KAAK;AACnB,MAAM,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACzB,MAAM,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACtC,KAAK;AACL,GAAG,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE,CAAC,CAAC;AAC5D,CAAC;AACD,EAAE,OAAO,YAAY,KAAK,UAAU;AACpC,EAAE,UAAU,CAAC,OAAO,CAAC,WAAW,CAAC;AACjC,CAAC,CAAC;AACF;AACA,MAAM,IAAI,GAAG,OAAO,cAAc,KAAK,WAAW;AAClD,EAAE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,OAAO,OAAO,KAAK,WAAW,IAAI,OAAO,CAAC,QAAQ,IAAI,aAAa,CAAC,CAAC;AACxG;AACA;AACA;AACA;AACA,MAAM,UAAU,GAAG,CAAC,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC3E;AACA;AACA,gBAAe;AACf,EAAE,OAAO;AACT,EAAE,aAAa;AACf,EAAE,QAAQ;AACV,EAAE,UAAU;AACZ,EAAE,iBAAiB;AACnB,EAAE,QAAQ;AACV,EAAE,QAAQ;AACV,EAAE,SAAS;AACX,EAAE,QAAQ;AACV,EAAE,aAAa;AACf,EAAE,gBAAgB;AAClB,EAAE,SAAS;AACX,EAAE,UAAU;AACZ,EAAE,SAAS;AACX,EAAE,WAAW;AACb,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,MAAM;AACR,EAAE,QAAQ;AACV,EAAE,UAAU;AACZ,EAAE,QAAQ;AACV,EAAE,iBAAiB;AACnB,EAAE,YAAY;AACd,EAAE,UAAU;AACZ,EAAE,OAAO;AACT,EAAE,KAAK;AACP,EAAE,MAAM;AACR,EAAE,IAAI;AACN,EAAE,QAAQ;AACV,EAAE,QAAQ;AACV,EAAE,YAAY;AACd,EAAE,MAAM;AACR,EAAE,UAAU;AACZ,EAAE,QAAQ;AACV,EAAE,OAAO;AACT,EAAE,YAAY;AACd,EAAE,QAAQ;AACV,EAAE,UAAU;AACZ,EAAE,cAAc;AAChB,EAAE,UAAU,EAAE,cAAc;AAC5B,EAAE,iBAAiB;AACnB,EAAE,aAAa;AACf,EAAE,WAAW;AACb,EAAE,WAAW;AACb,EAAE,IAAI;AACN,EAAE,cAAc;AAChB,EAAE,OAAO;AACT,EAAE,MAAM,EAAE,OAAO;AACjB,EAAE,gBAAgB;AAClB,EAAE,mBAAmB;AACrB,EAAE,YAAY;AACd,EAAE,SAAS;AACX,EAAE,UAAU;AACZ,EAAE,YAAY,EAAE,aAAa;AAC7B,EAAE,IAAI;AACN,EAAE,UAAU;AACZ,CAAC;;ACnuBD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,YAAU,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE;AAC9D,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnB;AACA,EAAE,IAAI,KAAK,CAAC,iBAAiB,EAAE;AAC/B,IAAI,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;AACpD,GAAG,MAAM;AACT,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,IAAI,KAAK,EAAE,EAAE,KAAK,CAAC;AACrC,GAAG;AACH;AACA,EAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AACzB,EAAE,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;AAC3B,EAAE,IAAI,KAAK,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;AAC7B,EAAE,MAAM,KAAK,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;AACnC,EAAE,OAAO,KAAK,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC;AACtC,EAAE,IAAI,QAAQ,EAAE;AAChB,IAAI,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;AAC7B,IAAI,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC;AAC3D,GAAG;AACH,CAAC;AACD;AACAC,OAAK,CAAC,QAAQ,CAACD,YAAU,EAAE,KAAK,EAAE;AAClC,EAAE,MAAM,EAAE,SAAS,MAAM,GAAG;AAC5B,IAAI,OAAO;AACX;AACA,MAAM,OAAO,EAAE,IAAI,CAAC,OAAO;AAC3B,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI;AACrB;AACA,MAAM,WAAW,EAAE,IAAI,CAAC,WAAW;AACnC,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM;AACzB;AACA,MAAM,QAAQ,EAAE,IAAI,CAAC,QAAQ;AAC7B,MAAM,UAAU,EAAE,IAAI,CAAC,UAAU;AACjC,MAAM,YAAY,EAAE,IAAI,CAAC,YAAY;AACrC,MAAM,KAAK,EAAE,IAAI,CAAC,KAAK;AACvB;AACA,MAAM,MAAM,EAAEC,OAAK,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;AAC7C,MAAM,IAAI,EAAE,IAAI,CAAC,IAAI;AACrB,MAAM,MAAM,EAAE,IAAI,CAAC,MAAM;AACzB,KAAK,CAAC;AACN,GAAG;AACH,CAAC,CAAC,CAAC;AACH;AACA,MAAMC,WAAS,GAAGF,YAAU,CAAC,SAAS,CAAC;AACvC,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB;AACA;AACA,EAAE,sBAAsB;AACxB,EAAE,gBAAgB;AAClB,EAAE,cAAc;AAChB,EAAE,WAAW;AACb,EAAE,aAAa;AACf,EAAE,2BAA2B;AAC7B,EAAE,gBAAgB;AAClB,EAAE,kBAAkB;AACpB,EAAE,iBAAiB;AACnB,EAAE,cAAc;AAChB,EAAE,iBAAiB;AACnB,EAAE,iBAAiB;AACnB;AACA,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI;AAClB,EAAE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AACH;AACA,MAAM,CAAC,gBAAgB,CAACA,YAAU,EAAE,WAAW,CAAC,CAAC;AACjD,MAAM,CAAC,cAAc,CAACE,WAAS,EAAE,cAAc,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAChE;AACA;AACAF,YAAU,CAAC,IAAI,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,KAAK;AAC3E,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAACE,WAAS,CAAC,CAAC;AAC9C;AACA,EAAED,OAAK,CAAC,YAAY,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,MAAM,CAAC,GAAG,EAAE;AAC7D,IAAI,OAAO,GAAG,KAAK,KAAK,CAAC,SAAS,CAAC;AACnC,GAAG,EAAE,IAAI,IAAI;AACb,IAAI,OAAO,IAAI,KAAK,cAAc,CAAC;AACnC,GAAG,CAAC,CAAC;AACL;AACA,EAAED,YAAU,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC9E;AACA,EAAE,UAAU,CAAC,KAAK,GAAG,KAAK,CAAC;AAC3B;AACA,EAAE,UAAU,CAAC,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC;AAC/B;AACA,EAAE,WAAW,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;AACxD;AACA,EAAE,OAAO,UAAU,CAAC;AACpB,CAAC;;ACpGD;AACA,oBAAe,IAAI;;ACMnB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,KAAK,EAAE;AAC5B,EAAE,OAAOC,OAAK,CAAC,aAAa,CAAC,KAAK,CAAC,IAAIA,OAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,GAAG,EAAE;AAC7B,EAAE,OAAOA,OAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;AAC5D,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;AACpC,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,GAAG,CAAC;AACxB,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE;AACtD;AACA,IAAI,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAClC,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,GAAG,KAAK,GAAG,GAAG,GAAG,KAAK,CAAC;AAClD,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC,CAAC;AAC3B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,GAAG,EAAE;AAC1B,EAAE,OAAOA,OAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACtD,CAAC;AACD;AACA,MAAM,UAAU,GAAGA,OAAK,CAAC,YAAY,CAACA,OAAK,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,MAAM,CAAC,IAAI,EAAE;AAC7E,EAAE,OAAO,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASE,YAAU,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE;AAC5C,EAAE,IAAI,CAACF,OAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC5B,IAAI,MAAM,IAAI,SAAS,CAAC,0BAA0B,CAAC,CAAC;AACpD,GAAG;AACH;AACA;AACA,EAAE,QAAQ,GAAG,QAAQ,IAAI,KAAyB,QAAQ,GAAG,CAAC;AAC9D;AACA;AACA,EAAE,OAAO,GAAGA,OAAK,CAAC,YAAY,CAAC,OAAO,EAAE;AACxC,IAAI,UAAU,EAAE,IAAI;AACpB,IAAI,IAAI,EAAE,KAAK;AACf,IAAI,OAAO,EAAE,KAAK;AAClB,GAAG,EAAE,KAAK,EAAE,SAAS,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE;AAC7C;AACA,IAAI,OAAO,CAACA,OAAK,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AAC9C,GAAG,CAAC,CAAC;AACL;AACA,EAAE,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;AACxC;AACA,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,cAAc,CAAC;AACpD,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AAC5B,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;AAClC,EAAE,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,WAAW,IAAI,IAAI,CAAC;AACpE,EAAE,MAAM,OAAO,GAAG,KAAK,IAAIA,OAAK,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;AAC/D;AACA,EAAE,IAAI,CAACA,OAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AAClC,IAAI,MAAM,IAAI,SAAS,CAAC,4BAA4B,CAAC,CAAC;AACtD,GAAG;AACH;AACA,EAAE,SAAS,YAAY,CAAC,KAAK,EAAE;AAC/B,IAAI,IAAI,KAAK,KAAK,IAAI,EAAE,OAAO,EAAE,CAAC;AAClC;AACA,IAAI,IAAIA,OAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AAC7B,MAAM,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;AACjC,KAAK;AACL;AACA,IAAI,IAAI,CAAC,OAAO,IAAIA,OAAK,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;AACzC,MAAM,MAAM,IAAID,YAAU,CAAC,8CAA8C,CAAC,CAAC;AAC3E,KAAK;AACL;AACA,IAAI,IAAIC,OAAK,CAAC,aAAa,CAAC,KAAK,CAAC,IAAIA,OAAK,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AACjE,MAAM,OAAO,OAAO,IAAI,OAAO,IAAI,KAAK,UAAU,GAAG,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5F,KAAK;AACL;AACA,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,cAAc,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE;AAC5C,IAAI,IAAI,GAAG,GAAG,KAAK,CAAC;AACpB;AACA,IAAI,IAAI,KAAK,IAAI,CAAC,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AACrD,MAAM,IAAIA,OAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE;AACrC;AACA,QAAQ,GAAG,GAAG,UAAU,GAAG,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AAClD;AACA,QAAQ,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACtC,OAAO,MAAM;AACb,QAAQ,CAACA,OAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC;AACnD,SAAS,CAACA,OAAK,CAAC,UAAU,CAAC,KAAK,CAAC,IAAIA,OAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,MAAM,GAAG,GAAGA,OAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC/F,SAAS,EAAE;AACX;AACA,QAAQ,GAAG,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;AAClC;AACA,QAAQ,GAAG,CAAC,OAAO,CAAC,SAAS,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE;AAC7C,UAAU,EAAEA,OAAK,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM;AACpE;AACA,YAAY,OAAO,KAAK,IAAI,GAAG,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,IAAI,OAAO,KAAK,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;AACpG,YAAY,YAAY,CAAC,EAAE,CAAC;AAC5B,WAAW,CAAC;AACZ,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE;AAC5B,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL;AACA,IAAI,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;AACrE;AACA,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA,EAAE,MAAM,KAAK,GAAG,EAAE,CAAC;AACnB;AACA,EAAE,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE;AACnD,IAAI,cAAc;AAClB,IAAI,YAAY;AAChB,IAAI,WAAW;AACf,GAAG,CAAC,CAAC;AACL;AACA,EAAE,SAAS,KAAK,CAAC,KAAK,EAAE,IAAI,EAAE;AAC9B,IAAI,IAAIA,OAAK,CAAC,WAAW,CAAC,KAAK,CAAC,EAAE,OAAO;AACzC;AACA,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE;AACrC,MAAM,MAAM,KAAK,CAAC,iCAAiC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACtE,KAAK;AACL;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtB;AACA,IAAIA,OAAK,CAAC,OAAO,CAAC,KAAK,EAAE,SAAS,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE;AAChD,MAAM,MAAM,MAAM,GAAG,EAAEA,OAAK,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI;AAC5E,QAAQ,QAAQ,EAAE,EAAE,EAAEA,OAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,EAAE,IAAI,EAAE,cAAc;AAClF,OAAO,CAAC;AACR;AACA,MAAM,IAAI,MAAM,KAAK,IAAI,EAAE;AAC3B,QAAQ,KAAK,CAAC,EAAE,EAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACnD,OAAO;AACP,KAAK,CAAC,CAAC;AACP;AACA,IAAI,KAAK,CAAC,GAAG,EAAE,CAAC;AAChB,GAAG;AACH;AACA,EAAE,IAAI,CAACA,OAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;AAC5B,IAAI,MAAM,IAAI,SAAS,CAAC,wBAAwB,CAAC,CAAC;AAClD,GAAG;AACH;AACA,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;AACb;AACA,EAAE,OAAO,QAAQ,CAAC;AAClB;;ACpNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASG,QAAM,CAAC,GAAG,EAAE;AACrB,EAAE,MAAM,OAAO,GAAG;AAClB,IAAI,GAAG,EAAE,KAAK;AACd,IAAI,GAAG,EAAE,KAAK;AACd,IAAI,GAAG,EAAE,KAAK;AACd,IAAI,GAAG,EAAE,KAAK;AACd,IAAI,GAAG,EAAE,KAAK;AACd,IAAI,KAAK,EAAE,GAAG;AACd,IAAI,KAAK,EAAE,MAAM;AACjB,GAAG,CAAC;AACJ,EAAE,OAAO,kBAAkB,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,kBAAkB,EAAE,SAAS,QAAQ,CAAC,KAAK,EAAE;AACtF,IAAI,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;AAC1B,GAAG,CAAC,CAAC;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,oBAAoB,CAAC,MAAM,EAAE,OAAO,EAAE;AAC/C,EAAE,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACnB;AACA,EAAE,MAAM,IAAID,YAAU,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9C,CAAC;AACD;AACA,MAAM,SAAS,GAAG,oBAAoB,CAAC,SAAS,CAAC;AACjD;AACA,SAAS,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE;AAChD,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC;AAClC,CAAC,CAAC;AACF;AACA,SAAS,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAC,OAAO,EAAE;AAChD,EAAE,MAAM,OAAO,GAAG,OAAO,GAAG,SAAS,KAAK,EAAE;AAC5C,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAEC,QAAM,CAAC,CAAC;AAC7C,GAAG,GAAGA,QAAM,CAAC;AACb;AACA,EAAE,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,IAAI,EAAE;AAC7C,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACrD,GAAG,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACnB,CAAC;;AClDD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,MAAM,CAAC,GAAG,EAAE;AACrB,EAAE,OAAO,kBAAkB,CAAC,GAAG,CAAC;AAChC,IAAI,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;AACzB,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;AACxB,IAAI,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;AACzB,IAAI,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;AACxB,IAAI,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;AACzB,IAAI,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;AAC1B,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE;AACvD;AACA,EAAE,IAAI,CAAC,MAAM,EAAE;AACf,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,MAAM,OAAO,GAAG,OAAO,IAAI,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC;AACtD;AACA,EAAE,IAAIH,OAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE;AACjC,IAAI,OAAO,GAAG;AACd,MAAM,SAAS,EAAE,OAAO;AACxB,KAAK,CAAC;AACN,GAAG;AACH;AACA,EAAE,MAAM,WAAW,GAAG,OAAO,IAAI,OAAO,CAAC,SAAS,CAAC;AACnD;AACA,EAAE,IAAI,gBAAgB,CAAC;AACvB;AACA,EAAE,IAAI,WAAW,EAAE;AACnB,IAAI,gBAAgB,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACpD,GAAG,MAAM;AACT,IAAI,gBAAgB,GAAGA,OAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC;AACtD,MAAM,MAAM,CAAC,QAAQ,EAAE;AACvB,MAAM,IAAI,oBAAoB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAClE,GAAG;AACH;AACA,EAAE,IAAI,gBAAgB,EAAE;AACxB,IAAI,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC3C;AACA,IAAI,IAAI,aAAa,KAAK,CAAC,CAAC,EAAE;AAC9B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;AACxC,KAAK;AACL,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,IAAI,gBAAgB,CAAC;AACpE,GAAG;AACH;AACA,EAAE,OAAO,GAAG,CAAC;AACb;;AChEA,MAAM,kBAAkB,CAAC;AACzB,EAAE,WAAW,GAAG;AAChB,IAAI,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACvB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE;AACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACvB,MAAM,SAAS;AACf,MAAM,QAAQ;AACd,MAAM,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,GAAG,KAAK;AACxD,MAAM,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI;AAC/C,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AACpC,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,KAAK,CAAC,EAAE,EAAE;AACZ,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;AAC3B,MAAM,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC;AAC/B,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,KAAK,GAAG;AACV,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE;AACvB,MAAM,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;AACzB,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,CAAC,EAAE,EAAE;AACd,IAAIA,OAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,cAAc,CAAC,CAAC,EAAE;AAC5D,MAAM,IAAI,CAAC,KAAK,IAAI,EAAE;AACtB,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;AACd,OAAO;AACP,KAAK,CAAC,CAAC;AACP,GAAG;AACH,CAAC;AACD;AACA,6BAAe,kBAAkB;;ACpEjC,6BAAe;AACf,EAAE,iBAAiB,EAAE,IAAI;AACzB,EAAE,iBAAiB,EAAE,IAAI;AACzB,EAAE,mBAAmB,EAAE,KAAK;AAC5B,CAAC;;ACHD,0BAAe,OAAO,eAAe,KAAK,WAAW,GAAG,eAAe,GAAG,oBAAoB;;ACD9F,mBAAe,OAAO,QAAQ,KAAK,WAAW,GAAG,QAAQ,GAAG,IAAI;;ACAhE,eAAe,OAAO,IAAI,KAAK,WAAW,GAAG,IAAI,GAAG;;ACEpD,mBAAe;AACf,EAAE,SAAS,EAAE,IAAI;AACjB,EAAE,OAAO,EAAE;AACX,qBAAII,iBAAe;AACnB,cAAIC,UAAQ;AACZ,UAAIC,MAAI;AACR,GAAG;AACH,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC;AAC7D,CAAC;;ACZD,MAAM,aAAa,GAAG,OAAO,MAAM,KAAK,WAAW,IAAI,OAAO,QAAQ,KAAK,WAAW,CAAC;AACvF;AACA,MAAM,UAAU,GAAG,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,IAAI,SAAS,CAAC;AAC3E;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,qBAAqB,GAAG,aAAa;AAC3C,GAAG,CAAC,UAAU,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAM,8BAA8B,GAAG,CAAC,MAAM;AAC9C,EAAE;AACF,IAAI,OAAO,iBAAiB,KAAK,WAAW;AAC5C;AACA,IAAI,IAAI,YAAY,iBAAiB;AACrC,IAAI,OAAO,IAAI,CAAC,aAAa,KAAK,UAAU;AAC5C,IAAI;AACJ,CAAC,GAAG,CAAC;AACL;AACA,MAAM,MAAM,GAAG,aAAa,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,kBAAkB;;;;;;;;;;;ACvC1E,iBAAe;AACf,EAAE,GAAG,KAAK;AACV,EAAE,GAAGC,UAAQ;AACb;;ACAe,SAAS,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE;AACxD,EAAE,OAAOL,YAAU,CAAC,IAAI,EAAE,IAAI,QAAQ,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC;AAChF,IAAI,OAAO,EAAE,SAAS,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE;AACjD,MAAM,IAAI,QAAQ,CAAC,MAAM,IAAIF,OAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACpD,QAAQ,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnD,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP;AACA,MAAM,OAAO,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAC3D,KAAK;AACL,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AACf;;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,IAAI,EAAE;AAC7B;AACA;AACA;AACA;AACA,EAAE,OAAOA,OAAK,CAAC,QAAQ,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI;AAC5D,IAAI,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AACzD,GAAG,CAAC,CAAC;AACL,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,GAAG,EAAE;AAC5B,EAAE,MAAM,GAAG,GAAG,EAAE,CAAC;AACjB,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChC,EAAE,IAAI,CAAC,CAAC;AACR,EAAE,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC;AAC1B,EAAE,IAAI,GAAG,CAAC;AACV,EAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC5B,IAAI,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AACxB,GAAG;AACH,EAAE,OAAO,GAAG,CAAC;AACb,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,QAAQ,EAAE;AAClC,EAAE,SAAS,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;AACjD,IAAI,IAAI,IAAI,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AAC7B;AACA,IAAI,IAAI,IAAI,KAAK,WAAW,EAAE,OAAO,IAAI,CAAC;AAC1C;AACA,IAAI,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC;AAChD,IAAI,MAAM,MAAM,GAAG,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC;AACxC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAIA,OAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC;AACjE;AACA,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,IAAIA,OAAK,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;AAC1C,QAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AAC7C,OAAO,MAAM;AACb,QAAQ,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAC7B,OAAO;AACP;AACA,MAAM,OAAO,CAAC,YAAY,CAAC;AAC3B,KAAK;AACL;AACA,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAACA,OAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;AACxD,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;AACxB,KAAK;AACL;AACA,IAAI,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;AAC/D;AACA,IAAI,IAAI,MAAM,IAAIA,OAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE;AAC/C,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACjD,KAAK;AACL;AACA,IAAI,OAAO,CAAC,YAAY,CAAC;AACzB,GAAG;AACH;AACA,EAAE,IAAIA,OAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAIA,OAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AACxE,IAAI,MAAM,GAAG,GAAG,EAAE,CAAC;AACnB;AACA,IAAIA,OAAK,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK;AAClD,MAAM,SAAS,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;AACpD,KAAK,CAAC,CAAC;AACP;AACA,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC;AACd;;AClFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE;AACpD,EAAE,IAAIA,OAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAChC,IAAI,IAAI;AACR,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AACvC,MAAM,OAAOA,OAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAClC,KAAK,CAAC,OAAO,CAAC,EAAE;AAChB,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE;AACpC,QAAQ,MAAM,CAAC,CAAC;AAChB,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;AAC/C,CAAC;AACD;AACA,MAAM,QAAQ,GAAG;AACjB;AACA,EAAE,YAAY,EAAE,oBAAoB;AACpC;AACA,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC;AACnC;AACA,EAAE,gBAAgB,EAAE,CAAC,SAAS,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE;AAC9D,IAAI,MAAM,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;AACvD,IAAI,MAAM,kBAAkB,GAAG,WAAW,CAAC,OAAO,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5E,IAAI,MAAM,eAAe,GAAGA,OAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AACjD;AACA,IAAI,IAAI,eAAe,IAAIA,OAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AACnD,MAAM,IAAI,GAAG,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;AAChC,KAAK;AACL;AACA,IAAI,MAAM,UAAU,GAAGA,OAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC9C;AACA,IAAI,IAAI,UAAU,EAAE;AACpB,MAAM,OAAO,kBAAkB,GAAG,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC;AAC9E,KAAK;AACL;AACA,IAAI,IAAIA,OAAK,CAAC,aAAa,CAAC,IAAI,CAAC;AACjC,MAAMA,OAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC1B,MAAMA,OAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;AAC1B,MAAMA,OAAK,CAAC,MAAM,CAAC,IAAI,CAAC;AACxB,MAAMA,OAAK,CAAC,MAAM,CAAC,IAAI,CAAC;AACxB,MAAMA,OAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC;AAClC,MAAM;AACN,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL,IAAI,IAAIA,OAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;AACvC,MAAM,OAAO,IAAI,CAAC,MAAM,CAAC;AACzB,KAAK;AACL,IAAI,IAAIA,OAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;AACvC,MAAM,OAAO,CAAC,cAAc,CAAC,iDAAiD,EAAE,KAAK,CAAC,CAAC;AACvF,MAAM,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;AAC7B,KAAK;AACL;AACA,IAAI,IAAI,UAAU,CAAC;AACnB;AACA,IAAI,IAAI,eAAe,EAAE;AACzB,MAAM,IAAI,WAAW,CAAC,OAAO,CAAC,mCAAmC,CAAC,GAAG,CAAC,CAAC,EAAE;AACzE,QAAQ,OAAO,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,QAAQ,EAAE,CAAC;AACtE,OAAO;AACP;AACA,MAAM,IAAI,CAAC,UAAU,GAAGA,OAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,WAAW,CAAC,OAAO,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,EAAE;AACpG,QAAQ,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;AACxD;AACA,QAAQ,OAAOE,YAAU;AACzB,UAAU,UAAU,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,IAAI;AAC/C,UAAU,SAAS,IAAI,IAAI,SAAS,EAAE;AACtC,UAAU,IAAI,CAAC,cAAc;AAC7B,SAAS,CAAC;AACV,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,eAAe,IAAI,kBAAkB,GAAG;AAChD,MAAM,OAAO,CAAC,cAAc,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;AACxD,MAAM,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AACnC,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG,CAAC;AACJ;AACA,EAAE,iBAAiB,EAAE,CAAC,SAAS,iBAAiB,CAAC,IAAI,EAAE;AACvD,IAAI,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,IAAI,QAAQ,CAAC,YAAY,CAAC;AACpE,IAAI,MAAM,iBAAiB,GAAG,YAAY,IAAI,YAAY,CAAC,iBAAiB,CAAC;AAC7E,IAAI,MAAM,aAAa,GAAG,IAAI,CAAC,YAAY,KAAK,MAAM,CAAC;AACvD;AACA,IAAI,IAAIF,OAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAIA,OAAK,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE;AAChE,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL;AACA,IAAI,IAAI,IAAI,IAAIA,OAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,IAAI,CAAC,YAAY,KAAK,aAAa,CAAC,EAAE;AACtG,MAAM,MAAM,iBAAiB,GAAG,YAAY,IAAI,YAAY,CAAC,iBAAiB,CAAC;AAC/E,MAAM,MAAM,iBAAiB,GAAG,CAAC,iBAAiB,IAAI,aAAa,CAAC;AACpE;AACA,MAAM,IAAI;AACV,QAAQ,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAChC,OAAO,CAAC,OAAO,CAAC,EAAE;AAClB,QAAQ,IAAI,iBAAiB,EAAE;AAC/B,UAAU,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,EAAE;AACxC,YAAY,MAAMD,YAAU,CAAC,IAAI,CAAC,CAAC,EAAEA,YAAU,CAAC,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7F,WAAW;AACX,UAAU,MAAM,CAAC,CAAC;AAClB,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG,CAAC;AACJ;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,EAAE,CAAC;AACZ;AACA,EAAE,cAAc,EAAE,YAAY;AAC9B,EAAE,cAAc,EAAE,cAAc;AAChC;AACA,EAAE,gBAAgB,EAAE,CAAC,CAAC;AACtB,EAAE,aAAa,EAAE,CAAC,CAAC;AACnB;AACA,EAAE,GAAG,EAAE;AACP,IAAI,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ;AACvC,IAAI,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI;AAC/B,GAAG;AACH;AACA,EAAE,cAAc,EAAE,SAAS,cAAc,CAAC,MAAM,EAAE;AAClD,IAAI,OAAO,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG,CAAC;AACzC,GAAG;AACH;AACA,EAAE,OAAO,EAAE;AACX,IAAI,MAAM,EAAE;AACZ,MAAM,QAAQ,EAAE,mCAAmC;AACnD,MAAM,cAAc,EAAE,SAAS;AAC/B,KAAK;AACL,GAAG;AACH,CAAC,CAAC;AACF;AACAC,OAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,CAAC,MAAM,KAAK;AAC7E,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;AAChC,CAAC,CAAC,CAAC;AACH;AACA,mBAAe,QAAQ;;AC5JvB;AACA;AACA,MAAM,iBAAiB,GAAGA,OAAK,CAAC,WAAW,CAAC;AAC5C,EAAE,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM;AAClE,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,mBAAmB,EAAE,qBAAqB;AACvE,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,qBAAqB;AACpE,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY;AACxC,CAAC,CAAC,CAAC;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAe,UAAU,IAAI;AAC7B,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AACpB,EAAE,IAAI,GAAG,CAAC;AACV,EAAE,IAAI,GAAG,CAAC;AACV,EAAE,IAAI,CAAC,CAAC;AACR;AACA,EAAE,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,MAAM,CAAC,IAAI,EAAE;AACrE,IAAI,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAC1B,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACpD,IAAI,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACvC;AACA,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC,EAAE;AACzD,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,IAAI,GAAG,KAAK,YAAY,EAAE;AAC9B,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE;AACvB,QAAQ,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC9B,OAAO,MAAM;AACb,QAAQ,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5B,OAAO;AACP,KAAK,MAAM;AACX,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC;AACjE,KAAK;AACL,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;;ACjDD,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AACvC;AACA,SAAS,eAAe,CAAC,MAAM,EAAE;AACjC,EAAE,OAAO,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;AACvD,CAAC;AACD;AACA,SAAS,cAAc,CAAC,KAAK,EAAE;AAC/B,EAAE,IAAI,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,IAAI,EAAE;AACxC,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA,EAAE,OAAOA,OAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1E,CAAC;AACD;AACA,SAAS,WAAW,CAAC,GAAG,EAAE;AAC1B,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACrC,EAAE,MAAM,QAAQ,GAAG,kCAAkC,CAAC;AACtD,EAAE,IAAI,KAAK,CAAC;AACZ;AACA,EAAE,QAAQ,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;AACvC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAChC,GAAG;AACH;AACA,EAAE,OAAO,MAAM,CAAC;AAChB,CAAC;AACD;AACA,MAAM,iBAAiB,GAAG,CAAC,GAAG,KAAK,gCAAgC,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;AACrF;AACA,SAAS,gBAAgB,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,kBAAkB,EAAE;AAC9E,EAAE,IAAIA,OAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AAChC,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC5C,GAAG;AACH;AACA,EAAE,IAAI,kBAAkB,EAAE;AAC1B,IAAI,KAAK,GAAG,MAAM,CAAC;AACnB,GAAG;AACH;AACA,EAAE,IAAI,CAACA,OAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO;AACrC;AACA,EAAE,IAAIA,OAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC9B,IAAI,OAAO,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACxC,GAAG;AACH;AACA,EAAE,IAAIA,OAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC9B,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,GAAG;AACH,CAAC;AACD;AACA,SAAS,YAAY,CAAC,MAAM,EAAE;AAC9B,EAAE,OAAO,MAAM,CAAC,IAAI,EAAE;AACtB,KAAK,WAAW,EAAE,CAAC,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,KAAK;AAChE,MAAM,OAAO,IAAI,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC;AACtC,KAAK,CAAC,CAAC;AACP,CAAC;AACD;AACA,SAAS,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE;AACrC,EAAE,MAAM,YAAY,GAAGA,OAAK,CAAC,WAAW,CAAC,GAAG,GAAG,MAAM,CAAC,CAAC;AACvD;AACA,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI;AAC9C,IAAI,MAAM,CAAC,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,YAAY,EAAE;AAC1D,MAAM,KAAK,EAAE,SAAS,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;AACxC,QAAQ,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACrE,OAAO;AACP,MAAM,YAAY,EAAE,IAAI;AACxB,KAAK,CAAC,CAAC;AACP,GAAG,CAAC,CAAC;AACL,CAAC;AACD;AACA,MAAMQ,cAAY,CAAC;AACnB,EAAE,WAAW,CAAC,OAAO,EAAE;AACvB,IAAI,OAAO,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACjC,GAAG;AACH;AACA,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,EAAE,OAAO,EAAE;AACvC,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC;AACtB;AACA,IAAI,SAAS,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE;AAClD,MAAM,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;AAC/C;AACA,MAAM,IAAI,CAAC,OAAO,EAAE;AACpB,QAAQ,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;AAClE,OAAO;AACP;AACA,MAAM,MAAM,GAAG,GAAGR,OAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAC/C;AACA,MAAM,GAAG,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,QAAQ,KAAK,IAAI,KAAK,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,EAAE;AAClH,QAAQ,IAAI,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AACtD,OAAO;AACP,KAAK;AACL;AACA,IAAI,MAAM,UAAU,GAAG,CAAC,OAAO,EAAE,QAAQ;AACzC,MAAMA,OAAK,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxF;AACA,IAAI,IAAIA,OAAK,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,MAAM,YAAY,IAAI,CAAC,WAAW,EAAE;AAC3E,MAAM,UAAU,CAAC,MAAM,EAAE,cAAc,EAAC;AACxC,KAAK,MAAM,GAAGA,OAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE;AAChG,MAAM,UAAU,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,cAAc,CAAC,CAAC;AACvD,KAAK,MAAM,IAAIA,OAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAIA,OAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AACnE,MAAM,IAAI,GAAG,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC;AAC9B,MAAM,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;AAClC,QAAQ,IAAI,CAACA,OAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AACnC,UAAU,MAAM,SAAS,CAAC,8CAA8C,CAAC,CAAC;AAC1E,SAAS;AACT;AACA,QAAQ,GAAG,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC;AAC9C,WAAWA,OAAK,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AACpF,OAAO;AACP;AACA,MAAM,UAAU,CAAC,GAAG,EAAE,cAAc,EAAC;AACrC,KAAK,MAAM;AACX,MAAM,MAAM,IAAI,IAAI,IAAI,SAAS,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACnE,KAAK;AACL;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE;AACtB,IAAI,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;AACrC;AACA,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,MAAM,GAAG,GAAGA,OAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9C;AACA,MAAM,IAAI,GAAG,EAAE;AACf,QAAQ,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;AAChC;AACA,QAAQ,IAAI,CAAC,MAAM,EAAE;AACrB,UAAU,OAAO,KAAK,CAAC;AACvB,SAAS;AACT;AACA,QAAQ,IAAI,MAAM,KAAK,IAAI,EAAE;AAC7B,UAAU,OAAO,WAAW,CAAC,KAAK,CAAC,CAAC;AACpC,SAAS;AACT;AACA,QAAQ,IAAIA,OAAK,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;AACtC,UAAU,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC;AAC/C,SAAS;AACT;AACA,QAAQ,IAAIA,OAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AACpC,UAAU,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACpC,SAAS;AACT;AACA,QAAQ,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;AACtE,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE;AACvB,IAAI,MAAM,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;AACrC;AACA,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,MAAM,GAAG,GAAGA,OAAK,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC9C;AACA,MAAM,OAAO,CAAC,EAAE,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,KAAK,CAAC,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;AACjH,KAAK;AACL;AACA,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH;AACA,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE;AAC1B,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC;AACtB,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC;AACxB;AACA,IAAI,SAAS,YAAY,CAAC,OAAO,EAAE;AACnC,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;AACzC;AACA,MAAM,IAAI,OAAO,EAAE;AACnB,QAAQ,MAAM,GAAG,GAAGA,OAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACjD;AACA,QAAQ,IAAI,GAAG,KAAK,CAAC,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,EAAE;AAClF,UAAU,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B;AACA,UAAU,OAAO,GAAG,IAAI,CAAC;AACzB,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAIA,OAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AAC/B,MAAM,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;AACnC,KAAK,MAAM;AACX,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC;AAC3B,KAAK;AACL;AACA,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA,EAAE,KAAK,CAAC,OAAO,EAAE;AACjB,IAAI,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACxB,IAAI,IAAI,OAAO,GAAG,KAAK,CAAC;AACxB;AACA,IAAI,OAAO,CAAC,EAAE,EAAE;AAChB,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAC1B,MAAM,GAAG,CAAC,OAAO,IAAI,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,CAAC,EAAE;AAC5E,QAAQ,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;AACzB,QAAQ,OAAO,GAAG,IAAI,CAAC;AACvB,OAAO;AACP,KAAK;AACL;AACA,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA,EAAE,SAAS,CAAC,MAAM,EAAE;AACpB,IAAI,MAAM,IAAI,GAAG,IAAI,CAAC;AACtB,IAAI,MAAM,OAAO,GAAG,EAAE,CAAC;AACvB;AACA,IAAIA,OAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK;AAC3C,MAAM,MAAM,GAAG,GAAGA,OAAK,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AACjD;AACA,MAAM,IAAI,GAAG,EAAE;AACf,QAAQ,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAC1C,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,QAAQ,OAAO;AACf,OAAO;AACP;AACA,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;AAC/E;AACA,MAAM,IAAI,UAAU,KAAK,MAAM,EAAE;AACjC,QAAQ,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,OAAO;AACP;AACA,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAC/C;AACA,MAAM,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;AACjC,KAAK,CAAC,CAAC;AACP;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH;AACA,EAAE,MAAM,CAAC,GAAG,OAAO,EAAE;AACrB,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,OAAO,CAAC,CAAC;AACrD,GAAG;AACH;AACA,EAAE,MAAM,CAAC,SAAS,EAAE;AACpB,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACpC;AACA,IAAIA,OAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK;AAC3C,MAAM,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC,MAAM,CAAC,GAAG,SAAS,IAAIA,OAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;AACvH,KAAK,CAAC,CAAC;AACP;AACA,IAAI,OAAO,GAAG,CAAC;AACf,GAAG;AACH;AACA,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG;AACtB,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;AAC5D,GAAG;AACH;AACA,EAAE,QAAQ,GAAG;AACb,IAAI,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,MAAM,GAAG,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpG,GAAG;AACH;AACA,EAAE,YAAY,GAAG;AACjB,IAAI,OAAO,IAAI,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AACxC,GAAG;AACH;AACA,EAAE,KAAK,MAAM,CAAC,WAAW,CAAC,GAAG;AAC7B,IAAI,OAAO,cAAc,CAAC;AAC1B,GAAG;AACH;AACA,EAAE,OAAO,IAAI,CAAC,KAAK,EAAE;AACrB,IAAI,OAAO,KAAK,YAAY,IAAI,GAAG,KAAK,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3D,GAAG;AACH;AACA,EAAE,OAAO,MAAM,CAAC,KAAK,EAAE,GAAG,OAAO,EAAE;AACnC,IAAI,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC;AACA,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;AACtD;AACA,IAAI,OAAO,QAAQ,CAAC;AACpB,GAAG;AACH;AACA,EAAE,OAAO,QAAQ,CAAC,MAAM,EAAE;AAC1B,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG;AAC7D,MAAM,SAAS,EAAE,EAAE;AACnB,KAAK,CAAC,CAAC;AACP;AACA,IAAI,MAAM,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC;AAC1C,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;AACrC;AACA,IAAI,SAAS,cAAc,CAAC,OAAO,EAAE;AACrC,MAAM,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;AAC/C;AACA,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE;AAC/B,QAAQ,cAAc,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC3C,QAAQ,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC;AAClC,OAAO;AACP,KAAK;AACL;AACA,IAAIA,OAAK,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AACpF;AACA,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH,CAAC;AACD;AACAQ,cAAY,CAAC,QAAQ,CAAC,CAAC,cAAc,EAAE,gBAAgB,EAAE,QAAQ,EAAE,iBAAiB,EAAE,YAAY,EAAE,eAAe,CAAC,CAAC,CAAC;AACtH;AACA;AACAR,OAAK,CAAC,iBAAiB,CAACQ,cAAY,CAAC,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,GAAG,KAAK;AAClE,EAAE,IAAI,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnD,EAAE,OAAO;AACT,IAAI,GAAG,EAAE,MAAM,KAAK;AACpB,IAAI,GAAG,CAAC,WAAW,EAAE;AACrB,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC;AACjC,KAAK;AACL,GAAG;AACH,CAAC,CAAC,CAAC;AACH;AACAR,OAAK,CAAC,aAAa,CAACQ,cAAY,CAAC,CAAC;AAClC;AACA,uBAAeA,cAAY;;ACnT3B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,aAAa,CAAC,GAAG,EAAE,QAAQ,EAAE;AACrD,EAAE,MAAM,MAAM,GAAG,IAAI,IAAIC,UAAQ,CAAC;AAClC,EAAE,MAAM,OAAO,GAAG,QAAQ,IAAI,MAAM,CAAC;AACrC,EAAE,MAAM,OAAO,GAAGD,cAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AACrD,EAAE,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;AAC1B;AACA,EAAER,OAAK,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,SAAS,CAAC,EAAE,EAAE;AAC5C,IAAI,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,SAAS,EAAE,EAAE,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAC9F,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC;AACtB;AACA,EAAE,OAAO,IAAI,CAAC;AACd;;ACzBe,SAASU,UAAQ,CAAC,KAAK,EAAE;AACxC,EAAE,OAAO,CAAC,EAAE,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;AACvC;;ACCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASC,eAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AACjD;AACA,EAAEZ,YAAU,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,IAAI,IAAI,GAAG,UAAU,GAAG,OAAO,EAAEA,YAAU,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAC1G,EAAE,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;AAC9B,CAAC;AACD;AACAC,OAAK,CAAC,QAAQ,CAACW,eAAa,EAAEZ,YAAU,EAAE;AAC1C,EAAE,UAAU,EAAE,IAAI;AAClB,CAAC,CAAC;;AClBF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE;AAC1D,EAAE,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC;AACxD,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,cAAc,IAAI,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC9E,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;AACtB,GAAG,MAAM;AACT,IAAI,MAAM,CAAC,IAAIA,YAAU;AACzB,MAAM,kCAAkC,GAAG,QAAQ,CAAC,MAAM;AAC1D,MAAM,CAACA,YAAU,CAAC,eAAe,EAAEA,YAAU,CAAC,gBAAgB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;AACtG,MAAM,QAAQ,CAAC,MAAM;AACrB,MAAM,QAAQ,CAAC,OAAO;AACtB,MAAM,QAAQ;AACd,KAAK,CAAC,CAAC;AACP,GAAG;AACH;;ACxBe,SAAS,aAAa,CAAC,GAAG,EAAE;AAC3C,EAAE,MAAM,KAAK,GAAG,2BAA2B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtD,EAAE,OAAO,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;AACjC;;ACHA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,WAAW,CAAC,YAAY,EAAE,GAAG,EAAE;AACxC,EAAE,YAAY,GAAG,YAAY,IAAI,EAAE,CAAC;AACpC,EAAE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;AACxC,EAAE,MAAM,UAAU,GAAG,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;AAC7C,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC;AACf,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC;AACf,EAAE,IAAI,aAAa,CAAC;AACpB;AACA,EAAE,GAAG,GAAG,GAAG,KAAK,SAAS,GAAG,GAAG,GAAG,IAAI,CAAC;AACvC;AACA,EAAE,OAAO,SAAS,IAAI,CAAC,WAAW,EAAE;AACpC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B;AACA,IAAI,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;AACvC;AACA,IAAI,IAAI,CAAC,aAAa,EAAE;AACxB,MAAM,aAAa,GAAG,GAAG,CAAC;AAC1B,KAAK;AACL;AACA,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC;AAC9B,IAAI,UAAU,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC;AAC3B;AACA,IAAI,IAAI,CAAC,GAAG,IAAI,CAAC;AACjB,IAAI,IAAI,UAAU,GAAG,CAAC,CAAC;AACvB;AACA,IAAI,OAAO,CAAC,KAAK,IAAI,EAAE;AACvB,MAAM,UAAU,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/B,MAAM,CAAC,GAAG,CAAC,GAAG,YAAY,CAAC;AAC3B,KAAK;AACL;AACA,IAAI,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,YAAY,CAAC;AACrC;AACA,IAAI,IAAI,IAAI,KAAK,IAAI,EAAE;AACvB,MAAM,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,YAAY,CAAC;AACvC,KAAK;AACL;AACA,IAAI,IAAI,GAAG,GAAG,aAAa,GAAG,GAAG,EAAE;AACnC,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,MAAM,MAAM,GAAG,SAAS,IAAI,GAAG,GAAG,SAAS,CAAC;AAChD;AACA,IAAI,OAAO,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,GAAG,MAAM,CAAC,GAAG,SAAS,CAAC;AACvE,GAAG,CAAC;AACJ;;ACpDA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE;AAC5B,EAAE,IAAI,SAAS,GAAG,CAAC,CAAC;AACpB,EAAE,IAAI,SAAS,GAAG,IAAI,GAAG,IAAI,CAAC;AAC9B,EAAE,IAAI,QAAQ,CAAC;AACf,EAAE,IAAI,KAAK,CAAC;AACZ;AACA,EAAE,MAAM,MAAM,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK;AAC7C,IAAI,SAAS,GAAG,GAAG,CAAC;AACpB,IAAI,QAAQ,GAAG,IAAI,CAAC;AACpB,IAAI,IAAI,KAAK,EAAE;AACf,MAAM,YAAY,CAAC,KAAK,CAAC,CAAC;AAC1B,MAAM,KAAK,GAAG,IAAI,CAAC;AACnB,KAAK;AACL,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AACzB,IAAG;AACH;AACA,EAAE,MAAM,SAAS,GAAG,CAAC,GAAG,IAAI,KAAK;AACjC,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AAC3B,IAAI,MAAM,MAAM,GAAG,GAAG,GAAG,SAAS,CAAC;AACnC,IAAI,KAAK,MAAM,IAAI,SAAS,EAAE;AAC9B,MAAM,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACxB,KAAK,MAAM;AACX,MAAM,QAAQ,GAAG,IAAI,CAAC;AACtB,MAAM,IAAI,CAAC,KAAK,EAAE;AAClB,QAAQ,KAAK,GAAG,UAAU,CAAC,MAAM;AACjC,UAAU,KAAK,GAAG,IAAI,CAAC;AACvB,UAAU,MAAM,CAAC,QAAQ,EAAC;AAC1B,SAAS,EAAE,SAAS,GAAG,MAAM,CAAC,CAAC;AAC/B,OAAO;AACP,KAAK;AACL,IAAG;AACH;AACA,EAAE,MAAM,KAAK,GAAG,MAAM,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC;AACnD;AACA,EAAE,OAAO,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AAC5B;;ACrCO,MAAM,oBAAoB,GAAG,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,GAAG,CAAC,KAAK;AAC9E,EAAE,IAAI,aAAa,GAAG,CAAC,CAAC;AACxB,EAAE,MAAM,YAAY,GAAG,WAAW,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAC5C;AACA,EAAE,OAAO,QAAQ,CAAC,CAAC,IAAI;AACvB,IAAI,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC;AAC5B,IAAI,MAAM,KAAK,GAAG,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,KAAK,GAAG,SAAS,CAAC;AAC3D,IAAI,MAAM,aAAa,GAAG,MAAM,GAAG,aAAa,CAAC;AACjD,IAAI,MAAM,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,CAAC;AAC7C,IAAI,MAAM,OAAO,GAAG,MAAM,IAAI,KAAK,CAAC;AACpC;AACA,IAAI,aAAa,GAAG,MAAM,CAAC;AAC3B;AACA,IAAI,MAAM,IAAI,GAAG;AACjB,MAAM,MAAM;AACZ,MAAM,KAAK;AACX,MAAM,QAAQ,EAAE,KAAK,IAAI,MAAM,GAAG,KAAK,IAAI,SAAS;AACpD,MAAM,KAAK,EAAE,aAAa;AAC1B,MAAM,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS;AACnC,MAAM,SAAS,EAAE,IAAI,IAAI,KAAK,IAAI,OAAO,GAAG,CAAC,KAAK,GAAG,MAAM,IAAI,IAAI,GAAG,SAAS;AAC/E,MAAM,KAAK,EAAE,CAAC;AACd,MAAM,gBAAgB,EAAE,KAAK,IAAI,IAAI;AACrC,MAAM,CAAC,gBAAgB,GAAG,UAAU,GAAG,QAAQ,GAAG,IAAI;AACtD,KAAK,CAAC;AACN;AACA,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;AACnB,GAAG,EAAE,IAAI,CAAC,CAAC;AACX,EAAC;AACD;AACO,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK;AAC5D,EAAE,MAAM,gBAAgB,GAAG,KAAK,IAAI,IAAI,CAAC;AACzC;AACA,EAAE,OAAO,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,gBAAgB;AACpB,IAAI,KAAK;AACT,IAAI,MAAM;AACV,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACpB,EAAC;AACD;AACO,MAAM,cAAc,GAAG,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,KAAKC,OAAK,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;;ACzChF,wBAAe,QAAQ,CAAC,qBAAqB,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,CAAC,GAAG,KAAK;AAC9E,EAAE,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;AACtC;AACA,EAAE;AACF,IAAI,MAAM,CAAC,QAAQ,KAAK,GAAG,CAAC,QAAQ;AACpC,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI;AAC5B,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC;AACxC,IAAI;AACJ,CAAC;AACD,EAAE,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC;AAC1B,EAAE,QAAQ,CAAC,SAAS,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC;AAC5E,CAAC,GAAG,MAAM,IAAI;;ACVd,gBAAe,QAAQ,CAAC,qBAAqB;AAC7C;AACA;AACA,EAAE;AACF,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE;AACtD,MAAM,MAAM,MAAM,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9D;AACA,MAAMA,OAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,GAAG,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;AAC3F;AACA,MAAMA,OAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;AAC1D;AACA,MAAMA,OAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC;AAChE;AACA,MAAM,MAAM,KAAK,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC/C;AACA,MAAM,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1C,KAAK;AACL;AACA,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,YAAY,GAAG,IAAI,GAAG,WAAW,CAAC,CAAC,CAAC;AACzF,MAAM,QAAQ,KAAK,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,EAAE;AAC3D,KAAK;AACL;AACA,IAAI,MAAM,CAAC,IAAI,EAAE;AACjB,MAAM,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC;AAClD,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE;AACF,IAAI,KAAK,GAAG,EAAE;AACd,IAAI,IAAI,GAAG;AACX,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK;AACL,IAAI,MAAM,GAAG,EAAE;AACf,GAAG;;ACtCH;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,aAAa,CAAC,GAAG,EAAE;AAC3C;AACA;AACA;AACA,EAAE,OAAO,6BAA6B,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjD;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE;AAC1D,EAAE,OAAO,WAAW;AACpB,MAAM,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;AAC3E,MAAM,OAAO,CAAC;AACd;;ACTA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,aAAa,CAAC,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE;AAChF,EAAE,IAAI,aAAa,GAAG,CAAC,aAAa,CAAC,YAAY,CAAC,CAAC;AACnD,EAAE,IAAI,OAAO,KAAK,aAAa,IAAI,iBAAiB,IAAI,KAAK,CAAC,EAAE;AAChE,IAAI,OAAO,WAAW,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;AAC9C,GAAG;AACH,EAAE,OAAO,YAAY,CAAC;AACtB;;AChBA,MAAM,eAAe,GAAG,CAAC,KAAK,KAAK,KAAK,YAAYQ,cAAY,GAAG,EAAE,GAAG,KAAK,EAAE,GAAG,KAAK,CAAC;AACxF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASI,aAAW,CAAC,OAAO,EAAE,OAAO,EAAE;AACtD;AACA,EAAE,OAAO,GAAG,OAAO,IAAI,EAAE,CAAC;AAC1B,EAAE,MAAM,MAAM,GAAG,EAAE,CAAC;AACpB;AACA,EAAE,SAAS,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE;AAC1D,IAAI,IAAIZ,OAAK,CAAC,aAAa,CAAC,MAAM,CAAC,IAAIA,OAAK,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;AACpE,MAAM,OAAOA,OAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC1D,KAAK,MAAM,IAAIA,OAAK,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE;AAC5C,MAAM,OAAOA,OAAK,CAAC,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AACrC,KAAK,MAAM,IAAIA,OAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACtC,MAAM,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;AAC5B,KAAK;AACL,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH;AACA;AACA,EAAE,SAAS,mBAAmB,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,QAAQ,EAAE;AACtD,IAAI,IAAI,CAACA,OAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;AAC/B,MAAM,OAAO,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC,CAAC;AACnD,KAAK,MAAM,IAAI,CAACA,OAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;AACtC,MAAM,OAAO,cAAc,CAAC,SAAS,EAAE,CAAC,EAAE,IAAI,GAAG,QAAQ,CAAC,CAAC;AAC3D,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,SAAS,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE;AAClC,IAAI,IAAI,CAACA,OAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;AAC/B,MAAM,OAAO,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAC1C,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,SAAS,gBAAgB,CAAC,CAAC,EAAE,CAAC,EAAE;AAClC,IAAI,IAAI,CAACA,OAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;AAC/B,MAAM,OAAO,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAC1C,KAAK,MAAM,IAAI,CAACA,OAAK,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;AACtC,MAAM,OAAO,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAC1C,KAAK;AACL,GAAG;AACH;AACA;AACA,EAAE,SAAS,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE;AACvC,IAAI,IAAI,IAAI,IAAI,OAAO,EAAE;AACzB,MAAM,OAAO,cAAc,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAClC,KAAK,MAAM,IAAI,IAAI,IAAI,OAAO,EAAE;AAChC,MAAM,OAAO,cAAc,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC;AAC1C,KAAK;AACL,GAAG;AACH;AACA,EAAE,MAAM,QAAQ,GAAG;AACnB,IAAI,GAAG,EAAE,gBAAgB;AACzB,IAAI,MAAM,EAAE,gBAAgB;AAC5B,IAAI,IAAI,EAAE,gBAAgB;AAC1B,IAAI,OAAO,EAAE,gBAAgB;AAC7B,IAAI,gBAAgB,EAAE,gBAAgB;AACtC,IAAI,iBAAiB,EAAE,gBAAgB;AACvC,IAAI,gBAAgB,EAAE,gBAAgB;AACtC,IAAI,OAAO,EAAE,gBAAgB;AAC7B,IAAI,cAAc,EAAE,gBAAgB;AACpC,IAAI,eAAe,EAAE,gBAAgB;AACrC,IAAI,aAAa,EAAE,gBAAgB;AACnC,IAAI,OAAO,EAAE,gBAAgB;AAC7B,IAAI,YAAY,EAAE,gBAAgB;AAClC,IAAI,cAAc,EAAE,gBAAgB;AACpC,IAAI,cAAc,EAAE,gBAAgB;AACpC,IAAI,gBAAgB,EAAE,gBAAgB;AACtC,IAAI,kBAAkB,EAAE,gBAAgB;AACxC,IAAI,UAAU,EAAE,gBAAgB;AAChC,IAAI,gBAAgB,EAAE,gBAAgB;AACtC,IAAI,aAAa,EAAE,gBAAgB;AACnC,IAAI,cAAc,EAAE,gBAAgB;AACpC,IAAI,SAAS,EAAE,gBAAgB;AAC/B,IAAI,SAAS,EAAE,gBAAgB;AAC/B,IAAI,UAAU,EAAE,gBAAgB;AAChC,IAAI,WAAW,EAAE,gBAAgB;AACjC,IAAI,UAAU,EAAE,gBAAgB;AAChC,IAAI,gBAAgB,EAAE,gBAAgB;AACtC,IAAI,cAAc,EAAE,eAAe;AACnC,IAAI,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,KAAK,mBAAmB,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC;AACpG,GAAG,CAAC;AACJ;AACA,EAAEA,OAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,EAAE,SAAS,kBAAkB,CAAC,IAAI,EAAE;AACpG,IAAI,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC;AACxD,IAAI,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;AAClE,IAAI,CAACA,OAAK,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,KAAK,KAAK,eAAe,MAAM,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;AAClG,GAAG,CAAC,CAAC;AACL;AACA,EAAE,OAAO,MAAM,CAAC;AAChB;;AChGA,sBAAe,CAAC,MAAM,KAAK;AAC3B,EAAE,MAAM,SAAS,GAAGY,aAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAC5C;AACA,EAAE,IAAI,CAAC,IAAI,EAAE,aAAa,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,SAAS,CAAC;AACvF;AACA,EAAE,SAAS,CAAC,OAAO,GAAG,OAAO,GAAGJ,cAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAC3D;AACA,EAAE,SAAS,CAAC,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACjJ;AACA;AACA,EAAE,IAAI,IAAI,EAAE;AACZ,IAAI,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,QAAQ;AACzC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,EAAE,IAAI,GAAG,IAAI,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5G,KAAK,CAAC;AACN,GAAG;AACH;AACA,EAAE,IAAI,WAAW,CAAC;AAClB;AACA,EAAE,IAAIR,OAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE;AAC9B,IAAI,IAAI,QAAQ,CAAC,qBAAqB,IAAI,QAAQ,CAAC,8BAA8B,EAAE;AACnF,MAAM,OAAO,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;AACxC,KAAK,MAAM,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,cAAc,EAAE,MAAM,KAAK,EAAE;AACnE;AACA,MAAM,MAAM,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,GAAG,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;AACrH,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC,IAAI,IAAI,qBAAqB,EAAE,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACpF,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,IAAI,QAAQ,CAAC,qBAAqB,EAAE;AACtC,IAAI,aAAa,IAAIA,OAAK,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,aAAa,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;AACnG;AACA,IAAI,IAAI,aAAa,KAAK,aAAa,KAAK,KAAK,IAAI,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE;AACtF;AACA,MAAM,MAAM,SAAS,GAAG,cAAc,IAAI,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;AACzF;AACA,MAAM,IAAI,SAAS,EAAE;AACrB,QAAQ,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;AAC/C,OAAO;AACP,KAAK;AACL,GAAG;AACH;AACA,EAAE,OAAO,SAAS,CAAC;AACnB;;AC5CA,MAAM,qBAAqB,GAAG,OAAO,cAAc,KAAK,WAAW,CAAC;AACpE;AACA,mBAAe,qBAAqB,IAAI,UAAU,MAAM,EAAE;AAC1D,EAAE,OAAO,IAAI,OAAO,CAAC,SAAS,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE;AAClE,IAAI,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAC1C,IAAI,IAAI,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;AACnC,IAAI,MAAM,cAAc,GAAGQ,cAAY,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC;AAC1E,IAAI,IAAI,CAAC,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,CAAC,GAAG,OAAO,CAAC;AACvE,IAAI,IAAI,UAAU,CAAC;AACnB,IAAI,IAAI,eAAe,EAAE,iBAAiB,CAAC;AAC3C,IAAI,IAAI,WAAW,EAAE,aAAa,CAAC;AACnC;AACA,IAAI,SAAS,IAAI,GAAG;AACpB,MAAM,WAAW,IAAI,WAAW,EAAE,CAAC;AACnC,MAAM,aAAa,IAAI,aAAa,EAAE,CAAC;AACvC;AACA,MAAM,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;AACzE;AACA,MAAM,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AAChF,KAAK;AACL;AACA,IAAI,IAAI,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;AACvC;AACA,IAAI,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;AAClE;AACA;AACA,IAAI,OAAO,CAAC,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;AACtC;AACA,IAAI,SAAS,SAAS,GAAG;AACzB,MAAM,IAAI,CAAC,OAAO,EAAE;AACpB,QAAQ,OAAO;AACf,OAAO;AACP;AACA,MAAM,MAAM,eAAe,GAAGA,cAAY,CAAC,IAAI;AAC/C,QAAQ,uBAAuB,IAAI,OAAO,IAAI,OAAO,CAAC,qBAAqB,EAAE;AAC7E,OAAO,CAAC;AACR,MAAM,MAAM,YAAY,GAAG,CAAC,YAAY,IAAI,YAAY,KAAK,MAAM,IAAI,YAAY,KAAK,MAAM;AAC9F,QAAQ,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC;AAChD,MAAM,MAAM,QAAQ,GAAG;AACvB,QAAQ,IAAI,EAAE,YAAY;AAC1B,QAAQ,MAAM,EAAE,OAAO,CAAC,MAAM;AAC9B,QAAQ,UAAU,EAAE,OAAO,CAAC,UAAU;AACtC,QAAQ,OAAO,EAAE,eAAe;AAChC,QAAQ,MAAM;AACd,QAAQ,OAAO;AACf,OAAO,CAAC;AACR;AACA,MAAM,MAAM,CAAC,SAAS,QAAQ,CAAC,KAAK,EAAE;AACtC,QAAQ,OAAO,CAAC,KAAK,CAAC,CAAC;AACvB,QAAQ,IAAI,EAAE,CAAC;AACf,OAAO,EAAE,SAAS,OAAO,CAAC,GAAG,EAAE;AAC/B,QAAQ,MAAM,CAAC,GAAG,CAAC,CAAC;AACpB,QAAQ,IAAI,EAAE,CAAC;AACf,OAAO,EAAE,QAAQ,CAAC,CAAC;AACnB;AACA;AACA,MAAM,OAAO,GAAG,IAAI,CAAC;AACrB,KAAK;AACL;AACA,IAAI,IAAI,WAAW,IAAI,OAAO,EAAE;AAChC;AACA,MAAM,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;AACpC,KAAK,MAAM;AACX;AACA,MAAM,OAAO,CAAC,kBAAkB,GAAG,SAAS,UAAU,GAAG;AACzD,QAAQ,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,KAAK,CAAC,EAAE;AAClD,UAAU,OAAO;AACjB,SAAS;AACT;AACA;AACA;AACA;AACA;AACA,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE;AAC1G,UAAU,OAAO;AACjB,SAAS;AACT;AACA;AACA,QAAQ,UAAU,CAAC,SAAS,CAAC,CAAC;AAC9B,OAAO,CAAC;AACR,KAAK;AACL;AACA;AACA,IAAI,OAAO,CAAC,OAAO,GAAG,SAAS,WAAW,GAAG;AAC7C,MAAM,IAAI,CAAC,OAAO,EAAE;AACpB,QAAQ,OAAO;AACf,OAAO;AACP;AACA,MAAM,MAAM,CAAC,IAAIT,YAAU,CAAC,iBAAiB,EAAEA,YAAU,CAAC,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1F;AACA;AACA,MAAM,OAAO,GAAG,IAAI,CAAC;AACrB,KAAK,CAAC;AACN;AACA;AACA,IAAI,OAAO,CAAC,OAAO,GAAG,SAAS,WAAW,GAAG;AAC7C;AACA;AACA,MAAM,MAAM,CAAC,IAAIA,YAAU,CAAC,eAAe,EAAEA,YAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AACvF;AACA;AACA,MAAM,OAAO,GAAG,IAAI,CAAC;AACrB,KAAK,CAAC;AACN;AACA;AACA,IAAI,OAAO,CAAC,SAAS,GAAG,SAAS,aAAa,GAAG;AACjD,MAAM,IAAI,mBAAmB,GAAG,OAAO,CAAC,OAAO,GAAG,aAAa,GAAG,OAAO,CAAC,OAAO,GAAG,aAAa,GAAG,kBAAkB,CAAC;AACvH,MAAM,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,oBAAoB,CAAC;AACxE,MAAM,IAAI,OAAO,CAAC,mBAAmB,EAAE;AACvC,QAAQ,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC;AAC1D,OAAO;AACP,MAAM,MAAM,CAAC,IAAIA,YAAU;AAC3B,QAAQ,mBAAmB;AAC3B,QAAQ,YAAY,CAAC,mBAAmB,GAAGA,YAAU,CAAC,SAAS,GAAGA,YAAU,CAAC,YAAY;AACzF,QAAQ,MAAM;AACd,QAAQ,OAAO,CAAC,CAAC,CAAC;AAClB;AACA;AACA,MAAM,OAAO,GAAG,IAAI,CAAC;AACrB,KAAK,CAAC;AACN;AACA;AACA,IAAI,WAAW,KAAK,SAAS,IAAI,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACrE;AACA;AACA,IAAI,IAAI,kBAAkB,IAAI,OAAO,EAAE;AACvC,MAAMC,OAAK,CAAC,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,EAAE,SAAS,gBAAgB,CAAC,GAAG,EAAE,GAAG,EAAE;AACjF,QAAQ,OAAO,CAAC,gBAAgB,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAC3C,OAAO,CAAC,CAAC;AACT,KAAK;AACL;AACA;AACA,IAAI,IAAI,CAACA,OAAK,CAAC,WAAW,CAAC,OAAO,CAAC,eAAe,CAAC,EAAE;AACrD,MAAM,OAAO,CAAC,eAAe,GAAG,CAAC,CAAC,OAAO,CAAC,eAAe,CAAC;AAC1D,KAAK;AACL;AACA;AACA,IAAI,IAAI,YAAY,IAAI,YAAY,KAAK,MAAM,EAAE;AACjD,MAAM,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC;AAClD,KAAK;AACL;AACA;AACA,IAAI,IAAI,kBAAkB,EAAE;AAC5B,MAAM,CAAC,CAAC,iBAAiB,EAAE,aAAa,CAAC,GAAG,oBAAoB,CAAC,kBAAkB,EAAE,IAAI,CAAC,EAAE;AAC5F,MAAM,OAAO,CAAC,gBAAgB,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;AAC9D,KAAK;AACL;AACA;AACA,IAAI,IAAI,gBAAgB,IAAI,OAAO,CAAC,MAAM,EAAE;AAC5C,MAAM,CAAC,CAAC,eAAe,EAAE,WAAW,CAAC,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,EAAE;AAChF;AACA,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,eAAe,CAAC,CAAC;AACnE;AACA,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;AAC9D,KAAK;AACL;AACA,IAAI,IAAI,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE;AAC/C;AACA;AACA,MAAM,UAAU,GAAG,MAAM,IAAI;AAC7B,QAAQ,IAAI,CAAC,OAAO,EAAE;AACtB,UAAU,OAAO;AACjB,SAAS;AACT,QAAQ,MAAM,CAAC,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,GAAG,IAAIW,eAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,CAAC;AAC3F,QAAQ,OAAO,CAAC,KAAK,EAAE,CAAC;AACxB,QAAQ,OAAO,GAAG,IAAI,CAAC;AACvB,OAAO,CAAC;AACR;AACA,MAAM,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACvE,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE;AAC1B,QAAQ,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,UAAU,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;AACrG,OAAO;AACP,KAAK;AACL;AACA,IAAI,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAChD;AACA,IAAI,IAAI,QAAQ,IAAI,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE;AACjE,MAAM,MAAM,CAAC,IAAIZ,YAAU,CAAC,uBAAuB,GAAG,QAAQ,GAAG,GAAG,EAAEA,YAAU,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;AAC3G,MAAM,OAAO;AACb,KAAK;AACL;AACA;AACA;AACA,IAAI,OAAO,CAAC,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;AACtC,GAAG,CAAC,CAAC;AACL;;AChMA,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK;AAC7C,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;AACtE;AACA,EAAE,IAAI,OAAO,IAAI,MAAM,EAAE;AACzB,IAAI,IAAI,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;AAC3C;AACA,IAAI,IAAI,OAAO,CAAC;AAChB;AACA,IAAI,MAAM,OAAO,GAAG,UAAU,MAAM,EAAE;AACtC,MAAM,IAAI,CAAC,OAAO,EAAE;AACpB,QAAQ,OAAO,GAAG,IAAI,CAAC;AACvB,QAAQ,WAAW,EAAE,CAAC;AACtB,QAAQ,MAAM,GAAG,GAAG,MAAM,YAAY,KAAK,GAAG,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;AACnE,QAAQ,UAAU,CAAC,KAAK,CAAC,GAAG,YAAYA,YAAU,GAAG,GAAG,GAAG,IAAIY,eAAa,CAAC,GAAG,YAAY,KAAK,GAAG,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC;AACxH,OAAO;AACP,MAAK;AACL;AACA,IAAI,IAAI,KAAK,GAAG,OAAO,IAAI,UAAU,CAAC,MAAM;AAC5C,MAAM,KAAK,GAAG,IAAI,CAAC;AACnB,MAAM,OAAO,CAAC,IAAIZ,YAAU,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,eAAe,CAAC,EAAEA,YAAU,CAAC,SAAS,CAAC,EAAC;AACxF,KAAK,EAAE,OAAO,EAAC;AACf;AACA,IAAI,MAAM,WAAW,GAAG,MAAM;AAC9B,MAAM,IAAI,OAAO,EAAE;AACnB,QAAQ,KAAK,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;AACrC,QAAQ,KAAK,GAAG,IAAI,CAAC;AACrB,QAAQ,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI;AAClC,UAAU,MAAM,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,MAAM,CAAC,mBAAmB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1G,SAAS,CAAC,CAAC;AACX,QAAQ,OAAO,GAAG,IAAI,CAAC;AACvB,OAAO;AACP,MAAK;AACL;AACA,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAC3E;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC;AAChC;AACA,IAAI,MAAM,CAAC,WAAW,GAAG,MAAMC,OAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACvD;AACA,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG;AACH,EAAC;AACD;AACA,yBAAe,cAAc;;AC9CtB,MAAM,WAAW,GAAG,WAAW,KAAK,EAAE,SAAS,EAAE;AACxD,EAAE,IAAI,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC;AAC7B;AACA,EAAE,IAAI,CAAC,SAAS,IAAI,GAAG,GAAG,SAAS,EAAE;AACrC,IAAI,MAAM,KAAK,CAAC;AAChB,IAAI,OAAO;AACX,GAAG;AACH;AACA,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC;AACd,EAAE,IAAI,GAAG,CAAC;AACV;AACA,EAAE,OAAO,GAAG,GAAG,GAAG,EAAE;AACpB,IAAI,GAAG,GAAG,GAAG,GAAG,SAAS,CAAC;AAC1B,IAAI,MAAM,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;AAChC,IAAI,GAAG,GAAG,GAAG,CAAC;AACd,GAAG;AACH,EAAC;AACD;AACO,MAAM,SAAS,GAAG,iBAAiB,QAAQ,EAAE,SAAS,EAAE;AAC/D,EAAE,WAAW,MAAM,KAAK,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE;AAClD,IAAI,OAAO,WAAW,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACzC,GAAG;AACH,EAAC;AACD;AACA,MAAM,UAAU,GAAG,iBAAiB,MAAM,EAAE;AAC5C,EAAE,IAAI,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE;AACpC,IAAI,OAAO,MAAM,CAAC;AAClB,IAAI,OAAO;AACX,GAAG;AACH;AACA,EAAE,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,EAAE,CAAC;AACpC,EAAE,IAAI;AACN,IAAI,SAAS;AACb,MAAM,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;AAChD,MAAM,IAAI,IAAI,EAAE;AAChB,QAAQ,MAAM;AACd,OAAO;AACP,MAAM,MAAM,KAAK,CAAC;AAClB,KAAK;AACL,GAAG,SAAS;AACZ,IAAI,MAAM,MAAM,CAAC,MAAM,EAAE,CAAC;AAC1B,GAAG;AACH,EAAC;AACD;AACO,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,KAAK;AACxE,EAAE,MAAM,QAAQ,GAAG,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAChD;AACA,EAAE,IAAI,KAAK,GAAG,CAAC,CAAC;AAChB,EAAE,IAAI,IAAI,CAAC;AACX,EAAE,IAAI,SAAS,GAAG,CAAC,CAAC,KAAK;AACzB,IAAI,IAAI,CAAC,IAAI,EAAE;AACf,MAAM,IAAI,GAAG,IAAI,CAAC;AAClB,MAAM,QAAQ,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC9B,KAAK;AACL,IAAG;AACH;AACA,EAAE,OAAO,IAAI,cAAc,CAAC;AAC5B,IAAI,MAAM,IAAI,CAAC,UAAU,EAAE;AAC3B,MAAM,IAAI;AACV,QAAQ,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;AACpD;AACA,QAAQ,IAAI,IAAI,EAAE;AAClB,SAAS,SAAS,EAAE,CAAC;AACrB,UAAU,UAAU,CAAC,KAAK,EAAE,CAAC;AAC7B,UAAU,OAAO;AACjB,SAAS;AACT;AACA,QAAQ,IAAI,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC;AACnC,QAAQ,IAAI,UAAU,EAAE;AACxB,UAAU,IAAI,WAAW,GAAG,KAAK,IAAI,GAAG,CAAC;AACzC,UAAU,UAAU,CAAC,WAAW,CAAC,CAAC;AAClC,SAAS;AACT,QAAQ,UAAU,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;AAClD,OAAO,CAAC,OAAO,GAAG,EAAE;AACpB,QAAQ,SAAS,CAAC,GAAG,CAAC,CAAC;AACvB,QAAQ,MAAM,GAAG,CAAC;AAClB,OAAO;AACP,KAAK;AACL,IAAI,MAAM,CAAC,MAAM,EAAE;AACnB,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;AACxB,MAAM,OAAO,QAAQ,CAAC,MAAM,EAAE,CAAC;AAC/B,KAAK;AACL,GAAG,EAAE;AACL,IAAI,aAAa,EAAE,CAAC;AACpB,GAAG,CAAC;AACJ;;AC5EA,MAAM,gBAAgB,GAAG,OAAO,KAAK,KAAK,UAAU,IAAI,OAAO,OAAO,KAAK,UAAU,IAAI,OAAO,QAAQ,KAAK,UAAU,CAAC;AACxH,MAAM,yBAAyB,GAAG,gBAAgB,IAAI,OAAO,cAAc,KAAK,UAAU,CAAC;AAC3F;AACA;AACA,MAAM,UAAU,GAAG,gBAAgB,KAAK,OAAO,WAAW,KAAK,UAAU;AACzE,IAAI,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,WAAW,EAAE,CAAC;AAClE,IAAI,OAAO,GAAG,KAAK,IAAI,UAAU,CAAC,MAAM,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;AACxE,CAAC,CAAC;AACF;AACA,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,KAAK;AAC9B,EAAE,IAAI;AACN,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC;AACzB,GAAG,CAAC,OAAO,CAAC,EAAE;AACd,IAAI,OAAO,KAAK;AAChB,GAAG;AACH,EAAC;AACD;AACA,MAAM,qBAAqB,GAAG,yBAAyB,IAAI,IAAI,CAAC,MAAM;AACtE,EAAE,IAAI,cAAc,GAAG,KAAK,CAAC;AAC7B;AACA,EAAE,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE;AACtD,IAAI,IAAI,EAAE,IAAI,cAAc,EAAE;AAC9B,IAAI,MAAM,EAAE,MAAM;AAClB,IAAI,IAAI,MAAM,GAAG;AACjB,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,OAAO,MAAM,CAAC;AACpB,KAAK;AACL,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AACjC;AACA,EAAE,OAAO,cAAc,IAAI,CAAC,cAAc,CAAC;AAC3C,CAAC,CAAC,CAAC;AACH;AACA,MAAM,kBAAkB,GAAG,EAAE,GAAG,IAAI,CAAC;AACrC;AACA,MAAM,sBAAsB,GAAG,yBAAyB;AACxD,EAAE,IAAI,CAAC,MAAMA,OAAK,CAAC,gBAAgB,CAAC,IAAI,QAAQ,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC5D;AACA;AACA,MAAM,SAAS,GAAG;AAClB,EAAE,MAAM,EAAE,sBAAsB,KAAK,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC;AACvD,CAAC,CAAC;AACF;AACA,gBAAgB,KAAK,CAAC,CAAC,GAAG,KAAK;AAC/B,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI;AACxE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC,IAAI,CAAC,GAAGA,OAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,CAAC,IAAI,CAAC,EAAE;AAC7F,MAAM,CAAC,CAAC,EAAE,MAAM,KAAK;AACrB,QAAQ,MAAM,IAAID,YAAU,CAAC,CAAC,eAAe,EAAE,IAAI,CAAC,kBAAkB,CAAC,EAAEA,YAAU,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AAC7G,OAAO,EAAC;AACR,GAAG,CAAC,CAAC;AACL,CAAC,EAAE,IAAI,QAAQ,CAAC,CAAC,CAAC;AAClB;AACA,MAAM,aAAa,GAAG,OAAO,IAAI,KAAK;AACtC,EAAE,IAAI,IAAI,IAAI,IAAI,EAAE;AACpB,IAAI,OAAO,CAAC,CAAC;AACb,GAAG;AACH;AACA,EAAE,GAAGC,OAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AACzB,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC;AACrB,GAAG;AACH;AACA,EAAE,GAAGA,OAAK,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;AACtC,IAAI,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,EAAE;AAClD,MAAM,MAAM,EAAE,MAAM;AACpB,MAAM,IAAI;AACV,KAAK,CAAC,CAAC;AACP,IAAI,OAAO,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,EAAE,UAAU,CAAC;AACrD,GAAG;AACH;AACA,EAAE,GAAGA,OAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAIA,OAAK,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE;AACjE,IAAI,OAAO,IAAI,CAAC,UAAU,CAAC;AAC3B,GAAG;AACH;AACA,EAAE,GAAGA,OAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;AACpC,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;AACrB,GAAG;AACH;AACA,EAAE,GAAGA,OAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE;AAC3B,IAAI,OAAO,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC;AAC/C,GAAG;AACH,EAAC;AACD;AACA,MAAM,iBAAiB,GAAG,OAAO,OAAO,EAAE,IAAI,KAAK;AACnD,EAAE,MAAM,MAAM,GAAGA,OAAK,CAAC,cAAc,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAClE;AACA,EAAE,OAAO,MAAM,IAAI,IAAI,GAAG,aAAa,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;AACvD,EAAC;AACD;AACA,qBAAe,gBAAgB,KAAK,OAAO,MAAM,KAAK;AACtD,EAAE,IAAI;AACN,IAAI,GAAG;AACP,IAAI,MAAM;AACV,IAAI,IAAI;AACR,IAAI,MAAM;AACV,IAAI,WAAW;AACf,IAAI,OAAO;AACX,IAAI,kBAAkB;AACtB,IAAI,gBAAgB;AACpB,IAAI,YAAY;AAChB,IAAI,OAAO;AACX,IAAI,eAAe,GAAG,aAAa;AACnC,IAAI,YAAY;AAChB,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAC5B;AACA,EAAE,YAAY,GAAG,YAAY,GAAG,CAAC,YAAY,GAAG,EAAE,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;AAC3E;AACA,EAAE,IAAI,cAAc,GAAGa,gBAAc,CAAC,CAAC,MAAM,EAAE,WAAW,IAAI,WAAW,CAAC,aAAa,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC;AACrG;AACA,EAAE,IAAI,OAAO,CAAC;AACd;AACA,EAAE,MAAM,WAAW,GAAG,cAAc,IAAI,cAAc,CAAC,WAAW,KAAK,MAAM;AAC7E,MAAM,cAAc,CAAC,WAAW,EAAE,CAAC;AACnC,GAAG,CAAC,CAAC;AACL;AACA,EAAE,IAAI,oBAAoB,CAAC;AAC3B;AACA,EAAE,IAAI;AACN,IAAI;AACJ,MAAM,gBAAgB,IAAI,qBAAqB,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM;AACxF,MAAM,CAAC,oBAAoB,GAAG,MAAM,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC;AAC3E,MAAM;AACN,MAAM,IAAI,QAAQ,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;AACtC,QAAQ,MAAM,EAAE,MAAM;AACtB,QAAQ,IAAI,EAAE,IAAI;AAClB,QAAQ,MAAM,EAAE,MAAM;AACtB,OAAO,CAAC,CAAC;AACT;AACA,MAAM,IAAI,iBAAiB,CAAC;AAC5B;AACA,MAAM,IAAIb,OAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,iBAAiB,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,EAAE;AAChG,QAAQ,OAAO,CAAC,cAAc,CAAC,iBAAiB,EAAC;AACjD,OAAO;AACP;AACA,MAAM,IAAI,QAAQ,CAAC,IAAI,EAAE;AACzB,QAAQ,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,sBAAsB;AAC1D,UAAU,oBAAoB;AAC9B,UAAU,oBAAoB,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;AAChE,SAAS,CAAC;AACV;AACA,QAAQ,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;AACjF,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI,CAACA,OAAK,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;AAC1C,MAAM,eAAe,GAAG,eAAe,GAAG,SAAS,GAAG,MAAM,CAAC;AAC7D,KAAK;AACL;AACA;AACA;AACA,IAAI,MAAM,sBAAsB,GAAG,aAAa,IAAI,OAAO,CAAC,SAAS,CAAC;AACtE,IAAI,OAAO,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE;AAC/B,MAAM,GAAG,YAAY;AACrB,MAAM,MAAM,EAAE,cAAc;AAC5B,MAAM,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;AAClC,MAAM,OAAO,EAAE,OAAO,CAAC,SAAS,EAAE,CAAC,MAAM,EAAE;AAC3C,MAAM,IAAI,EAAE,IAAI;AAChB,MAAM,MAAM,EAAE,MAAM;AACpB,MAAM,WAAW,EAAE,sBAAsB,GAAG,eAAe,GAAG,SAAS;AACvE,KAAK,CAAC,CAAC;AACP;AACA,IAAI,IAAI,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,CAAC;AACxC;AACA,IAAI,MAAM,gBAAgB,GAAG,sBAAsB,KAAK,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,UAAU,CAAC,CAAC;AAClH;AACA,IAAI,IAAI,sBAAsB,KAAK,kBAAkB,KAAK,gBAAgB,IAAI,WAAW,CAAC,CAAC,EAAE;AAC7F,MAAM,MAAM,OAAO,GAAG,EAAE,CAAC;AACzB;AACA,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI;AAC1D,QAAQ,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvC,OAAO,CAAC,CAAC;AACT;AACA,MAAM,MAAM,qBAAqB,GAAGA,OAAK,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;AACjG;AACA,MAAM,MAAM,CAAC,UAAU,EAAE,KAAK,CAAC,GAAG,kBAAkB,IAAI,sBAAsB;AAC9E,QAAQ,qBAAqB;AAC7B,QAAQ,oBAAoB,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,IAAI,CAAC;AACtE,OAAO,IAAI,EAAE,CAAC;AACd;AACA,MAAM,QAAQ,GAAG,IAAI,QAAQ;AAC7B,QAAQ,WAAW,CAAC,QAAQ,CAAC,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,MAAM;AACzE,UAAU,KAAK,IAAI,KAAK,EAAE,CAAC;AAC3B,UAAU,WAAW,IAAI,WAAW,EAAE,CAAC;AACvC,SAAS,CAAC;AACV,QAAQ,OAAO;AACf,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,YAAY,GAAG,YAAY,IAAI,MAAM,CAAC;AAC1C;AACA,IAAI,IAAI,YAAY,GAAG,MAAM,SAAS,CAACA,OAAK,CAAC,OAAO,CAAC,SAAS,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAC3G;AACA,IAAI,CAAC,gBAAgB,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;AACtD;AACA,IAAI,OAAO,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AAClD,MAAM,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE;AAC9B,QAAQ,IAAI,EAAE,YAAY;AAC1B,QAAQ,OAAO,EAAEQ,cAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;AACpD,QAAQ,MAAM,EAAE,QAAQ,CAAC,MAAM;AAC/B,QAAQ,UAAU,EAAE,QAAQ,CAAC,UAAU;AACvC,QAAQ,MAAM;AACd,QAAQ,OAAO;AACf,OAAO,EAAC;AACR,KAAK,CAAC;AACN,GAAG,CAAC,OAAO,GAAG,EAAE;AAChB,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;AACjC;AACA,IAAI,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,oBAAoB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE;AACnF,MAAM,MAAM,MAAM,CAAC,MAAM;AACzB,QAAQ,IAAIT,YAAU,CAAC,eAAe,EAAEA,YAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC;AAChF,QAAQ;AACR,UAAU,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,GAAG;AACjC,SAAS;AACT,OAAO;AACP,KAAK;AACL;AACA,IAAI,MAAMA,YAAU,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACjE,GAAG;AACH,CAAC,CAAC;;AC5NF,MAAM,aAAa,GAAG;AACtB,EAAE,IAAI,EAAE,WAAW;AACnB,EAAE,GAAG,EAAE,UAAU;AACjB,EAAE,KAAK,EAAE,YAAY;AACrB,EAAC;AACD;AACAC,OAAK,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,EAAE,EAAE,KAAK,KAAK;AAC5C,EAAE,IAAI,EAAE,EAAE;AACV,IAAI,IAAI;AACR,MAAM,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACjD,KAAK,CAAC,OAAO,CAAC,EAAE;AAChB;AACA,KAAK;AACL,IAAI,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,aAAa,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACtD,GAAG;AACH,CAAC,CAAC,CAAC;AACH;AACA,MAAM,YAAY,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;AAC/C;AACA,MAAM,gBAAgB,GAAG,CAAC,OAAO,KAAKA,OAAK,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,CAAC;AACzG;AACA,iBAAe;AACf,EAAE,UAAU,EAAE,CAAC,QAAQ,KAAK;AAC5B,IAAI,QAAQ,GAAGA,OAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/D;AACA,IAAI,MAAM,CAAC,MAAM,CAAC,GAAG,QAAQ,CAAC;AAC9B,IAAI,IAAI,aAAa,CAAC;AACtB,IAAI,IAAI,OAAO,CAAC;AAChB;AACA,IAAI,MAAM,eAAe,GAAG,EAAE,CAAC;AAC/B;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,MAAM,aAAa,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAClC,MAAM,IAAI,EAAE,CAAC;AACb;AACA,MAAM,OAAO,GAAG,aAAa,CAAC;AAC9B;AACA,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,CAAC,EAAE;AAC5C,QAAQ,OAAO,GAAG,aAAa,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC;AAC5E;AACA,QAAQ,IAAI,OAAO,KAAK,SAAS,EAAE;AACnC,UAAU,MAAM,IAAID,YAAU,CAAC,CAAC,iBAAiB,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,SAAS;AACT,OAAO;AACP;AACA,MAAM,IAAI,OAAO,EAAE;AACnB,QAAQ,MAAM;AACd,OAAO;AACP;AACA,MAAM,eAAe,CAAC,EAAE,IAAI,GAAG,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC;AAC/C,KAAK;AACL;AACA,IAAI,IAAI,CAAC,OAAO,EAAE;AAClB;AACA,MAAM,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC;AACrD,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;AAC9C,WAAW,KAAK,KAAK,KAAK,GAAG,qCAAqC,GAAG,+BAA+B,CAAC;AACrG,SAAS,CAAC;AACV;AACA,MAAM,IAAI,CAAC,GAAG,MAAM;AACpB,SAAS,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACjH,QAAQ,yBAAyB,CAAC;AAClC;AACA,MAAM,MAAM,IAAIA,YAAU;AAC1B,QAAQ,CAAC,qDAAqD,CAAC,GAAG,CAAC;AACnE,QAAQ,iBAAiB;AACzB,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH,EAAE,QAAQ,EAAE,aAAa;AACzB;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,4BAA4B,CAAC,MAAM,EAAE;AAC9C,EAAE,IAAI,MAAM,CAAC,WAAW,EAAE;AAC1B,IAAI,MAAM,CAAC,WAAW,CAAC,gBAAgB,EAAE,CAAC;AAC1C,GAAG;AACH;AACA,EAAE,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE;AAC9C,IAAI,MAAM,IAAIY,eAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC1C,GAAG;AACH,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAAS,eAAe,CAAC,MAAM,EAAE;AAChD,EAAE,4BAA4B,CAAC,MAAM,CAAC,CAAC;AACvC;AACA,EAAE,MAAM,CAAC,OAAO,GAAGH,cAAY,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACrD;AACA;AACA,EAAE,MAAM,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI;AAClC,IAAI,MAAM;AACV,IAAI,MAAM,CAAC,gBAAgB;AAC3B,GAAG,CAAC;AACJ;AACA,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;AAC9D,IAAI,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;AAC9E,GAAG;AACH;AACA,EAAE,MAAM,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,IAAIC,UAAQ,CAAC,OAAO,CAAC,CAAC;AAC1E;AACA,EAAE,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,mBAAmB,CAAC,QAAQ,EAAE;AACrE,IAAI,4BAA4B,CAAC,MAAM,CAAC,CAAC;AACzC;AACA;AACA,IAAI,QAAQ,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI;AACtC,MAAM,MAAM;AACZ,MAAM,MAAM,CAAC,iBAAiB;AAC9B,MAAM,QAAQ;AACd,KAAK,CAAC;AACN;AACA,IAAI,QAAQ,CAAC,OAAO,GAAGD,cAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC3D;AACA,IAAI,OAAO,QAAQ,CAAC;AACpB,GAAG,EAAE,SAAS,kBAAkB,CAAC,MAAM,EAAE;AACzC,IAAI,IAAI,CAACE,UAAQ,CAAC,MAAM,CAAC,EAAE;AAC3B,MAAM,4BAA4B,CAAC,MAAM,CAAC,CAAC;AAC3C;AACA;AACA,MAAM,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE;AACrC,QAAQ,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,aAAa,CAAC,IAAI;AACjD,UAAU,MAAM;AAChB,UAAU,MAAM,CAAC,iBAAiB;AAClC,UAAU,MAAM,CAAC,QAAQ;AACzB,SAAS,CAAC;AACV,QAAQ,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAGF,cAAY,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC7E,OAAO;AACP,KAAK;AACL;AACA,IAAI,OAAO,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AAClC,GAAG,CAAC,CAAC;AACL;;AChFO,MAAMM,SAAO,GAAG,OAAO;;ACK9B,MAAMC,YAAU,GAAG,EAAE,CAAC;AACtB;AACA;AACA,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK;AACrF,EAAEA,YAAU,CAAC,IAAI,CAAC,GAAG,SAAS,SAAS,CAAC,KAAK,EAAE;AAC/C,IAAI,OAAO,OAAO,KAAK,KAAK,IAAI,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC;AACtE,GAAG,CAAC;AACJ,CAAC,CAAC,CAAC;AACH;AACA,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAC9B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACAA,YAAU,CAAC,YAAY,GAAG,SAAS,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,OAAO,EAAE;AAC7E,EAAE,SAAS,aAAa,CAAC,GAAG,EAAE,IAAI,EAAE;AACpC,IAAI,OAAO,UAAU,GAAGD,SAAO,GAAG,0BAA0B,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,IAAI,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC;AACnH,GAAG;AACH;AACA;AACA,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,KAAK;AAC/B,IAAI,IAAI,SAAS,KAAK,KAAK,EAAE;AAC7B,MAAM,MAAM,IAAIf,YAAU;AAC1B,QAAQ,aAAa,CAAC,GAAG,EAAE,mBAAmB,IAAI,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC;AACnF,QAAQA,YAAU,CAAC,cAAc;AACjC,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,IAAI,OAAO,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,EAAE;AAC7C,MAAM,kBAAkB,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AACrC;AACA,MAAM,OAAO,CAAC,IAAI;AAClB,QAAQ,aAAa;AACrB,UAAU,GAAG;AACb,UAAU,8BAA8B,GAAG,OAAO,GAAG,yCAAyC;AAC9F,SAAS;AACT,OAAO,CAAC;AACR,KAAK;AACL;AACA,IAAI,OAAO,SAAS,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC;AAC1D,GAAG,CAAC;AACJ,CAAC,CAAC;AACF;AACAgB,YAAU,CAAC,QAAQ,GAAG,SAAS,QAAQ,CAAC,eAAe,EAAE;AACzD,EAAE,OAAO,CAAC,KAAK,EAAE,GAAG,KAAK;AACzB;AACA,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,4BAA4B,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;AACzE,IAAI,OAAO,IAAI,CAAC;AAChB,GAAG;AACH,CAAC,CAAC;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE;AACtD,EAAE,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE;AACnC,IAAI,MAAM,IAAIhB,YAAU,CAAC,2BAA2B,EAAEA,YAAU,CAAC,oBAAoB,CAAC,CAAC;AACvF,GAAG;AACH,EAAE,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpC,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;AACtB,EAAE,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE;AAClB,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACxB,IAAI,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;AAClC,IAAI,IAAI,SAAS,EAAE;AACnB,MAAM,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AACjC,MAAM,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,IAAI,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;AAC3E,MAAM,IAAI,MAAM,KAAK,IAAI,EAAE;AAC3B,QAAQ,MAAM,IAAIA,YAAU,CAAC,SAAS,GAAG,GAAG,GAAG,WAAW,GAAG,MAAM,EAAEA,YAAU,CAAC,oBAAoB,CAAC,CAAC;AACtG,OAAO;AACP,MAAM,SAAS;AACf,KAAK;AACL,IAAI,IAAI,YAAY,KAAK,IAAI,EAAE;AAC/B,MAAM,MAAM,IAAIA,YAAU,CAAC,iBAAiB,GAAG,GAAG,EAAEA,YAAU,CAAC,cAAc,CAAC,CAAC;AAC/E,KAAK;AACL,GAAG;AACH,CAAC;AACD;AACA,kBAAe;AACf,EAAE,aAAa;AACf,cAAEgB,YAAU;AACZ,CAAC;;ACvFD,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;AACxC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMC,OAAK,CAAC;AACZ,EAAE,WAAW,CAAC,cAAc,EAAE;AAC9B,IAAI,IAAI,CAAC,QAAQ,GAAG,cAAc,IAAI,EAAE,CAAC;AACzC,IAAI,IAAI,CAAC,YAAY,GAAG;AACxB,MAAM,OAAO,EAAE,IAAIC,oBAAkB,EAAE;AACvC,MAAM,QAAQ,EAAE,IAAIA,oBAAkB,EAAE;AACxC,KAAK,CAAC;AACN,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,MAAM,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE;AACrC,IAAI,IAAI;AACR,MAAM,OAAO,MAAM,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AACtD,KAAK,CAAC,OAAO,GAAG,EAAE;AAClB,MAAM,IAAI,GAAG,YAAY,KAAK,EAAE;AAChC,QAAQ,IAAI,KAAK,GAAG,EAAE,CAAC;AACvB;AACA,QAAQ,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC;AACzF;AACA;AACA,QAAQ,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;AAC1E,QAAQ,IAAI;AACZ,UAAU,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE;AAC1B,YAAY,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;AAC9B;AACA,WAAW,MAAM,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,EAAE;AAC3F,YAAY,GAAG,CAAC,KAAK,IAAI,IAAI,GAAG,MAAK;AACrC,WAAW;AACX,SAAS,CAAC,OAAO,CAAC,EAAE;AACpB;AACA,SAAS;AACT,OAAO;AACP;AACA,MAAM,MAAM,GAAG,CAAC;AAChB,KAAK;AACL,GAAG;AACH;AACA,EAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,EAAE;AAChC;AACA;AACA,IAAI,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;AACzC,MAAM,MAAM,GAAG,MAAM,IAAI,EAAE,CAAC;AAC5B,MAAM,MAAM,CAAC,GAAG,GAAG,WAAW,CAAC;AAC/B,KAAK,MAAM;AACX,MAAM,MAAM,GAAG,WAAW,IAAI,EAAE,CAAC;AACjC,KAAK;AACL;AACA,IAAI,MAAM,GAAGL,aAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAChD;AACA,IAAI,MAAM,CAAC,YAAY,EAAE,gBAAgB,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;AAC7D;AACA,IAAI,IAAI,YAAY,KAAK,SAAS,EAAE;AACpC,MAAM,SAAS,CAAC,aAAa,CAAC,YAAY,EAAE;AAC5C,QAAQ,iBAAiB,EAAE,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;AACtE,QAAQ,iBAAiB,EAAE,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;AACtE,QAAQ,mBAAmB,EAAE,UAAU,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC;AACxE,OAAO,EAAE,KAAK,CAAC,CAAC;AAChB,KAAK;AACL;AACA,IAAI,IAAI,gBAAgB,IAAI,IAAI,EAAE;AAClC,MAAM,IAAIZ,OAAK,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE;AAC9C,QAAQ,MAAM,CAAC,gBAAgB,GAAG;AAClC,UAAU,SAAS,EAAE,gBAAgB;AACrC,UAAS;AACT,OAAO,MAAM;AACb,QAAQ,SAAS,CAAC,aAAa,CAAC,gBAAgB,EAAE;AAClD,UAAU,MAAM,EAAE,UAAU,CAAC,QAAQ;AACrC,UAAU,SAAS,EAAE,UAAU,CAAC,QAAQ;AACxC,SAAS,EAAE,IAAI,CAAC,CAAC;AACjB,OAAO;AACP,KAAK;AACL;AACA;AACA,IAAI,IAAI,MAAM,CAAC,iBAAiB,KAAK,SAAS,EAAE,CAE3C,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,iBAAiB,KAAK,SAAS,EAAE;AAC9D,MAAM,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC;AACjE,KAAK,MAAM;AACX,MAAM,MAAM,CAAC,iBAAiB,GAAG,IAAI,CAAC;AACtC,KAAK;AACL;AACA,IAAI,SAAS,CAAC,aAAa,CAAC,MAAM,EAAE;AACpC,MAAM,OAAO,EAAE,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC;AAC7C,MAAM,aAAa,EAAE,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC;AACzD,KAAK,EAAE,IAAI,CAAC,CAAC;AACb;AACA;AACA,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,KAAK,EAAE,WAAW,EAAE,CAAC;AACnF;AACA;AACA,IAAI,IAAI,cAAc,GAAG,OAAO,IAAIA,OAAK,CAAC,KAAK;AAC/C,MAAM,OAAO,CAAC,MAAM;AACpB,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC;AAC5B,KAAK,CAAC;AACN;AACA,IAAI,OAAO,IAAIA,OAAK,CAAC,OAAO;AAC5B,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC;AACjE,MAAM,CAAC,MAAM,KAAK;AAClB,QAAQ,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;AAC/B,OAAO;AACP,KAAK,CAAC;AACN;AACA,IAAI,MAAM,CAAC,OAAO,GAAGQ,cAAY,CAAC,MAAM,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AAClE;AACA;AACA,IAAI,MAAM,uBAAuB,GAAG,EAAE,CAAC;AACvC,IAAI,IAAI,8BAA8B,GAAG,IAAI,CAAC;AAC9C,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,0BAA0B,CAAC,WAAW,EAAE;AACvF,MAAM,IAAI,OAAO,WAAW,CAAC,OAAO,KAAK,UAAU,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,EAAE;AAC9F,QAAQ,OAAO;AACf,OAAO;AACP;AACA,MAAM,8BAA8B,GAAG,8BAA8B,IAAI,WAAW,CAAC,WAAW,CAAC;AACjG;AACA,MAAM,uBAAuB,CAAC,OAAO,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;AACnF,KAAK,CAAC,CAAC;AACP;AACA,IAAI,MAAM,wBAAwB,GAAG,EAAE,CAAC;AACxC,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,OAAO,CAAC,SAAS,wBAAwB,CAAC,WAAW,EAAE;AACtF,MAAM,wBAAwB,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;AACjF,KAAK,CAAC,CAAC;AACP;AACA,IAAI,IAAI,OAAO,CAAC;AAChB,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,IAAI,IAAI,GAAG,CAAC;AACZ;AACA,IAAI,IAAI,CAAC,8BAA8B,EAAE;AACzC,MAAM,MAAM,KAAK,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;AAC5D,MAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC;AAC1D,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,wBAAwB,CAAC,CAAC;AACxD,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC;AACzB;AACA,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACxC;AACA,MAAM,OAAO,CAAC,GAAG,GAAG,EAAE;AACtB,QAAQ,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AACvD,OAAO;AACP;AACA,MAAM,OAAO,OAAO,CAAC;AACrB,KAAK;AACL;AACA,IAAI,GAAG,GAAG,uBAAuB,CAAC,MAAM,CAAC;AACzC;AACA,IAAI,IAAI,SAAS,GAAG,MAAM,CAAC;AAC3B;AACA,IAAI,CAAC,GAAG,CAAC,CAAC;AACV;AACA,IAAI,OAAO,CAAC,GAAG,GAAG,EAAE;AACpB,MAAM,MAAM,WAAW,GAAG,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC;AACvD,MAAM,MAAM,UAAU,GAAG,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC;AACtD,MAAM,IAAI;AACV,QAAQ,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;AAC3C,OAAO,CAAC,OAAO,KAAK,EAAE;AACtB,QAAQ,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACrC,QAAQ,MAAM;AACd,OAAO;AACP,KAAK;AACL;AACA,IAAI,IAAI;AACR,MAAM,OAAO,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AACtD,KAAK,CAAC,OAAO,KAAK,EAAE;AACpB,MAAM,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnC,KAAK;AACL;AACA,IAAI,CAAC,GAAG,CAAC,CAAC;AACV,IAAI,GAAG,GAAG,wBAAwB,CAAC,MAAM,CAAC;AAC1C;AACA,IAAI,OAAO,CAAC,GAAG,GAAG,EAAE;AACpB,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,EAAE,CAAC,EAAE,wBAAwB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC3F,KAAK;AACL;AACA,IAAI,OAAO,OAAO,CAAC;AACnB,GAAG;AACH;AACA,EAAE,MAAM,CAAC,MAAM,EAAE;AACjB,IAAI,MAAM,GAAGI,aAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAChD,IAAI,MAAM,QAAQ,GAAG,aAAa,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACzF,IAAI,OAAO,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC;AACtE,GAAG;AACH,CAAC;AACD;AACA;AACAZ,OAAK,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,mBAAmB,CAAC,MAAM,EAAE;AACzF;AACA,EAAEgB,OAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,SAAS,GAAG,EAAE,MAAM,EAAE;AAClD,IAAI,OAAO,IAAI,CAAC,OAAO,CAACJ,aAAW,CAAC,MAAM,IAAI,EAAE,EAAE;AAClD,MAAM,MAAM;AACZ,MAAM,GAAG;AACT,MAAM,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,EAAE,IAAI;AAC/B,KAAK,CAAC,CAAC,CAAC;AACR,GAAG,CAAC;AACJ,CAAC,CAAC,CAAC;AACH;AACAZ,OAAK,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,EAAE,SAAS,qBAAqB,CAAC,MAAM,EAAE;AAC/E;AACA;AACA,EAAE,SAAS,kBAAkB,CAAC,MAAM,EAAE;AACtC,IAAI,OAAO,SAAS,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE;AAClD,MAAM,OAAO,IAAI,CAAC,OAAO,CAACY,aAAW,CAAC,MAAM,IAAI,EAAE,EAAE;AACpD,QAAQ,MAAM;AACd,QAAQ,OAAO,EAAE,MAAM,GAAG;AAC1B,UAAU,cAAc,EAAE,qBAAqB;AAC/C,SAAS,GAAG,EAAE;AACd,QAAQ,GAAG;AACX,QAAQ,IAAI;AACZ,OAAO,CAAC,CAAC,CAAC;AACV,KAAK,CAAC;AACN,GAAG;AACH;AACA,EAAEI,OAAK,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,kBAAkB,EAAE,CAAC;AACjD;AACA,EAAEA,OAAK,CAAC,SAAS,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAC9D,CAAC,CAAC,CAAC;AACH;AACA,gBAAeA,OAAK;;AC7OpB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,MAAME,aAAW,CAAC;AAClB,EAAE,WAAW,CAAC,QAAQ,EAAE;AACxB,IAAI,IAAI,OAAO,QAAQ,KAAK,UAAU,EAAE;AACxC,MAAM,MAAM,IAAI,SAAS,CAAC,8BAA8B,CAAC,CAAC;AAC1D,KAAK;AACL;AACA,IAAI,IAAI,cAAc,CAAC;AACvB;AACA,IAAI,IAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,SAAS,eAAe,CAAC,OAAO,EAAE;AACjE,MAAM,cAAc,GAAG,OAAO,CAAC;AAC/B,KAAK,CAAC,CAAC;AACP;AACA,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC;AACvB;AACA;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI;AAChC,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,OAAO;AACpC;AACA,MAAM,IAAI,CAAC,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC;AACtC;AACA,MAAM,OAAO,CAAC,EAAE,GAAG,CAAC,EAAE;AACtB,QAAQ,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AACpC,OAAO;AACP,MAAM,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;AAC9B,KAAK,CAAC,CAAC;AACP;AACA;AACA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,GAAG,WAAW,IAAI;AACvC,MAAM,IAAI,QAAQ,CAAC;AACnB;AACA,MAAM,MAAM,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,IAAI;AAC7C,QAAQ,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;AACjC,QAAQ,QAAQ,GAAG,OAAO,CAAC;AAC3B,OAAO,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAC3B;AACA,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,MAAM,GAAG;AACzC,QAAQ,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;AACpC,OAAO,CAAC;AACR;AACA,MAAM,OAAO,OAAO,CAAC;AACrB,KAAK,CAAC;AACN;AACA,IAAI,QAAQ,CAAC,SAAS,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE;AACvD,MAAM,IAAI,KAAK,CAAC,MAAM,EAAE;AACxB;AACA,QAAQ,OAAO;AACf,OAAO;AACP;AACA,MAAM,KAAK,CAAC,MAAM,GAAG,IAAIP,eAAa,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACjE,MAAM,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACnC,KAAK,CAAC,CAAC;AACP,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,gBAAgB,GAAG;AACrB,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACrB,MAAM,MAAM,IAAI,CAAC,MAAM,CAAC;AACxB,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,SAAS,CAAC,QAAQ,EAAE;AACtB,IAAI,IAAI,IAAI,CAAC,MAAM,EAAE;AACrB,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC5B,MAAM,OAAO;AACb,KAAK;AACL;AACA,IAAI,IAAI,IAAI,CAAC,UAAU,EAAE;AACzB,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACrC,KAAK,MAAM;AACX,MAAM,IAAI,CAAC,UAAU,GAAG,CAAC,QAAQ,CAAC,CAAC;AACnC,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,WAAW,CAAC,QAAQ,EAAE;AACxB,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AAC1B,MAAM,OAAO;AACb,KAAK;AACL,IAAI,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpD,IAAI,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;AACtB,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACvC,KAAK;AACL,GAAG;AACH;AACA,EAAE,aAAa,GAAG;AAClB,IAAI,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;AAC7C;AACA,IAAI,MAAM,KAAK,GAAG,CAAC,GAAG,KAAK;AAC3B,MAAM,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC5B,KAAK,CAAC;AACN;AACA,IAAI,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1B;AACA,IAAI,UAAU,CAAC,MAAM,CAAC,WAAW,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAClE;AACA,IAAI,OAAO,UAAU,CAAC,MAAM,CAAC;AAC7B,GAAG;AACH;AACA;AACA;AACA;AACA;AACA,EAAE,OAAO,MAAM,GAAG;AAClB,IAAI,IAAI,MAAM,CAAC;AACf,IAAI,MAAM,KAAK,GAAG,IAAIO,aAAW,CAAC,SAAS,QAAQ,CAAC,CAAC,EAAE;AACvD,MAAM,MAAM,GAAG,CAAC,CAAC;AACjB,KAAK,CAAC,CAAC;AACP,IAAI,OAAO;AACX,MAAM,KAAK;AACX,MAAM,MAAM;AACZ,KAAK,CAAC;AACN,GAAG;AACH,CAAC;AACD;AACA,sBAAeA,aAAW;;ACpI1B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASC,QAAM,CAAC,QAAQ,EAAE;AACzC,EAAE,OAAO,SAAS,IAAI,CAAC,GAAG,EAAE;AAC5B,IAAI,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AACrC,GAAG,CAAC;AACJ;;ACvBA;AACA;AACA;AACA;AACA;AACA;AACA;AACe,SAASC,cAAY,CAAC,OAAO,EAAE;AAC9C,EAAE,OAAOpB,OAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC;AACpE;;ACbA,MAAMqB,gBAAc,GAAG;AACvB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,kBAAkB,EAAE,GAAG;AACzB,EAAE,UAAU,EAAE,GAAG;AACjB,EAAE,UAAU,EAAE,GAAG;AACjB,EAAE,EAAE,EAAE,GAAG;AACT,EAAE,OAAO,EAAE,GAAG;AACd,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,2BAA2B,EAAE,GAAG;AAClC,EAAE,SAAS,EAAE,GAAG;AAChB,EAAE,YAAY,EAAE,GAAG;AACnB,EAAE,cAAc,EAAE,GAAG;AACrB,EAAE,WAAW,EAAE,GAAG;AAClB,EAAE,eAAe,EAAE,GAAG;AACtB,EAAE,MAAM,EAAE,GAAG;AACb,EAAE,eAAe,EAAE,GAAG;AACtB,EAAE,gBAAgB,EAAE,GAAG;AACvB,EAAE,KAAK,EAAE,GAAG;AACZ,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,WAAW,EAAE,GAAG;AAClB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,MAAM,EAAE,GAAG;AACb,EAAE,iBAAiB,EAAE,GAAG;AACxB,EAAE,iBAAiB,EAAE,GAAG;AACxB,EAAE,UAAU,EAAE,GAAG;AACjB,EAAE,YAAY,EAAE,GAAG;AACnB,EAAE,eAAe,EAAE,GAAG;AACtB,EAAE,SAAS,EAAE,GAAG;AAChB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,gBAAgB,EAAE,GAAG;AACvB,EAAE,aAAa,EAAE,GAAG;AACpB,EAAE,2BAA2B,EAAE,GAAG;AAClC,EAAE,cAAc,EAAE,GAAG;AACrB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,IAAI,EAAE,GAAG;AACX,EAAE,cAAc,EAAE,GAAG;AACrB,EAAE,kBAAkB,EAAE,GAAG;AACzB,EAAE,eAAe,EAAE,GAAG;AACtB,EAAE,UAAU,EAAE,GAAG;AACjB,EAAE,oBAAoB,EAAE,GAAG;AAC3B,EAAE,mBAAmB,EAAE,GAAG;AAC1B,EAAE,iBAAiB,EAAE,GAAG;AACxB,EAAE,SAAS,EAAE,GAAG;AAChB,EAAE,kBAAkB,EAAE,GAAG;AACzB,EAAE,mBAAmB,EAAE,GAAG;AAC1B,EAAE,MAAM,EAAE,GAAG;AACb,EAAE,gBAAgB,EAAE,GAAG;AACvB,EAAE,QAAQ,EAAE,GAAG;AACf,EAAE,eAAe,EAAE,GAAG;AACtB,EAAE,oBAAoB,EAAE,GAAG;AAC3B,EAAE,eAAe,EAAE,GAAG;AACtB,EAAE,2BAA2B,EAAE,GAAG;AAClC,EAAE,0BAA0B,EAAE,GAAG;AACjC,EAAE,mBAAmB,EAAE,GAAG;AAC1B,EAAE,cAAc,EAAE,GAAG;AACrB,EAAE,UAAU,EAAE,GAAG;AACjB,EAAE,kBAAkB,EAAE,GAAG;AACzB,EAAE,cAAc,EAAE,GAAG;AACrB,EAAE,uBAAuB,EAAE,GAAG;AAC9B,EAAE,qBAAqB,EAAE,GAAG;AAC5B,EAAE,mBAAmB,EAAE,GAAG;AAC1B,EAAE,YAAY,EAAE,GAAG;AACnB,EAAE,WAAW,EAAE,GAAG;AAClB,EAAE,6BAA6B,EAAE,GAAG;AACpC,CAAC,CAAC;AACF;AACA,MAAM,CAAC,OAAO,CAACA,gBAAc,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,KAAK;AACzD,EAAEA,gBAAc,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC;AAC9B,CAAC,CAAC,CAAC;AACH;AACA,yBAAeA,gBAAc;;AClD7B;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS,cAAc,CAAC,aAAa,EAAE;AACvC,EAAE,MAAM,OAAO,GAAG,IAAIL,OAAK,CAAC,aAAa,CAAC,CAAC;AAC3C,EAAE,MAAM,QAAQ,GAAG,IAAI,CAACA,OAAK,CAAC,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC1D;AACA;AACA,EAAEhB,OAAK,CAAC,MAAM,CAAC,QAAQ,EAAEgB,OAAK,CAAC,SAAS,EAAE,OAAO,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;AACvE;AACA;AACA,EAAEhB,OAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC,CAAC;AAC5D;AACA;AACA,EAAE,QAAQ,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,cAAc,EAAE;AACpD,IAAI,OAAO,cAAc,CAACY,aAAW,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC,CAAC;AACtE,GAAG,CAAC;AACJ;AACA,EAAE,OAAO,QAAQ,CAAC;AAClB,CAAC;AACD;AACA;AACA,MAAM,KAAK,GAAG,cAAc,CAACH,UAAQ,CAAC,CAAC;AACvC;AACA;AACA,KAAK,CAAC,KAAK,GAAGO,OAAK,CAAC;AACpB;AACA;AACA,KAAK,CAAC,aAAa,GAAGL,eAAa,CAAC;AACpC,KAAK,CAAC,WAAW,GAAGO,aAAW,CAAC;AAChC,KAAK,CAAC,QAAQ,GAAGR,UAAQ,CAAC;AAC1B,KAAK,CAAC,OAAO,GAAGI,SAAO,CAAC;AACxB,KAAK,CAAC,UAAU,GAAGZ,YAAU,CAAC;AAC9B;AACA;AACA,KAAK,CAAC,UAAU,GAAGH,YAAU,CAAC;AAC9B;AACA;AACA,KAAK,CAAC,MAAM,GAAG,KAAK,CAAC,aAAa,CAAC;AACnC;AACA;AACA,KAAK,CAAC,GAAG,GAAG,SAAS,GAAG,CAAC,QAAQ,EAAE;AACnC,EAAE,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC/B,CAAC,CAAC;AACF;AACA,KAAK,CAAC,MAAM,GAAGoB,QAAM,CAAC;AACtB;AACA;AACA,KAAK,CAAC,YAAY,GAAGC,cAAY,CAAC;AAClC;AACA;AACA,KAAK,CAAC,WAAW,GAAGR,aAAW,CAAC;AAChC;AACA,KAAK,CAAC,YAAY,GAAGJ,cAAY,CAAC;AAClC;AACA,KAAK,CAAC,UAAU,GAAG,KAAK,IAAI,cAAc,CAACR,OAAK,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,IAAI,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAClG;AACA,KAAK,CAAC,UAAU,GAAG,QAAQ,CAAC,UAAU,CAAC;AACvC;AACA,KAAK,CAAC,cAAc,GAAGqB,gBAAc,CAAC;AACtC;AACA,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;AACtB;AACA;AACA,gBAAe;;ACtFf;AACA;AACA;AACK,MAAC;AACN,EAAE,KAAK;AACP,EAAE,UAAU;AACZ,EAAE,aAAa;AACf,EAAE,QAAQ;AACV,EAAE,WAAW;AACb,EAAE,OAAO;AACT,EAAE,GAAG;AACL,EAAE,MAAM;AACR,EAAE,YAAY;AACd,EAAE,MAAM;AACR,EAAE,UAAU;AACZ,EAAE,YAAY;AACd,EAAE,cAAc;AAChB,EAAE,UAAU;AACZ,EAAE,UAAU;AACZ,EAAE,WAAW;AACb,CAAC,GAAGC;;;;"} \ No newline at end of file diff --git a/node_modules/axios/dist/esm/axios.min.js b/node_modules/axios/dist/esm/axios.min.js new file mode 100644 index 0000000..7e9140a --- /dev/null +++ b/node_modules/axios/dist/esm/axios.min.js @@ -0,0 +1,3 @@ +/*! Axios v1.9.0 Copyright (c) 2025 Matt Zabriskie and contributors */ +function e(e,t){return function(){return e.apply(t,arguments)}}const{toString:t}=Object.prototype,{getPrototypeOf:n}=Object,{iterator:r,toStringTag:o}=Symbol,s=(i=Object.create(null),e=>{const n=t.call(e);return i[n]||(i[n]=n.slice(8,-1).toLowerCase())});var i;const a=e=>(e=e.toLowerCase(),t=>s(t)===e),c=e=>t=>typeof t===e,{isArray:l}=Array,u=c("undefined");const f=a("ArrayBuffer");const d=c("string"),p=c("function"),h=c("number"),m=e=>null!==e&&"object"==typeof e,y=e=>{if("object"!==s(e))return!1;const t=n(e);return!(null!==t&&t!==Object.prototype&&null!==Object.getPrototypeOf(t)||o in e||r in e)},b=a("Date"),g=a("File"),w=a("Blob"),E=a("FileList"),O=a("URLSearchParams"),[R,S,T,A]=["ReadableStream","Request","Response","Headers"].map(a);function v(e,t,{allOwnKeys:n=!1}={}){if(null==e)return;let r,o;if("object"!=typeof e&&(e=[e]),l(e))for(r=0,o=e.length;r0;)if(r=n[o],t===r.toLowerCase())return r;return null}const C="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,j=e=>!u(e)&&e!==C;const N=(U="undefined"!=typeof Uint8Array&&n(Uint8Array),e=>U&&e instanceof U);var U;const P=a("HTMLFormElement"),_=(({hasOwnProperty:e})=>(t,n)=>e.call(t,n))(Object.prototype),F=a("RegExp"),L=(e,t)=>{const n=Object.getOwnPropertyDescriptors(e),r={};v(n,((n,o)=>{let s;!1!==(s=t(n,o,e))&&(r[o]=s||n)})),Object.defineProperties(e,r)};const B=a("AsyncFunction"),k=(D="function"==typeof setImmediate,q=p(C.postMessage),D?setImmediate:q?(I=`axios@${Math.random()}`,M=[],C.addEventListener("message",(({source:e,data:t})=>{e===C&&t===I&&M.length&&M.shift()()}),!1),e=>{M.push(e),C.postMessage(I,"*")}):e=>setTimeout(e));var D,q,I,M;const z="undefined"!=typeof queueMicrotask?queueMicrotask.bind(C):"undefined"!=typeof process&&process.nextTick||k,H={isArray:l,isArrayBuffer:f,isBuffer:function(e){return null!==e&&!u(e)&&null!==e.constructor&&!u(e.constructor)&&p(e.constructor.isBuffer)&&e.constructor.isBuffer(e)},isFormData:e=>{let t;return e&&("function"==typeof FormData&&e instanceof FormData||p(e.append)&&("formdata"===(t=s(e))||"object"===t&&p(e.toString)&&"[object FormData]"===e.toString()))},isArrayBufferView:function(e){let t;return t="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(e):e&&e.buffer&&f(e.buffer),t},isString:d,isNumber:h,isBoolean:e=>!0===e||!1===e,isObject:m,isPlainObject:y,isReadableStream:R,isRequest:S,isResponse:T,isHeaders:A,isUndefined:u,isDate:b,isFile:g,isBlob:w,isRegExp:F,isFunction:p,isStream:e=>m(e)&&p(e.pipe),isURLSearchParams:O,isTypedArray:N,isFileList:E,forEach:v,merge:function e(){const{caseless:t}=j(this)&&this||{},n={},r=(r,o)=>{const s=t&&x(n,o)||o;y(n[s])&&y(r)?n[s]=e(n[s],r):y(r)?n[s]=e({},r):l(r)?n[s]=r.slice():n[s]=r};for(let e=0,t=arguments.length;e(v(n,((n,o)=>{r&&p(n)?t[o]=e(n,r):t[o]=n}),{allOwnKeys:o}),t),trim:e=>e.trim?e.trim():e.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,""),stripBOM:e=>(65279===e.charCodeAt(0)&&(e=e.slice(1)),e),inherits:(e,t,n,r)=>{e.prototype=Object.create(t.prototype,r),e.prototype.constructor=e,Object.defineProperty(e,"super",{value:t.prototype}),n&&Object.assign(e.prototype,n)},toFlatObject:(e,t,r,o)=>{let s,i,a;const c={};if(t=t||{},null==e)return t;do{for(s=Object.getOwnPropertyNames(e),i=s.length;i-- >0;)a=s[i],o&&!o(a,e,t)||c[a]||(t[a]=e[a],c[a]=!0);e=!1!==r&&n(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:s,kindOfTest:a,endsWith:(e,t,n)=>{e=String(e),(void 0===n||n>e.length)&&(n=e.length),n-=t.length;const r=e.indexOf(t,n);return-1!==r&&r===n},toArray:e=>{if(!e)return null;if(l(e))return e;let t=e.length;if(!h(t))return null;const n=new Array(t);for(;t-- >0;)n[t]=e[t];return n},forEachEntry:(e,t)=>{const n=(e&&e[r]).call(e);let o;for(;(o=n.next())&&!o.done;){const n=o.value;t.call(e,n[0],n[1])}},matchAll:(e,t)=>{let n;const r=[];for(;null!==(n=e.exec(t));)r.push(n);return r},isHTMLForm:P,hasOwnProperty:_,hasOwnProp:_,reduceDescriptors:L,freezeMethods:e=>{L(e,((t,n)=>{if(p(e)&&-1!==["arguments","caller","callee"].indexOf(n))return!1;const r=e[n];p(r)&&(t.enumerable=!1,"writable"in t?t.writable=!1:t.set||(t.set=()=>{throw Error("Can not rewrite read-only method '"+n+"'")}))}))},toObjectSet:(e,t)=>{const n={},r=e=>{e.forEach((e=>{n[e]=!0}))};return l(e)?r(e):r(String(e).split(t)),n},toCamelCase:e=>e.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,(function(e,t,n){return t.toUpperCase()+n})),noop:()=>{},toFiniteNumber:(e,t)=>null!=e&&Number.isFinite(e=+e)?e:t,findKey:x,global:C,isContextDefined:j,isSpecCompliantForm:function(e){return!!(e&&p(e.append)&&"FormData"===e[o]&&e[r])},toJSONObject:e=>{const t=new Array(10),n=(e,r)=>{if(m(e)){if(t.indexOf(e)>=0)return;if(!("toJSON"in e)){t[r]=e;const o=l(e)?[]:{};return v(e,((e,t)=>{const s=n(e,r+1);!u(s)&&(o[t]=s)})),t[r]=void 0,o}}return e};return n(e,0)},isAsyncFn:B,isThenable:e=>e&&(m(e)||p(e))&&p(e.then)&&p(e.catch),setImmediate:k,asap:z,isIterable:e=>null!=e&&p(e[r])};function J(e,t,n,r,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),n&&(this.config=n),r&&(this.request=r),o&&(this.response=o,this.status=o.status?o.status:null)}H.inherits(J,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:H.toJSONObject(this.config),code:this.code,status:this.status}}});const W=J.prototype,K={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((e=>{K[e]={value:e}})),Object.defineProperties(J,K),Object.defineProperty(W,"isAxiosError",{value:!0}),J.from=(e,t,n,r,o,s)=>{const i=Object.create(W);return H.toFlatObject(e,i,(function(e){return e!==Error.prototype}),(e=>"isAxiosError"!==e)),J.call(i,e.message,t,n,r,o),i.cause=e,i.name=e.name,s&&Object.assign(i,s),i};function V(e){return H.isPlainObject(e)||H.isArray(e)}function $(e){return H.endsWith(e,"[]")?e.slice(0,-2):e}function X(e,t,n){return e?e.concat(t).map((function(e,t){return e=$(e),!n&&t?"["+e+"]":e})).join(n?".":""):t}const G=H.toFlatObject(H,{},null,(function(e){return/^is[A-Z]/.test(e)}));function Q(e,t,n){if(!H.isObject(e))throw new TypeError("target must be an object");t=t||new FormData;const r=(n=H.toFlatObject(n,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!H.isUndefined(t[e])}))).metaTokens,o=n.visitor||l,s=n.dots,i=n.indexes,a=(n.Blob||"undefined"!=typeof Blob&&Blob)&&H.isSpecCompliantForm(t);if(!H.isFunction(o))throw new TypeError("visitor must be a function");function c(e){if(null===e)return"";if(H.isDate(e))return e.toISOString();if(!a&&H.isBlob(e))throw new J("Blob is not supported. Use a Buffer instead.");return H.isArrayBuffer(e)||H.isTypedArray(e)?a&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function l(e,n,o){let a=e;if(e&&!o&&"object"==typeof e)if(H.endsWith(n,"{}"))n=r?n:n.slice(0,-2),e=JSON.stringify(e);else if(H.isArray(e)&&function(e){return H.isArray(e)&&!e.some(V)}(e)||(H.isFileList(e)||H.endsWith(n,"[]"))&&(a=H.toArray(e)))return n=$(n),a.forEach((function(e,r){!H.isUndefined(e)&&null!==e&&t.append(!0===i?X([n],r,s):null===i?n:n+"[]",c(e))})),!1;return!!V(e)||(t.append(X(o,n,s),c(e)),!1)}const u=[],f=Object.assign(G,{defaultVisitor:l,convertValue:c,isVisitable:V});if(!H.isObject(e))throw new TypeError("data must be an object");return function e(n,r){if(!H.isUndefined(n)){if(-1!==u.indexOf(n))throw Error("Circular reference detected in "+r.join("."));u.push(n),H.forEach(n,(function(n,s){!0===(!(H.isUndefined(n)||null===n)&&o.call(t,n,H.isString(s)?s.trim():s,r,f))&&e(n,r?r.concat(s):[s])})),u.pop()}}(e),t}function Z(e){const t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'()~]|%20|%00/g,(function(e){return t[e]}))}function Y(e,t){this._pairs=[],e&&Q(e,this,t)}const ee=Y.prototype;function te(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}function ne(e,t,n){if(!t)return e;const r=n&&n.encode||te;H.isFunction(n)&&(n={serialize:n});const o=n&&n.serialize;let s;if(s=o?o(t,n):H.isURLSearchParams(t)?t.toString():new Y(t,n).toString(r),s){const t=e.indexOf("#");-1!==t&&(e=e.slice(0,t)),e+=(-1===e.indexOf("?")?"?":"&")+s}return e}ee.append=function(e,t){this._pairs.push([e,t])},ee.toString=function(e){const t=e?function(t){return e.call(this,t,Z)}:Z;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")};const re=class{constructor(){this.handlers=[]}use(e,t,n){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!n&&n.synchronous,runWhen:n?n.runWhen:null}),this.handlers.length-1}eject(e){this.handlers[e]&&(this.handlers[e]=null)}clear(){this.handlers&&(this.handlers=[])}forEach(e){H.forEach(this.handlers,(function(t){null!==t&&e(t)}))}},oe={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1},se={isBrowser:!0,classes:{URLSearchParams:"undefined"!=typeof URLSearchParams?URLSearchParams:Y,FormData:"undefined"!=typeof FormData?FormData:null,Blob:"undefined"!=typeof Blob?Blob:null},protocols:["http","https","file","blob","url","data"]},ie="undefined"!=typeof window&&"undefined"!=typeof document,ae="object"==typeof navigator&&navigator||void 0,ce=ie&&(!ae||["ReactNative","NativeScript","NS"].indexOf(ae.product)<0),le="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope&&"function"==typeof self.importScripts,ue=ie&&window.location.href||"http://localhost",fe={...Object.freeze({__proto__:null,hasBrowserEnv:ie,hasStandardBrowserWebWorkerEnv:le,hasStandardBrowserEnv:ce,navigator:ae,origin:ue}),...se};function de(e){function t(e,n,r,o){let s=e[o++];if("__proto__"===s)return!0;const i=Number.isFinite(+s),a=o>=e.length;if(s=!s&&H.isArray(r)?r.length:s,a)return H.hasOwnProp(r,s)?r[s]=[r[s],n]:r[s]=n,!i;r[s]&&H.isObject(r[s])||(r[s]=[]);return t(e,n,r[s],o)&&H.isArray(r[s])&&(r[s]=function(e){const t={},n=Object.keys(e);let r;const o=n.length;let s;for(r=0;r{t(function(e){return H.matchAll(/\w+|\[(\w*)]/g,e).map((e=>"[]"===e[0]?"":e[1]||e[0]))}(e),r,n,0)})),n}return null}const pe={transitional:oe,adapter:["xhr","http","fetch"],transformRequest:[function(e,t){const n=t.getContentType()||"",r=n.indexOf("application/json")>-1,o=H.isObject(e);o&&H.isHTMLForm(e)&&(e=new FormData(e));if(H.isFormData(e))return r?JSON.stringify(de(e)):e;if(H.isArrayBuffer(e)||H.isBuffer(e)||H.isStream(e)||H.isFile(e)||H.isBlob(e)||H.isReadableStream(e))return e;if(H.isArrayBufferView(e))return e.buffer;if(H.isURLSearchParams(e))return t.setContentType("application/x-www-form-urlencoded;charset=utf-8",!1),e.toString();let s;if(o){if(n.indexOf("application/x-www-form-urlencoded")>-1)return function(e,t){return Q(e,new fe.classes.URLSearchParams,Object.assign({visitor:function(e,t,n,r){return fe.isNode&&H.isBuffer(e)?(this.append(t,e.toString("base64")),!1):r.defaultVisitor.apply(this,arguments)}},t))}(e,this.formSerializer).toString();if((s=H.isFileList(e))||n.indexOf("multipart/form-data")>-1){const t=this.env&&this.env.FormData;return Q(s?{"files[]":e}:e,t&&new t,this.formSerializer)}}return o||r?(t.setContentType("application/json",!1),function(e,t,n){if(H.isString(e))try{return(t||JSON.parse)(e),H.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(n||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){const t=this.transitional||pe.transitional,n=t&&t.forcedJSONParsing,r="json"===this.responseType;if(H.isResponse(e)||H.isReadableStream(e))return e;if(e&&H.isString(e)&&(n&&!this.responseType||r)){const n=!(t&&t.silentJSONParsing)&&r;try{return JSON.parse(e)}catch(e){if(n){if("SyntaxError"===e.name)throw J.from(e,J.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:fe.classes.FormData,Blob:fe.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*","Content-Type":void 0}}};H.forEach(["delete","get","head","post","put","patch"],(e=>{pe.headers[e]={}}));const he=pe,me=H.toObjectSet(["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"]),ye=Symbol("internals");function be(e){return e&&String(e).trim().toLowerCase()}function ge(e){return!1===e||null==e?e:H.isArray(e)?e.map(ge):String(e)}function we(e,t,n,r,o){return H.isFunction(r)?r.call(this,t,n):(o&&(t=n),H.isString(t)?H.isString(r)?-1!==t.indexOf(r):H.isRegExp(r)?r.test(t):void 0:void 0)}class Ee{constructor(e){e&&this.set(e)}set(e,t,n){const r=this;function o(e,t,n){const o=be(t);if(!o)throw new Error("header name must be a non-empty string");const s=H.findKey(r,o);(!s||void 0===r[s]||!0===n||void 0===n&&!1!==r[s])&&(r[s||t]=ge(e))}const s=(e,t)=>H.forEach(e,((e,n)=>o(e,n,t)));if(H.isPlainObject(e)||e instanceof this.constructor)s(e,t);else if(H.isString(e)&&(e=e.trim())&&!/^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(e.trim()))s((e=>{const t={};let n,r,o;return e&&e.split("\n").forEach((function(e){o=e.indexOf(":"),n=e.substring(0,o).trim().toLowerCase(),r=e.substring(o+1).trim(),!n||t[n]&&me[n]||("set-cookie"===n?t[n]?t[n].push(r):t[n]=[r]:t[n]=t[n]?t[n]+", "+r:r)})),t})(e),t);else if(H.isObject(e)&&H.isIterable(e)){let n,r,o={};for(const t of e){if(!H.isArray(t))throw TypeError("Object iterator must return a key-value pair");o[r=t[0]]=(n=o[r])?H.isArray(n)?[...n,t[1]]:[n,t[1]]:t[1]}s(o,t)}else null!=e&&o(t,e,n);return this}get(e,t){if(e=be(e)){const n=H.findKey(this,e);if(n){const e=this[n];if(!t)return e;if(!0===t)return function(e){const t=Object.create(null),n=/([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;let r;for(;r=n.exec(e);)t[r[1]]=r[2];return t}(e);if(H.isFunction(t))return t.call(this,e,n);if(H.isRegExp(t))return t.exec(e);throw new TypeError("parser must be boolean|regexp|function")}}}has(e,t){if(e=be(e)){const n=H.findKey(this,e);return!(!n||void 0===this[n]||t&&!we(0,this[n],n,t))}return!1}delete(e,t){const n=this;let r=!1;function o(e){if(e=be(e)){const o=H.findKey(n,e);!o||t&&!we(0,n[o],o,t)||(delete n[o],r=!0)}}return H.isArray(e)?e.forEach(o):o(e),r}clear(e){const t=Object.keys(this);let n=t.length,r=!1;for(;n--;){const o=t[n];e&&!we(0,this[o],o,e,!0)||(delete this[o],r=!0)}return r}normalize(e){const t=this,n={};return H.forEach(this,((r,o)=>{const s=H.findKey(n,o);if(s)return t[s]=ge(r),void delete t[o];const i=e?function(e){return e.trim().toLowerCase().replace(/([a-z\d])(\w*)/g,((e,t,n)=>t.toUpperCase()+n))}(o):String(o).trim();i!==o&&delete t[o],t[i]=ge(r),n[i]=!0})),this}concat(...e){return this.constructor.concat(this,...e)}toJSON(e){const t=Object.create(null);return H.forEach(this,((n,r)=>{null!=n&&!1!==n&&(t[r]=e&&H.isArray(n)?n.join(", "):n)})),t}[Symbol.iterator](){return Object.entries(this.toJSON())[Symbol.iterator]()}toString(){return Object.entries(this.toJSON()).map((([e,t])=>e+": "+t)).join("\n")}getSetCookie(){return this.get("set-cookie")||[]}get[Symbol.toStringTag](){return"AxiosHeaders"}static from(e){return e instanceof this?e:new this(e)}static concat(e,...t){const n=new this(e);return t.forEach((e=>n.set(e))),n}static accessor(e){const t=(this[ye]=this[ye]={accessors:{}}).accessors,n=this.prototype;function r(e){const r=be(e);t[r]||(!function(e,t){const n=H.toCamelCase(" "+t);["get","set","has"].forEach((r=>{Object.defineProperty(e,r+n,{value:function(e,n,o){return this[r].call(this,t,e,n,o)},configurable:!0})}))}(n,e),t[r]=!0)}return H.isArray(e)?e.forEach(r):r(e),this}}Ee.accessor(["Content-Type","Content-Length","Accept","Accept-Encoding","User-Agent","Authorization"]),H.reduceDescriptors(Ee.prototype,(({value:e},t)=>{let n=t[0].toUpperCase()+t.slice(1);return{get:()=>e,set(e){this[n]=e}}})),H.freezeMethods(Ee);const Oe=Ee;function Re(e,t){const n=this||he,r=t||n,o=Oe.from(r.headers);let s=r.data;return H.forEach(e,(function(e){s=e.call(n,s,o.normalize(),t?t.status:void 0)})),o.normalize(),s}function Se(e){return!(!e||!e.__CANCEL__)}function Te(e,t,n){J.call(this,null==e?"canceled":e,J.ERR_CANCELED,t,n),this.name="CanceledError"}function Ae(e,t,n){const r=n.config.validateStatus;n.status&&r&&!r(n.status)?t(new J("Request failed with status code "+n.status,[J.ERR_BAD_REQUEST,J.ERR_BAD_RESPONSE][Math.floor(n.status/100)-4],n.config,n.request,n)):e(n)}H.inherits(Te,J,{__CANCEL__:!0});const ve=(e,t,n=3)=>{let r=0;const o=function(e,t){e=e||10;const n=new Array(e),r=new Array(e);let o,s=0,i=0;return t=void 0!==t?t:1e3,function(a){const c=Date.now(),l=r[i];o||(o=c),n[s]=a,r[s]=c;let u=i,f=0;for(;u!==s;)f+=n[u++],u%=e;if(s=(s+1)%e,s===i&&(i=(i+1)%e),c-o{o=s,n=null,r&&(clearTimeout(r),r=null),e.apply(null,t)};return[(...e)=>{const t=Date.now(),a=t-o;a>=s?i(e,t):(n=e,r||(r=setTimeout((()=>{r=null,i(n)}),s-a)))},()=>n&&i(n)]}((n=>{const s=n.loaded,i=n.lengthComputable?n.total:void 0,a=s-r,c=o(a);r=s;e({loaded:s,total:i,progress:i?s/i:void 0,bytes:a,rate:c||void 0,estimated:c&&i&&s<=i?(i-s)/c:void 0,event:n,lengthComputable:null!=i,[t?"download":"upload"]:!0})}),n)},xe=(e,t)=>{const n=null!=e;return[r=>t[0]({lengthComputable:n,total:e,loaded:r}),t[1]]},Ce=e=>(...t)=>H.asap((()=>e(...t))),je=fe.hasStandardBrowserEnv?((e,t)=>n=>(n=new URL(n,fe.origin),e.protocol===n.protocol&&e.host===n.host&&(t||e.port===n.port)))(new URL(fe.origin),fe.navigator&&/(msie|trident)/i.test(fe.navigator.userAgent)):()=>!0,Ne=fe.hasStandardBrowserEnv?{write(e,t,n,r,o,s){const i=[e+"="+encodeURIComponent(t)];H.isNumber(n)&&i.push("expires="+new Date(n).toGMTString()),H.isString(r)&&i.push("path="+r),H.isString(o)&&i.push("domain="+o),!0===s&&i.push("secure"),document.cookie=i.join("; ")},read(e){const t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove(e){this.write(e,"",Date.now()-864e5)}}:{write(){},read:()=>null,remove(){}};function Ue(e,t,n){let r=!/^([a-z][a-z\d+\-.]*:)?\/\//i.test(t);return e&&(r||0==n)?function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}(e,t):t}const Pe=e=>e instanceof Oe?{...e}:e;function _e(e,t){t=t||{};const n={};function r(e,t,n,r){return H.isPlainObject(e)&&H.isPlainObject(t)?H.merge.call({caseless:r},e,t):H.isPlainObject(t)?H.merge({},t):H.isArray(t)?t.slice():t}function o(e,t,n,o){return H.isUndefined(t)?H.isUndefined(e)?void 0:r(void 0,e,0,o):r(e,t,0,o)}function s(e,t){if(!H.isUndefined(t))return r(void 0,t)}function i(e,t){return H.isUndefined(t)?H.isUndefined(e)?void 0:r(void 0,e):r(void 0,t)}function a(n,o,s){return s in t?r(n,o):s in e?r(void 0,n):void 0}const c={url:s,method:s,data:s,baseURL:i,transformRequest:i,transformResponse:i,paramsSerializer:i,timeout:i,timeoutMessage:i,withCredentials:i,withXSRFToken:i,adapter:i,responseType:i,xsrfCookieName:i,xsrfHeaderName:i,onUploadProgress:i,onDownloadProgress:i,decompress:i,maxContentLength:i,maxBodyLength:i,beforeRedirect:i,transport:i,httpAgent:i,httpsAgent:i,cancelToken:i,socketPath:i,responseEncoding:i,validateStatus:a,headers:(e,t,n)=>o(Pe(e),Pe(t),0,!0)};return H.forEach(Object.keys(Object.assign({},e,t)),(function(r){const s=c[r]||o,i=s(e[r],t[r],r);H.isUndefined(i)&&s!==a||(n[r]=i)})),n}const Fe=e=>{const t=_e({},e);let n,{data:r,withXSRFToken:o,xsrfHeaderName:s,xsrfCookieName:i,headers:a,auth:c}=t;if(t.headers=a=Oe.from(a),t.url=ne(Ue(t.baseURL,t.url,t.allowAbsoluteUrls),e.params,e.paramsSerializer),c&&a.set("Authorization","Basic "+btoa((c.username||"")+":"+(c.password?unescape(encodeURIComponent(c.password)):""))),H.isFormData(r))if(fe.hasStandardBrowserEnv||fe.hasStandardBrowserWebWorkerEnv)a.setContentType(void 0);else if(!1!==(n=a.getContentType())){const[e,...t]=n?n.split(";").map((e=>e.trim())).filter(Boolean):[];a.setContentType([e||"multipart/form-data",...t].join("; "))}if(fe.hasStandardBrowserEnv&&(o&&H.isFunction(o)&&(o=o(t)),o||!1!==o&&je(t.url))){const e=s&&i&&Ne.read(i);e&&a.set(s,e)}return t},Le="undefined"!=typeof XMLHttpRequest&&function(e){return new Promise((function(t,n){const r=Fe(e);let o=r.data;const s=Oe.from(r.headers).normalize();let i,a,c,l,u,{responseType:f,onUploadProgress:d,onDownloadProgress:p}=r;function h(){l&&l(),u&&u(),r.cancelToken&&r.cancelToken.unsubscribe(i),r.signal&&r.signal.removeEventListener("abort",i)}let m=new XMLHttpRequest;function y(){if(!m)return;const r=Oe.from("getAllResponseHeaders"in m&&m.getAllResponseHeaders());Ae((function(e){t(e),h()}),(function(e){n(e),h()}),{data:f&&"text"!==f&&"json"!==f?m.response:m.responseText,status:m.status,statusText:m.statusText,headers:r,config:e,request:m}),m=null}m.open(r.method.toUpperCase(),r.url,!0),m.timeout=r.timeout,"onloadend"in m?m.onloadend=y:m.onreadystatechange=function(){m&&4===m.readyState&&(0!==m.status||m.responseURL&&0===m.responseURL.indexOf("file:"))&&setTimeout(y)},m.onabort=function(){m&&(n(new J("Request aborted",J.ECONNABORTED,e,m)),m=null)},m.onerror=function(){n(new J("Network Error",J.ERR_NETWORK,e,m)),m=null},m.ontimeout=function(){let t=r.timeout?"timeout of "+r.timeout+"ms exceeded":"timeout exceeded";const o=r.transitional||oe;r.timeoutErrorMessage&&(t=r.timeoutErrorMessage),n(new J(t,o.clarifyTimeoutError?J.ETIMEDOUT:J.ECONNABORTED,e,m)),m=null},void 0===o&&s.setContentType(null),"setRequestHeader"in m&&H.forEach(s.toJSON(),(function(e,t){m.setRequestHeader(t,e)})),H.isUndefined(r.withCredentials)||(m.withCredentials=!!r.withCredentials),f&&"json"!==f&&(m.responseType=r.responseType),p&&([c,u]=ve(p,!0),m.addEventListener("progress",c)),d&&m.upload&&([a,l]=ve(d),m.upload.addEventListener("progress",a),m.upload.addEventListener("loadend",l)),(r.cancelToken||r.signal)&&(i=t=>{m&&(n(!t||t.type?new Te(null,e,m):t),m.abort(),m=null)},r.cancelToken&&r.cancelToken.subscribe(i),r.signal&&(r.signal.aborted?i():r.signal.addEventListener("abort",i)));const b=function(e){const t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}(r.url);b&&-1===fe.protocols.indexOf(b)?n(new J("Unsupported protocol "+b+":",J.ERR_BAD_REQUEST,e)):m.send(o||null)}))},Be=(e,t)=>{const{length:n}=e=e?e.filter(Boolean):[];if(t||n){let n,r=new AbortController;const o=function(e){if(!n){n=!0,i();const t=e instanceof Error?e:this.reason;r.abort(t instanceof J?t:new Te(t instanceof Error?t.message:t))}};let s=t&&setTimeout((()=>{s=null,o(new J(`timeout ${t} of ms exceeded`,J.ETIMEDOUT))}),t);const i=()=>{e&&(s&&clearTimeout(s),s=null,e.forEach((e=>{e.unsubscribe?e.unsubscribe(o):e.removeEventListener("abort",o)})),e=null)};e.forEach((e=>e.addEventListener("abort",o)));const{signal:a}=r;return a.unsubscribe=()=>H.asap(i),a}},ke=function*(e,t){let n=e.byteLength;if(!t||n{const o=async function*(e,t){for await(const n of De(e))yield*ke(n,t)}(e,t);let s,i=0,a=e=>{s||(s=!0,r&&r(e))};return new ReadableStream({async pull(e){try{const{done:t,value:r}=await o.next();if(t)return a(),void e.close();let s=r.byteLength;if(n){let e=i+=s;n(e)}e.enqueue(new Uint8Array(r))}catch(e){throw a(e),e}},cancel:e=>(a(e),o.return())},{highWaterMark:2})},Ie="function"==typeof fetch&&"function"==typeof Request&&"function"==typeof Response,Me=Ie&&"function"==typeof ReadableStream,ze=Ie&&("function"==typeof TextEncoder?(He=new TextEncoder,e=>He.encode(e)):async e=>new Uint8Array(await new Response(e).arrayBuffer()));var He;const Je=(e,...t)=>{try{return!!e(...t)}catch(e){return!1}},We=Me&&Je((()=>{let e=!1;const t=new Request(fe.origin,{body:new ReadableStream,method:"POST",get duplex(){return e=!0,"half"}}).headers.has("Content-Type");return e&&!t})),Ke=Me&&Je((()=>H.isReadableStream(new Response("").body))),Ve={stream:Ke&&(e=>e.body)};var $e;Ie&&($e=new Response,["text","arrayBuffer","blob","formData","stream"].forEach((e=>{!Ve[e]&&(Ve[e]=H.isFunction($e[e])?t=>t[e]():(t,n)=>{throw new J(`Response type '${e}' is not supported`,J.ERR_NOT_SUPPORT,n)})})));const Xe=async(e,t)=>{const n=H.toFiniteNumber(e.getContentLength());return null==n?(async e=>{if(null==e)return 0;if(H.isBlob(e))return e.size;if(H.isSpecCompliantForm(e)){const t=new Request(fe.origin,{method:"POST",body:e});return(await t.arrayBuffer()).byteLength}return H.isArrayBufferView(e)||H.isArrayBuffer(e)?e.byteLength:(H.isURLSearchParams(e)&&(e+=""),H.isString(e)?(await ze(e)).byteLength:void 0)})(t):n},Ge={http:null,xhr:Le,fetch:Ie&&(async e=>{let{url:t,method:n,data:r,signal:o,cancelToken:s,timeout:i,onDownloadProgress:a,onUploadProgress:c,responseType:l,headers:u,withCredentials:f="same-origin",fetchOptions:d}=Fe(e);l=l?(l+"").toLowerCase():"text";let p,h=Be([o,s&&s.toAbortSignal()],i);const m=h&&h.unsubscribe&&(()=>{h.unsubscribe()});let y;try{if(c&&We&&"get"!==n&&"head"!==n&&0!==(y=await Xe(u,r))){let e,n=new Request(t,{method:"POST",body:r,duplex:"half"});if(H.isFormData(r)&&(e=n.headers.get("content-type"))&&u.setContentType(e),n.body){const[e,t]=xe(y,ve(Ce(c)));r=qe(n.body,65536,e,t)}}H.isString(f)||(f=f?"include":"omit");const o="credentials"in Request.prototype;p=new Request(t,{...d,signal:h,method:n.toUpperCase(),headers:u.normalize().toJSON(),body:r,duplex:"half",credentials:o?f:void 0});let s=await fetch(p);const i=Ke&&("stream"===l||"response"===l);if(Ke&&(a||i&&m)){const e={};["status","statusText","headers"].forEach((t=>{e[t]=s[t]}));const t=H.toFiniteNumber(s.headers.get("content-length")),[n,r]=a&&xe(t,ve(Ce(a),!0))||[];s=new Response(qe(s.body,65536,n,(()=>{r&&r(),m&&m()})),e)}l=l||"text";let b=await Ve[H.findKey(Ve,l)||"text"](s,e);return!i&&m&&m(),await new Promise(((t,n)=>{Ae(t,n,{data:b,headers:Oe.from(s.headers),status:s.status,statusText:s.statusText,config:e,request:p})}))}catch(t){if(m&&m(),t&&"TypeError"===t.name&&/Load failed|fetch/i.test(t.message))throw Object.assign(new J("Network Error",J.ERR_NETWORK,e,p),{cause:t.cause||t});throw J.from(t,t&&t.code,e,p)}})};H.forEach(Ge,((e,t)=>{if(e){try{Object.defineProperty(e,"name",{value:t})}catch(e){}Object.defineProperty(e,"adapterName",{value:t})}}));const Qe=e=>`- ${e}`,Ze=e=>H.isFunction(e)||null===e||!1===e,Ye=e=>{e=H.isArray(e)?e:[e];const{length:t}=e;let n,r;const o={};for(let s=0;s`adapter ${e} `+(!1===t?"is not supported by the environment":"is not available in the build")));throw new J("There is no suitable adapter to dispatch the request "+(t?e.length>1?"since :\n"+e.map(Qe).join("\n"):" "+Qe(e[0]):"as no adapter specified"),"ERR_NOT_SUPPORT")}return r};function et(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new Te(null,e)}function tt(e){et(e),e.headers=Oe.from(e.headers),e.data=Re.call(e,e.transformRequest),-1!==["post","put","patch"].indexOf(e.method)&&e.headers.setContentType("application/x-www-form-urlencoded",!1);return Ye(e.adapter||he.adapter)(e).then((function(t){return et(e),t.data=Re.call(e,e.transformResponse,t),t.headers=Oe.from(t.headers),t}),(function(t){return Se(t)||(et(e),t&&t.response&&(t.response.data=Re.call(e,e.transformResponse,t.response),t.response.headers=Oe.from(t.response.headers))),Promise.reject(t)}))}const nt={};["object","boolean","number","function","string","symbol"].forEach(((e,t)=>{nt[e]=function(n){return typeof n===e||"a"+(t<1?"n ":" ")+e}}));const rt={};nt.transitional=function(e,t,n){function r(e,t){return"[Axios v1.9.0] Transitional option '"+e+"'"+t+(n?". "+n:"")}return(n,o,s)=>{if(!1===e)throw new J(r(o," has been removed"+(t?" in "+t:"")),J.ERR_DEPRECATED);return t&&!rt[o]&&(rt[o]=!0,console.warn(r(o," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(n,o,s)}},nt.spelling=function(e){return(t,n)=>(console.warn(`${n} is likely a misspelling of ${e}`),!0)};const ot={assertOptions:function(e,t,n){if("object"!=typeof e)throw new J("options must be an object",J.ERR_BAD_OPTION_VALUE);const r=Object.keys(e);let o=r.length;for(;o-- >0;){const s=r[o],i=t[s];if(i){const t=e[s],n=void 0===t||i(t,s,e);if(!0!==n)throw new J("option "+s+" must be "+n,J.ERR_BAD_OPTION_VALUE)}else if(!0!==n)throw new J("Unknown option "+s,J.ERR_BAD_OPTION)}},validators:nt},st=ot.validators;class it{constructor(e){this.defaults=e||{},this.interceptors={request:new re,response:new re}}async request(e,t){try{return await this._request(e,t)}catch(e){if(e instanceof Error){let t={};Error.captureStackTrace?Error.captureStackTrace(t):t=new Error;const n=t.stack?t.stack.replace(/^.+\n/,""):"";try{e.stack?n&&!String(e.stack).endsWith(n.replace(/^.+\n.+\n/,""))&&(e.stack+="\n"+n):e.stack=n}catch(e){}}throw e}}_request(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},t=_e(this.defaults,t);const{transitional:n,paramsSerializer:r,headers:o}=t;void 0!==n&&ot.assertOptions(n,{silentJSONParsing:st.transitional(st.boolean),forcedJSONParsing:st.transitional(st.boolean),clarifyTimeoutError:st.transitional(st.boolean)},!1),null!=r&&(H.isFunction(r)?t.paramsSerializer={serialize:r}:ot.assertOptions(r,{encode:st.function,serialize:st.function},!0)),void 0!==t.allowAbsoluteUrls||(void 0!==this.defaults.allowAbsoluteUrls?t.allowAbsoluteUrls=this.defaults.allowAbsoluteUrls:t.allowAbsoluteUrls=!0),ot.assertOptions(t,{baseUrl:st.spelling("baseURL"),withXsrfToken:st.spelling("withXSRFToken")},!0),t.method=(t.method||this.defaults.method||"get").toLowerCase();let s=o&&H.merge(o.common,o[t.method]);o&&H.forEach(["delete","get","head","post","put","patch","common"],(e=>{delete o[e]})),t.headers=Oe.concat(s,o);const i=[];let a=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(a=a&&e.synchronous,i.unshift(e.fulfilled,e.rejected))}));const c=[];let l;this.interceptors.response.forEach((function(e){c.push(e.fulfilled,e.rejected)}));let u,f=0;if(!a){const e=[tt.bind(this),void 0];for(e.unshift.apply(e,i),e.push.apply(e,c),u=e.length,l=Promise.resolve(t);f{if(!n._listeners)return;let t=n._listeners.length;for(;t-- >0;)n._listeners[t](e);n._listeners=null})),this.promise.then=e=>{let t;const r=new Promise((e=>{n.subscribe(e),t=e})).then(e);return r.cancel=function(){n.unsubscribe(t)},r},e((function(e,r,o){n.reason||(n.reason=new Te(e,r,o),t(n.reason))}))}throwIfRequested(){if(this.reason)throw this.reason}subscribe(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]}unsubscribe(e){if(!this._listeners)return;const t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}toAbortSignal(){const e=new AbortController,t=t=>{e.abort(t)};return this.subscribe(t),e.signal.unsubscribe=()=>this.unsubscribe(t),e.signal}static source(){let e;return{token:new ct((function(t){e=t})),cancel:e}}}const lt=ct;const ut={Continue:100,SwitchingProtocols:101,Processing:102,EarlyHints:103,Ok:200,Created:201,Accepted:202,NonAuthoritativeInformation:203,NoContent:204,ResetContent:205,PartialContent:206,MultiStatus:207,AlreadyReported:208,ImUsed:226,MultipleChoices:300,MovedPermanently:301,Found:302,SeeOther:303,NotModified:304,UseProxy:305,Unused:306,TemporaryRedirect:307,PermanentRedirect:308,BadRequest:400,Unauthorized:401,PaymentRequired:402,Forbidden:403,NotFound:404,MethodNotAllowed:405,NotAcceptable:406,ProxyAuthenticationRequired:407,RequestTimeout:408,Conflict:409,Gone:410,LengthRequired:411,PreconditionFailed:412,PayloadTooLarge:413,UriTooLong:414,UnsupportedMediaType:415,RangeNotSatisfiable:416,ExpectationFailed:417,ImATeapot:418,MisdirectedRequest:421,UnprocessableEntity:422,Locked:423,FailedDependency:424,TooEarly:425,UpgradeRequired:426,PreconditionRequired:428,TooManyRequests:429,RequestHeaderFieldsTooLarge:431,UnavailableForLegalReasons:451,InternalServerError:500,NotImplemented:501,BadGateway:502,ServiceUnavailable:503,GatewayTimeout:504,HttpVersionNotSupported:505,VariantAlsoNegotiates:506,InsufficientStorage:507,LoopDetected:508,NotExtended:510,NetworkAuthenticationRequired:511};Object.entries(ut).forEach((([e,t])=>{ut[t]=e}));const ft=ut;const dt=function t(n){const r=new at(n),o=e(at.prototype.request,r);return H.extend(o,at.prototype,r,{allOwnKeys:!0}),H.extend(o,r,null,{allOwnKeys:!0}),o.create=function(e){return t(_e(n,e))},o}(he);dt.Axios=at,dt.CanceledError=Te,dt.CancelToken=lt,dt.isCancel=Se,dt.VERSION="1.9.0",dt.toFormData=Q,dt.AxiosError=J,dt.Cancel=dt.CanceledError,dt.all=function(e){return Promise.all(e)},dt.spread=function(e){return function(t){return e.apply(null,t)}},dt.isAxiosError=function(e){return H.isObject(e)&&!0===e.isAxiosError},dt.mergeConfig=_e,dt.AxiosHeaders=Oe,dt.formToJSON=e=>de(H.isHTMLForm(e)?new FormData(e):e),dt.getAdapter=Ye,dt.HttpStatusCode=ft,dt.default=dt;const pt=dt,{Axios:ht,AxiosError:mt,CanceledError:yt,isCancel:bt,CancelToken:gt,VERSION:wt,all:Et,Cancel:Ot,isAxiosError:Rt,spread:St,toFormData:Tt,AxiosHeaders:At,HttpStatusCode:vt,formToJSON:xt,getAdapter:Ct,mergeConfig:jt}=pt;export{ht as Axios,mt as AxiosError,At as AxiosHeaders,Ot as Cancel,gt as CancelToken,yt as CanceledError,vt as HttpStatusCode,wt as VERSION,Et as all,pt as default,xt as formToJSON,Ct as getAdapter,Rt as isAxiosError,bt as isCancel,jt as mergeConfig,St as spread,Tt as toFormData}; +//# sourceMappingURL=axios.min.js.map diff --git a/node_modules/axios/dist/esm/axios.min.js.map b/node_modules/axios/dist/esm/axios.min.js.map new file mode 100644 index 0000000..f30abb8 --- /dev/null +++ b/node_modules/axios/dist/esm/axios.min.js.map @@ -0,0 +1 @@ +{"version":3,"file":"axios.min.js","sources":["../../lib/helpers/bind.js","../../lib/utils.js","../../lib/core/AxiosError.js","../../lib/helpers/toFormData.js","../../lib/helpers/AxiosURLSearchParams.js","../../lib/helpers/buildURL.js","../../lib/core/InterceptorManager.js","../../lib/defaults/transitional.js","../../lib/platform/browser/index.js","../../lib/platform/browser/classes/URLSearchParams.js","../../lib/platform/browser/classes/FormData.js","../../lib/platform/browser/classes/Blob.js","../../lib/platform/common/utils.js","../../lib/platform/index.js","../../lib/helpers/formDataToJSON.js","../../lib/defaults/index.js","../../lib/helpers/toURLEncodedForm.js","../../lib/helpers/parseHeaders.js","../../lib/core/AxiosHeaders.js","../../lib/core/transformData.js","../../lib/cancel/isCancel.js","../../lib/cancel/CanceledError.js","../../lib/core/settle.js","../../lib/helpers/progressEventReducer.js","../../lib/helpers/speedometer.js","../../lib/helpers/throttle.js","../../lib/helpers/isURLSameOrigin.js","../../lib/helpers/cookies.js","../../lib/core/buildFullPath.js","../../lib/helpers/isAbsoluteURL.js","../../lib/helpers/combineURLs.js","../../lib/core/mergeConfig.js","../../lib/helpers/resolveConfig.js","../../lib/adapters/xhr.js","../../lib/helpers/parseProtocol.js","../../lib/helpers/composeSignals.js","../../lib/helpers/trackStream.js","../../lib/adapters/fetch.js","../../lib/adapters/adapters.js","../../lib/helpers/null.js","../../lib/core/dispatchRequest.js","../../lib/env/data.js","../../lib/helpers/validator.js","../../lib/core/Axios.js","../../lib/cancel/CancelToken.js","../../lib/helpers/HttpStatusCode.js","../../lib/axios.js","../../lib/helpers/spread.js","../../lib/helpers/isAxiosError.js","../../index.js"],"sourcesContent":["'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\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 *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\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 (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 const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\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 *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && 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 *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.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 {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\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: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\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 * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\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 */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\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 *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\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 *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","import URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\nimport Blob from './classes/Blob.js'\n\nexport default {\n isBrowser: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob\n },\n protocols: ['http', 'https', 'file', 'blob', 'url', 'data']\n};\n","'use strict';\n\nimport AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js';\nexport default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams;\n","'use strict';\n\nexport default typeof FormData !== 'undefined' ? FormData : null;\n","'use strict'\n\nexport default typeof Blob !== 'undefined' ? Blob : null\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\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 *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\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 maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\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} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.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 *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" 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","'use strict';\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 *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\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 *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\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\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\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 // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\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(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, 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(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","// eslint-disable-next-line strict\nexport default null;\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\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 *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(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.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\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.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","export const VERSION = \"1.9.0\";","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(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 {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\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(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n","'use strict';\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 *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","import axios from './lib/axios.js';\n\n// This module is intended to unwrap Axios default export as named.\n// Keep top-level export same with static properties\n// so that it can keep same with es module or cjs\nconst {\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n} = axios;\n\nexport {\n axios as default,\n Axios,\n AxiosError,\n CanceledError,\n isCancel,\n CancelToken,\n VERSION,\n all,\n Cancel,\n isAxiosError,\n spread,\n toFormData,\n AxiosHeaders,\n HttpStatusCode,\n formToJSON,\n getAdapter,\n mergeConfig\n}\n"],"names":["bind","fn","thisArg","apply","arguments","toString","Object","prototype","getPrototypeOf","iterator","toStringTag","Symbol","kindOf","cache","create","thing","str","call","slice","toLowerCase","kindOfTest","type","typeOfTest","isArray","Array","isUndefined","isArrayBuffer","isString","isFunction","isNumber","isObject","isPlainObject","val","isDate","isFile","isBlob","isFileList","isURLSearchParams","isReadableStream","isRequest","isResponse","isHeaders","map","forEach","obj","allOwnKeys","i","l","length","keys","getOwnPropertyNames","len","key","findKey","_key","_global","globalThis","self","window","global","isContextDefined","context","isTypedArray","TypedArray","Uint8Array","isHTMLForm","hasOwnProperty","prop","isRegExp","reduceDescriptors","reducer","descriptors","getOwnPropertyDescriptors","reducedDescriptors","descriptor","name","ret","defineProperties","isAsyncFn","_setImmediate","setImmediateSupported","setImmediate","postMessageSupported","postMessage","token","Math","random","callbacks","addEventListener","source","data","shift","cb","push","setTimeout","asap","queueMicrotask","process","nextTick","utils$1","isBuffer","constructor","isFormData","kind","FormData","append","isArrayBufferView","result","ArrayBuffer","isView","buffer","isBoolean","isStream","pipe","merge","caseless","this","assignValue","targetKey","extend","a","b","trim","replace","stripBOM","content","charCodeAt","inherits","superConstructor","props","defineProperty","value","assign","toFlatObject","sourceObj","destObj","filter","propFilter","merged","endsWith","searchString","position","String","undefined","lastIndex","indexOf","toArray","arr","forEachEntry","_iterator","next","done","pair","matchAll","regExp","matches","exec","hasOwnProp","freezeMethods","enumerable","writable","set","Error","toObjectSet","arrayOrString","delimiter","define","split","toCamelCase","m","p1","p2","toUpperCase","noop","toFiniteNumber","defaultValue","Number","isFinite","isSpecCompliantForm","toJSONObject","stack","visit","target","reducedValue","isThenable","then","catch","isIterable","AxiosError","message","code","config","request","response","captureStackTrace","status","utils","toJSON","description","number","fileName","lineNumber","columnNumber","from","error","customProps","axiosError","cause","isVisitable","removeBrackets","renderKey","path","dots","concat","join","predicates","test","toFormData","formData","options","TypeError","metaTokens","indexes","option","visitor","defaultVisitor","useBlob","Blob","convertValue","toISOString","Buffer","JSON","stringify","some","isFlatArray","el","index","exposedHelpers","build","pop","encode","charMap","encodeURIComponent","match","AxiosURLSearchParams","params","_pairs","buildURL","url","_encode","serialize","serializeFn","serializedParams","hashmarkIndex","encoder","InterceptorManager$1","handlers","use","fulfilled","rejected","synchronous","runWhen","eject","id","clear","h","transitionalDefaults","silentJSONParsing","forcedJSONParsing","clarifyTimeoutError","platform$1","isBrowser","classes","URLSearchParams","protocols","hasBrowserEnv","document","_navigator","navigator","hasStandardBrowserEnv","product","hasStandardBrowserWebWorkerEnv","WorkerGlobalScope","importScripts","origin","location","href","platform","formDataToJSON","buildPath","isNumericKey","isLast","arrayToObject","entries","parsePropPath","defaults","transitional","adapter","transformRequest","headers","contentType","getContentType","hasJSONContentType","isObjectPayload","setContentType","helpers","isNode","toURLEncodedForm","formSerializer","_FormData","env","rawValue","parser","parse","e","stringifySafely","transformResponse","JSONRequested","responseType","strictJSONParsing","ERR_BAD_RESPONSE","timeout","xsrfCookieName","xsrfHeaderName","maxContentLength","maxBodyLength","validateStatus","common","Accept","method","defaults$1","ignoreDuplicateOf","$internals","normalizeHeader","header","normalizeValue","matchHeaderValue","isHeaderNameFilter","AxiosHeaders","valueOrRewrite","rewrite","setHeader","_value","_header","_rewrite","lHeader","setHeaders","rawHeaders","parsed","line","substring","parseHeaders","dest","entry","get","tokens","tokensRE","parseTokens","has","matcher","delete","deleted","deleteHeader","normalize","format","normalized","w","char","formatHeader","targets","asStrings","getSetCookie","static","first","computed","accessors","defineAccessor","accessorName","methodName","arg1","arg2","arg3","configurable","buildAccessors","accessor","mapped","headerValue","AxiosHeaders$2","transformData","fns","isCancel","__CANCEL__","CanceledError","ERR_CANCELED","settle","resolve","reject","ERR_BAD_REQUEST","floor","progressEventReducer","listener","isDownloadStream","freq","bytesNotified","_speedometer","samplesCount","min","bytes","timestamps","firstSampleTS","head","tail","chunkLength","now","Date","startedAt","bytesCount","passed","round","speedometer","lastArgs","timer","timestamp","threshold","invoke","args","clearTimeout","throttle","loaded","total","lengthComputable","progressBytes","rate","progress","estimated","event","progressEventDecorator","throttled","asyncDecorator","isURLSameOrigin","isMSIE","URL","protocol","host","port","userAgent","cookies","write","expires","domain","secure","cookie","toGMTString","read","RegExp","decodeURIComponent","remove","buildFullPath","baseURL","requestedURL","allowAbsoluteUrls","isRelativeUrl","relativeURL","combineURLs","headersToObject","mergeConfig","config1","config2","getMergedValue","mergeDeepProperties","valueFromConfig2","defaultToConfig2","mergeDirectKeys","mergeMap","paramsSerializer","timeoutMessage","withCredentials","withXSRFToken","onUploadProgress","onDownloadProgress","decompress","beforeRedirect","transport","httpAgent","httpsAgent","cancelToken","socketPath","responseEncoding","configValue","resolveConfig","newConfig","auth","btoa","username","password","unescape","Boolean","xsrfValue","xhrAdapter","XMLHttpRequest","Promise","_config","requestData","requestHeaders","onCanceled","uploadThrottled","downloadThrottled","flushUpload","flushDownload","unsubscribe","signal","removeEventListener","onloadend","responseHeaders","getAllResponseHeaders","err","responseText","statusText","open","onreadystatechange","readyState","responseURL","onabort","ECONNABORTED","onerror","ERR_NETWORK","ontimeout","timeoutErrorMessage","ETIMEDOUT","setRequestHeader","upload","cancel","abort","subscribe","aborted","parseProtocol","send","composeSignals$1","signals","controller","AbortController","reason","streamChunk","chunk","chunkSize","byteLength","end","pos","readStream","async","stream","asyncIterator","reader","getReader","trackStream","onProgress","onFinish","iterable","readBytes","_onFinish","ReadableStream","close","loadedBytes","enqueue","return","highWaterMark","isFetchSupported","fetch","Request","Response","isReadableStreamSupported","encodeText","TextEncoder","arrayBuffer","supportsRequestStream","duplexAccessed","hasContentType","body","duplex","supportsResponseStream","resolvers","res","_","ERR_NOT_SUPPORT","resolveBodyLength","getContentLength","size","_request","getBodyLength","knownAdapters","http","xhr","fetchOptions","composedSignal","composeSignals","toAbortSignal","requestContentLength","contentTypeHeader","flush","isCredentialsSupported","credentials","isStreamResponse","responseContentLength","responseData","renderReason","isResolvedHandle","adapters","nameOrAdapter","rejectedReasons","reasons","state","throwIfCancellationRequested","throwIfRequested","dispatchRequest","validators","deprecatedWarnings","validator","version","formatMessage","opt","desc","opts","ERR_DEPRECATED","console","warn","spelling","correctSpelling","assertOptions","schema","allowUnknown","ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","Axios","instanceConfig","interceptors","InterceptorManager","configOrUrl","dummy","boolean","function","baseUrl","withXsrfToken","contextHeaders","requestInterceptorChain","synchronousRequestInterceptors","interceptor","unshift","responseInterceptorChain","promise","chain","onFulfilled","onRejected","getUri","generateHTTPMethod","isForm","Axios$2","CancelToken","executor","resolvePromise","_listeners","onfulfilled","_resolve","splice","c","CancelToken$2","HttpStatusCode","Continue","SwitchingProtocols","Processing","EarlyHints","Ok","Created","Accepted","NonAuthoritativeInformation","NoContent","ResetContent","PartialContent","MultiStatus","AlreadyReported","ImUsed","MultipleChoices","MovedPermanently","Found","SeeOther","NotModified","UseProxy","Unused","TemporaryRedirect","PermanentRedirect","BadRequest","Unauthorized","PaymentRequired","Forbidden","NotFound","MethodNotAllowed","NotAcceptable","ProxyAuthenticationRequired","RequestTimeout","Conflict","Gone","LengthRequired","PreconditionFailed","PayloadTooLarge","UriTooLong","UnsupportedMediaType","RangeNotSatisfiable","ExpectationFailed","ImATeapot","MisdirectedRequest","UnprocessableEntity","Locked","FailedDependency","TooEarly","UpgradeRequired","PreconditionRequired","TooManyRequests","RequestHeaderFieldsTooLarge","UnavailableForLegalReasons","InternalServerError","NotImplemented","BadGateway","ServiceUnavailable","GatewayTimeout","HttpVersionNotSupported","VariantAlsoNegotiates","InsufficientStorage","LoopDetected","NotExtended","NetworkAuthenticationRequired","HttpStatusCode$2","axios","createInstance","defaultConfig","instance","VERSION","Cancel","all","promises","spread","callback","isAxiosError","payload","formToJSON","getAdapter","default","axios$1"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/axios/dist/node/axios.cjs b/node_modules/axios/dist/node/axios.cjs new file mode 100644 index 0000000..9491c11 --- /dev/null +++ b/node_modules/axios/dist/node/axios.cjs @@ -0,0 +1,4783 @@ +/*! Axios v1.9.0 Copyright (c) 2025 Matt Zabriskie and contributors */ +'use strict'; + +const FormData$1 = require('form-data'); +const crypto = require('crypto'); +const url = require('url'); +const proxyFromEnv = require('proxy-from-env'); +const http = require('http'); +const https = require('https'); +const util = require('util'); +const followRedirects = require('follow-redirects'); +const zlib = require('zlib'); +const stream = require('stream'); +const events = require('events'); + +function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; } + +const FormData__default = /*#__PURE__*/_interopDefaultLegacy(FormData$1); +const crypto__default = /*#__PURE__*/_interopDefaultLegacy(crypto); +const url__default = /*#__PURE__*/_interopDefaultLegacy(url); +const proxyFromEnv__default = /*#__PURE__*/_interopDefaultLegacy(proxyFromEnv); +const http__default = /*#__PURE__*/_interopDefaultLegacy(http); +const https__default = /*#__PURE__*/_interopDefaultLegacy(https); +const util__default = /*#__PURE__*/_interopDefaultLegacy(util); +const followRedirects__default = /*#__PURE__*/_interopDefaultLegacy(followRedirects); +const zlib__default = /*#__PURE__*/_interopDefaultLegacy(zlib); +const stream__default = /*#__PURE__*/_interopDefaultLegacy(stream); + +function bind(fn, thisArg) { + return function wrap() { + return fn.apply(thisArg, arguments); + }; +} + +// utils is a library of generic helper functions non-specific to axios + +const {toString} = Object.prototype; +const {getPrototypeOf} = Object; +const {iterator, toStringTag} = Symbol; + +const kindOf = (cache => thing => { + const str = toString.call(thing); + return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); +})(Object.create(null)); + +const kindOfTest = (type) => { + type = type.toLowerCase(); + return (thing) => kindOf(thing) === type +}; + +const typeOfTest = type => thing => typeof thing === type; + +/** + * Determine if a value is an Array + * + * @param {Object} val The value to test + * + * @returns {boolean} True if value is an Array, otherwise false + */ +const {isArray} = Array; + +/** + * Determine if a value is undefined + * + * @param {*} val The value to test + * + * @returns {boolean} True if the value is undefined, otherwise false + */ +const isUndefined = typeOfTest('undefined'); + +/** + * Determine if a value is a Buffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Buffer, otherwise false + */ +function isBuffer(val) { + return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) + && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val); +} + +/** + * Determine if a value is an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ +const isArrayBuffer = kindOfTest('ArrayBuffer'); + + +/** + * Determine if a value is a view on an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ +function isArrayBufferView(val) { + let result; + if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { + result = ArrayBuffer.isView(val); + } else { + result = (val) && (val.buffer) && (isArrayBuffer(val.buffer)); + } + return result; +} + +/** + * Determine if a value is a String + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a String, otherwise false + */ +const isString = typeOfTest('string'); + +/** + * Determine if a value is a Function + * + * @param {*} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ +const isFunction = typeOfTest('function'); + +/** + * Determine if a value is a Number + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Number, otherwise false + */ +const isNumber = typeOfTest('number'); + +/** + * Determine if a value is an Object + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an Object, otherwise false + */ +const isObject = (thing) => thing !== null && typeof thing === 'object'; + +/** + * Determine if a value is a Boolean + * + * @param {*} thing The value to test + * @returns {boolean} True if value is a Boolean, otherwise false + */ +const isBoolean = thing => thing === true || thing === false; + +/** + * Determine if a value is a plain Object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a plain Object, otherwise false + */ +const isPlainObject = (val) => { + if (kindOf(val) !== 'object') { + return false; + } + + const prototype = getPrototypeOf(val); + return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val); +}; + +/** + * Determine if a value is a Date + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Date, otherwise false + */ +const isDate = kindOfTest('Date'); + +/** + * Determine if a value is a File + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ +const isFile = kindOfTest('File'); + +/** + * Determine if a value is a Blob + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Blob, otherwise false + */ +const isBlob = kindOfTest('Blob'); + +/** + * Determine if a value is a FileList + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ +const isFileList = kindOfTest('FileList'); + +/** + * Determine if a value is a Stream + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Stream, otherwise false + */ +const isStream = (val) => isObject(val) && isFunction(val.pipe); + +/** + * Determine if a value is a FormData + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an FormData, otherwise false + */ +const isFormData = (thing) => { + let kind; + return thing && ( + (typeof FormData === 'function' && thing instanceof FormData) || ( + isFunction(thing.append) && ( + (kind = kindOf(thing)) === 'formdata' || + // detect form-data instance + (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]') + ) + ) + ) +}; + +/** + * Determine if a value is a URLSearchParams object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ +const isURLSearchParams = kindOfTest('URLSearchParams'); + +const [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest); + +/** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * + * @returns {String} The String freed of excess whitespace + */ +const trim = (str) => str.trim ? + str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + +/** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + * + * @param {Boolean} [allOwnKeys = false] + * @returns {any} + */ +function forEach(obj, fn, {allOwnKeys = false} = {}) { + // Don't bother if no value provided + if (obj === null || typeof obj === 'undefined') { + return; + } + + let i; + let l; + + // Force an array if not already something iterable + if (typeof obj !== 'object') { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + + if (isArray(obj)) { + // Iterate over array values + for (i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Iterate over object keys + const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); + const len = keys.length; + let key; + + for (i = 0; i < len; i++) { + key = keys[i]; + fn.call(null, obj[key], key, obj); + } + } +} + +function findKey(obj, key) { + key = key.toLowerCase(); + const keys = Object.keys(obj); + let i = keys.length; + let _key; + while (i-- > 0) { + _key = keys[i]; + if (key === _key.toLowerCase()) { + return _key; + } + } + return null; +} + +const _global = (() => { + /*eslint no-undef:0*/ + if (typeof globalThis !== "undefined") return globalThis; + return typeof self !== "undefined" ? self : (typeof window !== 'undefined' ? window : global) +})(); + +const isContextDefined = (context) => !isUndefined(context) && context !== _global; + +/** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * var result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * + * @returns {Object} Result of all merge properties + */ +function merge(/* obj1, obj2, obj3, ... */) { + const {caseless} = isContextDefined(this) && this || {}; + const result = {}; + const assignValue = (val, key) => { + const targetKey = caseless && findKey(result, key) || key; + if (isPlainObject(result[targetKey]) && isPlainObject(val)) { + result[targetKey] = merge(result[targetKey], val); + } else if (isPlainObject(val)) { + result[targetKey] = merge({}, val); + } else if (isArray(val)) { + result[targetKey] = val.slice(); + } else { + result[targetKey] = val; + } + }; + + for (let i = 0, l = arguments.length; i < l; i++) { + arguments[i] && forEach(arguments[i], assignValue); + } + return result; +} + +/** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * + * @param {Boolean} [allOwnKeys] + * @returns {Object} The resulting value of object a + */ +const extend = (a, b, thisArg, {allOwnKeys}= {}) => { + forEach(b, (val, key) => { + if (thisArg && isFunction(val)) { + a[key] = bind(val, thisArg); + } else { + a[key] = val; + } + }, {allOwnKeys}); + return a; +}; + +/** + * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + * + * @param {string} content with BOM + * + * @returns {string} content value without BOM + */ +const stripBOM = (content) => { + if (content.charCodeAt(0) === 0xFEFF) { + content = content.slice(1); + } + return content; +}; + +/** + * Inherit the prototype methods from one constructor into another + * @param {function} constructor + * @param {function} superConstructor + * @param {object} [props] + * @param {object} [descriptors] + * + * @returns {void} + */ +const inherits = (constructor, superConstructor, props, descriptors) => { + constructor.prototype = Object.create(superConstructor.prototype, descriptors); + constructor.prototype.constructor = constructor; + Object.defineProperty(constructor, 'super', { + value: superConstructor.prototype + }); + props && Object.assign(constructor.prototype, props); +}; + +/** + * Resolve object with deep prototype chain to a flat object + * @param {Object} sourceObj source object + * @param {Object} [destObj] + * @param {Function|Boolean} [filter] + * @param {Function} [propFilter] + * + * @returns {Object} + */ +const toFlatObject = (sourceObj, destObj, filter, propFilter) => { + let props; + let i; + let prop; + const merged = {}; + + destObj = destObj || {}; + // eslint-disable-next-line no-eq-null,eqeqeq + if (sourceObj == null) return destObj; + + do { + props = Object.getOwnPropertyNames(sourceObj); + i = props.length; + while (i-- > 0) { + prop = props[i]; + if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) { + destObj[prop] = sourceObj[prop]; + merged[prop] = true; + } + } + sourceObj = filter !== false && getPrototypeOf(sourceObj); + } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype); + + return destObj; +}; + +/** + * Determines whether a string ends with the characters of a specified string + * + * @param {String} str + * @param {String} searchString + * @param {Number} [position= 0] + * + * @returns {boolean} + */ +const endsWith = (str, searchString, position) => { + str = String(str); + if (position === undefined || position > str.length) { + position = str.length; + } + position -= searchString.length; + const lastIndex = str.indexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; +}; + + +/** + * Returns new array from array like object or null if failed + * + * @param {*} [thing] + * + * @returns {?Array} + */ +const toArray = (thing) => { + if (!thing) return null; + if (isArray(thing)) return thing; + let i = thing.length; + if (!isNumber(i)) return null; + const arr = new Array(i); + while (i-- > 0) { + arr[i] = thing[i]; + } + return arr; +}; + +/** + * Checking if the Uint8Array exists and if it does, it returns a function that checks if the + * thing passed in is an instance of Uint8Array + * + * @param {TypedArray} + * + * @returns {Array} + */ +// eslint-disable-next-line func-names +const isTypedArray = (TypedArray => { + // eslint-disable-next-line func-names + return thing => { + return TypedArray && thing instanceof TypedArray; + }; +})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array)); + +/** + * For each entry in the object, call the function with the key and value. + * + * @param {Object} obj - The object to iterate over. + * @param {Function} fn - The function to call for each entry. + * + * @returns {void} + */ +const forEachEntry = (obj, fn) => { + const generator = obj && obj[iterator]; + + const _iterator = generator.call(obj); + + let result; + + while ((result = _iterator.next()) && !result.done) { + const pair = result.value; + fn.call(obj, pair[0], pair[1]); + } +}; + +/** + * It takes a regular expression and a string, and returns an array of all the matches + * + * @param {string} regExp - The regular expression to match against. + * @param {string} str - The string to search. + * + * @returns {Array} + */ +const matchAll = (regExp, str) => { + let matches; + const arr = []; + + while ((matches = regExp.exec(str)) !== null) { + arr.push(matches); + } + + return arr; +}; + +/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */ +const isHTMLForm = kindOfTest('HTMLFormElement'); + +const toCamelCase = str => { + return str.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g, + function replacer(m, p1, p2) { + return p1.toUpperCase() + p2; + } + ); +}; + +/* Creating a function that will check if an object has a property. */ +const hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype); + +/** + * Determine if a value is a RegExp object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a RegExp object, otherwise false + */ +const isRegExp = kindOfTest('RegExp'); + +const reduceDescriptors = (obj, reducer) => { + const descriptors = Object.getOwnPropertyDescriptors(obj); + const reducedDescriptors = {}; + + forEach(descriptors, (descriptor, name) => { + let ret; + if ((ret = reducer(descriptor, name, obj)) !== false) { + reducedDescriptors[name] = ret || descriptor; + } + }); + + Object.defineProperties(obj, reducedDescriptors); +}; + +/** + * Makes all methods read-only + * @param {Object} obj + */ + +const freezeMethods = (obj) => { + reduceDescriptors(obj, (descriptor, name) => { + // skip restricted props in strict mode + if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) { + return false; + } + + const value = obj[name]; + + if (!isFunction(value)) return; + + descriptor.enumerable = false; + + if ('writable' in descriptor) { + descriptor.writable = false; + return; + } + + if (!descriptor.set) { + descriptor.set = () => { + throw Error('Can not rewrite read-only method \'' + name + '\''); + }; + } + }); +}; + +const toObjectSet = (arrayOrString, delimiter) => { + const obj = {}; + + const define = (arr) => { + arr.forEach(value => { + obj[value] = true; + }); + }; + + isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter)); + + return obj; +}; + +const noop = () => {}; + +const toFiniteNumber = (value, defaultValue) => { + return value != null && Number.isFinite(value = +value) ? value : defaultValue; +}; + +/** + * If the thing is a FormData object, return true, otherwise return false. + * + * @param {unknown} thing - The thing to check. + * + * @returns {boolean} + */ +function isSpecCompliantForm(thing) { + return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]); +} + +const toJSONObject = (obj) => { + const stack = new Array(10); + + const visit = (source, i) => { + + if (isObject(source)) { + if (stack.indexOf(source) >= 0) { + return; + } + + if(!('toJSON' in source)) { + stack[i] = source; + const target = isArray(source) ? [] : {}; + + forEach(source, (value, key) => { + const reducedValue = visit(value, i + 1); + !isUndefined(reducedValue) && (target[key] = reducedValue); + }); + + stack[i] = undefined; + + return target; + } + } + + return source; + }; + + return visit(obj, 0); +}; + +const isAsyncFn = kindOfTest('AsyncFunction'); + +const isThenable = (thing) => + thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch); + +// original code +// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34 + +const _setImmediate = ((setImmediateSupported, postMessageSupported) => { + if (setImmediateSupported) { + return setImmediate; + } + + return postMessageSupported ? ((token, callbacks) => { + _global.addEventListener("message", ({source, data}) => { + if (source === _global && data === token) { + callbacks.length && callbacks.shift()(); + } + }, false); + + return (cb) => { + callbacks.push(cb); + _global.postMessage(token, "*"); + } + })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb); +})( + typeof setImmediate === 'function', + isFunction(_global.postMessage) +); + +const asap = typeof queueMicrotask !== 'undefined' ? + queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate); + +// ********************* + + +const isIterable = (thing) => thing != null && isFunction(thing[iterator]); + + +const utils$1 = { + isArray, + isArrayBuffer, + isBuffer, + isFormData, + isArrayBufferView, + isString, + isNumber, + isBoolean, + isObject, + isPlainObject, + isReadableStream, + isRequest, + isResponse, + isHeaders, + isUndefined, + isDate, + isFile, + isBlob, + isRegExp, + isFunction, + isStream, + isURLSearchParams, + isTypedArray, + isFileList, + forEach, + merge, + extend, + trim, + stripBOM, + inherits, + toFlatObject, + kindOf, + kindOfTest, + endsWith, + toArray, + forEachEntry, + matchAll, + isHTMLForm, + hasOwnProperty, + hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection + reduceDescriptors, + freezeMethods, + toObjectSet, + toCamelCase, + noop, + toFiniteNumber, + findKey, + global: _global, + isContextDefined, + isSpecCompliantForm, + toJSONObject, + isAsyncFn, + isThenable, + setImmediate: _setImmediate, + asap, + isIterable +}; + +/** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [config] The config. + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * + * @returns {Error} The created error. + */ +function AxiosError(message, code, config, request, response) { + Error.call(this); + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + this.stack = (new Error()).stack; + } + + this.message = message; + this.name = 'AxiosError'; + code && (this.code = code); + config && (this.config = config); + request && (this.request = request); + if (response) { + this.response = response; + this.status = response.status ? response.status : null; + } +} + +utils$1.inherits(AxiosError, Error, { + toJSON: function toJSON() { + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: utils$1.toJSONObject(this.config), + code: this.code, + status: this.status + }; + } +}); + +const prototype$1 = AxiosError.prototype; +const descriptors = {}; + +[ + 'ERR_BAD_OPTION_VALUE', + 'ERR_BAD_OPTION', + 'ECONNABORTED', + 'ETIMEDOUT', + 'ERR_NETWORK', + 'ERR_FR_TOO_MANY_REDIRECTS', + 'ERR_DEPRECATED', + 'ERR_BAD_RESPONSE', + 'ERR_BAD_REQUEST', + 'ERR_CANCELED', + 'ERR_NOT_SUPPORT', + 'ERR_INVALID_URL' +// eslint-disable-next-line func-names +].forEach(code => { + descriptors[code] = {value: code}; +}); + +Object.defineProperties(AxiosError, descriptors); +Object.defineProperty(prototype$1, 'isAxiosError', {value: true}); + +// eslint-disable-next-line func-names +AxiosError.from = (error, code, config, request, response, customProps) => { + const axiosError = Object.create(prototype$1); + + utils$1.toFlatObject(error, axiosError, function filter(obj) { + return obj !== Error.prototype; + }, prop => { + return prop !== 'isAxiosError'; + }); + + AxiosError.call(axiosError, error.message, code, config, request, response); + + axiosError.cause = error; + + axiosError.name = error.name; + + customProps && Object.assign(axiosError, customProps); + + return axiosError; +}; + +/** + * Determines if the given thing is a array or js object. + * + * @param {string} thing - The object or array to be visited. + * + * @returns {boolean} + */ +function isVisitable(thing) { + return utils$1.isPlainObject(thing) || utils$1.isArray(thing); +} + +/** + * It removes the brackets from the end of a string + * + * @param {string} key - The key of the parameter. + * + * @returns {string} the key without the brackets. + */ +function removeBrackets(key) { + return utils$1.endsWith(key, '[]') ? key.slice(0, -2) : key; +} + +/** + * It takes a path, a key, and a boolean, and returns a string + * + * @param {string} path - The path to the current key. + * @param {string} key - The key of the current object being iterated over. + * @param {string} dots - If true, the key will be rendered with dots instead of brackets. + * + * @returns {string} The path to the current key. + */ +function renderKey(path, key, dots) { + if (!path) return key; + return path.concat(key).map(function each(token, i) { + // eslint-disable-next-line no-param-reassign + token = removeBrackets(token); + return !dots && i ? '[' + token + ']' : token; + }).join(dots ? '.' : ''); +} + +/** + * If the array is an array and none of its elements are visitable, then it's a flat array. + * + * @param {Array} arr - The array to check + * + * @returns {boolean} + */ +function isFlatArray(arr) { + return utils$1.isArray(arr) && !arr.some(isVisitable); +} + +const predicates = utils$1.toFlatObject(utils$1, {}, null, function filter(prop) { + return /^is[A-Z]/.test(prop); +}); + +/** + * Convert a data object to FormData + * + * @param {Object} obj + * @param {?Object} [formData] + * @param {?Object} [options] + * @param {Function} [options.visitor] + * @param {Boolean} [options.metaTokens = true] + * @param {Boolean} [options.dots = false] + * @param {?Boolean} [options.indexes = false] + * + * @returns {Object} + **/ + +/** + * It converts an object into a FormData object + * + * @param {Object} obj - The object to convert to form data. + * @param {string} formData - The FormData object to append to. + * @param {Object} options + * + * @returns + */ +function toFormData(obj, formData, options) { + if (!utils$1.isObject(obj)) { + throw new TypeError('target must be an object'); + } + + // eslint-disable-next-line no-param-reassign + formData = formData || new (FormData__default["default"] || FormData)(); + + // eslint-disable-next-line no-param-reassign + options = utils$1.toFlatObject(options, { + metaTokens: true, + dots: false, + indexes: false + }, false, function defined(option, source) { + // eslint-disable-next-line no-eq-null,eqeqeq + return !utils$1.isUndefined(source[option]); + }); + + const metaTokens = options.metaTokens; + // eslint-disable-next-line no-use-before-define + const visitor = options.visitor || defaultVisitor; + const dots = options.dots; + const indexes = options.indexes; + const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob; + const useBlob = _Blob && utils$1.isSpecCompliantForm(formData); + + if (!utils$1.isFunction(visitor)) { + throw new TypeError('visitor must be a function'); + } + + function convertValue(value) { + if (value === null) return ''; + + if (utils$1.isDate(value)) { + return value.toISOString(); + } + + if (!useBlob && utils$1.isBlob(value)) { + throw new AxiosError('Blob is not supported. Use a Buffer instead.'); + } + + if (utils$1.isArrayBuffer(value) || utils$1.isTypedArray(value)) { + return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); + } + + return value; + } + + /** + * Default visitor. + * + * @param {*} value + * @param {String|Number} key + * @param {Array} path + * @this {FormData} + * + * @returns {boolean} return true to visit the each prop of the value recursively + */ + function defaultVisitor(value, key, path) { + let arr = value; + + if (value && !path && typeof value === 'object') { + if (utils$1.endsWith(key, '{}')) { + // eslint-disable-next-line no-param-reassign + key = metaTokens ? key : key.slice(0, -2); + // eslint-disable-next-line no-param-reassign + value = JSON.stringify(value); + } else if ( + (utils$1.isArray(value) && isFlatArray(value)) || + ((utils$1.isFileList(value) || utils$1.endsWith(key, '[]')) && (arr = utils$1.toArray(value)) + )) { + // eslint-disable-next-line no-param-reassign + key = removeBrackets(key); + + arr.forEach(function each(el, index) { + !(utils$1.isUndefined(el) || el === null) && formData.append( + // eslint-disable-next-line no-nested-ternary + indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'), + convertValue(el) + ); + }); + return false; + } + } + + if (isVisitable(value)) { + return true; + } + + formData.append(renderKey(path, key, dots), convertValue(value)); + + return false; + } + + const stack = []; + + const exposedHelpers = Object.assign(predicates, { + defaultVisitor, + convertValue, + isVisitable + }); + + function build(value, path) { + if (utils$1.isUndefined(value)) return; + + if (stack.indexOf(value) !== -1) { + throw Error('Circular reference detected in ' + path.join('.')); + } + + stack.push(value); + + utils$1.forEach(value, function each(el, key) { + const result = !(utils$1.isUndefined(el) || el === null) && visitor.call( + formData, el, utils$1.isString(key) ? key.trim() : key, path, exposedHelpers + ); + + if (result === true) { + build(el, path ? path.concat(key) : [key]); + } + }); + + stack.pop(); + } + + if (!utils$1.isObject(obj)) { + throw new TypeError('data must be an object'); + } + + build(obj); + + return formData; +} + +/** + * It encodes a string by replacing all characters that are not in the unreserved set with + * their percent-encoded equivalents + * + * @param {string} str - The string to encode. + * + * @returns {string} The encoded string. + */ +function encode$1(str) { + const charMap = { + '!': '%21', + "'": '%27', + '(': '%28', + ')': '%29', + '~': '%7E', + '%20': '+', + '%00': '\x00' + }; + return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) { + return charMap[match]; + }); +} + +/** + * It takes a params object and converts it to a FormData object + * + * @param {Object} params - The parameters to be converted to a FormData object. + * @param {Object} options - The options object passed to the Axios constructor. + * + * @returns {void} + */ +function AxiosURLSearchParams(params, options) { + this._pairs = []; + + params && toFormData(params, this, options); +} + +const prototype = AxiosURLSearchParams.prototype; + +prototype.append = function append(name, value) { + this._pairs.push([name, value]); +}; + +prototype.toString = function toString(encoder) { + const _encode = encoder ? function(value) { + return encoder.call(this, value, encode$1); + } : encode$1; + + return this._pairs.map(function each(pair) { + return _encode(pair[0]) + '=' + _encode(pair[1]); + }, '').join('&'); +}; + +/** + * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their + * URI encoded counterparts + * + * @param {string} val The value to be encoded. + * + * @returns {string} The encoded value. + */ +function encode(val) { + return encodeURIComponent(val). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, '+'). + replace(/%5B/gi, '['). + replace(/%5D/gi, ']'); +} + +/** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @param {?(object|Function)} options + * + * @returns {string} The formatted url + */ +function buildURL(url, params, options) { + /*eslint no-param-reassign:0*/ + if (!params) { + return url; + } + + const _encode = options && options.encode || encode; + + if (utils$1.isFunction(options)) { + options = { + serialize: options + }; + } + + const serializeFn = options && options.serialize; + + let serializedParams; + + if (serializeFn) { + serializedParams = serializeFn(params, options); + } else { + serializedParams = utils$1.isURLSearchParams(params) ? + params.toString() : + new AxiosURLSearchParams(params, options).toString(_encode); + } + + if (serializedParams) { + const hashmarkIndex = url.indexOf("#"); + + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex); + } + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; +} + +class InterceptorManager { + constructor() { + this.handlers = []; + } + + /** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * + * @return {Number} An ID used to remove interceptor later + */ + use(fulfilled, rejected, options) { + this.handlers.push({ + fulfilled, + rejected, + synchronous: options ? options.synchronous : false, + runWhen: options ? options.runWhen : null + }); + return this.handlers.length - 1; + } + + /** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + * + * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise + */ + eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } + } + + /** + * Clear all interceptors from the stack + * + * @returns {void} + */ + clear() { + if (this.handlers) { + this.handlers = []; + } + } + + /** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + * + * @returns {void} + */ + forEach(fn) { + utils$1.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); + } +} + +const InterceptorManager$1 = InterceptorManager; + +const transitionalDefaults = { + silentJSONParsing: true, + forcedJSONParsing: true, + clarifyTimeoutError: false +}; + +const URLSearchParams = url__default["default"].URLSearchParams; + +const ALPHA = 'abcdefghijklmnopqrstuvwxyz'; + +const DIGIT = '0123456789'; + +const ALPHABET = { + DIGIT, + ALPHA, + ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT +}; + +const generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => { + let str = ''; + const {length} = alphabet; + const randomValues = new Uint32Array(size); + crypto__default["default"].randomFillSync(randomValues); + for (let i = 0; i < size; i++) { + str += alphabet[randomValues[i] % length]; + } + + return str; +}; + + +const platform$1 = { + isNode: true, + classes: { + URLSearchParams, + FormData: FormData__default["default"], + Blob: typeof Blob !== 'undefined' && Blob || null + }, + ALPHABET, + generateString, + protocols: [ 'http', 'https', 'file', 'data' ] +}; + +const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined'; + +const _navigator = typeof navigator === 'object' && navigator || undefined; + +/** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + * + * @returns {boolean} + */ +const hasStandardBrowserEnv = hasBrowserEnv && + (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0); + +/** + * Determine if we're running in a standard browser webWorker environment + * + * Although the `isStandardBrowserEnv` method indicates that + * `allows axios to run in a web worker`, the WebWorker will still be + * filtered out due to its judgment standard + * `typeof window !== 'undefined' && typeof document !== 'undefined'`. + * This leads to a problem when axios post `FormData` in webWorker + */ +const hasStandardBrowserWebWorkerEnv = (() => { + return ( + typeof WorkerGlobalScope !== 'undefined' && + // eslint-disable-next-line no-undef + self instanceof WorkerGlobalScope && + typeof self.importScripts === 'function' + ); +})(); + +const origin = hasBrowserEnv && window.location.href || 'http://localhost'; + +const utils = /*#__PURE__*/Object.freeze({ + __proto__: null, + hasBrowserEnv: hasBrowserEnv, + hasStandardBrowserWebWorkerEnv: hasStandardBrowserWebWorkerEnv, + hasStandardBrowserEnv: hasStandardBrowserEnv, + navigator: _navigator, + origin: origin +}); + +const platform = { + ...utils, + ...platform$1 +}; + +function toURLEncodedForm(data, options) { + return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({ + visitor: function(value, key, path, helpers) { + if (platform.isNode && utils$1.isBuffer(value)) { + this.append(key, value.toString('base64')); + return false; + } + + return helpers.defaultVisitor.apply(this, arguments); + } + }, options)); +} + +/** + * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z'] + * + * @param {string} name - The name of the property to get. + * + * @returns An array of strings. + */ +function parsePropPath(name) { + // foo[x][y][z] + // foo.x.y.z + // foo-x-y-z + // foo x y z + return utils$1.matchAll(/\w+|\[(\w*)]/g, name).map(match => { + return match[0] === '[]' ? '' : match[1] || match[0]; + }); +} + +/** + * Convert an array to an object. + * + * @param {Array} arr - The array to convert to an object. + * + * @returns An object with the same keys and values as the array. + */ +function arrayToObject(arr) { + const obj = {}; + const keys = Object.keys(arr); + let i; + const len = keys.length; + let key; + for (i = 0; i < len; i++) { + key = keys[i]; + obj[key] = arr[key]; + } + return obj; +} + +/** + * It takes a FormData object and returns a JavaScript object + * + * @param {string} formData The FormData object to convert to JSON. + * + * @returns {Object | null} The converted object. + */ +function formDataToJSON(formData) { + function buildPath(path, value, target, index) { + let name = path[index++]; + + if (name === '__proto__') return true; + + const isNumericKey = Number.isFinite(+name); + const isLast = index >= path.length; + name = !name && utils$1.isArray(target) ? target.length : name; + + if (isLast) { + if (utils$1.hasOwnProp(target, name)) { + target[name] = [target[name], value]; + } else { + target[name] = value; + } + + return !isNumericKey; + } + + if (!target[name] || !utils$1.isObject(target[name])) { + target[name] = []; + } + + const result = buildPath(path, value, target[name], index); + + if (result && utils$1.isArray(target[name])) { + target[name] = arrayToObject(target[name]); + } + + return !isNumericKey; + } + + if (utils$1.isFormData(formData) && utils$1.isFunction(formData.entries)) { + const obj = {}; + + utils$1.forEachEntry(formData, (name, value) => { + buildPath(parsePropPath(name), value, obj, 0); + }); + + return obj; + } + + return null; +} + +/** + * It takes a string, tries to parse it, and if it fails, it returns the stringified version + * of the input + * + * @param {any} rawValue - The value to be stringified. + * @param {Function} parser - A function that parses a string into a JavaScript object. + * @param {Function} encoder - A function that takes a value and returns a string. + * + * @returns {string} A stringified version of the rawValue. + */ +function stringifySafely(rawValue, parser, encoder) { + if (utils$1.isString(rawValue)) { + try { + (parser || JSON.parse)(rawValue); + return utils$1.trim(rawValue); + } catch (e) { + if (e.name !== 'SyntaxError') { + throw e; + } + } + } + + return (encoder || JSON.stringify)(rawValue); +} + +const defaults = { + + transitional: transitionalDefaults, + + adapter: ['xhr', 'http', 'fetch'], + + transformRequest: [function transformRequest(data, headers) { + const contentType = headers.getContentType() || ''; + const hasJSONContentType = contentType.indexOf('application/json') > -1; + const isObjectPayload = utils$1.isObject(data); + + if (isObjectPayload && utils$1.isHTMLForm(data)) { + data = new FormData(data); + } + + const isFormData = utils$1.isFormData(data); + + if (isFormData) { + return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data; + } + + if (utils$1.isArrayBuffer(data) || + utils$1.isBuffer(data) || + utils$1.isStream(data) || + utils$1.isFile(data) || + utils$1.isBlob(data) || + utils$1.isReadableStream(data) + ) { + return data; + } + if (utils$1.isArrayBufferView(data)) { + return data.buffer; + } + if (utils$1.isURLSearchParams(data)) { + headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false); + return data.toString(); + } + + let isFileList; + + if (isObjectPayload) { + if (contentType.indexOf('application/x-www-form-urlencoded') > -1) { + return toURLEncodedForm(data, this.formSerializer).toString(); + } + + if ((isFileList = utils$1.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { + const _FormData = this.env && this.env.FormData; + + return toFormData( + isFileList ? {'files[]': data} : data, + _FormData && new _FormData(), + this.formSerializer + ); + } + } + + if (isObjectPayload || hasJSONContentType ) { + headers.setContentType('application/json', false); + return stringifySafely(data); + } + + return data; + }], + + transformResponse: [function transformResponse(data) { + const transitional = this.transitional || defaults.transitional; + const forcedJSONParsing = transitional && transitional.forcedJSONParsing; + const JSONRequested = this.responseType === 'json'; + + if (utils$1.isResponse(data) || utils$1.isReadableStream(data)) { + return data; + } + + if (data && utils$1.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) { + const silentJSONParsing = transitional && transitional.silentJSONParsing; + const strictJSONParsing = !silentJSONParsing && JSONRequested; + + try { + return JSON.parse(data); + } catch (e) { + if (strictJSONParsing) { + if (e.name === 'SyntaxError') { + throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response); + } + throw e; + } + } + } + + return data; + }], + + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + maxBodyLength: -1, + + env: { + FormData: platform.classes.FormData, + Blob: platform.classes.Blob + }, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + }, + + headers: { + common: { + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': undefined + } + } +}; + +utils$1.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => { + defaults.headers[method] = {}; +}); + +const defaults$1 = defaults; + +// RawAxiosHeaders whose duplicates are ignored by node +// c.f. https://nodejs.org/api/http.html#http_message_headers +const ignoreDuplicateOf = utils$1.toObjectSet([ + 'age', 'authorization', 'content-length', 'content-type', 'etag', + 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', + 'last-modified', 'location', 'max-forwards', 'proxy-authorization', + 'referer', 'retry-after', 'user-agent' +]); + +/** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} rawHeaders Headers needing to be parsed + * + * @returns {Object} Headers parsed into an object + */ +const parseHeaders = rawHeaders => { + const parsed = {}; + let key; + let val; + let i; + + rawHeaders && rawHeaders.split('\n').forEach(function parser(line) { + i = line.indexOf(':'); + key = line.substring(0, i).trim().toLowerCase(); + val = line.substring(i + 1).trim(); + + if (!key || (parsed[key] && ignoreDuplicateOf[key])) { + return; + } + + if (key === 'set-cookie') { + if (parsed[key]) { + parsed[key].push(val); + } else { + parsed[key] = [val]; + } + } else { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + }); + + return parsed; +}; + +const $internals = Symbol('internals'); + +function normalizeHeader(header) { + return header && String(header).trim().toLowerCase(); +} + +function normalizeValue(value) { + if (value === false || value == null) { + return value; + } + + return utils$1.isArray(value) ? value.map(normalizeValue) : String(value); +} + +function parseTokens(str) { + const tokens = Object.create(null); + const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g; + let match; + + while ((match = tokensRE.exec(str))) { + tokens[match[1]] = match[2]; + } + + return tokens; +} + +const isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim()); + +function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) { + if (utils$1.isFunction(filter)) { + return filter.call(this, value, header); + } + + if (isHeaderNameFilter) { + value = header; + } + + if (!utils$1.isString(value)) return; + + if (utils$1.isString(filter)) { + return value.indexOf(filter) !== -1; + } + + if (utils$1.isRegExp(filter)) { + return filter.test(value); + } +} + +function formatHeader(header) { + return header.trim() + .toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => { + return char.toUpperCase() + str; + }); +} + +function buildAccessors(obj, header) { + const accessorName = utils$1.toCamelCase(' ' + header); + + ['get', 'set', 'has'].forEach(methodName => { + Object.defineProperty(obj, methodName + accessorName, { + value: function(arg1, arg2, arg3) { + return this[methodName].call(this, header, arg1, arg2, arg3); + }, + configurable: true + }); + }); +} + +class AxiosHeaders { + constructor(headers) { + headers && this.set(headers); + } + + set(header, valueOrRewrite, rewrite) { + const self = this; + + function setHeader(_value, _header, _rewrite) { + const lHeader = normalizeHeader(_header); + + if (!lHeader) { + throw new Error('header name must be a non-empty string'); + } + + const key = utils$1.findKey(self, lHeader); + + if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) { + self[key || _header] = normalizeValue(_value); + } + } + + const setHeaders = (headers, _rewrite) => + utils$1.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite)); + + if (utils$1.isPlainObject(header) || header instanceof this.constructor) { + setHeaders(header, valueOrRewrite); + } else if(utils$1.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { + setHeaders(parseHeaders(header), valueOrRewrite); + } else if (utils$1.isObject(header) && utils$1.isIterable(header)) { + let obj = {}, dest, key; + for (const entry of header) { + if (!utils$1.isArray(entry)) { + throw TypeError('Object iterator must return a key-value pair'); + } + + obj[key = entry[0]] = (dest = obj[key]) ? + (utils$1.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1]; + } + + setHeaders(obj, valueOrRewrite); + } else { + header != null && setHeader(valueOrRewrite, header, rewrite); + } + + return this; + } + + get(header, parser) { + header = normalizeHeader(header); + + if (header) { + const key = utils$1.findKey(this, header); + + if (key) { + const value = this[key]; + + if (!parser) { + return value; + } + + if (parser === true) { + return parseTokens(value); + } + + if (utils$1.isFunction(parser)) { + return parser.call(this, value, key); + } + + if (utils$1.isRegExp(parser)) { + return parser.exec(value); + } + + throw new TypeError('parser must be boolean|regexp|function'); + } + } + } + + has(header, matcher) { + header = normalizeHeader(header); + + if (header) { + const key = utils$1.findKey(this, header); + + return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher))); + } + + return false; + } + + delete(header, matcher) { + const self = this; + let deleted = false; + + function deleteHeader(_header) { + _header = normalizeHeader(_header); + + if (_header) { + const key = utils$1.findKey(self, _header); + + if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) { + delete self[key]; + + deleted = true; + } + } + } + + if (utils$1.isArray(header)) { + header.forEach(deleteHeader); + } else { + deleteHeader(header); + } + + return deleted; + } + + clear(matcher) { + const keys = Object.keys(this); + let i = keys.length; + let deleted = false; + + while (i--) { + const key = keys[i]; + if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) { + delete this[key]; + deleted = true; + } + } + + return deleted; + } + + normalize(format) { + const self = this; + const headers = {}; + + utils$1.forEach(this, (value, header) => { + const key = utils$1.findKey(headers, header); + + if (key) { + self[key] = normalizeValue(value); + delete self[header]; + return; + } + + const normalized = format ? formatHeader(header) : String(header).trim(); + + if (normalized !== header) { + delete self[header]; + } + + self[normalized] = normalizeValue(value); + + headers[normalized] = true; + }); + + return this; + } + + concat(...targets) { + return this.constructor.concat(this, ...targets); + } + + toJSON(asStrings) { + const obj = Object.create(null); + + utils$1.forEach(this, (value, header) => { + value != null && value !== false && (obj[header] = asStrings && utils$1.isArray(value) ? value.join(', ') : value); + }); + + return obj; + } + + [Symbol.iterator]() { + return Object.entries(this.toJSON())[Symbol.iterator](); + } + + toString() { + return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\n'); + } + + getSetCookie() { + return this.get("set-cookie") || []; + } + + get [Symbol.toStringTag]() { + return 'AxiosHeaders'; + } + + static from(thing) { + return thing instanceof this ? thing : new this(thing); + } + + static concat(first, ...targets) { + const computed = new this(first); + + targets.forEach((target) => computed.set(target)); + + return computed; + } + + static accessor(header) { + const internals = this[$internals] = (this[$internals] = { + accessors: {} + }); + + const accessors = internals.accessors; + const prototype = this.prototype; + + function defineAccessor(_header) { + const lHeader = normalizeHeader(_header); + + if (!accessors[lHeader]) { + buildAccessors(prototype, _header); + accessors[lHeader] = true; + } + } + + utils$1.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header); + + return this; + } +} + +AxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']); + +// reserved names hotfix +utils$1.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => { + let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set` + return { + get: () => value, + set(headerValue) { + this[mapped] = headerValue; + } + } +}); + +utils$1.freezeMethods(AxiosHeaders); + +const AxiosHeaders$1 = AxiosHeaders; + +/** + * Transform the data for a request or a response + * + * @param {Array|Function} fns A single function or Array of functions + * @param {?Object} response The response object + * + * @returns {*} The resulting transformed data + */ +function transformData(fns, response) { + const config = this || defaults$1; + const context = response || config; + const headers = AxiosHeaders$1.from(context.headers); + let data = context.data; + + utils$1.forEach(fns, function transform(fn) { + data = fn.call(config, data, headers.normalize(), response ? response.status : undefined); + }); + + headers.normalize(); + + return data; +} + +function isCancel(value) { + return !!(value && value.__CANCEL__); +} + +/** + * A `CanceledError` is an object that is thrown when an operation is canceled. + * + * @param {string=} message The message. + * @param {Object=} config The config. + * @param {Object=} request The request. + * + * @returns {CanceledError} The created error. + */ +function CanceledError(message, config, request) { + // eslint-disable-next-line no-eq-null,eqeqeq + AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request); + this.name = 'CanceledError'; +} + +utils$1.inherits(CanceledError, AxiosError, { + __CANCEL__: true +}); + +/** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + * + * @returns {object} The response. + */ +function settle(resolve, reject, response) { + const validateStatus = response.config.validateStatus; + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(new AxiosError( + 'Request failed with status code ' + response.status, + [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], + response.config, + response.request, + response + )); + } +} + +/** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ +function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); +} + +/** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * + * @returns {string} The combined URL + */ +function combineURLs(baseURL, relativeURL) { + return relativeURL + ? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '') + : baseURL; +} + +/** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * + * @returns {string} The combined full path + */ +function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) { + let isRelativeUrl = !isAbsoluteURL(requestedURL); + if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; +} + +const VERSION = "1.9.0"; + +function parseProtocol(url) { + const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); + return match && match[1] || ''; +} + +const DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/; + +/** + * Parse data uri to a Buffer or Blob + * + * @param {String} uri + * @param {?Boolean} asBlob + * @param {?Object} options + * @param {?Function} options.Blob + * + * @returns {Buffer|Blob} + */ +function fromDataURI(uri, asBlob, options) { + const _Blob = options && options.Blob || platform.classes.Blob; + const protocol = parseProtocol(uri); + + if (asBlob === undefined && _Blob) { + asBlob = true; + } + + if (protocol === 'data') { + uri = protocol.length ? uri.slice(protocol.length + 1) : uri; + + const match = DATA_URL_PATTERN.exec(uri); + + if (!match) { + throw new AxiosError('Invalid URL', AxiosError.ERR_INVALID_URL); + } + + const mime = match[1]; + const isBase64 = match[2]; + const body = match[3]; + const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? 'base64' : 'utf8'); + + if (asBlob) { + if (!_Blob) { + throw new AxiosError('Blob is not supported', AxiosError.ERR_NOT_SUPPORT); + } + + return new _Blob([buffer], {type: mime}); + } + + return buffer; + } + + throw new AxiosError('Unsupported protocol ' + protocol, AxiosError.ERR_NOT_SUPPORT); +} + +const kInternals = Symbol('internals'); + +class AxiosTransformStream extends stream__default["default"].Transform{ + constructor(options) { + options = utils$1.toFlatObject(options, { + maxRate: 0, + chunkSize: 64 * 1024, + minChunkSize: 100, + timeWindow: 500, + ticksRate: 2, + samplesCount: 15 + }, null, (prop, source) => { + return !utils$1.isUndefined(source[prop]); + }); + + super({ + readableHighWaterMark: options.chunkSize + }); + + const internals = this[kInternals] = { + timeWindow: options.timeWindow, + chunkSize: options.chunkSize, + maxRate: options.maxRate, + minChunkSize: options.minChunkSize, + bytesSeen: 0, + isCaptured: false, + notifiedBytesLoaded: 0, + ts: Date.now(), + bytes: 0, + onReadCallback: null + }; + + this.on('newListener', event => { + if (event === 'progress') { + if (!internals.isCaptured) { + internals.isCaptured = true; + } + } + }); + } + + _read(size) { + const internals = this[kInternals]; + + if (internals.onReadCallback) { + internals.onReadCallback(); + } + + return super._read(size); + } + + _transform(chunk, encoding, callback) { + const internals = this[kInternals]; + const maxRate = internals.maxRate; + + const readableHighWaterMark = this.readableHighWaterMark; + + const timeWindow = internals.timeWindow; + + const divider = 1000 / timeWindow; + const bytesThreshold = (maxRate / divider); + const minChunkSize = internals.minChunkSize !== false ? Math.max(internals.minChunkSize, bytesThreshold * 0.01) : 0; + + const pushChunk = (_chunk, _callback) => { + const bytes = Buffer.byteLength(_chunk); + internals.bytesSeen += bytes; + internals.bytes += bytes; + + internals.isCaptured && this.emit('progress', internals.bytesSeen); + + if (this.push(_chunk)) { + process.nextTick(_callback); + } else { + internals.onReadCallback = () => { + internals.onReadCallback = null; + process.nextTick(_callback); + }; + } + }; + + const transformChunk = (_chunk, _callback) => { + const chunkSize = Buffer.byteLength(_chunk); + let chunkRemainder = null; + let maxChunkSize = readableHighWaterMark; + let bytesLeft; + let passed = 0; + + if (maxRate) { + const now = Date.now(); + + if (!internals.ts || (passed = (now - internals.ts)) >= timeWindow) { + internals.ts = now; + bytesLeft = bytesThreshold - internals.bytes; + internals.bytes = bytesLeft < 0 ? -bytesLeft : 0; + passed = 0; + } + + bytesLeft = bytesThreshold - internals.bytes; + } + + if (maxRate) { + if (bytesLeft <= 0) { + // next time window + return setTimeout(() => { + _callback(null, _chunk); + }, timeWindow - passed); + } + + if (bytesLeft < maxChunkSize) { + maxChunkSize = bytesLeft; + } + } + + if (maxChunkSize && chunkSize > maxChunkSize && (chunkSize - maxChunkSize) > minChunkSize) { + chunkRemainder = _chunk.subarray(maxChunkSize); + _chunk = _chunk.subarray(0, maxChunkSize); + } + + pushChunk(_chunk, chunkRemainder ? () => { + process.nextTick(_callback, null, chunkRemainder); + } : _callback); + }; + + transformChunk(chunk, function transformNextChunk(err, _chunk) { + if (err) { + return callback(err); + } + + if (_chunk) { + transformChunk(_chunk, transformNextChunk); + } else { + callback(null); + } + }); + } +} + +const AxiosTransformStream$1 = AxiosTransformStream; + +const {asyncIterator} = Symbol; + +const readBlob = async function* (blob) { + if (blob.stream) { + yield* blob.stream(); + } else if (blob.arrayBuffer) { + yield await blob.arrayBuffer(); + } else if (blob[asyncIterator]) { + yield* blob[asyncIterator](); + } else { + yield blob; + } +}; + +const readBlob$1 = readBlob; + +const BOUNDARY_ALPHABET = platform.ALPHABET.ALPHA_DIGIT + '-_'; + +const textEncoder = typeof TextEncoder === 'function' ? new TextEncoder() : new util__default["default"].TextEncoder(); + +const CRLF = '\r\n'; +const CRLF_BYTES = textEncoder.encode(CRLF); +const CRLF_BYTES_COUNT = 2; + +class FormDataPart { + constructor(name, value) { + const {escapeName} = this.constructor; + const isStringValue = utils$1.isString(value); + + let headers = `Content-Disposition: form-data; name="${escapeName(name)}"${ + !isStringValue && value.name ? `; filename="${escapeName(value.name)}"` : '' + }${CRLF}`; + + if (isStringValue) { + value = textEncoder.encode(String(value).replace(/\r?\n|\r\n?/g, CRLF)); + } else { + headers += `Content-Type: ${value.type || "application/octet-stream"}${CRLF}`; + } + + this.headers = textEncoder.encode(headers + CRLF); + + this.contentLength = isStringValue ? value.byteLength : value.size; + + this.size = this.headers.byteLength + this.contentLength + CRLF_BYTES_COUNT; + + this.name = name; + this.value = value; + } + + async *encode(){ + yield this.headers; + + const {value} = this; + + if(utils$1.isTypedArray(value)) { + yield value; + } else { + yield* readBlob$1(value); + } + + yield CRLF_BYTES; + } + + static escapeName(name) { + return String(name).replace(/[\r\n"]/g, (match) => ({ + '\r' : '%0D', + '\n' : '%0A', + '"' : '%22', + }[match])); + } +} + +const formDataToStream = (form, headersHandler, options) => { + const { + tag = 'form-data-boundary', + size = 25, + boundary = tag + '-' + platform.generateString(size, BOUNDARY_ALPHABET) + } = options || {}; + + if(!utils$1.isFormData(form)) { + throw TypeError('FormData instance required'); + } + + if (boundary.length < 1 || boundary.length > 70) { + throw Error('boundary must be 10-70 characters long') + } + + const boundaryBytes = textEncoder.encode('--' + boundary + CRLF); + const footerBytes = textEncoder.encode('--' + boundary + '--' + CRLF); + let contentLength = footerBytes.byteLength; + + const parts = Array.from(form.entries()).map(([name, value]) => { + const part = new FormDataPart(name, value); + contentLength += part.size; + return part; + }); + + contentLength += boundaryBytes.byteLength * parts.length; + + contentLength = utils$1.toFiniteNumber(contentLength); + + const computedHeaders = { + 'Content-Type': `multipart/form-data; boundary=${boundary}` + }; + + if (Number.isFinite(contentLength)) { + computedHeaders['Content-Length'] = contentLength; + } + + headersHandler && headersHandler(computedHeaders); + + return stream.Readable.from((async function *() { + for(const part of parts) { + yield boundaryBytes; + yield* part.encode(); + } + + yield footerBytes; + })()); +}; + +const formDataToStream$1 = formDataToStream; + +class ZlibHeaderTransformStream extends stream__default["default"].Transform { + __transform(chunk, encoding, callback) { + this.push(chunk); + callback(); + } + + _transform(chunk, encoding, callback) { + if (chunk.length !== 0) { + this._transform = this.__transform; + + // Add Default Compression headers if no zlib headers are present + if (chunk[0] !== 120) { // Hex: 78 + const header = Buffer.alloc(2); + header[0] = 120; // Hex: 78 + header[1] = 156; // Hex: 9C + this.push(header, encoding); + } + } + + this.__transform(chunk, encoding, callback); + } +} + +const ZlibHeaderTransformStream$1 = ZlibHeaderTransformStream; + +const callbackify = (fn, reducer) => { + return utils$1.isAsyncFn(fn) ? function (...args) { + const cb = args.pop(); + fn.apply(this, args).then((value) => { + try { + reducer ? cb(null, ...reducer(value)) : cb(null, value); + } catch (err) { + cb(err); + } + }, cb); + } : fn; +}; + +const callbackify$1 = callbackify; + +/** + * Calculate data maxRate + * @param {Number} [samplesCount= 10] + * @param {Number} [min= 1000] + * @returns {Function} + */ +function speedometer(samplesCount, min) { + samplesCount = samplesCount || 10; + const bytes = new Array(samplesCount); + const timestamps = new Array(samplesCount); + let head = 0; + let tail = 0; + let firstSampleTS; + + min = min !== undefined ? min : 1000; + + return function push(chunkLength) { + const now = Date.now(); + + const startedAt = timestamps[tail]; + + if (!firstSampleTS) { + firstSampleTS = now; + } + + bytes[head] = chunkLength; + timestamps[head] = now; + + let i = tail; + let bytesCount = 0; + + while (i !== head) { + bytesCount += bytes[i++]; + i = i % samplesCount; + } + + head = (head + 1) % samplesCount; + + if (head === tail) { + tail = (tail + 1) % samplesCount; + } + + if (now - firstSampleTS < min) { + return; + } + + const passed = startedAt && now - startedAt; + + return passed ? Math.round(bytesCount * 1000 / passed) : undefined; + }; +} + +/** + * Throttle decorator + * @param {Function} fn + * @param {Number} freq + * @return {Function} + */ +function throttle(fn, freq) { + let timestamp = 0; + let threshold = 1000 / freq; + let lastArgs; + let timer; + + const invoke = (args, now = Date.now()) => { + timestamp = now; + lastArgs = null; + if (timer) { + clearTimeout(timer); + timer = null; + } + fn.apply(null, args); + }; + + const throttled = (...args) => { + const now = Date.now(); + const passed = now - timestamp; + if ( passed >= threshold) { + invoke(args, now); + } else { + lastArgs = args; + if (!timer) { + timer = setTimeout(() => { + timer = null; + invoke(lastArgs); + }, threshold - passed); + } + } + }; + + const flush = () => lastArgs && invoke(lastArgs); + + return [throttled, flush]; +} + +const progressEventReducer = (listener, isDownloadStream, freq = 3) => { + let bytesNotified = 0; + const _speedometer = speedometer(50, 250); + + return throttle(e => { + const loaded = e.loaded; + const total = e.lengthComputable ? e.total : undefined; + const progressBytes = loaded - bytesNotified; + const rate = _speedometer(progressBytes); + const inRange = loaded <= total; + + bytesNotified = loaded; + + const data = { + loaded, + total, + progress: total ? (loaded / total) : undefined, + bytes: progressBytes, + rate: rate ? rate : undefined, + estimated: rate && total && inRange ? (total - loaded) / rate : undefined, + event: e, + lengthComputable: total != null, + [isDownloadStream ? 'download' : 'upload']: true + }; + + listener(data); + }, freq); +}; + +const progressEventDecorator = (total, throttled) => { + const lengthComputable = total != null; + + return [(loaded) => throttled[0]({ + lengthComputable, + total, + loaded + }), throttled[1]]; +}; + +const asyncDecorator = (fn) => (...args) => utils$1.asap(() => fn(...args)); + +const zlibOptions = { + flush: zlib__default["default"].constants.Z_SYNC_FLUSH, + finishFlush: zlib__default["default"].constants.Z_SYNC_FLUSH +}; + +const brotliOptions = { + flush: zlib__default["default"].constants.BROTLI_OPERATION_FLUSH, + finishFlush: zlib__default["default"].constants.BROTLI_OPERATION_FLUSH +}; + +const isBrotliSupported = utils$1.isFunction(zlib__default["default"].createBrotliDecompress); + +const {http: httpFollow, https: httpsFollow} = followRedirects__default["default"]; + +const isHttps = /https:?/; + +const supportedProtocols = platform.protocols.map(protocol => { + return protocol + ':'; +}); + +const flushOnFinish = (stream, [throttled, flush]) => { + stream + .on('end', flush) + .on('error', flush); + + return throttled; +}; + +/** + * If the proxy or config beforeRedirects functions are defined, call them with the options + * object. + * + * @param {Object} options - The options object that was passed to the request. + * + * @returns {Object} + */ +function dispatchBeforeRedirect(options, responseDetails) { + if (options.beforeRedirects.proxy) { + options.beforeRedirects.proxy(options); + } + if (options.beforeRedirects.config) { + options.beforeRedirects.config(options, responseDetails); + } +} + +/** + * If the proxy or config afterRedirects functions are defined, call them with the options + * + * @param {http.ClientRequestArgs} options + * @param {AxiosProxyConfig} configProxy configuration from Axios options object + * @param {string} location + * + * @returns {http.ClientRequestArgs} + */ +function setProxy(options, configProxy, location) { + let proxy = configProxy; + if (!proxy && proxy !== false) { + const proxyUrl = proxyFromEnv__default["default"].getProxyForUrl(location); + if (proxyUrl) { + proxy = new URL(proxyUrl); + } + } + if (proxy) { + // Basic proxy authorization + if (proxy.username) { + proxy.auth = (proxy.username || '') + ':' + (proxy.password || ''); + } + + if (proxy.auth) { + // Support proxy auth object form + if (proxy.auth.username || proxy.auth.password) { + proxy.auth = (proxy.auth.username || '') + ':' + (proxy.auth.password || ''); + } + const base64 = Buffer + .from(proxy.auth, 'utf8') + .toString('base64'); + options.headers['Proxy-Authorization'] = 'Basic ' + base64; + } + + options.headers.host = options.hostname + (options.port ? ':' + options.port : ''); + const proxyHost = proxy.hostname || proxy.host; + options.hostname = proxyHost; + // Replace 'host' since options is not a URL object + options.host = proxyHost; + options.port = proxy.port; + options.path = location; + if (proxy.protocol) { + options.protocol = proxy.protocol.includes(':') ? proxy.protocol : `${proxy.protocol}:`; + } + } + + options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) { + // Configure proxy for redirected request, passing the original config proxy to apply + // the exact same logic as if the redirected request was performed by axios directly. + setProxy(redirectOptions, configProxy, redirectOptions.href); + }; +} + +const isHttpAdapterSupported = typeof process !== 'undefined' && utils$1.kindOf(process) === 'process'; + +// temporary hotfix + +const wrapAsync = (asyncExecutor) => { + return new Promise((resolve, reject) => { + let onDone; + let isDone; + + const done = (value, isRejected) => { + if (isDone) return; + isDone = true; + onDone && onDone(value, isRejected); + }; + + const _resolve = (value) => { + done(value); + resolve(value); + }; + + const _reject = (reason) => { + done(reason, true); + reject(reason); + }; + + asyncExecutor(_resolve, _reject, (onDoneHandler) => (onDone = onDoneHandler)).catch(_reject); + }) +}; + +const resolveFamily = ({address, family}) => { + if (!utils$1.isString(address)) { + throw TypeError('address must be a string'); + } + return ({ + address, + family: family || (address.indexOf('.') < 0 ? 6 : 4) + }); +}; + +const buildAddressEntry = (address, family) => resolveFamily(utils$1.isObject(address) ? address : {address, family}); + +/*eslint consistent-return:0*/ +const httpAdapter = isHttpAdapterSupported && function httpAdapter(config) { + return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) { + let {data, lookup, family} = config; + const {responseType, responseEncoding} = config; + const method = config.method.toUpperCase(); + let isDone; + let rejected = false; + let req; + + if (lookup) { + const _lookup = callbackify$1(lookup, (value) => utils$1.isArray(value) ? value : [value]); + // hotfix to support opt.all option which is required for node 20.x + lookup = (hostname, opt, cb) => { + _lookup(hostname, opt, (err, arg0, arg1) => { + if (err) { + return cb(err); + } + + const addresses = utils$1.isArray(arg0) ? arg0.map(addr => buildAddressEntry(addr)) : [buildAddressEntry(arg0, arg1)]; + + opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family); + }); + }; + } + + // temporary internal emitter until the AxiosRequest class will be implemented + const emitter = new events.EventEmitter(); + + const onFinished = () => { + if (config.cancelToken) { + config.cancelToken.unsubscribe(abort); + } + + if (config.signal) { + config.signal.removeEventListener('abort', abort); + } + + emitter.removeAllListeners(); + }; + + onDone((value, isRejected) => { + isDone = true; + if (isRejected) { + rejected = true; + onFinished(); + } + }); + + function abort(reason) { + emitter.emit('abort', !reason || reason.type ? new CanceledError(null, config, req) : reason); + } + + emitter.once('abort', reject); + + if (config.cancelToken || config.signal) { + config.cancelToken && config.cancelToken.subscribe(abort); + if (config.signal) { + config.signal.aborted ? abort() : config.signal.addEventListener('abort', abort); + } + } + + // Parse url + const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls); + const parsed = new URL(fullPath, platform.hasBrowserEnv ? platform.origin : undefined); + const protocol = parsed.protocol || supportedProtocols[0]; + + if (protocol === 'data:') { + let convertedData; + + if (method !== 'GET') { + return settle(resolve, reject, { + status: 405, + statusText: 'method not allowed', + headers: {}, + config + }); + } + + try { + convertedData = fromDataURI(config.url, responseType === 'blob', { + Blob: config.env && config.env.Blob + }); + } catch (err) { + throw AxiosError.from(err, AxiosError.ERR_BAD_REQUEST, config); + } + + if (responseType === 'text') { + convertedData = convertedData.toString(responseEncoding); + + if (!responseEncoding || responseEncoding === 'utf8') { + convertedData = utils$1.stripBOM(convertedData); + } + } else if (responseType === 'stream') { + convertedData = stream__default["default"].Readable.from(convertedData); + } + + return settle(resolve, reject, { + data: convertedData, + status: 200, + statusText: 'OK', + headers: new AxiosHeaders$1(), + config + }); + } + + if (supportedProtocols.indexOf(protocol) === -1) { + return reject(new AxiosError( + 'Unsupported protocol ' + protocol, + AxiosError.ERR_BAD_REQUEST, + config + )); + } + + const headers = AxiosHeaders$1.from(config.headers).normalize(); + + // Set User-Agent (required by some servers) + // See https://github.com/axios/axios/issues/69 + // User-Agent is specified; handle case where no UA header is desired + // Only set header if it hasn't been set in config + headers.set('User-Agent', 'axios/' + VERSION, false); + + const {onUploadProgress, onDownloadProgress} = config; + const maxRate = config.maxRate; + let maxUploadRate = undefined; + let maxDownloadRate = undefined; + + // support for spec compliant FormData objects + if (utils$1.isSpecCompliantForm(data)) { + const userBoundary = headers.getContentType(/boundary=([-_\w\d]{10,70})/i); + + data = formDataToStream$1(data, (formHeaders) => { + headers.set(formHeaders); + }, { + tag: `axios-${VERSION}-boundary`, + boundary: userBoundary && userBoundary[1] || undefined + }); + // support for https://www.npmjs.com/package/form-data api + } else if (utils$1.isFormData(data) && utils$1.isFunction(data.getHeaders)) { + headers.set(data.getHeaders()); + + if (!headers.hasContentLength()) { + try { + const knownLength = await util__default["default"].promisify(data.getLength).call(data); + Number.isFinite(knownLength) && knownLength >= 0 && headers.setContentLength(knownLength); + /*eslint no-empty:0*/ + } catch (e) { + } + } + } else if (utils$1.isBlob(data) || utils$1.isFile(data)) { + data.size && headers.setContentType(data.type || 'application/octet-stream'); + headers.setContentLength(data.size || 0); + data = stream__default["default"].Readable.from(readBlob$1(data)); + } else if (data && !utils$1.isStream(data)) { + if (Buffer.isBuffer(data)) ; else if (utils$1.isArrayBuffer(data)) { + data = Buffer.from(new Uint8Array(data)); + } else if (utils$1.isString(data)) { + data = Buffer.from(data, 'utf-8'); + } else { + return reject(new AxiosError( + 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream', + AxiosError.ERR_BAD_REQUEST, + config + )); + } + + // Add Content-Length header if data exists + headers.setContentLength(data.length, false); + + if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) { + return reject(new AxiosError( + 'Request body larger than maxBodyLength limit', + AxiosError.ERR_BAD_REQUEST, + config + )); + } + } + + const contentLength = utils$1.toFiniteNumber(headers.getContentLength()); + + if (utils$1.isArray(maxRate)) { + maxUploadRate = maxRate[0]; + maxDownloadRate = maxRate[1]; + } else { + maxUploadRate = maxDownloadRate = maxRate; + } + + if (data && (onUploadProgress || maxUploadRate)) { + if (!utils$1.isStream(data)) { + data = stream__default["default"].Readable.from(data, {objectMode: false}); + } + + data = stream__default["default"].pipeline([data, new AxiosTransformStream$1({ + maxRate: utils$1.toFiniteNumber(maxUploadRate) + })], utils$1.noop); + + onUploadProgress && data.on('progress', flushOnFinish( + data, + progressEventDecorator( + contentLength, + progressEventReducer(asyncDecorator(onUploadProgress), false, 3) + ) + )); + } + + // HTTP basic authentication + let auth = undefined; + if (config.auth) { + const username = config.auth.username || ''; + const password = config.auth.password || ''; + auth = username + ':' + password; + } + + if (!auth && parsed.username) { + const urlUsername = parsed.username; + const urlPassword = parsed.password; + auth = urlUsername + ':' + urlPassword; + } + + auth && headers.delete('authorization'); + + let path; + + try { + path = buildURL( + parsed.pathname + parsed.search, + config.params, + config.paramsSerializer + ).replace(/^\?/, ''); + } catch (err) { + const customErr = new Error(err.message); + customErr.config = config; + customErr.url = config.url; + customErr.exists = true; + return reject(customErr); + } + + headers.set( + 'Accept-Encoding', + 'gzip, compress, deflate' + (isBrotliSupported ? ', br' : ''), false + ); + + const options = { + path, + method: method, + headers: headers.toJSON(), + agents: { http: config.httpAgent, https: config.httpsAgent }, + auth, + protocol, + family, + beforeRedirect: dispatchBeforeRedirect, + beforeRedirects: {} + }; + + // cacheable-lookup integration hotfix + !utils$1.isUndefined(lookup) && (options.lookup = lookup); + + if (config.socketPath) { + options.socketPath = config.socketPath; + } else { + options.hostname = parsed.hostname.startsWith("[") ? parsed.hostname.slice(1, -1) : parsed.hostname; + options.port = parsed.port; + setProxy(options, config.proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path); + } + + let transport; + const isHttpsRequest = isHttps.test(options.protocol); + options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent; + if (config.transport) { + transport = config.transport; + } else if (config.maxRedirects === 0) { + transport = isHttpsRequest ? https__default["default"] : http__default["default"]; + } else { + if (config.maxRedirects) { + options.maxRedirects = config.maxRedirects; + } + if (config.beforeRedirect) { + options.beforeRedirects.config = config.beforeRedirect; + } + transport = isHttpsRequest ? httpsFollow : httpFollow; + } + + if (config.maxBodyLength > -1) { + options.maxBodyLength = config.maxBodyLength; + } else { + // follow-redirects does not skip comparison, so it should always succeed for axios -1 unlimited + options.maxBodyLength = Infinity; + } + + if (config.insecureHTTPParser) { + options.insecureHTTPParser = config.insecureHTTPParser; + } + + // Create the request + req = transport.request(options, function handleResponse(res) { + if (req.destroyed) return; + + const streams = [res]; + + const responseLength = +res.headers['content-length']; + + if (onDownloadProgress || maxDownloadRate) { + const transformStream = new AxiosTransformStream$1({ + maxRate: utils$1.toFiniteNumber(maxDownloadRate) + }); + + onDownloadProgress && transformStream.on('progress', flushOnFinish( + transformStream, + progressEventDecorator( + responseLength, + progressEventReducer(asyncDecorator(onDownloadProgress), true, 3) + ) + )); + + streams.push(transformStream); + } + + // decompress the response body transparently if required + let responseStream = res; + + // return the last request in case of redirects + const lastRequest = res.req || req; + + // if decompress disabled we should not decompress + if (config.decompress !== false && res.headers['content-encoding']) { + // if no content, but headers still say that it is encoded, + // remove the header not confuse downstream operations + if (method === 'HEAD' || res.statusCode === 204) { + delete res.headers['content-encoding']; + } + + switch ((res.headers['content-encoding'] || '').toLowerCase()) { + /*eslint default-case:0*/ + case 'gzip': + case 'x-gzip': + case 'compress': + case 'x-compress': + // add the unzipper to the body stream processing pipeline + streams.push(zlib__default["default"].createUnzip(zlibOptions)); + + // remove the content-encoding in order to not confuse downstream operations + delete res.headers['content-encoding']; + break; + case 'deflate': + streams.push(new ZlibHeaderTransformStream$1()); + + // add the unzipper to the body stream processing pipeline + streams.push(zlib__default["default"].createUnzip(zlibOptions)); + + // remove the content-encoding in order to not confuse downstream operations + delete res.headers['content-encoding']; + break; + case 'br': + if (isBrotliSupported) { + streams.push(zlib__default["default"].createBrotliDecompress(brotliOptions)); + delete res.headers['content-encoding']; + } + } + } + + responseStream = streams.length > 1 ? stream__default["default"].pipeline(streams, utils$1.noop) : streams[0]; + + const offListeners = stream__default["default"].finished(responseStream, () => { + offListeners(); + onFinished(); + }); + + const response = { + status: res.statusCode, + statusText: res.statusMessage, + headers: new AxiosHeaders$1(res.headers), + config, + request: lastRequest + }; + + if (responseType === 'stream') { + response.data = responseStream; + settle(resolve, reject, response); + } else { + const responseBuffer = []; + let totalResponseBytes = 0; + + responseStream.on('data', function handleStreamData(chunk) { + responseBuffer.push(chunk); + totalResponseBytes += chunk.length; + + // make sure the content length is not over the maxContentLength if specified + if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) { + // stream.destroy() emit aborted event before calling reject() on Node.js v16 + rejected = true; + responseStream.destroy(); + reject(new AxiosError('maxContentLength size of ' + config.maxContentLength + ' exceeded', + AxiosError.ERR_BAD_RESPONSE, config, lastRequest)); + } + }); + + responseStream.on('aborted', function handlerStreamAborted() { + if (rejected) { + return; + } + + const err = new AxiosError( + 'stream has been aborted', + AxiosError.ERR_BAD_RESPONSE, + config, + lastRequest + ); + responseStream.destroy(err); + reject(err); + }); + + responseStream.on('error', function handleStreamError(err) { + if (req.destroyed) return; + reject(AxiosError.from(err, null, config, lastRequest)); + }); + + responseStream.on('end', function handleStreamEnd() { + try { + let responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer); + if (responseType !== 'arraybuffer') { + responseData = responseData.toString(responseEncoding); + if (!responseEncoding || responseEncoding === 'utf8') { + responseData = utils$1.stripBOM(responseData); + } + } + response.data = responseData; + } catch (err) { + return reject(AxiosError.from(err, null, config, response.request, response)); + } + settle(resolve, reject, response); + }); + } + + emitter.once('abort', err => { + if (!responseStream.destroyed) { + responseStream.emit('error', err); + responseStream.destroy(); + } + }); + }); + + emitter.once('abort', err => { + reject(err); + req.destroy(err); + }); + + // Handle errors + req.on('error', function handleRequestError(err) { + // @todo remove + // if (req.aborted && err.code !== AxiosError.ERR_FR_TOO_MANY_REDIRECTS) return; + reject(AxiosError.from(err, null, config, req)); + }); + + // set tcp keep alive to prevent drop connection by peer + req.on('socket', function handleRequestSocket(socket) { + // default interval of sending ack packet is 1 minute + socket.setKeepAlive(true, 1000 * 60); + }); + + // Handle request timeout + if (config.timeout) { + // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types. + const timeout = parseInt(config.timeout, 10); + + if (Number.isNaN(timeout)) { + reject(new AxiosError( + 'error trying to parse `config.timeout` to int', + AxiosError.ERR_BAD_OPTION_VALUE, + config, + req + )); + + return; + } + + // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system. + // And timer callback will be fired, and abort() will be invoked before connection, then get "socket hang up" and code ECONNRESET. + // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up. + // And then these socket which be hang up will devouring CPU little by little. + // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect. + req.setTimeout(timeout, function handleRequestTimeout() { + if (isDone) return; + let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded'; + const transitional = config.transitional || transitionalDefaults; + if (config.timeoutErrorMessage) { + timeoutErrorMessage = config.timeoutErrorMessage; + } + reject(new AxiosError( + timeoutErrorMessage, + transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED, + config, + req + )); + abort(); + }); + } + + + // Send the request + if (utils$1.isStream(data)) { + let ended = false; + let errored = false; + + data.on('end', () => { + ended = true; + }); + + data.once('error', err => { + errored = true; + req.destroy(err); + }); + + data.on('close', () => { + if (!ended && !errored) { + abort(new CanceledError('Request stream has been aborted', config, req)); + } + }); + + data.pipe(req); + } else { + req.end(data); + } + }); +}; + +const isURLSameOrigin = platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => { + url = new URL(url, platform.origin); + + return ( + origin.protocol === url.protocol && + origin.host === url.host && + (isMSIE || origin.port === url.port) + ); +})( + new URL(platform.origin), + platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent) +) : () => true; + +const cookies = platform.hasStandardBrowserEnv ? + + // Standard browser envs support document.cookie + { + write(name, value, expires, path, domain, secure) { + const cookie = [name + '=' + encodeURIComponent(value)]; + + utils$1.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString()); + + utils$1.isString(path) && cookie.push('path=' + path); + + utils$1.isString(domain) && cookie.push('domain=' + domain); + + secure === true && cookie.push('secure'); + + document.cookie = cookie.join('; '); + }, + + read(name) { + const match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); + return (match ? decodeURIComponent(match[3]) : null); + }, + + remove(name) { + this.write(name, '', Date.now() - 86400000); + } + } + + : + + // Non-standard browser env (web workers, react-native) lack needed support. + { + write() {}, + read() { + return null; + }, + remove() {} + }; + +const headersToObject = (thing) => thing instanceof AxiosHeaders$1 ? { ...thing } : thing; + +/** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * + * @returns {Object} New object resulting from merging config2 to config1 + */ +function mergeConfig(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {}; + const config = {}; + + function getMergedValue(target, source, prop, caseless) { + if (utils$1.isPlainObject(target) && utils$1.isPlainObject(source)) { + return utils$1.merge.call({caseless}, target, source); + } else if (utils$1.isPlainObject(source)) { + return utils$1.merge({}, source); + } else if (utils$1.isArray(source)) { + return source.slice(); + } + return source; + } + + // eslint-disable-next-line consistent-return + function mergeDeepProperties(a, b, prop , caseless) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(a, b, prop , caseless); + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a, prop , caseless); + } + } + + // eslint-disable-next-line consistent-return + function valueFromConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b); + } + } + + // eslint-disable-next-line consistent-return + function defaultToConfig2(a, b) { + if (!utils$1.isUndefined(b)) { + return getMergedValue(undefined, b); + } else if (!utils$1.isUndefined(a)) { + return getMergedValue(undefined, a); + } + } + + // eslint-disable-next-line consistent-return + function mergeDirectKeys(a, b, prop) { + if (prop in config2) { + return getMergedValue(a, b); + } else if (prop in config1) { + return getMergedValue(undefined, a); + } + } + + const mergeMap = { + url: valueFromConfig2, + method: valueFromConfig2, + data: valueFromConfig2, + baseURL: defaultToConfig2, + transformRequest: defaultToConfig2, + transformResponse: defaultToConfig2, + paramsSerializer: defaultToConfig2, + timeout: defaultToConfig2, + timeoutMessage: defaultToConfig2, + withCredentials: defaultToConfig2, + withXSRFToken: defaultToConfig2, + adapter: defaultToConfig2, + responseType: defaultToConfig2, + xsrfCookieName: defaultToConfig2, + xsrfHeaderName: defaultToConfig2, + onUploadProgress: defaultToConfig2, + onDownloadProgress: defaultToConfig2, + decompress: defaultToConfig2, + maxContentLength: defaultToConfig2, + maxBodyLength: defaultToConfig2, + beforeRedirect: defaultToConfig2, + transport: defaultToConfig2, + httpAgent: defaultToConfig2, + httpsAgent: defaultToConfig2, + cancelToken: defaultToConfig2, + socketPath: defaultToConfig2, + responseEncoding: defaultToConfig2, + validateStatus: mergeDirectKeys, + headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true) + }; + + utils$1.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) { + const merge = mergeMap[prop] || mergeDeepProperties; + const configValue = merge(config1[prop], config2[prop], prop); + (utils$1.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); + }); + + return config; +} + +const resolveConfig = (config) => { + const newConfig = mergeConfig({}, config); + + let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig; + + newConfig.headers = headers = AxiosHeaders$1.from(headers); + + newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer); + + // HTTP basic authentication + if (auth) { + headers.set('Authorization', 'Basic ' + + btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : '')) + ); + } + + let contentType; + + if (utils$1.isFormData(data)) { + if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) { + headers.setContentType(undefined); // Let the browser set it + } else if ((contentType = headers.getContentType()) !== false) { + // fix semicolon duplication issue for ReactNative FormData implementation + const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : []; + headers.setContentType([type || 'multipart/form-data', ...tokens].join('; ')); + } + } + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + + if (platform.hasStandardBrowserEnv) { + withXSRFToken && utils$1.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig)); + + if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) { + // Add xsrf header + const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName); + + if (xsrfValue) { + headers.set(xsrfHeaderName, xsrfValue); + } + } + } + + return newConfig; +}; + +const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined'; + +const xhrAdapter = isXHRAdapterSupported && function (config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + const _config = resolveConfig(config); + let requestData = _config.data; + const requestHeaders = AxiosHeaders$1.from(_config.headers).normalize(); + let {responseType, onUploadProgress, onDownloadProgress} = _config; + let onCanceled; + let uploadThrottled, downloadThrottled; + let flushUpload, flushDownload; + + function done() { + flushUpload && flushUpload(); // flush events + flushDownload && flushDownload(); // flush events + + _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled); + + _config.signal && _config.signal.removeEventListener('abort', onCanceled); + } + + let request = new XMLHttpRequest(); + + request.open(_config.method.toUpperCase(), _config.url, true); + + // Set the request timeout in MS + request.timeout = _config.timeout; + + function onloadend() { + if (!request) { + return; + } + // Prepare the response + const responseHeaders = AxiosHeaders$1.from( + 'getAllResponseHeaders' in request && request.getAllResponseHeaders() + ); + const responseData = !responseType || responseType === 'text' || responseType === 'json' ? + request.responseText : request.response; + const response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config, + request + }; + + settle(function _resolve(value) { + resolve(value); + done(); + }, function _reject(err) { + reject(err); + done(); + }, response); + + // Clean up request + request = null; + } + + if ('onloadend' in request) { + // Use onloadend if available + request.onloadend = onloadend; + } else { + // Listen for ready state to emulate onloadend + request.onreadystatechange = function handleLoad() { + if (!request || request.readyState !== 4) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { + return; + } + // readystate handler is calling before onerror or ontimeout handlers, + // so we should call onloadend on the next 'tick' + setTimeout(onloadend); + }; + } + + // Handle browser request cancellation (as opposed to a manual cancellation) + request.onabort = function handleAbort() { + if (!request) { + return; + } + + reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request)); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError() { + // Real errors are hidden from us by the browser + // onerror should only fire if it's a network error + reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request)); + + // Clean up request + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded'; + const transitional = _config.transitional || transitionalDefaults; + if (_config.timeoutErrorMessage) { + timeoutErrorMessage = _config.timeoutErrorMessage; + } + reject(new AxiosError( + timeoutErrorMessage, + transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED, + config, + request)); + + // Clean up request + request = null; + }; + + // Remove Content-Type if data is undefined + requestData === undefined && requestHeaders.setContentType(null); + + // Add headers to the request + if ('setRequestHeader' in request) { + utils$1.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) { + request.setRequestHeader(key, val); + }); + } + + // Add withCredentials to request if needed + if (!utils$1.isUndefined(_config.withCredentials)) { + request.withCredentials = !!_config.withCredentials; + } + + // Add responseType to request if needed + if (responseType && responseType !== 'json') { + request.responseType = _config.responseType; + } + + // Handle progress if needed + if (onDownloadProgress) { + ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true)); + request.addEventListener('progress', downloadThrottled); + } + + // Not all browsers support upload events + if (onUploadProgress && request.upload) { + ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress)); + + request.upload.addEventListener('progress', uploadThrottled); + + request.upload.addEventListener('loadend', flushUpload); + } + + if (_config.cancelToken || _config.signal) { + // Handle cancellation + // eslint-disable-next-line func-names + onCanceled = cancel => { + if (!request) { + return; + } + reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel); + request.abort(); + request = null; + }; + + _config.cancelToken && _config.cancelToken.subscribe(onCanceled); + if (_config.signal) { + _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled); + } + } + + const protocol = parseProtocol(_config.url); + + if (protocol && platform.protocols.indexOf(protocol) === -1) { + reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config)); + return; + } + + + // Send the request + request.send(requestData || null); + }); +}; + +const composeSignals = (signals, timeout) => { + const {length} = (signals = signals ? signals.filter(Boolean) : []); + + if (timeout || length) { + let controller = new AbortController(); + + let aborted; + + const onabort = function (reason) { + if (!aborted) { + aborted = true; + unsubscribe(); + const err = reason instanceof Error ? reason : this.reason; + controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err)); + } + }; + + let timer = timeout && setTimeout(() => { + timer = null; + onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT)); + }, timeout); + + const unsubscribe = () => { + if (signals) { + timer && clearTimeout(timer); + timer = null; + signals.forEach(signal => { + signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort); + }); + signals = null; + } + }; + + signals.forEach((signal) => signal.addEventListener('abort', onabort)); + + const {signal} = controller; + + signal.unsubscribe = () => utils$1.asap(unsubscribe); + + return signal; + } +}; + +const composeSignals$1 = composeSignals; + +const streamChunk = function* (chunk, chunkSize) { + let len = chunk.byteLength; + + if (!chunkSize || len < chunkSize) { + yield chunk; + return; + } + + let pos = 0; + let end; + + while (pos < len) { + end = pos + chunkSize; + yield chunk.slice(pos, end); + pos = end; + } +}; + +const readBytes = async function* (iterable, chunkSize) { + for await (const chunk of readStream(iterable)) { + yield* streamChunk(chunk, chunkSize); + } +}; + +const readStream = async function* (stream) { + if (stream[Symbol.asyncIterator]) { + yield* stream; + return; + } + + const reader = stream.getReader(); + try { + for (;;) { + const {done, value} = await reader.read(); + if (done) { + break; + } + yield value; + } + } finally { + await reader.cancel(); + } +}; + +const trackStream = (stream, chunkSize, onProgress, onFinish) => { + const iterator = readBytes(stream, chunkSize); + + let bytes = 0; + let done; + let _onFinish = (e) => { + if (!done) { + done = true; + onFinish && onFinish(e); + } + }; + + return new ReadableStream({ + async pull(controller) { + try { + const {done, value} = await iterator.next(); + + if (done) { + _onFinish(); + controller.close(); + return; + } + + let len = value.byteLength; + if (onProgress) { + let loadedBytes = bytes += len; + onProgress(loadedBytes); + } + controller.enqueue(new Uint8Array(value)); + } catch (err) { + _onFinish(err); + throw err; + } + }, + cancel(reason) { + _onFinish(reason); + return iterator.return(); + } + }, { + highWaterMark: 2 + }) +}; + +const isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function'; +const isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function'; + +// used only inside the fetch adapter +const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ? + ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) : + async (str) => new Uint8Array(await new Response(str).arrayBuffer()) +); + +const test = (fn, ...args) => { + try { + return !!fn(...args); + } catch (e) { + return false + } +}; + +const supportsRequestStream = isReadableStreamSupported && test(() => { + let duplexAccessed = false; + + const hasContentType = new Request(platform.origin, { + body: new ReadableStream(), + method: 'POST', + get duplex() { + duplexAccessed = true; + return 'half'; + }, + }).headers.has('Content-Type'); + + return duplexAccessed && !hasContentType; +}); + +const DEFAULT_CHUNK_SIZE = 64 * 1024; + +const supportsResponseStream = isReadableStreamSupported && + test(() => utils$1.isReadableStream(new Response('').body)); + + +const resolvers = { + stream: supportsResponseStream && ((res) => res.body) +}; + +isFetchSupported && (((res) => { + ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => { + !resolvers[type] && (resolvers[type] = utils$1.isFunction(res[type]) ? (res) => res[type]() : + (_, config) => { + throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config); + }); + }); +})(new Response)); + +const getBodyLength = async (body) => { + if (body == null) { + return 0; + } + + if(utils$1.isBlob(body)) { + return body.size; + } + + if(utils$1.isSpecCompliantForm(body)) { + const _request = new Request(platform.origin, { + method: 'POST', + body, + }); + return (await _request.arrayBuffer()).byteLength; + } + + if(utils$1.isArrayBufferView(body) || utils$1.isArrayBuffer(body)) { + return body.byteLength; + } + + if(utils$1.isURLSearchParams(body)) { + body = body + ''; + } + + if(utils$1.isString(body)) { + return (await encodeText(body)).byteLength; + } +}; + +const resolveBodyLength = async (headers, body) => { + const length = utils$1.toFiniteNumber(headers.getContentLength()); + + return length == null ? getBodyLength(body) : length; +}; + +const fetchAdapter = isFetchSupported && (async (config) => { + let { + url, + method, + data, + signal, + cancelToken, + timeout, + onDownloadProgress, + onUploadProgress, + responseType, + headers, + withCredentials = 'same-origin', + fetchOptions + } = resolveConfig(config); + + responseType = responseType ? (responseType + '').toLowerCase() : 'text'; + + let composedSignal = composeSignals$1([signal, cancelToken && cancelToken.toAbortSignal()], timeout); + + let request; + + const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => { + composedSignal.unsubscribe(); + }); + + let requestContentLength; + + try { + if ( + onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' && + (requestContentLength = await resolveBodyLength(headers, data)) !== 0 + ) { + let _request = new Request(url, { + method: 'POST', + body: data, + duplex: "half" + }); + + let contentTypeHeader; + + if (utils$1.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) { + headers.setContentType(contentTypeHeader); + } + + if (_request.body) { + const [onProgress, flush] = progressEventDecorator( + requestContentLength, + progressEventReducer(asyncDecorator(onUploadProgress)) + ); + + data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush); + } + } + + if (!utils$1.isString(withCredentials)) { + withCredentials = withCredentials ? 'include' : 'omit'; + } + + // Cloudflare Workers throws when credentials are defined + // see https://github.com/cloudflare/workerd/issues/902 + const isCredentialsSupported = "credentials" in Request.prototype; + request = new Request(url, { + ...fetchOptions, + signal: composedSignal, + method: method.toUpperCase(), + headers: headers.normalize().toJSON(), + body: data, + duplex: "half", + credentials: isCredentialsSupported ? withCredentials : undefined + }); + + let response = await fetch(request); + + const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response'); + + if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) { + const options = {}; + + ['status', 'statusText', 'headers'].forEach(prop => { + options[prop] = response[prop]; + }); + + const responseContentLength = utils$1.toFiniteNumber(response.headers.get('content-length')); + + const [onProgress, flush] = onDownloadProgress && progressEventDecorator( + responseContentLength, + progressEventReducer(asyncDecorator(onDownloadProgress), true) + ) || []; + + response = new Response( + trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => { + flush && flush(); + unsubscribe && unsubscribe(); + }), + options + ); + } + + responseType = responseType || 'text'; + + let responseData = await resolvers[utils$1.findKey(resolvers, responseType) || 'text'](response, config); + + !isStreamResponse && unsubscribe && unsubscribe(); + + return await new Promise((resolve, reject) => { + settle(resolve, reject, { + data: responseData, + headers: AxiosHeaders$1.from(response.headers), + status: response.status, + statusText: response.statusText, + config, + request + }); + }) + } catch (err) { + unsubscribe && unsubscribe(); + + if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) { + throw Object.assign( + new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request), + { + cause: err.cause || err + } + ) + } + + throw AxiosError.from(err, err && err.code, config, request); + } +}); + +const knownAdapters = { + http: httpAdapter, + xhr: xhrAdapter, + fetch: fetchAdapter +}; + +utils$1.forEach(knownAdapters, (fn, value) => { + if (fn) { + try { + Object.defineProperty(fn, 'name', {value}); + } catch (e) { + // eslint-disable-next-line no-empty + } + Object.defineProperty(fn, 'adapterName', {value}); + } +}); + +const renderReason = (reason) => `- ${reason}`; + +const isResolvedHandle = (adapter) => utils$1.isFunction(adapter) || adapter === null || adapter === false; + +const adapters = { + getAdapter: (adapters) => { + adapters = utils$1.isArray(adapters) ? adapters : [adapters]; + + const {length} = adapters; + let nameOrAdapter; + let adapter; + + const rejectedReasons = {}; + + for (let i = 0; i < length; i++) { + nameOrAdapter = adapters[i]; + let id; + + adapter = nameOrAdapter; + + if (!isResolvedHandle(nameOrAdapter)) { + adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()]; + + if (adapter === undefined) { + throw new AxiosError(`Unknown adapter '${id}'`); + } + } + + if (adapter) { + break; + } + + rejectedReasons[id || '#' + i] = adapter; + } + + if (!adapter) { + + const reasons = Object.entries(rejectedReasons) + .map(([id, state]) => `adapter ${id} ` + + (state === false ? 'is not supported by the environment' : 'is not available in the build') + ); + + let s = length ? + (reasons.length > 1 ? 'since :\n' + reasons.map(renderReason).join('\n') : ' ' + renderReason(reasons[0])) : + 'as no adapter specified'; + + throw new AxiosError( + `There is no suitable adapter to dispatch the request ` + s, + 'ERR_NOT_SUPPORT' + ); + } + + return adapter; + }, + adapters: knownAdapters +}; + +/** + * Throws a `CanceledError` if cancellation has been requested. + * + * @param {Object} config The config that is to be used for the request + * + * @returns {void} + */ +function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested(); + } + + if (config.signal && config.signal.aborted) { + throw new CanceledError(null, config); + } +} + +/** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * + * @returns {Promise} The Promise to be fulfilled + */ +function dispatchRequest(config) { + throwIfCancellationRequested(config); + + config.headers = AxiosHeaders$1.from(config.headers); + + // Transform request data + config.data = transformData.call( + config, + config.transformRequest + ); + + if (['post', 'put', 'patch'].indexOf(config.method) !== -1) { + config.headers.setContentType('application/x-www-form-urlencoded', false); + } + + const adapter = adapters.getAdapter(config.adapter || defaults$1.adapter); + + return adapter(config).then(function onAdapterResolution(response) { + throwIfCancellationRequested(config); + + // Transform response data + response.data = transformData.call( + config, + config.transformResponse, + response + ); + + response.headers = AxiosHeaders$1.from(response.headers); + + return response; + }, function onAdapterRejection(reason) { + if (!isCancel(reason)) { + throwIfCancellationRequested(config); + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData.call( + config, + config.transformResponse, + reason.response + ); + reason.response.headers = AxiosHeaders$1.from(reason.response.headers); + } + } + + return Promise.reject(reason); + }); +} + +const validators$1 = {}; + +// eslint-disable-next-line func-names +['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => { + validators$1[type] = function validator(thing) { + return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; + }; +}); + +const deprecatedWarnings = {}; + +/** + * Transitional option validator + * + * @param {function|boolean?} validator - set to false if the transitional option has been removed + * @param {string?} version - deprecated version / removed since version + * @param {string?} message - some message with additional info + * + * @returns {function} + */ +validators$1.transitional = function transitional(validator, version, message) { + function formatMessage(opt, desc) { + return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); + } + + // eslint-disable-next-line func-names + return (value, opt, opts) => { + if (validator === false) { + throw new AxiosError( + formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), + AxiosError.ERR_DEPRECATED + ); + } + + if (version && !deprecatedWarnings[opt]) { + deprecatedWarnings[opt] = true; + // eslint-disable-next-line no-console + console.warn( + formatMessage( + opt, + ' has been deprecated since v' + version + ' and will be removed in the near future' + ) + ); + } + + return validator ? validator(value, opt, opts) : true; + }; +}; + +validators$1.spelling = function spelling(correctSpelling) { + return (value, opt) => { + // eslint-disable-next-line no-console + console.warn(`${opt} is likely a misspelling of ${correctSpelling}`); + return true; + } +}; + +/** + * Assert object's properties type + * + * @param {object} options + * @param {object} schema + * @param {boolean?} allowUnknown + * + * @returns {object} + */ + +function assertOptions(options, schema, allowUnknown) { + if (typeof options !== 'object') { + throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE); + } + const keys = Object.keys(options); + let i = keys.length; + while (i-- > 0) { + const opt = keys[i]; + const validator = schema[opt]; + if (validator) { + const value = options[opt]; + const result = value === undefined || validator(value, opt, options); + if (result !== true) { + throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE); + } + continue; + } + if (allowUnknown !== true) { + throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION); + } + } +} + +const validator = { + assertOptions, + validators: validators$1 +}; + +const validators = validator.validators; + +/** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + * + * @return {Axios} A new instance of Axios + */ +class Axios { + constructor(instanceConfig) { + this.defaults = instanceConfig || {}; + this.interceptors = { + request: new InterceptorManager$1(), + response: new InterceptorManager$1() + }; + } + + /** + * Dispatch a request + * + * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults) + * @param {?Object} config + * + * @returns {Promise} The Promise to be fulfilled + */ + async request(configOrUrl, config) { + try { + return await this._request(configOrUrl, config); + } catch (err) { + if (err instanceof Error) { + let dummy = {}; + + Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error()); + + // slice off the Error: ... line + const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, '') : ''; + try { + if (!err.stack) { + err.stack = stack; + // match without the 2 top stack lines + } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\n.+\n/, ''))) { + err.stack += '\n' + stack; + } + } catch (e) { + // ignore the case where "stack" is an un-writable property + } + } + + throw err; + } + } + + _request(configOrUrl, config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof configOrUrl === 'string') { + config = config || {}; + config.url = configOrUrl; + } else { + config = configOrUrl || {}; + } + + config = mergeConfig(this.defaults, config); + + const {transitional, paramsSerializer, headers} = config; + + if (transitional !== undefined) { + validator.assertOptions(transitional, { + silentJSONParsing: validators.transitional(validators.boolean), + forcedJSONParsing: validators.transitional(validators.boolean), + clarifyTimeoutError: validators.transitional(validators.boolean) + }, false); + } + + if (paramsSerializer != null) { + if (utils$1.isFunction(paramsSerializer)) { + config.paramsSerializer = { + serialize: paramsSerializer + }; + } else { + validator.assertOptions(paramsSerializer, { + encode: validators.function, + serialize: validators.function + }, true); + } + } + + // Set config.allowAbsoluteUrls + if (config.allowAbsoluteUrls !== undefined) ; else if (this.defaults.allowAbsoluteUrls !== undefined) { + config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls; + } else { + config.allowAbsoluteUrls = true; + } + + validator.assertOptions(config, { + baseUrl: validators.spelling('baseURL'), + withXsrfToken: validators.spelling('withXSRFToken') + }, true); + + // Set config.method + config.method = (config.method || this.defaults.method || 'get').toLowerCase(); + + // Flatten headers + let contextHeaders = headers && utils$1.merge( + headers.common, + headers[config.method] + ); + + headers && utils$1.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + (method) => { + delete headers[method]; + } + ); + + config.headers = AxiosHeaders$1.concat(contextHeaders, headers); + + // filter out skipped interceptors + const requestInterceptorChain = []; + let synchronousRequestInterceptors = true; + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { + return; + } + + synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; + + requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); + }); + + const responseInterceptorChain = []; + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + }); + + let promise; + let i = 0; + let len; + + if (!synchronousRequestInterceptors) { + const chain = [dispatchRequest.bind(this), undefined]; + chain.unshift.apply(chain, requestInterceptorChain); + chain.push.apply(chain, responseInterceptorChain); + len = chain.length; + + promise = Promise.resolve(config); + + while (i < len) { + promise = promise.then(chain[i++], chain[i++]); + } + + return promise; + } + + len = requestInterceptorChain.length; + + let newConfig = config; + + i = 0; + + while (i < len) { + const onFulfilled = requestInterceptorChain[i++]; + const onRejected = requestInterceptorChain[i++]; + try { + newConfig = onFulfilled(newConfig); + } catch (error) { + onRejected.call(this, error); + break; + } + } + + try { + promise = dispatchRequest.call(this, newConfig); + } catch (error) { + return Promise.reject(error); + } + + i = 0; + len = responseInterceptorChain.length; + + while (i < len) { + promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]); + } + + return promise; + } + + getUri(config) { + config = mergeConfig(this.defaults, config); + const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls); + return buildURL(fullPath, config.params, config.paramsSerializer); + } +} + +// Provide aliases for supported request methods +utils$1.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, config) { + return this.request(mergeConfig(config || {}, { + method, + url, + data: (config || {}).data + })); + }; +}); + +utils$1.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + + function generateHTTPMethod(isForm) { + return function httpMethod(url, data, config) { + return this.request(mergeConfig(config || {}, { + method, + headers: isForm ? { + 'Content-Type': 'multipart/form-data' + } : {}, + url, + data + })); + }; + } + + Axios.prototype[method] = generateHTTPMethod(); + + Axios.prototype[method + 'Form'] = generateHTTPMethod(true); +}); + +const Axios$1 = Axios; + +/** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @param {Function} executor The executor function. + * + * @returns {CancelToken} + */ +class CancelToken { + constructor(executor) { + if (typeof executor !== 'function') { + throw new TypeError('executor must be a function.'); + } + + let resolvePromise; + + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve; + }); + + const token = this; + + // eslint-disable-next-line func-names + this.promise.then(cancel => { + if (!token._listeners) return; + + let i = token._listeners.length; + + while (i-- > 0) { + token._listeners[i](cancel); + } + token._listeners = null; + }); + + // eslint-disable-next-line func-names + this.promise.then = onfulfilled => { + let _resolve; + // eslint-disable-next-line func-names + const promise = new Promise(resolve => { + token.subscribe(resolve); + _resolve = resolve; + }).then(onfulfilled); + + promise.cancel = function reject() { + token.unsubscribe(_resolve); + }; + + return promise; + }; + + executor(function cancel(message, config, request) { + if (token.reason) { + // Cancellation has already been requested + return; + } + + token.reason = new CanceledError(message, config, request); + resolvePromise(token.reason); + }); + } + + /** + * Throws a `CanceledError` if cancellation has been requested. + */ + throwIfRequested() { + if (this.reason) { + throw this.reason; + } + } + + /** + * Subscribe to the cancel signal + */ + + subscribe(listener) { + if (this.reason) { + listener(this.reason); + return; + } + + if (this._listeners) { + this._listeners.push(listener); + } else { + this._listeners = [listener]; + } + } + + /** + * Unsubscribe from the cancel signal + */ + + unsubscribe(listener) { + if (!this._listeners) { + return; + } + const index = this._listeners.indexOf(listener); + if (index !== -1) { + this._listeners.splice(index, 1); + } + } + + toAbortSignal() { + const controller = new AbortController(); + + const abort = (err) => { + controller.abort(err); + }; + + this.subscribe(abort); + + controller.signal.unsubscribe = () => this.unsubscribe(abort); + + return controller.signal; + } + + /** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ + static source() { + let cancel; + const token = new CancelToken(function executor(c) { + cancel = c; + }); + return { + token, + cancel + }; + } +} + +const CancelToken$1 = CancelToken; + +/** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * var args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * + * @returns {Function} + */ +function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; +} + +/** + * Determines whether the payload is an error thrown by Axios + * + * @param {*} payload The value to test + * + * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false + */ +function isAxiosError(payload) { + return utils$1.isObject(payload) && (payload.isAxiosError === true); +} + +const HttpStatusCode = { + Continue: 100, + SwitchingProtocols: 101, + Processing: 102, + EarlyHints: 103, + Ok: 200, + Created: 201, + Accepted: 202, + NonAuthoritativeInformation: 203, + NoContent: 204, + ResetContent: 205, + PartialContent: 206, + MultiStatus: 207, + AlreadyReported: 208, + ImUsed: 226, + MultipleChoices: 300, + MovedPermanently: 301, + Found: 302, + SeeOther: 303, + NotModified: 304, + UseProxy: 305, + Unused: 306, + TemporaryRedirect: 307, + PermanentRedirect: 308, + BadRequest: 400, + Unauthorized: 401, + PaymentRequired: 402, + Forbidden: 403, + NotFound: 404, + MethodNotAllowed: 405, + NotAcceptable: 406, + ProxyAuthenticationRequired: 407, + RequestTimeout: 408, + Conflict: 409, + Gone: 410, + LengthRequired: 411, + PreconditionFailed: 412, + PayloadTooLarge: 413, + UriTooLong: 414, + UnsupportedMediaType: 415, + RangeNotSatisfiable: 416, + ExpectationFailed: 417, + ImATeapot: 418, + MisdirectedRequest: 421, + UnprocessableEntity: 422, + Locked: 423, + FailedDependency: 424, + TooEarly: 425, + UpgradeRequired: 426, + PreconditionRequired: 428, + TooManyRequests: 429, + RequestHeaderFieldsTooLarge: 431, + UnavailableForLegalReasons: 451, + InternalServerError: 500, + NotImplemented: 501, + BadGateway: 502, + ServiceUnavailable: 503, + GatewayTimeout: 504, + HttpVersionNotSupported: 505, + VariantAlsoNegotiates: 506, + InsufficientStorage: 507, + LoopDetected: 508, + NotExtended: 510, + NetworkAuthenticationRequired: 511, +}; + +Object.entries(HttpStatusCode).forEach(([key, value]) => { + HttpStatusCode[value] = key; +}); + +const HttpStatusCode$1 = HttpStatusCode; + +/** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * + * @returns {Axios} A new instance of Axios + */ +function createInstance(defaultConfig) { + const context = new Axios$1(defaultConfig); + const instance = bind(Axios$1.prototype.request, context); + + // Copy axios.prototype to instance + utils$1.extend(instance, Axios$1.prototype, context, {allOwnKeys: true}); + + // Copy context to instance + utils$1.extend(instance, context, null, {allOwnKeys: true}); + + // Factory for creating new instances + instance.create = function create(instanceConfig) { + return createInstance(mergeConfig(defaultConfig, instanceConfig)); + }; + + return instance; +} + +// Create the default instance to be exported +const axios = createInstance(defaults$1); + +// Expose Axios class to allow class inheritance +axios.Axios = Axios$1; + +// Expose Cancel & CancelToken +axios.CanceledError = CanceledError; +axios.CancelToken = CancelToken$1; +axios.isCancel = isCancel; +axios.VERSION = VERSION; +axios.toFormData = toFormData; + +// Expose AxiosError class +axios.AxiosError = AxiosError; + +// alias for CanceledError for backward compatibility +axios.Cancel = axios.CanceledError; + +// Expose all/spread +axios.all = function all(promises) { + return Promise.all(promises); +}; + +axios.spread = spread; + +// Expose isAxiosError +axios.isAxiosError = isAxiosError; + +// Expose mergeConfig +axios.mergeConfig = mergeConfig; + +axios.AxiosHeaders = AxiosHeaders$1; + +axios.formToJSON = thing => formDataToJSON(utils$1.isHTMLForm(thing) ? new FormData(thing) : thing); + +axios.getAdapter = adapters.getAdapter; + +axios.HttpStatusCode = HttpStatusCode$1; + +axios.default = axios; + +module.exports = axios; +//# sourceMappingURL=axios.cjs.map diff --git a/node_modules/axios/dist/node/axios.cjs.map b/node_modules/axios/dist/node/axios.cjs.map new file mode 100644 index 0000000..7eb098c --- /dev/null +++ b/node_modules/axios/dist/node/axios.cjs.map @@ -0,0 +1 @@ +{"version":3,"file":"axios.cjs","sources":["../../lib/helpers/bind.js","../../lib/utils.js","../../lib/core/AxiosError.js","../../lib/helpers/toFormData.js","../../lib/helpers/AxiosURLSearchParams.js","../../lib/helpers/buildURL.js","../../lib/core/InterceptorManager.js","../../lib/defaults/transitional.js","../../lib/platform/node/classes/URLSearchParams.js","../../lib/platform/node/index.js","../../lib/platform/common/utils.js","../../lib/platform/index.js","../../lib/helpers/toURLEncodedForm.js","../../lib/helpers/formDataToJSON.js","../../lib/defaults/index.js","../../lib/helpers/parseHeaders.js","../../lib/core/AxiosHeaders.js","../../lib/core/transformData.js","../../lib/cancel/isCancel.js","../../lib/cancel/CanceledError.js","../../lib/core/settle.js","../../lib/helpers/isAbsoluteURL.js","../../lib/helpers/combineURLs.js","../../lib/core/buildFullPath.js","../../lib/env/data.js","../../lib/helpers/parseProtocol.js","../../lib/helpers/fromDataURI.js","../../lib/helpers/AxiosTransformStream.js","../../lib/helpers/readBlob.js","../../lib/helpers/formDataToStream.js","../../lib/helpers/ZlibHeaderTransformStream.js","../../lib/helpers/callbackify.js","../../lib/helpers/speedometer.js","../../lib/helpers/throttle.js","../../lib/helpers/progressEventReducer.js","../../lib/adapters/http.js","../../lib/helpers/isURLSameOrigin.js","../../lib/helpers/cookies.js","../../lib/core/mergeConfig.js","../../lib/helpers/resolveConfig.js","../../lib/adapters/xhr.js","../../lib/helpers/composeSignals.js","../../lib/helpers/trackStream.js","../../lib/adapters/fetch.js","../../lib/adapters/adapters.js","../../lib/core/dispatchRequest.js","../../lib/helpers/validator.js","../../lib/core/Axios.js","../../lib/cancel/CancelToken.js","../../lib/helpers/spread.js","../../lib/helpers/isAxiosError.js","../../lib/helpers/HttpStatusCode.js","../../lib/axios.js"],"sourcesContent":["'use strict';\n\nexport default function bind(fn, thisArg) {\n return function wrap() {\n return fn.apply(thisArg, arguments);\n };\n}\n","'use strict';\n\nimport bind from './helpers/bind.js';\n\n// utils is a library of generic helper functions non-specific to axios\n\nconst {toString} = Object.prototype;\nconst {getPrototypeOf} = Object;\nconst {iterator, toStringTag} = Symbol;\n\nconst kindOf = (cache => thing => {\n const str = toString.call(thing);\n return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());\n})(Object.create(null));\n\nconst kindOfTest = (type) => {\n type = type.toLowerCase();\n return (thing) => kindOf(thing) === type\n}\n\nconst typeOfTest = type => thing => typeof thing === type;\n\n/**\n * Determine if a value is an Array\n *\n * @param {Object} val The value to test\n *\n * @returns {boolean} True if value is an Array, otherwise false\n */\nconst {isArray} = Array;\n\n/**\n * Determine if a value is undefined\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if the value is undefined, otherwise false\n */\nconst isUndefined = typeOfTest('undefined');\n\n/**\n * Determine if a value is a Buffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Buffer, otherwise false\n */\nfunction isBuffer(val) {\n return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)\n && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);\n}\n\n/**\n * Determine if a value is an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is an ArrayBuffer, otherwise false\n */\nconst isArrayBuffer = kindOfTest('ArrayBuffer');\n\n\n/**\n * Determine if a value is a view on an ArrayBuffer\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false\n */\nfunction isArrayBufferView(val) {\n let result;\n if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {\n result = ArrayBuffer.isView(val);\n } else {\n result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));\n }\n return result;\n}\n\n/**\n * Determine if a value is a String\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a String, otherwise false\n */\nconst isString = typeOfTest('string');\n\n/**\n * Determine if a value is a Function\n *\n * @param {*} val The value to test\n * @returns {boolean} True if value is a Function, otherwise false\n */\nconst isFunction = typeOfTest('function');\n\n/**\n * Determine if a value is a Number\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Number, otherwise false\n */\nconst isNumber = typeOfTest('number');\n\n/**\n * Determine if a value is an Object\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an Object, otherwise false\n */\nconst isObject = (thing) => thing !== null && typeof thing === 'object';\n\n/**\n * Determine if a value is a Boolean\n *\n * @param {*} thing The value to test\n * @returns {boolean} True if value is a Boolean, otherwise false\n */\nconst isBoolean = thing => thing === true || thing === false;\n\n/**\n * Determine if a value is a plain Object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a plain Object, otherwise false\n */\nconst isPlainObject = (val) => {\n if (kindOf(val) !== 'object') {\n return false;\n }\n\n const prototype = getPrototypeOf(val);\n return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val);\n}\n\n/**\n * Determine if a value is a Date\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Date, otherwise false\n */\nconst isDate = kindOfTest('Date');\n\n/**\n * Determine if a value is a File\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFile = kindOfTest('File');\n\n/**\n * Determine if a value is a Blob\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Blob, otherwise false\n */\nconst isBlob = kindOfTest('Blob');\n\n/**\n * Determine if a value is a FileList\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a File, otherwise false\n */\nconst isFileList = kindOfTest('FileList');\n\n/**\n * Determine if a value is a Stream\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a Stream, otherwise false\n */\nconst isStream = (val) => isObject(val) && isFunction(val.pipe);\n\n/**\n * Determine if a value is a FormData\n *\n * @param {*} thing The value to test\n *\n * @returns {boolean} True if value is an FormData, otherwise false\n */\nconst isFormData = (thing) => {\n let kind;\n return thing && (\n (typeof FormData === 'function' && thing instanceof FormData) || (\n isFunction(thing.append) && (\n (kind = kindOf(thing)) === 'formdata' ||\n // detect form-data instance\n (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')\n )\n )\n )\n}\n\n/**\n * Determine if a value is a URLSearchParams object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a URLSearchParams object, otherwise false\n */\nconst isURLSearchParams = kindOfTest('URLSearchParams');\n\nconst [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest);\n\n/**\n * Trim excess whitespace off the beginning and end of a string\n *\n * @param {String} str The String to trim\n *\n * @returns {String} The String freed of excess whitespace\n */\nconst trim = (str) => str.trim ?\n str.trim() : str.replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g, '');\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 *\n * @param {Boolean} [allOwnKeys = false]\n * @returns {any}\n */\nfunction forEach(obj, fn, {allOwnKeys = false} = {}) {\n // Don't bother if no value provided\n if (obj === null || typeof obj === 'undefined') {\n return;\n }\n\n let i;\n let l;\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 (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 const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);\n const len = keys.length;\n let key;\n\n for (i = 0; i < len; i++) {\n key = keys[i];\n fn.call(null, obj[key], key, obj);\n }\n }\n}\n\nfunction findKey(obj, key) {\n key = key.toLowerCase();\n const keys = Object.keys(obj);\n let i = keys.length;\n let _key;\n while (i-- > 0) {\n _key = keys[i];\n if (key === _key.toLowerCase()) {\n return _key;\n }\n }\n return null;\n}\n\nconst _global = (() => {\n /*eslint no-undef:0*/\n if (typeof globalThis !== \"undefined\") return globalThis;\n return typeof self !== \"undefined\" ? self : (typeof window !== 'undefined' ? window : global)\n})();\n\nconst isContextDefined = (context) => !isUndefined(context) && context !== _global;\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 *\n * @returns {Object} Result of all merge properties\n */\nfunction merge(/* obj1, obj2, obj3, ... */) {\n const {caseless} = isContextDefined(this) && this || {};\n const result = {};\n const assignValue = (val, key) => {\n const targetKey = caseless && findKey(result, key) || key;\n if (isPlainObject(result[targetKey]) && isPlainObject(val)) {\n result[targetKey] = merge(result[targetKey], val);\n } else if (isPlainObject(val)) {\n result[targetKey] = merge({}, val);\n } else if (isArray(val)) {\n result[targetKey] = val.slice();\n } else {\n result[targetKey] = val;\n }\n }\n\n for (let i = 0, l = arguments.length; i < l; i++) {\n arguments[i] && 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 *\n * @param {Boolean} [allOwnKeys]\n * @returns {Object} The resulting value of object a\n */\nconst extend = (a, b, thisArg, {allOwnKeys}= {}) => {\n forEach(b, (val, key) => {\n if (thisArg && isFunction(val)) {\n a[key] = bind(val, thisArg);\n } else {\n a[key] = val;\n }\n }, {allOwnKeys});\n return a;\n}\n\n/**\n * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)\n *\n * @param {string} content with BOM\n *\n * @returns {string} content value without BOM\n */\nconst stripBOM = (content) => {\n if (content.charCodeAt(0) === 0xFEFF) {\n content = content.slice(1);\n }\n return content;\n}\n\n/**\n * Inherit the prototype methods from one constructor into another\n * @param {function} constructor\n * @param {function} superConstructor\n * @param {object} [props]\n * @param {object} [descriptors]\n *\n * @returns {void}\n */\nconst inherits = (constructor, superConstructor, props, descriptors) => {\n constructor.prototype = Object.create(superConstructor.prototype, descriptors);\n constructor.prototype.constructor = constructor;\n Object.defineProperty(constructor, 'super', {\n value: superConstructor.prototype\n });\n props && Object.assign(constructor.prototype, props);\n}\n\n/**\n * Resolve object with deep prototype chain to a flat object\n * @param {Object} sourceObj source object\n * @param {Object} [destObj]\n * @param {Function|Boolean} [filter]\n * @param {Function} [propFilter]\n *\n * @returns {Object}\n */\nconst toFlatObject = (sourceObj, destObj, filter, propFilter) => {\n let props;\n let i;\n let prop;\n const merged = {};\n\n destObj = destObj || {};\n // eslint-disable-next-line no-eq-null,eqeqeq\n if (sourceObj == null) return destObj;\n\n do {\n props = Object.getOwnPropertyNames(sourceObj);\n i = props.length;\n while (i-- > 0) {\n prop = props[i];\n if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {\n destObj[prop] = sourceObj[prop];\n merged[prop] = true;\n }\n }\n sourceObj = filter !== false && getPrototypeOf(sourceObj);\n } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);\n\n return destObj;\n}\n\n/**\n * Determines whether a string ends with the characters of a specified string\n *\n * @param {String} str\n * @param {String} searchString\n * @param {Number} [position= 0]\n *\n * @returns {boolean}\n */\nconst endsWith = (str, searchString, position) => {\n str = String(str);\n if (position === undefined || position > str.length) {\n position = str.length;\n }\n position -= searchString.length;\n const lastIndex = str.indexOf(searchString, position);\n return lastIndex !== -1 && lastIndex === position;\n}\n\n\n/**\n * Returns new array from array like object or null if failed\n *\n * @param {*} [thing]\n *\n * @returns {?Array}\n */\nconst toArray = (thing) => {\n if (!thing) return null;\n if (isArray(thing)) return thing;\n let i = thing.length;\n if (!isNumber(i)) return null;\n const arr = new Array(i);\n while (i-- > 0) {\n arr[i] = thing[i];\n }\n return arr;\n}\n\n/**\n * Checking if the Uint8Array exists and if it does, it returns a function that checks if the\n * thing passed in is an instance of Uint8Array\n *\n * @param {TypedArray}\n *\n * @returns {Array}\n */\n// eslint-disable-next-line func-names\nconst isTypedArray = (TypedArray => {\n // eslint-disable-next-line func-names\n return thing => {\n return TypedArray && thing instanceof TypedArray;\n };\n})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));\n\n/**\n * For each entry in the object, call the function with the key and value.\n *\n * @param {Object} obj - The object to iterate over.\n * @param {Function} fn - The function to call for each entry.\n *\n * @returns {void}\n */\nconst forEachEntry = (obj, fn) => {\n const generator = obj && obj[iterator];\n\n const _iterator = generator.call(obj);\n\n let result;\n\n while ((result = _iterator.next()) && !result.done) {\n const pair = result.value;\n fn.call(obj, pair[0], pair[1]);\n }\n}\n\n/**\n * It takes a regular expression and a string, and returns an array of all the matches\n *\n * @param {string} regExp - The regular expression to match against.\n * @param {string} str - The string to search.\n *\n * @returns {Array}\n */\nconst matchAll = (regExp, str) => {\n let matches;\n const arr = [];\n\n while ((matches = regExp.exec(str)) !== null) {\n arr.push(matches);\n }\n\n return arr;\n}\n\n/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */\nconst isHTMLForm = kindOfTest('HTMLFormElement');\n\nconst toCamelCase = str => {\n return str.toLowerCase().replace(/[-_\\s]([a-z\\d])(\\w*)/g,\n function replacer(m, p1, p2) {\n return p1.toUpperCase() + p2;\n }\n );\n};\n\n/* Creating a function that will check if an object has a property. */\nconst hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);\n\n/**\n * Determine if a value is a RegExp object\n *\n * @param {*} val The value to test\n *\n * @returns {boolean} True if value is a RegExp object, otherwise false\n */\nconst isRegExp = kindOfTest('RegExp');\n\nconst reduceDescriptors = (obj, reducer) => {\n const descriptors = Object.getOwnPropertyDescriptors(obj);\n const reducedDescriptors = {};\n\n forEach(descriptors, (descriptor, name) => {\n let ret;\n if ((ret = reducer(descriptor, name, obj)) !== false) {\n reducedDescriptors[name] = ret || descriptor;\n }\n });\n\n Object.defineProperties(obj, reducedDescriptors);\n}\n\n/**\n * Makes all methods read-only\n * @param {Object} obj\n */\n\nconst freezeMethods = (obj) => {\n reduceDescriptors(obj, (descriptor, name) => {\n // skip restricted props in strict mode\n if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {\n return false;\n }\n\n const value = obj[name];\n\n if (!isFunction(value)) return;\n\n descriptor.enumerable = false;\n\n if ('writable' in descriptor) {\n descriptor.writable = false;\n return;\n }\n\n if (!descriptor.set) {\n descriptor.set = () => {\n throw Error('Can not rewrite read-only method \\'' + name + '\\'');\n };\n }\n });\n}\n\nconst toObjectSet = (arrayOrString, delimiter) => {\n const obj = {};\n\n const define = (arr) => {\n arr.forEach(value => {\n obj[value] = true;\n });\n }\n\n isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));\n\n return obj;\n}\n\nconst noop = () => {}\n\nconst toFiniteNumber = (value, defaultValue) => {\n return value != null && Number.isFinite(value = +value) ? value : defaultValue;\n}\n\n/**\n * If the thing is a FormData object, return true, otherwise return false.\n *\n * @param {unknown} thing - The thing to check.\n *\n * @returns {boolean}\n */\nfunction isSpecCompliantForm(thing) {\n return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]);\n}\n\nconst toJSONObject = (obj) => {\n const stack = new Array(10);\n\n const visit = (source, i) => {\n\n if (isObject(source)) {\n if (stack.indexOf(source) >= 0) {\n return;\n }\n\n if(!('toJSON' in source)) {\n stack[i] = source;\n const target = isArray(source) ? [] : {};\n\n forEach(source, (value, key) => {\n const reducedValue = visit(value, i + 1);\n !isUndefined(reducedValue) && (target[key] = reducedValue);\n });\n\n stack[i] = undefined;\n\n return target;\n }\n }\n\n return source;\n }\n\n return visit(obj, 0);\n}\n\nconst isAsyncFn = kindOfTest('AsyncFunction');\n\nconst isThenable = (thing) =>\n thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);\n\n// original code\n// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34\n\nconst _setImmediate = ((setImmediateSupported, postMessageSupported) => {\n if (setImmediateSupported) {\n return setImmediate;\n }\n\n return postMessageSupported ? ((token, callbacks) => {\n _global.addEventListener(\"message\", ({source, data}) => {\n if (source === _global && data === token) {\n callbacks.length && callbacks.shift()();\n }\n }, false);\n\n return (cb) => {\n callbacks.push(cb);\n _global.postMessage(token, \"*\");\n }\n })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);\n})(\n typeof setImmediate === 'function',\n isFunction(_global.postMessage)\n);\n\nconst asap = typeof queueMicrotask !== 'undefined' ?\n queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate);\n\n// *********************\n\n\nconst isIterable = (thing) => thing != null && isFunction(thing[iterator]);\n\n\nexport default {\n isArray,\n isArrayBuffer,\n isBuffer,\n isFormData,\n isArrayBufferView,\n isString,\n isNumber,\n isBoolean,\n isObject,\n isPlainObject,\n isReadableStream,\n isRequest,\n isResponse,\n isHeaders,\n isUndefined,\n isDate,\n isFile,\n isBlob,\n isRegExp,\n isFunction,\n isStream,\n isURLSearchParams,\n isTypedArray,\n isFileList,\n forEach,\n merge,\n extend,\n trim,\n stripBOM,\n inherits,\n toFlatObject,\n kindOf,\n kindOfTest,\n endsWith,\n toArray,\n forEachEntry,\n matchAll,\n isHTMLForm,\n hasOwnProperty,\n hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection\n reduceDescriptors,\n freezeMethods,\n toObjectSet,\n toCamelCase,\n noop,\n toFiniteNumber,\n findKey,\n global: _global,\n isContextDefined,\n isSpecCompliantForm,\n toJSONObject,\n isAsyncFn,\n isThenable,\n setImmediate: _setImmediate,\n asap,\n isIterable\n};\n","'use strict';\n\nimport utils from '../utils.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 {string} [code] The error code (for example, 'ECONNABORTED').\n * @param {Object} [config] The config.\n * @param {Object} [request] The request.\n * @param {Object} [response] The response.\n *\n * @returns {Error} The created error.\n */\nfunction AxiosError(message, code, config, request, response) {\n Error.call(this);\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n } else {\n this.stack = (new Error()).stack;\n }\n\n this.message = message;\n this.name = 'AxiosError';\n code && (this.code = code);\n config && (this.config = config);\n request && (this.request = request);\n if (response) {\n this.response = response;\n this.status = response.status ? response.status : null;\n }\n}\n\nutils.inherits(AxiosError, Error, {\n toJSON: function toJSON() {\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: utils.toJSONObject(this.config),\n code: this.code,\n status: this.status\n };\n }\n});\n\nconst prototype = AxiosError.prototype;\nconst descriptors = {};\n\n[\n 'ERR_BAD_OPTION_VALUE',\n 'ERR_BAD_OPTION',\n 'ECONNABORTED',\n 'ETIMEDOUT',\n 'ERR_NETWORK',\n 'ERR_FR_TOO_MANY_REDIRECTS',\n 'ERR_DEPRECATED',\n 'ERR_BAD_RESPONSE',\n 'ERR_BAD_REQUEST',\n 'ERR_CANCELED',\n 'ERR_NOT_SUPPORT',\n 'ERR_INVALID_URL'\n// eslint-disable-next-line func-names\n].forEach(code => {\n descriptors[code] = {value: code};\n});\n\nObject.defineProperties(AxiosError, descriptors);\nObject.defineProperty(prototype, 'isAxiosError', {value: true});\n\n// eslint-disable-next-line func-names\nAxiosError.from = (error, code, config, request, response, customProps) => {\n const axiosError = Object.create(prototype);\n\n utils.toFlatObject(error, axiosError, function filter(obj) {\n return obj !== Error.prototype;\n }, prop => {\n return prop !== 'isAxiosError';\n });\n\n AxiosError.call(axiosError, error.message, code, config, request, response);\n\n axiosError.cause = error;\n\n axiosError.name = error.name;\n\n customProps && Object.assign(axiosError, customProps);\n\n return axiosError;\n};\n\nexport default AxiosError;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\n// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored\nimport PlatformFormData from '../platform/node/classes/FormData.js';\n\n/**\n * Determines if the given thing is a array or js object.\n *\n * @param {string} thing - The object or array to be visited.\n *\n * @returns {boolean}\n */\nfunction isVisitable(thing) {\n return utils.isPlainObject(thing) || utils.isArray(thing);\n}\n\n/**\n * It removes the brackets from the end of a string\n *\n * @param {string} key - The key of the parameter.\n *\n * @returns {string} the key without the brackets.\n */\nfunction removeBrackets(key) {\n return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;\n}\n\n/**\n * It takes a path, a key, and a boolean, and returns a string\n *\n * @param {string} path - The path to the current key.\n * @param {string} key - The key of the current object being iterated over.\n * @param {string} dots - If true, the key will be rendered with dots instead of brackets.\n *\n * @returns {string} The path to the current key.\n */\nfunction renderKey(path, key, dots) {\n if (!path) return key;\n return path.concat(key).map(function each(token, i) {\n // eslint-disable-next-line no-param-reassign\n token = removeBrackets(token);\n return !dots && i ? '[' + token + ']' : token;\n }).join(dots ? '.' : '');\n}\n\n/**\n * If the array is an array and none of its elements are visitable, then it's a flat array.\n *\n * @param {Array} arr - The array to check\n *\n * @returns {boolean}\n */\nfunction isFlatArray(arr) {\n return utils.isArray(arr) && !arr.some(isVisitable);\n}\n\nconst predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {\n return /^is[A-Z]/.test(prop);\n});\n\n/**\n * Convert a data object to FormData\n *\n * @param {Object} obj\n * @param {?Object} [formData]\n * @param {?Object} [options]\n * @param {Function} [options.visitor]\n * @param {Boolean} [options.metaTokens = true]\n * @param {Boolean} [options.dots = false]\n * @param {?Boolean} [options.indexes = false]\n *\n * @returns {Object}\n **/\n\n/**\n * It converts an object into a FormData object\n *\n * @param {Object} obj - The object to convert to form data.\n * @param {string} formData - The FormData object to append to.\n * @param {Object} options\n *\n * @returns\n */\nfunction toFormData(obj, formData, options) {\n if (!utils.isObject(obj)) {\n throw new TypeError('target must be an object');\n }\n\n // eslint-disable-next-line no-param-reassign\n formData = formData || new (PlatformFormData || FormData)();\n\n // eslint-disable-next-line no-param-reassign\n options = utils.toFlatObject(options, {\n metaTokens: true,\n dots: false,\n indexes: false\n }, false, function defined(option, source) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n return !utils.isUndefined(source[option]);\n });\n\n const metaTokens = options.metaTokens;\n // eslint-disable-next-line no-use-before-define\n const visitor = options.visitor || defaultVisitor;\n const dots = options.dots;\n const indexes = options.indexes;\n const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;\n const useBlob = _Blob && utils.isSpecCompliantForm(formData);\n\n if (!utils.isFunction(visitor)) {\n throw new TypeError('visitor must be a function');\n }\n\n function convertValue(value) {\n if (value === null) return '';\n\n if (utils.isDate(value)) {\n return value.toISOString();\n }\n\n if (!useBlob && utils.isBlob(value)) {\n throw new AxiosError('Blob is not supported. Use a Buffer instead.');\n }\n\n if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {\n return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);\n }\n\n return value;\n }\n\n /**\n * Default visitor.\n *\n * @param {*} value\n * @param {String|Number} key\n * @param {Array} path\n * @this {FormData}\n *\n * @returns {boolean} return true to visit the each prop of the value recursively\n */\n function defaultVisitor(value, key, path) {\n let arr = value;\n\n if (value && !path && typeof value === 'object') {\n if (utils.endsWith(key, '{}')) {\n // eslint-disable-next-line no-param-reassign\n key = metaTokens ? key : key.slice(0, -2);\n // eslint-disable-next-line no-param-reassign\n value = JSON.stringify(value);\n } else if (\n (utils.isArray(value) && isFlatArray(value)) ||\n ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))\n )) {\n // eslint-disable-next-line no-param-reassign\n key = removeBrackets(key);\n\n arr.forEach(function each(el, index) {\n !(utils.isUndefined(el) || el === null) && formData.append(\n // eslint-disable-next-line no-nested-ternary\n indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),\n convertValue(el)\n );\n });\n return false;\n }\n }\n\n if (isVisitable(value)) {\n return true;\n }\n\n formData.append(renderKey(path, key, dots), convertValue(value));\n\n return false;\n }\n\n const stack = [];\n\n const exposedHelpers = Object.assign(predicates, {\n defaultVisitor,\n convertValue,\n isVisitable\n });\n\n function build(value, path) {\n if (utils.isUndefined(value)) return;\n\n if (stack.indexOf(value) !== -1) {\n throw Error('Circular reference detected in ' + path.join('.'));\n }\n\n stack.push(value);\n\n utils.forEach(value, function each(el, key) {\n const result = !(utils.isUndefined(el) || el === null) && visitor.call(\n formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers\n );\n\n if (result === true) {\n build(el, path ? path.concat(key) : [key]);\n }\n });\n\n stack.pop();\n }\n\n if (!utils.isObject(obj)) {\n throw new TypeError('data must be an object');\n }\n\n build(obj);\n\n return formData;\n}\n\nexport default toFormData;\n","'use strict';\n\nimport toFormData from './toFormData.js';\n\n/**\n * It encodes a string by replacing all characters that are not in the unreserved set with\n * their percent-encoded equivalents\n *\n * @param {string} str - The string to encode.\n *\n * @returns {string} The encoded string.\n */\nfunction encode(str) {\n const charMap = {\n '!': '%21',\n \"'\": '%27',\n '(': '%28',\n ')': '%29',\n '~': '%7E',\n '%20': '+',\n '%00': '\\x00'\n };\n return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {\n return charMap[match];\n });\n}\n\n/**\n * It takes a params object and converts it to a FormData object\n *\n * @param {Object} params - The parameters to be converted to a FormData object.\n * @param {Object} options - The options object passed to the Axios constructor.\n *\n * @returns {void}\n */\nfunction AxiosURLSearchParams(params, options) {\n this._pairs = [];\n\n params && toFormData(params, this, options);\n}\n\nconst prototype = AxiosURLSearchParams.prototype;\n\nprototype.append = function append(name, value) {\n this._pairs.push([name, value]);\n};\n\nprototype.toString = function toString(encoder) {\n const _encode = encoder ? function(value) {\n return encoder.call(this, value, encode);\n } : encode;\n\n return this._pairs.map(function each(pair) {\n return _encode(pair[0]) + '=' + _encode(pair[1]);\n }, '').join('&');\n};\n\nexport default AxiosURLSearchParams;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';\n\n/**\n * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their\n * URI encoded counterparts\n *\n * @param {string} val The value to be encoded.\n *\n * @returns {string} The encoded value.\n */\nfunction encode(val) {\n return encodeURIComponent(val).\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 * @param {?(object|Function)} options\n *\n * @returns {string} The formatted url\n */\nexport default function buildURL(url, params, options) {\n /*eslint no-param-reassign:0*/\n if (!params) {\n return url;\n }\n \n const _encode = options && options.encode || encode;\n\n if (utils.isFunction(options)) {\n options = {\n serialize: options\n };\n } \n\n const serializeFn = options && options.serialize;\n\n let serializedParams;\n\n if (serializeFn) {\n serializedParams = serializeFn(params, options);\n } else {\n serializedParams = utils.isURLSearchParams(params) ?\n params.toString() :\n new AxiosURLSearchParams(params, options).toString(_encode);\n }\n\n if (serializedParams) {\n const hashmarkIndex = url.indexOf(\"#\");\n\n if (hashmarkIndex !== -1) {\n url = url.slice(0, hashmarkIndex);\n }\n url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;\n }\n\n return url;\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\nclass InterceptorManager {\n constructor() {\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 */\n use(fulfilled, rejected, options) {\n this.handlers.push({\n fulfilled,\n rejected,\n synchronous: options ? options.synchronous : false,\n runWhen: options ? options.runWhen : null\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 *\n * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise\n */\n eject(id) {\n if (this.handlers[id]) {\n this.handlers[id] = null;\n }\n }\n\n /**\n * Clear all interceptors from the stack\n *\n * @returns {void}\n */\n clear() {\n if (this.handlers) {\n this.handlers = [];\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 *\n * @returns {void}\n */\n forEach(fn) {\n utils.forEach(this.handlers, function forEachHandler(h) {\n if (h !== null) {\n fn(h);\n }\n });\n }\n}\n\nexport default InterceptorManager;\n","'use strict';\n\nexport default {\n silentJSONParsing: true,\n forcedJSONParsing: true,\n clarifyTimeoutError: false\n};\n","'use strict';\n\nimport url from 'url';\nexport default url.URLSearchParams;\n","import crypto from 'crypto';\nimport URLSearchParams from './classes/URLSearchParams.js'\nimport FormData from './classes/FormData.js'\n\nconst ALPHA = 'abcdefghijklmnopqrstuvwxyz'\n\nconst DIGIT = '0123456789';\n\nconst ALPHABET = {\n DIGIT,\n ALPHA,\n ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT\n}\n\nconst generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {\n let str = '';\n const {length} = alphabet;\n const randomValues = new Uint32Array(size);\n crypto.randomFillSync(randomValues);\n for (let i = 0; i < size; i++) {\n str += alphabet[randomValues[i] % length];\n }\n\n return str;\n}\n\n\nexport default {\n isNode: true,\n classes: {\n URLSearchParams,\n FormData,\n Blob: typeof Blob !== 'undefined' && Blob || null\n },\n ALPHABET,\n generateString,\n protocols: [ 'http', 'https', 'file', 'data' ]\n};\n","const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';\n\nconst _navigator = typeof navigator === 'object' && navigator || undefined;\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 *\n * @returns {boolean}\n */\nconst hasStandardBrowserEnv = hasBrowserEnv &&\n (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0);\n\n/**\n * Determine if we're running in a standard browser webWorker environment\n *\n * Although the `isStandardBrowserEnv` method indicates that\n * `allows axios to run in a web worker`, the WebWorker will still be\n * filtered out due to its judgment standard\n * `typeof window !== 'undefined' && typeof document !== 'undefined'`.\n * This leads to a problem when axios post `FormData` in webWorker\n */\nconst hasStandardBrowserWebWorkerEnv = (() => {\n return (\n typeof WorkerGlobalScope !== 'undefined' &&\n // eslint-disable-next-line no-undef\n self instanceof WorkerGlobalScope &&\n typeof self.importScripts === 'function'\n );\n})();\n\nconst origin = hasBrowserEnv && window.location.href || 'http://localhost';\n\nexport {\n hasBrowserEnv,\n hasStandardBrowserWebWorkerEnv,\n hasStandardBrowserEnv,\n _navigator as navigator,\n origin\n}\n","import platform from './node/index.js';\nimport * as utils from './common/utils.js';\n\nexport default {\n ...utils,\n ...platform\n}\n","'use strict';\n\nimport utils from '../utils.js';\nimport toFormData from './toFormData.js';\nimport platform from '../platform/index.js';\n\nexport default function toURLEncodedForm(data, options) {\n return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({\n visitor: function(value, key, path, helpers) {\n if (platform.isNode && utils.isBuffer(value)) {\n this.append(key, value.toString('base64'));\n return false;\n }\n\n return helpers.defaultVisitor.apply(this, arguments);\n }\n }, options));\n}\n","'use strict';\n\nimport utils from '../utils.js';\n\n/**\n * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']\n *\n * @param {string} name - The name of the property to get.\n *\n * @returns An array of strings.\n */\nfunction parsePropPath(name) {\n // foo[x][y][z]\n // foo.x.y.z\n // foo-x-y-z\n // foo x y z\n return utils.matchAll(/\\w+|\\[(\\w*)]/g, name).map(match => {\n return match[0] === '[]' ? '' : match[1] || match[0];\n });\n}\n\n/**\n * Convert an array to an object.\n *\n * @param {Array} arr - The array to convert to an object.\n *\n * @returns An object with the same keys and values as the array.\n */\nfunction arrayToObject(arr) {\n const obj = {};\n const keys = Object.keys(arr);\n let i;\n const len = keys.length;\n let key;\n for (i = 0; i < len; i++) {\n key = keys[i];\n obj[key] = arr[key];\n }\n return obj;\n}\n\n/**\n * It takes a FormData object and returns a JavaScript object\n *\n * @param {string} formData The FormData object to convert to JSON.\n *\n * @returns {Object | null} The converted object.\n */\nfunction formDataToJSON(formData) {\n function buildPath(path, value, target, index) {\n let name = path[index++];\n\n if (name === '__proto__') return true;\n\n const isNumericKey = Number.isFinite(+name);\n const isLast = index >= path.length;\n name = !name && utils.isArray(target) ? target.length : name;\n\n if (isLast) {\n if (utils.hasOwnProp(target, name)) {\n target[name] = [target[name], value];\n } else {\n target[name] = value;\n }\n\n return !isNumericKey;\n }\n\n if (!target[name] || !utils.isObject(target[name])) {\n target[name] = [];\n }\n\n const result = buildPath(path, value, target[name], index);\n\n if (result && utils.isArray(target[name])) {\n target[name] = arrayToObject(target[name]);\n }\n\n return !isNumericKey;\n }\n\n if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {\n const obj = {};\n\n utils.forEachEntry(formData, (name, value) => {\n buildPath(parsePropPath(name), value, obj, 0);\n });\n\n return obj;\n }\n\n return null;\n}\n\nexport default formDataToJSON;\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosError from '../core/AxiosError.js';\nimport transitionalDefaults from './transitional.js';\nimport toFormData from '../helpers/toFormData.js';\nimport toURLEncodedForm from '../helpers/toURLEncodedForm.js';\nimport platform from '../platform/index.js';\nimport formDataToJSON from '../helpers/formDataToJSON.js';\n\n/**\n * It takes a string, tries to parse it, and if it fails, it returns the stringified version\n * of the input\n *\n * @param {any} rawValue - The value to be stringified.\n * @param {Function} parser - A function that parses a string into a JavaScript object.\n * @param {Function} encoder - A function that takes a value and returns a string.\n *\n * @returns {string} A stringified version of the rawValue.\n */\nfunction stringifySafely(rawValue, parser, encoder) {\n if (utils.isString(rawValue)) {\n try {\n (parser || JSON.parse)(rawValue);\n return utils.trim(rawValue);\n } catch (e) {\n if (e.name !== 'SyntaxError') {\n throw e;\n }\n }\n }\n\n return (encoder || JSON.stringify)(rawValue);\n}\n\nconst defaults = {\n\n transitional: transitionalDefaults,\n\n adapter: ['xhr', 'http', 'fetch'],\n\n transformRequest: [function transformRequest(data, headers) {\n const contentType = headers.getContentType() || '';\n const hasJSONContentType = contentType.indexOf('application/json') > -1;\n const isObjectPayload = utils.isObject(data);\n\n if (isObjectPayload && utils.isHTMLForm(data)) {\n data = new FormData(data);\n }\n\n const isFormData = utils.isFormData(data);\n\n if (isFormData) {\n return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;\n }\n\n if (utils.isArrayBuffer(data) ||\n utils.isBuffer(data) ||\n utils.isStream(data) ||\n utils.isFile(data) ||\n utils.isBlob(data) ||\n utils.isReadableStream(data)\n ) {\n return data;\n }\n if (utils.isArrayBufferView(data)) {\n return data.buffer;\n }\n if (utils.isURLSearchParams(data)) {\n headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);\n return data.toString();\n }\n\n let isFileList;\n\n if (isObjectPayload) {\n if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {\n return toURLEncodedForm(data, this.formSerializer).toString();\n }\n\n if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {\n const _FormData = this.env && this.env.FormData;\n\n return toFormData(\n isFileList ? {'files[]': data} : data,\n _FormData && new _FormData(),\n this.formSerializer\n );\n }\n }\n\n if (isObjectPayload || hasJSONContentType ) {\n headers.setContentType('application/json', false);\n return stringifySafely(data);\n }\n\n return data;\n }],\n\n transformResponse: [function transformResponse(data) {\n const transitional = this.transitional || defaults.transitional;\n const forcedJSONParsing = transitional && transitional.forcedJSONParsing;\n const JSONRequested = this.responseType === 'json';\n\n if (utils.isResponse(data) || utils.isReadableStream(data)) {\n return data;\n }\n\n if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {\n const silentJSONParsing = transitional && transitional.silentJSONParsing;\n const strictJSONParsing = !silentJSONParsing && JSONRequested;\n\n try {\n return JSON.parse(data);\n } catch (e) {\n if (strictJSONParsing) {\n if (e.name === 'SyntaxError') {\n throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);\n }\n throw e;\n }\n }\n }\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 maxBodyLength: -1,\n\n env: {\n FormData: platform.classes.FormData,\n Blob: platform.classes.Blob\n },\n\n validateStatus: function validateStatus(status) {\n return status >= 200 && status < 300;\n },\n\n headers: {\n common: {\n 'Accept': 'application/json, text/plain, */*',\n 'Content-Type': undefined\n }\n }\n};\n\nutils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {\n defaults.headers[method] = {};\n});\n\nexport default defaults;\n","'use strict';\n\nimport utils from './../utils.js';\n\n// RawAxiosHeaders whose duplicates are ignored by node\n// c.f. https://nodejs.org/api/http.html#http_message_headers\nconst ignoreDuplicateOf = utils.toObjectSet([\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} rawHeaders Headers needing to be parsed\n *\n * @returns {Object} Headers parsed into an object\n */\nexport default rawHeaders => {\n const parsed = {};\n let key;\n let val;\n let i;\n\n rawHeaders && rawHeaders.split('\\n').forEach(function parser(line) {\n i = line.indexOf(':');\n key = line.substring(0, i).trim().toLowerCase();\n val = line.substring(i + 1).trim();\n\n if (!key || (parsed[key] && ignoreDuplicateOf[key])) {\n return;\n }\n\n if (key === 'set-cookie') {\n if (parsed[key]) {\n parsed[key].push(val);\n } else {\n parsed[key] = [val];\n }\n } else {\n parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;\n }\n });\n\n return parsed;\n};\n","'use strict';\n\nimport utils from '../utils.js';\nimport parseHeaders from '../helpers/parseHeaders.js';\n\nconst $internals = Symbol('internals');\n\nfunction normalizeHeader(header) {\n return header && String(header).trim().toLowerCase();\n}\n\nfunction normalizeValue(value) {\n if (value === false || value == null) {\n return value;\n }\n\n return utils.isArray(value) ? value.map(normalizeValue) : String(value);\n}\n\nfunction parseTokens(str) {\n const tokens = Object.create(null);\n const tokensRE = /([^\\s,;=]+)\\s*(?:=\\s*([^,;]+))?/g;\n let match;\n\n while ((match = tokensRE.exec(str))) {\n tokens[match[1]] = match[2];\n }\n\n return tokens;\n}\n\nconst isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());\n\nfunction matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {\n if (utils.isFunction(filter)) {\n return filter.call(this, value, header);\n }\n\n if (isHeaderNameFilter) {\n value = header;\n }\n\n if (!utils.isString(value)) return;\n\n if (utils.isString(filter)) {\n return value.indexOf(filter) !== -1;\n }\n\n if (utils.isRegExp(filter)) {\n return filter.test(value);\n }\n}\n\nfunction formatHeader(header) {\n return header.trim()\n .toLowerCase().replace(/([a-z\\d])(\\w*)/g, (w, char, str) => {\n return char.toUpperCase() + str;\n });\n}\n\nfunction buildAccessors(obj, header) {\n const accessorName = utils.toCamelCase(' ' + header);\n\n ['get', 'set', 'has'].forEach(methodName => {\n Object.defineProperty(obj, methodName + accessorName, {\n value: function(arg1, arg2, arg3) {\n return this[methodName].call(this, header, arg1, arg2, arg3);\n },\n configurable: true\n });\n });\n}\n\nclass AxiosHeaders {\n constructor(headers) {\n headers && this.set(headers);\n }\n\n set(header, valueOrRewrite, rewrite) {\n const self = this;\n\n function setHeader(_value, _header, _rewrite) {\n const lHeader = normalizeHeader(_header);\n\n if (!lHeader) {\n throw new Error('header name must be a non-empty string');\n }\n\n const key = utils.findKey(self, lHeader);\n\n if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {\n self[key || _header] = normalizeValue(_value);\n }\n }\n\n const setHeaders = (headers, _rewrite) =>\n utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));\n\n if (utils.isPlainObject(header) || header instanceof this.constructor) {\n setHeaders(header, valueOrRewrite)\n } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {\n setHeaders(parseHeaders(header), valueOrRewrite);\n } else if (utils.isObject(header) && utils.isIterable(header)) {\n let obj = {}, dest, key;\n for (const entry of header) {\n if (!utils.isArray(entry)) {\n throw TypeError('Object iterator must return a key-value pair');\n }\n\n obj[key = entry[0]] = (dest = obj[key]) ?\n (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1];\n }\n\n setHeaders(obj, valueOrRewrite)\n } else {\n header != null && setHeader(valueOrRewrite, header, rewrite);\n }\n\n return this;\n }\n\n get(header, parser) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n if (key) {\n const value = this[key];\n\n if (!parser) {\n return value;\n }\n\n if (parser === true) {\n return parseTokens(value);\n }\n\n if (utils.isFunction(parser)) {\n return parser.call(this, value, key);\n }\n\n if (utils.isRegExp(parser)) {\n return parser.exec(value);\n }\n\n throw new TypeError('parser must be boolean|regexp|function');\n }\n }\n }\n\n has(header, matcher) {\n header = normalizeHeader(header);\n\n if (header) {\n const key = utils.findKey(this, header);\n\n return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));\n }\n\n return false;\n }\n\n delete(header, matcher) {\n const self = this;\n let deleted = false;\n\n function deleteHeader(_header) {\n _header = normalizeHeader(_header);\n\n if (_header) {\n const key = utils.findKey(self, _header);\n\n if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {\n delete self[key];\n\n deleted = true;\n }\n }\n }\n\n if (utils.isArray(header)) {\n header.forEach(deleteHeader);\n } else {\n deleteHeader(header);\n }\n\n return deleted;\n }\n\n clear(matcher) {\n const keys = Object.keys(this);\n let i = keys.length;\n let deleted = false;\n\n while (i--) {\n const key = keys[i];\n if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {\n delete this[key];\n deleted = true;\n }\n }\n\n return deleted;\n }\n\n normalize(format) {\n const self = this;\n const headers = {};\n\n utils.forEach(this, (value, header) => {\n const key = utils.findKey(headers, header);\n\n if (key) {\n self[key] = normalizeValue(value);\n delete self[header];\n return;\n }\n\n const normalized = format ? formatHeader(header) : String(header).trim();\n\n if (normalized !== header) {\n delete self[header];\n }\n\n self[normalized] = normalizeValue(value);\n\n headers[normalized] = true;\n });\n\n return this;\n }\n\n concat(...targets) {\n return this.constructor.concat(this, ...targets);\n }\n\n toJSON(asStrings) {\n const obj = Object.create(null);\n\n utils.forEach(this, (value, header) => {\n value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);\n });\n\n return obj;\n }\n\n [Symbol.iterator]() {\n return Object.entries(this.toJSON())[Symbol.iterator]();\n }\n\n toString() {\n return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\\n');\n }\n\n getSetCookie() {\n return this.get(\"set-cookie\") || [];\n }\n\n get [Symbol.toStringTag]() {\n return 'AxiosHeaders';\n }\n\n static from(thing) {\n return thing instanceof this ? thing : new this(thing);\n }\n\n static concat(first, ...targets) {\n const computed = new this(first);\n\n targets.forEach((target) => computed.set(target));\n\n return computed;\n }\n\n static accessor(header) {\n const internals = this[$internals] = (this[$internals] = {\n accessors: {}\n });\n\n const accessors = internals.accessors;\n const prototype = this.prototype;\n\n function defineAccessor(_header) {\n const lHeader = normalizeHeader(_header);\n\n if (!accessors[lHeader]) {\n buildAccessors(prototype, _header);\n accessors[lHeader] = true;\n }\n }\n\n utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);\n\n return this;\n }\n}\n\nAxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);\n\n// reserved names hotfix\nutils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {\n let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`\n return {\n get: () => value,\n set(headerValue) {\n this[mapped] = headerValue;\n }\n }\n});\n\nutils.freezeMethods(AxiosHeaders);\n\nexport default AxiosHeaders;\n","'use strict';\n\nimport utils from './../utils.js';\nimport defaults from '../defaults/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\n\n/**\n * Transform the data for a request or a response\n *\n * @param {Array|Function} fns A single function or Array of functions\n * @param {?Object} response The response object\n *\n * @returns {*} The resulting transformed data\n */\nexport default function transformData(fns, response) {\n const config = this || defaults;\n const context = response || config;\n const headers = AxiosHeaders.from(context.headers);\n let data = context.data;\n\n utils.forEach(fns, function transform(fn) {\n data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);\n });\n\n headers.normalize();\n\n return data;\n}\n","'use strict';\n\nexport default function isCancel(value) {\n return !!(value && value.__CANCEL__);\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport utils from '../utils.js';\n\n/**\n * A `CanceledError` is an object that is thrown when an operation is canceled.\n *\n * @param {string=} message The message.\n * @param {Object=} config The config.\n * @param {Object=} request The request.\n *\n * @returns {CanceledError} The created error.\n */\nfunction CanceledError(message, config, request) {\n // eslint-disable-next-line no-eq-null,eqeqeq\n AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);\n this.name = 'CanceledError';\n}\n\nutils.inherits(CanceledError, AxiosError, {\n __CANCEL__: true\n});\n\nexport default CanceledError;\n","'use strict';\n\nimport AxiosError from './AxiosError.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 *\n * @returns {object} The response.\n */\nexport default function settle(resolve, reject, response) {\n const validateStatus = response.config.validateStatus;\n if (!response.status || !validateStatus || validateStatus(response.status)) {\n resolve(response);\n } else {\n reject(new AxiosError(\n 'Request failed with status code ' + response.status,\n [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],\n response.config,\n response.request,\n response\n ));\n }\n}\n","'use strict';\n\n/**\n * Determines whether the specified URL is absolute\n *\n * @param {string} url The URL to test\n *\n * @returns {boolean} True if the specified URL is absolute, otherwise false\n */\nexport default function isAbsoluteURL(url) {\n // A URL is considered absolute if it begins with \"://\" 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","'use strict';\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 *\n * @returns {string} The combined URL\n */\nexport default function combineURLs(baseURL, relativeURL) {\n return relativeURL\n ? baseURL.replace(/\\/?\\/$/, '') + '/' + relativeURL.replace(/^\\/+/, '')\n : baseURL;\n}\n","'use strict';\n\nimport isAbsoluteURL from '../helpers/isAbsoluteURL.js';\nimport combineURLs from '../helpers/combineURLs.js';\n\n/**\n * Creates a new URL by combining the baseURL with the requestedURL,\n * only when the requestedURL is not already an absolute URL.\n * If the requestURL is absolute, this function returns the requestedURL untouched.\n *\n * @param {string} baseURL The base URL\n * @param {string} requestedURL Absolute or relative URL to combine\n *\n * @returns {string} The combined full path\n */\nexport default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {\n let isRelativeUrl = !isAbsoluteURL(requestedURL);\n if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {\n return combineURLs(baseURL, requestedURL);\n }\n return requestedURL;\n}\n","export const VERSION = \"1.9.0\";","'use strict';\n\nexport default function parseProtocol(url) {\n const match = /^([-+\\w]{1,25})(:?\\/\\/|:)/.exec(url);\n return match && match[1] || '';\n}\n","'use strict';\n\nimport AxiosError from '../core/AxiosError.js';\nimport parseProtocol from './parseProtocol.js';\nimport platform from '../platform/index.js';\n\nconst DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\\s\\S]*)$/;\n\n/**\n * Parse data uri to a Buffer or Blob\n *\n * @param {String} uri\n * @param {?Boolean} asBlob\n * @param {?Object} options\n * @param {?Function} options.Blob\n *\n * @returns {Buffer|Blob}\n */\nexport default function fromDataURI(uri, asBlob, options) {\n const _Blob = options && options.Blob || platform.classes.Blob;\n const protocol = parseProtocol(uri);\n\n if (asBlob === undefined && _Blob) {\n asBlob = true;\n }\n\n if (protocol === 'data') {\n uri = protocol.length ? uri.slice(protocol.length + 1) : uri;\n\n const match = DATA_URL_PATTERN.exec(uri);\n\n if (!match) {\n throw new AxiosError('Invalid URL', AxiosError.ERR_INVALID_URL);\n }\n\n const mime = match[1];\n const isBase64 = match[2];\n const body = match[3];\n const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? 'base64' : 'utf8');\n\n if (asBlob) {\n if (!_Blob) {\n throw new AxiosError('Blob is not supported', AxiosError.ERR_NOT_SUPPORT);\n }\n\n return new _Blob([buffer], {type: mime});\n }\n\n return buffer;\n }\n\n throw new AxiosError('Unsupported protocol ' + protocol, AxiosError.ERR_NOT_SUPPORT);\n}\n","'use strict';\n\nimport stream from 'stream';\nimport utils from '../utils.js';\n\nconst kInternals = Symbol('internals');\n\nclass AxiosTransformStream extends stream.Transform{\n constructor(options) {\n options = utils.toFlatObject(options, {\n maxRate: 0,\n chunkSize: 64 * 1024,\n minChunkSize: 100,\n timeWindow: 500,\n ticksRate: 2,\n samplesCount: 15\n }, null, (prop, source) => {\n return !utils.isUndefined(source[prop]);\n });\n\n super({\n readableHighWaterMark: options.chunkSize\n });\n\n const internals = this[kInternals] = {\n timeWindow: options.timeWindow,\n chunkSize: options.chunkSize,\n maxRate: options.maxRate,\n minChunkSize: options.minChunkSize,\n bytesSeen: 0,\n isCaptured: false,\n notifiedBytesLoaded: 0,\n ts: Date.now(),\n bytes: 0,\n onReadCallback: null\n };\n\n this.on('newListener', event => {\n if (event === 'progress') {\n if (!internals.isCaptured) {\n internals.isCaptured = true;\n }\n }\n });\n }\n\n _read(size) {\n const internals = this[kInternals];\n\n if (internals.onReadCallback) {\n internals.onReadCallback();\n }\n\n return super._read(size);\n }\n\n _transform(chunk, encoding, callback) {\n const internals = this[kInternals];\n const maxRate = internals.maxRate;\n\n const readableHighWaterMark = this.readableHighWaterMark;\n\n const timeWindow = internals.timeWindow;\n\n const divider = 1000 / timeWindow;\n const bytesThreshold = (maxRate / divider);\n const minChunkSize = internals.minChunkSize !== false ? Math.max(internals.minChunkSize, bytesThreshold * 0.01) : 0;\n\n const pushChunk = (_chunk, _callback) => {\n const bytes = Buffer.byteLength(_chunk);\n internals.bytesSeen += bytes;\n internals.bytes += bytes;\n\n internals.isCaptured && this.emit('progress', internals.bytesSeen);\n\n if (this.push(_chunk)) {\n process.nextTick(_callback);\n } else {\n internals.onReadCallback = () => {\n internals.onReadCallback = null;\n process.nextTick(_callback);\n };\n }\n }\n\n const transformChunk = (_chunk, _callback) => {\n const chunkSize = Buffer.byteLength(_chunk);\n let chunkRemainder = null;\n let maxChunkSize = readableHighWaterMark;\n let bytesLeft;\n let passed = 0;\n\n if (maxRate) {\n const now = Date.now();\n\n if (!internals.ts || (passed = (now - internals.ts)) >= timeWindow) {\n internals.ts = now;\n bytesLeft = bytesThreshold - internals.bytes;\n internals.bytes = bytesLeft < 0 ? -bytesLeft : 0;\n passed = 0;\n }\n\n bytesLeft = bytesThreshold - internals.bytes;\n }\n\n if (maxRate) {\n if (bytesLeft <= 0) {\n // next time window\n return setTimeout(() => {\n _callback(null, _chunk);\n }, timeWindow - passed);\n }\n\n if (bytesLeft < maxChunkSize) {\n maxChunkSize = bytesLeft;\n }\n }\n\n if (maxChunkSize && chunkSize > maxChunkSize && (chunkSize - maxChunkSize) > minChunkSize) {\n chunkRemainder = _chunk.subarray(maxChunkSize);\n _chunk = _chunk.subarray(0, maxChunkSize);\n }\n\n pushChunk(_chunk, chunkRemainder ? () => {\n process.nextTick(_callback, null, chunkRemainder);\n } : _callback);\n };\n\n transformChunk(chunk, function transformNextChunk(err, _chunk) {\n if (err) {\n return callback(err);\n }\n\n if (_chunk) {\n transformChunk(_chunk, transformNextChunk);\n } else {\n callback(null);\n }\n });\n }\n}\n\nexport default AxiosTransformStream;\n","const {asyncIterator} = Symbol;\n\nconst readBlob = async function* (blob) {\n if (blob.stream) {\n yield* blob.stream()\n } else if (blob.arrayBuffer) {\n yield await blob.arrayBuffer()\n } else if (blob[asyncIterator]) {\n yield* blob[asyncIterator]();\n } else {\n yield blob;\n }\n}\n\nexport default readBlob;\n","import util from 'util';\nimport {Readable} from 'stream';\nimport utils from \"../utils.js\";\nimport readBlob from \"./readBlob.js\";\nimport platform from \"../platform/index.js\";\n\nconst BOUNDARY_ALPHABET = platform.ALPHABET.ALPHA_DIGIT + '-_';\n\nconst textEncoder = typeof TextEncoder === 'function' ? new TextEncoder() : new util.TextEncoder();\n\nconst CRLF = '\\r\\n';\nconst CRLF_BYTES = textEncoder.encode(CRLF);\nconst CRLF_BYTES_COUNT = 2;\n\nclass FormDataPart {\n constructor(name, value) {\n const {escapeName} = this.constructor;\n const isStringValue = utils.isString(value);\n\n let headers = `Content-Disposition: form-data; name=\"${escapeName(name)}\"${\n !isStringValue && value.name ? `; filename=\"${escapeName(value.name)}\"` : ''\n }${CRLF}`;\n\n if (isStringValue) {\n value = textEncoder.encode(String(value).replace(/\\r?\\n|\\r\\n?/g, CRLF));\n } else {\n headers += `Content-Type: ${value.type || \"application/octet-stream\"}${CRLF}`\n }\n\n this.headers = textEncoder.encode(headers + CRLF);\n\n this.contentLength = isStringValue ? value.byteLength : value.size;\n\n this.size = this.headers.byteLength + this.contentLength + CRLF_BYTES_COUNT;\n\n this.name = name;\n this.value = value;\n }\n\n async *encode(){\n yield this.headers;\n\n const {value} = this;\n\n if(utils.isTypedArray(value)) {\n yield value;\n } else {\n yield* readBlob(value);\n }\n\n yield CRLF_BYTES;\n }\n\n static escapeName(name) {\n return String(name).replace(/[\\r\\n\"]/g, (match) => ({\n '\\r' : '%0D',\n '\\n' : '%0A',\n '\"' : '%22',\n }[match]));\n }\n}\n\nconst formDataToStream = (form, headersHandler, options) => {\n const {\n tag = 'form-data-boundary',\n size = 25,\n boundary = tag + '-' + platform.generateString(size, BOUNDARY_ALPHABET)\n } = options || {};\n\n if(!utils.isFormData(form)) {\n throw TypeError('FormData instance required');\n }\n\n if (boundary.length < 1 || boundary.length > 70) {\n throw Error('boundary must be 10-70 characters long')\n }\n\n const boundaryBytes = textEncoder.encode('--' + boundary + CRLF);\n const footerBytes = textEncoder.encode('--' + boundary + '--' + CRLF);\n let contentLength = footerBytes.byteLength;\n\n const parts = Array.from(form.entries()).map(([name, value]) => {\n const part = new FormDataPart(name, value);\n contentLength += part.size;\n return part;\n });\n\n contentLength += boundaryBytes.byteLength * parts.length;\n\n contentLength = utils.toFiniteNumber(contentLength);\n\n const computedHeaders = {\n 'Content-Type': `multipart/form-data; boundary=${boundary}`\n }\n\n if (Number.isFinite(contentLength)) {\n computedHeaders['Content-Length'] = contentLength;\n }\n\n headersHandler && headersHandler(computedHeaders);\n\n return Readable.from((async function *() {\n for(const part of parts) {\n yield boundaryBytes;\n yield* part.encode();\n }\n\n yield footerBytes;\n })());\n};\n\nexport default formDataToStream;\n","\"use strict\";\n\nimport stream from \"stream\";\n\nclass ZlibHeaderTransformStream extends stream.Transform {\n __transform(chunk, encoding, callback) {\n this.push(chunk);\n callback();\n }\n\n _transform(chunk, encoding, callback) {\n if (chunk.length !== 0) {\n this._transform = this.__transform;\n\n // Add Default Compression headers if no zlib headers are present\n if (chunk[0] !== 120) { // Hex: 78\n const header = Buffer.alloc(2);\n header[0] = 120; // Hex: 78\n header[1] = 156; // Hex: 9C \n this.push(header, encoding);\n }\n }\n\n this.__transform(chunk, encoding, callback);\n }\n}\n\nexport default ZlibHeaderTransformStream;\n","import utils from \"../utils.js\";\n\nconst callbackify = (fn, reducer) => {\n return utils.isAsyncFn(fn) ? function (...args) {\n const cb = args.pop();\n fn.apply(this, args).then((value) => {\n try {\n reducer ? cb(null, ...reducer(value)) : cb(null, value);\n } catch (err) {\n cb(err);\n }\n }, cb);\n } : fn;\n}\n\nexport default callbackify;\n","'use strict';\n\n/**\n * Calculate data maxRate\n * @param {Number} [samplesCount= 10]\n * @param {Number} [min= 1000]\n * @returns {Function}\n */\nfunction speedometer(samplesCount, min) {\n samplesCount = samplesCount || 10;\n const bytes = new Array(samplesCount);\n const timestamps = new Array(samplesCount);\n let head = 0;\n let tail = 0;\n let firstSampleTS;\n\n min = min !== undefined ? min : 1000;\n\n return function push(chunkLength) {\n const now = Date.now();\n\n const startedAt = timestamps[tail];\n\n if (!firstSampleTS) {\n firstSampleTS = now;\n }\n\n bytes[head] = chunkLength;\n timestamps[head] = now;\n\n let i = tail;\n let bytesCount = 0;\n\n while (i !== head) {\n bytesCount += bytes[i++];\n i = i % samplesCount;\n }\n\n head = (head + 1) % samplesCount;\n\n if (head === tail) {\n tail = (tail + 1) % samplesCount;\n }\n\n if (now - firstSampleTS < min) {\n return;\n }\n\n const passed = startedAt && now - startedAt;\n\n return passed ? Math.round(bytesCount * 1000 / passed) : undefined;\n };\n}\n\nexport default speedometer;\n","/**\n * Throttle decorator\n * @param {Function} fn\n * @param {Number} freq\n * @return {Function}\n */\nfunction throttle(fn, freq) {\n let timestamp = 0;\n let threshold = 1000 / freq;\n let lastArgs;\n let timer;\n\n const invoke = (args, now = Date.now()) => {\n timestamp = now;\n lastArgs = null;\n if (timer) {\n clearTimeout(timer);\n timer = null;\n }\n fn.apply(null, args);\n }\n\n const throttled = (...args) => {\n const now = Date.now();\n const passed = now - timestamp;\n if ( passed >= threshold) {\n invoke(args, now);\n } else {\n lastArgs = args;\n if (!timer) {\n timer = setTimeout(() => {\n timer = null;\n invoke(lastArgs)\n }, threshold - passed);\n }\n }\n }\n\n const flush = () => lastArgs && invoke(lastArgs);\n\n return [throttled, flush];\n}\n\nexport default throttle;\n","import speedometer from \"./speedometer.js\";\nimport throttle from \"./throttle.js\";\nimport utils from \"../utils.js\";\n\nexport const progressEventReducer = (listener, isDownloadStream, freq = 3) => {\n let bytesNotified = 0;\n const _speedometer = speedometer(50, 250);\n\n return throttle(e => {\n const loaded = e.loaded;\n const total = e.lengthComputable ? e.total : undefined;\n const progressBytes = loaded - bytesNotified;\n const rate = _speedometer(progressBytes);\n const inRange = loaded <= total;\n\n bytesNotified = loaded;\n\n const data = {\n loaded,\n total,\n progress: total ? (loaded / total) : undefined,\n bytes: progressBytes,\n rate: rate ? rate : undefined,\n estimated: rate && total && inRange ? (total - loaded) / rate : undefined,\n event: e,\n lengthComputable: total != null,\n [isDownloadStream ? 'download' : 'upload']: true\n };\n\n listener(data);\n }, freq);\n}\n\nexport const progressEventDecorator = (total, throttled) => {\n const lengthComputable = total != null;\n\n return [(loaded) => throttled[0]({\n lengthComputable,\n total,\n loaded\n }), throttled[1]];\n}\n\nexport const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args));\n","'use strict';\n\nimport utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport buildFullPath from '../core/buildFullPath.js';\nimport buildURL from './../helpers/buildURL.js';\nimport proxyFromEnv from 'proxy-from-env';\nimport http from 'http';\nimport https from 'https';\nimport util from 'util';\nimport followRedirects from 'follow-redirects';\nimport zlib from 'zlib';\nimport {VERSION} from '../env/data.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport platform from '../platform/index.js';\nimport fromDataURI from '../helpers/fromDataURI.js';\nimport stream from 'stream';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport AxiosTransformStream from '../helpers/AxiosTransformStream.js';\nimport {EventEmitter} from 'events';\nimport formDataToStream from \"../helpers/formDataToStream.js\";\nimport readBlob from \"../helpers/readBlob.js\";\nimport ZlibHeaderTransformStream from '../helpers/ZlibHeaderTransformStream.js';\nimport callbackify from \"../helpers/callbackify.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\n\nconst zlibOptions = {\n flush: zlib.constants.Z_SYNC_FLUSH,\n finishFlush: zlib.constants.Z_SYNC_FLUSH\n};\n\nconst brotliOptions = {\n flush: zlib.constants.BROTLI_OPERATION_FLUSH,\n finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH\n}\n\nconst isBrotliSupported = utils.isFunction(zlib.createBrotliDecompress);\n\nconst {http: httpFollow, https: httpsFollow} = followRedirects;\n\nconst isHttps = /https:?/;\n\nconst supportedProtocols = platform.protocols.map(protocol => {\n return protocol + ':';\n});\n\nconst flushOnFinish = (stream, [throttled, flush]) => {\n stream\n .on('end', flush)\n .on('error', flush);\n\n return throttled;\n}\n\n/**\n * If the proxy or config beforeRedirects functions are defined, call them with the options\n * object.\n *\n * @param {Object} options - The options object that was passed to the request.\n *\n * @returns {Object}\n */\nfunction dispatchBeforeRedirect(options, responseDetails) {\n if (options.beforeRedirects.proxy) {\n options.beforeRedirects.proxy(options);\n }\n if (options.beforeRedirects.config) {\n options.beforeRedirects.config(options, responseDetails);\n }\n}\n\n/**\n * If the proxy or config afterRedirects functions are defined, call them with the options\n *\n * @param {http.ClientRequestArgs} options\n * @param {AxiosProxyConfig} configProxy configuration from Axios options object\n * @param {string} location\n *\n * @returns {http.ClientRequestArgs}\n */\nfunction setProxy(options, configProxy, location) {\n let proxy = configProxy;\n if (!proxy && proxy !== false) {\n const proxyUrl = proxyFromEnv.getProxyForUrl(location);\n if (proxyUrl) {\n proxy = new URL(proxyUrl);\n }\n }\n if (proxy) {\n // Basic proxy authorization\n if (proxy.username) {\n proxy.auth = (proxy.username || '') + ':' + (proxy.password || '');\n }\n\n if (proxy.auth) {\n // Support proxy auth object form\n if (proxy.auth.username || proxy.auth.password) {\n proxy.auth = (proxy.auth.username || '') + ':' + (proxy.auth.password || '');\n }\n const base64 = Buffer\n .from(proxy.auth, 'utf8')\n .toString('base64');\n options.headers['Proxy-Authorization'] = 'Basic ' + base64;\n }\n\n options.headers.host = options.hostname + (options.port ? ':' + options.port : '');\n const proxyHost = proxy.hostname || proxy.host;\n options.hostname = proxyHost;\n // Replace 'host' since options is not a URL object\n options.host = proxyHost;\n options.port = proxy.port;\n options.path = location;\n if (proxy.protocol) {\n options.protocol = proxy.protocol.includes(':') ? proxy.protocol : `${proxy.protocol}:`;\n }\n }\n\n options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) {\n // Configure proxy for redirected request, passing the original config proxy to apply\n // the exact same logic as if the redirected request was performed by axios directly.\n setProxy(redirectOptions, configProxy, redirectOptions.href);\n };\n}\n\nconst isHttpAdapterSupported = typeof process !== 'undefined' && utils.kindOf(process) === 'process';\n\n// temporary hotfix\n\nconst wrapAsync = (asyncExecutor) => {\n return new Promise((resolve, reject) => {\n let onDone;\n let isDone;\n\n const done = (value, isRejected) => {\n if (isDone) return;\n isDone = true;\n onDone && onDone(value, isRejected);\n }\n\n const _resolve = (value) => {\n done(value);\n resolve(value);\n };\n\n const _reject = (reason) => {\n done(reason, true);\n reject(reason);\n }\n\n asyncExecutor(_resolve, _reject, (onDoneHandler) => (onDone = onDoneHandler)).catch(_reject);\n })\n};\n\nconst resolveFamily = ({address, family}) => {\n if (!utils.isString(address)) {\n throw TypeError('address must be a string');\n }\n return ({\n address,\n family: family || (address.indexOf('.') < 0 ? 6 : 4)\n });\n}\n\nconst buildAddressEntry = (address, family) => resolveFamily(utils.isObject(address) ? address : {address, family});\n\n/*eslint consistent-return:0*/\nexport default isHttpAdapterSupported && function httpAdapter(config) {\n return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) {\n let {data, lookup, family} = config;\n const {responseType, responseEncoding} = config;\n const method = config.method.toUpperCase();\n let isDone;\n let rejected = false;\n let req;\n\n if (lookup) {\n const _lookup = callbackify(lookup, (value) => utils.isArray(value) ? value : [value]);\n // hotfix to support opt.all option which is required for node 20.x\n lookup = (hostname, opt, cb) => {\n _lookup(hostname, opt, (err, arg0, arg1) => {\n if (err) {\n return cb(err);\n }\n\n const addresses = utils.isArray(arg0) ? arg0.map(addr => buildAddressEntry(addr)) : [buildAddressEntry(arg0, arg1)];\n\n opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family);\n });\n }\n }\n\n // temporary internal emitter until the AxiosRequest class will be implemented\n const emitter = new EventEmitter();\n\n const onFinished = () => {\n if (config.cancelToken) {\n config.cancelToken.unsubscribe(abort);\n }\n\n if (config.signal) {\n config.signal.removeEventListener('abort', abort);\n }\n\n emitter.removeAllListeners();\n }\n\n onDone((value, isRejected) => {\n isDone = true;\n if (isRejected) {\n rejected = true;\n onFinished();\n }\n });\n\n function abort(reason) {\n emitter.emit('abort', !reason || reason.type ? new CanceledError(null, config, req) : reason);\n }\n\n emitter.once('abort', reject);\n\n if (config.cancelToken || config.signal) {\n config.cancelToken && config.cancelToken.subscribe(abort);\n if (config.signal) {\n config.signal.aborted ? abort() : config.signal.addEventListener('abort', abort);\n }\n }\n\n // Parse url\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n const parsed = new URL(fullPath, platform.hasBrowserEnv ? platform.origin : undefined);\n const protocol = parsed.protocol || supportedProtocols[0];\n\n if (protocol === 'data:') {\n let convertedData;\n\n if (method !== 'GET') {\n return settle(resolve, reject, {\n status: 405,\n statusText: 'method not allowed',\n headers: {},\n config\n });\n }\n\n try {\n convertedData = fromDataURI(config.url, responseType === 'blob', {\n Blob: config.env && config.env.Blob\n });\n } catch (err) {\n throw AxiosError.from(err, AxiosError.ERR_BAD_REQUEST, config);\n }\n\n if (responseType === 'text') {\n convertedData = convertedData.toString(responseEncoding);\n\n if (!responseEncoding || responseEncoding === 'utf8') {\n convertedData = utils.stripBOM(convertedData);\n }\n } else if (responseType === 'stream') {\n convertedData = stream.Readable.from(convertedData);\n }\n\n return settle(resolve, reject, {\n data: convertedData,\n status: 200,\n statusText: 'OK',\n headers: new AxiosHeaders(),\n config\n });\n }\n\n if (supportedProtocols.indexOf(protocol) === -1) {\n return reject(new AxiosError(\n 'Unsupported protocol ' + protocol,\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n\n const headers = AxiosHeaders.from(config.headers).normalize();\n\n // Set User-Agent (required by some servers)\n // See https://github.com/axios/axios/issues/69\n // User-Agent is specified; handle case where no UA header is desired\n // Only set header if it hasn't been set in config\n headers.set('User-Agent', 'axios/' + VERSION, false);\n\n const {onUploadProgress, onDownloadProgress} = config;\n const maxRate = config.maxRate;\n let maxUploadRate = undefined;\n let maxDownloadRate = undefined;\n\n // support for spec compliant FormData objects\n if (utils.isSpecCompliantForm(data)) {\n const userBoundary = headers.getContentType(/boundary=([-_\\w\\d]{10,70})/i);\n\n data = formDataToStream(data, (formHeaders) => {\n headers.set(formHeaders);\n }, {\n tag: `axios-${VERSION}-boundary`,\n boundary: userBoundary && userBoundary[1] || undefined\n });\n // support for https://www.npmjs.com/package/form-data api\n } else if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) {\n headers.set(data.getHeaders());\n\n if (!headers.hasContentLength()) {\n try {\n const knownLength = await util.promisify(data.getLength).call(data);\n Number.isFinite(knownLength) && knownLength >= 0 && headers.setContentLength(knownLength);\n /*eslint no-empty:0*/\n } catch (e) {\n }\n }\n } else if (utils.isBlob(data) || utils.isFile(data)) {\n data.size && headers.setContentType(data.type || 'application/octet-stream');\n headers.setContentLength(data.size || 0);\n data = stream.Readable.from(readBlob(data));\n } else if (data && !utils.isStream(data)) {\n if (Buffer.isBuffer(data)) {\n // Nothing to do...\n } else if (utils.isArrayBuffer(data)) {\n data = Buffer.from(new Uint8Array(data));\n } else if (utils.isString(data)) {\n data = Buffer.from(data, 'utf-8');\n } else {\n return reject(new AxiosError(\n 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n\n // Add Content-Length header if data exists\n headers.setContentLength(data.length, false);\n\n if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) {\n return reject(new AxiosError(\n 'Request body larger than maxBodyLength limit',\n AxiosError.ERR_BAD_REQUEST,\n config\n ));\n }\n }\n\n const contentLength = utils.toFiniteNumber(headers.getContentLength());\n\n if (utils.isArray(maxRate)) {\n maxUploadRate = maxRate[0];\n maxDownloadRate = maxRate[1];\n } else {\n maxUploadRate = maxDownloadRate = maxRate;\n }\n\n if (data && (onUploadProgress || maxUploadRate)) {\n if (!utils.isStream(data)) {\n data = stream.Readable.from(data, {objectMode: false});\n }\n\n data = stream.pipeline([data, new AxiosTransformStream({\n maxRate: utils.toFiniteNumber(maxUploadRate)\n })], utils.noop);\n\n onUploadProgress && data.on('progress', flushOnFinish(\n data,\n progressEventDecorator(\n contentLength,\n progressEventReducer(asyncDecorator(onUploadProgress), false, 3)\n )\n ));\n }\n\n // HTTP basic authentication\n let auth = undefined;\n if (config.auth) {\n const username = config.auth.username || '';\n const password = config.auth.password || '';\n auth = username + ':' + password;\n }\n\n if (!auth && parsed.username) {\n const urlUsername = parsed.username;\n const urlPassword = parsed.password;\n auth = urlUsername + ':' + urlPassword;\n }\n\n auth && headers.delete('authorization');\n\n let path;\n\n try {\n path = buildURL(\n parsed.pathname + parsed.search,\n config.params,\n config.paramsSerializer\n ).replace(/^\\?/, '');\n } catch (err) {\n const customErr = new Error(err.message);\n customErr.config = config;\n customErr.url = config.url;\n customErr.exists = true;\n return reject(customErr);\n }\n\n headers.set(\n 'Accept-Encoding',\n 'gzip, compress, deflate' + (isBrotliSupported ? ', br' : ''), false\n );\n\n const options = {\n path,\n method: method,\n headers: headers.toJSON(),\n agents: { http: config.httpAgent, https: config.httpsAgent },\n auth,\n protocol,\n family,\n beforeRedirect: dispatchBeforeRedirect,\n beforeRedirects: {}\n };\n\n // cacheable-lookup integration hotfix\n !utils.isUndefined(lookup) && (options.lookup = lookup);\n\n if (config.socketPath) {\n options.socketPath = config.socketPath;\n } else {\n options.hostname = parsed.hostname.startsWith(\"[\") ? parsed.hostname.slice(1, -1) : parsed.hostname;\n options.port = parsed.port;\n setProxy(options, config.proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path);\n }\n\n let transport;\n const isHttpsRequest = isHttps.test(options.protocol);\n options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;\n if (config.transport) {\n transport = config.transport;\n } else if (config.maxRedirects === 0) {\n transport = isHttpsRequest ? https : http;\n } else {\n if (config.maxRedirects) {\n options.maxRedirects = config.maxRedirects;\n }\n if (config.beforeRedirect) {\n options.beforeRedirects.config = config.beforeRedirect;\n }\n transport = isHttpsRequest ? httpsFollow : httpFollow;\n }\n\n if (config.maxBodyLength > -1) {\n options.maxBodyLength = config.maxBodyLength;\n } else {\n // follow-redirects does not skip comparison, so it should always succeed for axios -1 unlimited\n options.maxBodyLength = Infinity;\n }\n\n if (config.insecureHTTPParser) {\n options.insecureHTTPParser = config.insecureHTTPParser;\n }\n\n // Create the request\n req = transport.request(options, function handleResponse(res) {\n if (req.destroyed) return;\n\n const streams = [res];\n\n const responseLength = +res.headers['content-length'];\n\n if (onDownloadProgress || maxDownloadRate) {\n const transformStream = new AxiosTransformStream({\n maxRate: utils.toFiniteNumber(maxDownloadRate)\n });\n\n onDownloadProgress && transformStream.on('progress', flushOnFinish(\n transformStream,\n progressEventDecorator(\n responseLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true, 3)\n )\n ));\n\n streams.push(transformStream);\n }\n\n // decompress the response body transparently if required\n let responseStream = res;\n\n // return the last request in case of redirects\n const lastRequest = res.req || req;\n\n // if decompress disabled we should not decompress\n if (config.decompress !== false && res.headers['content-encoding']) {\n // if no content, but headers still say that it is encoded,\n // remove the header not confuse downstream operations\n if (method === 'HEAD' || res.statusCode === 204) {\n delete res.headers['content-encoding'];\n }\n\n switch ((res.headers['content-encoding'] || '').toLowerCase()) {\n /*eslint default-case:0*/\n case 'gzip':\n case 'x-gzip':\n case 'compress':\n case 'x-compress':\n // add the unzipper to the body stream processing pipeline\n streams.push(zlib.createUnzip(zlibOptions));\n\n // remove the content-encoding in order to not confuse downstream operations\n delete res.headers['content-encoding'];\n break;\n case 'deflate':\n streams.push(new ZlibHeaderTransformStream());\n\n // add the unzipper to the body stream processing pipeline\n streams.push(zlib.createUnzip(zlibOptions));\n\n // remove the content-encoding in order to not confuse downstream operations\n delete res.headers['content-encoding'];\n break;\n case 'br':\n if (isBrotliSupported) {\n streams.push(zlib.createBrotliDecompress(brotliOptions));\n delete res.headers['content-encoding'];\n }\n }\n }\n\n responseStream = streams.length > 1 ? stream.pipeline(streams, utils.noop) : streams[0];\n\n const offListeners = stream.finished(responseStream, () => {\n offListeners();\n onFinished();\n });\n\n const response = {\n status: res.statusCode,\n statusText: res.statusMessage,\n headers: new AxiosHeaders(res.headers),\n config,\n request: lastRequest\n };\n\n if (responseType === 'stream') {\n response.data = responseStream;\n settle(resolve, reject, response);\n } else {\n const responseBuffer = [];\n let totalResponseBytes = 0;\n\n responseStream.on('data', function handleStreamData(chunk) {\n responseBuffer.push(chunk);\n totalResponseBytes += chunk.length;\n\n // make sure the content length is not over the maxContentLength if specified\n if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {\n // stream.destroy() emit aborted event before calling reject() on Node.js v16\n rejected = true;\n responseStream.destroy();\n reject(new AxiosError('maxContentLength size of ' + config.maxContentLength + ' exceeded',\n AxiosError.ERR_BAD_RESPONSE, config, lastRequest));\n }\n });\n\n responseStream.on('aborted', function handlerStreamAborted() {\n if (rejected) {\n return;\n }\n\n const err = new AxiosError(\n 'stream has been aborted',\n AxiosError.ERR_BAD_RESPONSE,\n config,\n lastRequest\n );\n responseStream.destroy(err);\n reject(err);\n });\n\n responseStream.on('error', function handleStreamError(err) {\n if (req.destroyed) return;\n reject(AxiosError.from(err, null, config, lastRequest));\n });\n\n responseStream.on('end', function handleStreamEnd() {\n try {\n let responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer);\n if (responseType !== 'arraybuffer') {\n responseData = responseData.toString(responseEncoding);\n if (!responseEncoding || responseEncoding === 'utf8') {\n responseData = utils.stripBOM(responseData);\n }\n }\n response.data = responseData;\n } catch (err) {\n return reject(AxiosError.from(err, null, config, response.request, response));\n }\n settle(resolve, reject, response);\n });\n }\n\n emitter.once('abort', err => {\n if (!responseStream.destroyed) {\n responseStream.emit('error', err);\n responseStream.destroy();\n }\n });\n });\n\n emitter.once('abort', err => {\n reject(err);\n req.destroy(err);\n });\n\n // Handle errors\n req.on('error', function handleRequestError(err) {\n // @todo remove\n // if (req.aborted && err.code !== AxiosError.ERR_FR_TOO_MANY_REDIRECTS) return;\n reject(AxiosError.from(err, null, config, req));\n });\n\n // set tcp keep alive to prevent drop connection by peer\n req.on('socket', function handleRequestSocket(socket) {\n // default interval of sending ack packet is 1 minute\n socket.setKeepAlive(true, 1000 * 60);\n });\n\n // Handle request timeout\n if (config.timeout) {\n // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types.\n const timeout = parseInt(config.timeout, 10);\n\n if (Number.isNaN(timeout)) {\n reject(new AxiosError(\n 'error trying to parse `config.timeout` to int',\n AxiosError.ERR_BAD_OPTION_VALUE,\n config,\n req\n ));\n\n return;\n }\n\n // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system.\n // And timer callback will be fired, and abort() will be invoked before connection, then get \"socket hang up\" and code ECONNRESET.\n // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up.\n // And then these socket which be hang up will devouring CPU little by little.\n // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.\n req.setTimeout(timeout, function handleRequestTimeout() {\n if (isDone) return;\n let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = config.transitional || transitionalDefaults;\n if (config.timeoutErrorMessage) {\n timeoutErrorMessage = config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n req\n ));\n abort();\n });\n }\n\n\n // Send the request\n if (utils.isStream(data)) {\n let ended = false;\n let errored = false;\n\n data.on('end', () => {\n ended = true;\n });\n\n data.once('error', err => {\n errored = true;\n req.destroy(err);\n });\n\n data.on('close', () => {\n if (!ended && !errored) {\n abort(new CanceledError('Request stream has been aborted', config, req));\n }\n });\n\n data.pipe(req);\n } else {\n req.end(data);\n }\n });\n}\n\nexport const __setProxy = setProxy;\n","import platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => {\n url = new URL(url, platform.origin);\n\n return (\n origin.protocol === url.protocol &&\n origin.host === url.host &&\n (isMSIE || origin.port === url.port)\n );\n})(\n new URL(platform.origin),\n platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent)\n) : () => true;\n","import utils from './../utils.js';\nimport platform from '../platform/index.js';\n\nexport default platform.hasStandardBrowserEnv ?\n\n // Standard browser envs support document.cookie\n {\n write(name, value, expires, path, domain, secure) {\n const cookie = [name + '=' + encodeURIComponent(value)];\n\n utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());\n\n utils.isString(path) && cookie.push('path=' + path);\n\n utils.isString(domain) && cookie.push('domain=' + domain);\n\n secure === true && cookie.push('secure');\n\n document.cookie = cookie.join('; ');\n },\n\n read(name) {\n const match = document.cookie.match(new RegExp('(^|;\\\\s*)(' + name + ')=([^;]*)'));\n return (match ? decodeURIComponent(match[3]) : null);\n },\n\n remove(name) {\n this.write(name, '', Date.now() - 86400000);\n }\n }\n\n :\n\n // Non-standard browser env (web workers, react-native) lack needed support.\n {\n write() {},\n read() {\n return null;\n },\n remove() {}\n };\n\n","'use strict';\n\nimport utils from '../utils.js';\nimport AxiosHeaders from \"./AxiosHeaders.js\";\n\nconst headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing;\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 *\n * @returns {Object} New object resulting from merging config2 to config1\n */\nexport default function mergeConfig(config1, config2) {\n // eslint-disable-next-line no-param-reassign\n config2 = config2 || {};\n const config = {};\n\n function getMergedValue(target, source, prop, caseless) {\n if (utils.isPlainObject(target) && utils.isPlainObject(source)) {\n return utils.merge.call({caseless}, target, source);\n } else if (utils.isPlainObject(source)) {\n return utils.merge({}, source);\n } else if (utils.isArray(source)) {\n return source.slice();\n }\n return source;\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDeepProperties(a, b, prop , caseless) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(a, b, prop , caseless);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a, prop , caseless);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function valueFromConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function defaultToConfig2(a, b) {\n if (!utils.isUndefined(b)) {\n return getMergedValue(undefined, b);\n } else if (!utils.isUndefined(a)) {\n return getMergedValue(undefined, a);\n }\n }\n\n // eslint-disable-next-line consistent-return\n function mergeDirectKeys(a, b, prop) {\n if (prop in config2) {\n return getMergedValue(a, b);\n } else if (prop in config1) {\n return getMergedValue(undefined, a);\n }\n }\n\n const mergeMap = {\n url: valueFromConfig2,\n method: valueFromConfig2,\n data: valueFromConfig2,\n baseURL: defaultToConfig2,\n transformRequest: defaultToConfig2,\n transformResponse: defaultToConfig2,\n paramsSerializer: defaultToConfig2,\n timeout: defaultToConfig2,\n timeoutMessage: defaultToConfig2,\n withCredentials: defaultToConfig2,\n withXSRFToken: defaultToConfig2,\n adapter: defaultToConfig2,\n responseType: defaultToConfig2,\n xsrfCookieName: defaultToConfig2,\n xsrfHeaderName: defaultToConfig2,\n onUploadProgress: defaultToConfig2,\n onDownloadProgress: defaultToConfig2,\n decompress: defaultToConfig2,\n maxContentLength: defaultToConfig2,\n maxBodyLength: defaultToConfig2,\n beforeRedirect: defaultToConfig2,\n transport: defaultToConfig2,\n httpAgent: defaultToConfig2,\n httpsAgent: defaultToConfig2,\n cancelToken: defaultToConfig2,\n socketPath: defaultToConfig2,\n responseEncoding: defaultToConfig2,\n validateStatus: mergeDirectKeys,\n headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true)\n };\n\n utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {\n const merge = mergeMap[prop] || mergeDeepProperties;\n const configValue = merge(config1[prop], config2[prop], prop);\n (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);\n });\n\n return config;\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport isURLSameOrigin from \"./isURLSameOrigin.js\";\nimport cookies from \"./cookies.js\";\nimport buildFullPath from \"../core/buildFullPath.js\";\nimport mergeConfig from \"../core/mergeConfig.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport buildURL from \"./buildURL.js\";\n\nexport default (config) => {\n const newConfig = mergeConfig({}, config);\n\n let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig;\n\n newConfig.headers = headers = AxiosHeaders.from(headers);\n\n newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);\n\n // HTTP basic authentication\n if (auth) {\n headers.set('Authorization', 'Basic ' +\n btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : ''))\n );\n }\n\n let contentType;\n\n if (utils.isFormData(data)) {\n if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {\n headers.setContentType(undefined); // Let the browser set it\n } else if ((contentType = headers.getContentType()) !== false) {\n // fix semicolon duplication issue for ReactNative FormData implementation\n const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];\n headers.setContentType([type || 'multipart/form-data', ...tokens].join('; '));\n }\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\n if (platform.hasStandardBrowserEnv) {\n withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));\n\n if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) {\n // Add xsrf header\n const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName);\n\n if (xsrfValue) {\n headers.set(xsrfHeaderName, xsrfValue);\n }\n }\n }\n\n return newConfig;\n}\n\n","import utils from './../utils.js';\nimport settle from './../core/settle.js';\nimport transitionalDefaults from '../defaults/transitional.js';\nimport AxiosError from '../core/AxiosError.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport parseProtocol from '../helpers/parseProtocol.js';\nimport platform from '../platform/index.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport {progressEventReducer} from '../helpers/progressEventReducer.js';\nimport resolveConfig from \"../helpers/resolveConfig.js\";\n\nconst isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';\n\nexport default isXHRAdapterSupported && function (config) {\n return new Promise(function dispatchXhrRequest(resolve, reject) {\n const _config = resolveConfig(config);\n let requestData = _config.data;\n const requestHeaders = AxiosHeaders.from(_config.headers).normalize();\n let {responseType, onUploadProgress, onDownloadProgress} = _config;\n let onCanceled;\n let uploadThrottled, downloadThrottled;\n let flushUpload, flushDownload;\n\n function done() {\n flushUpload && flushUpload(); // flush events\n flushDownload && flushDownload(); // flush events\n\n _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);\n\n _config.signal && _config.signal.removeEventListener('abort', onCanceled);\n }\n\n let request = new XMLHttpRequest();\n\n request.open(_config.method.toUpperCase(), _config.url, true);\n\n // Set the request timeout in MS\n request.timeout = _config.timeout;\n\n function onloadend() {\n if (!request) {\n return;\n }\n // Prepare the response\n const responseHeaders = AxiosHeaders.from(\n 'getAllResponseHeaders' in request && request.getAllResponseHeaders()\n );\n const responseData = !responseType || responseType === 'text' || responseType === 'json' ?\n request.responseText : request.response;\n const response = {\n data: responseData,\n status: request.status,\n statusText: request.statusText,\n headers: responseHeaders,\n config,\n request\n };\n\n settle(function _resolve(value) {\n resolve(value);\n done();\n }, function _reject(err) {\n reject(err);\n done();\n }, response);\n\n // Clean up request\n request = null;\n }\n\n if ('onloadend' in request) {\n // Use onloadend if available\n request.onloadend = onloadend;\n } else {\n // Listen for ready state to emulate onloadend\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 // readystate handler is calling before onerror or ontimeout handlers,\n // so we should call onloadend on the next 'tick'\n setTimeout(onloadend);\n };\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(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, 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(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));\n\n // Clean up request\n request = null;\n };\n\n // Handle timeout\n request.ontimeout = function handleTimeout() {\n let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded';\n const transitional = _config.transitional || transitionalDefaults;\n if (_config.timeoutErrorMessage) {\n timeoutErrorMessage = _config.timeoutErrorMessage;\n }\n reject(new AxiosError(\n timeoutErrorMessage,\n transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,\n config,\n request));\n\n // Clean up request\n request = null;\n };\n\n // Remove Content-Type if data is undefined\n requestData === undefined && requestHeaders.setContentType(null);\n\n // Add headers to the request\n if ('setRequestHeader' in request) {\n utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {\n request.setRequestHeader(key, val);\n });\n }\n\n // Add withCredentials to request if needed\n if (!utils.isUndefined(_config.withCredentials)) {\n request.withCredentials = !!_config.withCredentials;\n }\n\n // Add responseType to request if needed\n if (responseType && responseType !== 'json') {\n request.responseType = _config.responseType;\n }\n\n // Handle progress if needed\n if (onDownloadProgress) {\n ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true));\n request.addEventListener('progress', downloadThrottled);\n }\n\n // Not all browsers support upload events\n if (onUploadProgress && request.upload) {\n ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress));\n\n request.upload.addEventListener('progress', uploadThrottled);\n\n request.upload.addEventListener('loadend', flushUpload);\n }\n\n if (_config.cancelToken || _config.signal) {\n // Handle cancellation\n // eslint-disable-next-line func-names\n onCanceled = cancel => {\n if (!request) {\n return;\n }\n reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);\n request.abort();\n request = null;\n };\n\n _config.cancelToken && _config.cancelToken.subscribe(onCanceled);\n if (_config.signal) {\n _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled);\n }\n }\n\n const protocol = parseProtocol(_config.url);\n\n if (protocol && platform.protocols.indexOf(protocol) === -1) {\n reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));\n return;\n }\n\n\n // Send the request\n request.send(requestData || null);\n });\n}\n","import CanceledError from \"../cancel/CanceledError.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport utils from '../utils.js';\n\nconst composeSignals = (signals, timeout) => {\n const {length} = (signals = signals ? signals.filter(Boolean) : []);\n\n if (timeout || length) {\n let controller = new AbortController();\n\n let aborted;\n\n const onabort = function (reason) {\n if (!aborted) {\n aborted = true;\n unsubscribe();\n const err = reason instanceof Error ? reason : this.reason;\n controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err));\n }\n }\n\n let timer = timeout && setTimeout(() => {\n timer = null;\n onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT))\n }, timeout)\n\n const unsubscribe = () => {\n if (signals) {\n timer && clearTimeout(timer);\n timer = null;\n signals.forEach(signal => {\n signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort);\n });\n signals = null;\n }\n }\n\n signals.forEach((signal) => signal.addEventListener('abort', onabort));\n\n const {signal} = controller;\n\n signal.unsubscribe = () => utils.asap(unsubscribe);\n\n return signal;\n }\n}\n\nexport default composeSignals;\n","\nexport const streamChunk = function* (chunk, chunkSize) {\n let len = chunk.byteLength;\n\n if (!chunkSize || len < chunkSize) {\n yield chunk;\n return;\n }\n\n let pos = 0;\n let end;\n\n while (pos < len) {\n end = pos + chunkSize;\n yield chunk.slice(pos, end);\n pos = end;\n }\n}\n\nexport const readBytes = async function* (iterable, chunkSize) {\n for await (const chunk of readStream(iterable)) {\n yield* streamChunk(chunk, chunkSize);\n }\n}\n\nconst readStream = async function* (stream) {\n if (stream[Symbol.asyncIterator]) {\n yield* stream;\n return;\n }\n\n const reader = stream.getReader();\n try {\n for (;;) {\n const {done, value} = await reader.read();\n if (done) {\n break;\n }\n yield value;\n }\n } finally {\n await reader.cancel();\n }\n}\n\nexport const trackStream = (stream, chunkSize, onProgress, onFinish) => {\n const iterator = readBytes(stream, chunkSize);\n\n let bytes = 0;\n let done;\n let _onFinish = (e) => {\n if (!done) {\n done = true;\n onFinish && onFinish(e);\n }\n }\n\n return new ReadableStream({\n async pull(controller) {\n try {\n const {done, value} = await iterator.next();\n\n if (done) {\n _onFinish();\n controller.close();\n return;\n }\n\n let len = value.byteLength;\n if (onProgress) {\n let loadedBytes = bytes += len;\n onProgress(loadedBytes);\n }\n controller.enqueue(new Uint8Array(value));\n } catch (err) {\n _onFinish(err);\n throw err;\n }\n },\n cancel(reason) {\n _onFinish(reason);\n return iterator.return();\n }\n }, {\n highWaterMark: 2\n })\n}\n","import platform from \"../platform/index.js\";\nimport utils from \"../utils.js\";\nimport AxiosError from \"../core/AxiosError.js\";\nimport composeSignals from \"../helpers/composeSignals.js\";\nimport {trackStream} from \"../helpers/trackStream.js\";\nimport AxiosHeaders from \"../core/AxiosHeaders.js\";\nimport {progressEventReducer, progressEventDecorator, asyncDecorator} from \"../helpers/progressEventReducer.js\";\nimport resolveConfig from \"../helpers/resolveConfig.js\";\nimport settle from \"../core/settle.js\";\n\nconst isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function';\nconst isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function';\n\n// used only inside the fetch adapter\nconst encodeText = isFetchSupported && (typeof TextEncoder === 'function' ?\n ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) :\n async (str) => new Uint8Array(await new Response(str).arrayBuffer())\n);\n\nconst test = (fn, ...args) => {\n try {\n return !!fn(...args);\n } catch (e) {\n return false\n }\n}\n\nconst supportsRequestStream = isReadableStreamSupported && test(() => {\n let duplexAccessed = false;\n\n const hasContentType = new Request(platform.origin, {\n body: new ReadableStream(),\n method: 'POST',\n get duplex() {\n duplexAccessed = true;\n return 'half';\n },\n }).headers.has('Content-Type');\n\n return duplexAccessed && !hasContentType;\n});\n\nconst DEFAULT_CHUNK_SIZE = 64 * 1024;\n\nconst supportsResponseStream = isReadableStreamSupported &&\n test(() => utils.isReadableStream(new Response('').body));\n\n\nconst resolvers = {\n stream: supportsResponseStream && ((res) => res.body)\n};\n\nisFetchSupported && (((res) => {\n ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => {\n !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() :\n (_, config) => {\n throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config);\n })\n });\n})(new Response));\n\nconst getBodyLength = async (body) => {\n if (body == null) {\n return 0;\n }\n\n if(utils.isBlob(body)) {\n return body.size;\n }\n\n if(utils.isSpecCompliantForm(body)) {\n const _request = new Request(platform.origin, {\n method: 'POST',\n body,\n });\n return (await _request.arrayBuffer()).byteLength;\n }\n\n if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) {\n return body.byteLength;\n }\n\n if(utils.isURLSearchParams(body)) {\n body = body + '';\n }\n\n if(utils.isString(body)) {\n return (await encodeText(body)).byteLength;\n }\n}\n\nconst resolveBodyLength = async (headers, body) => {\n const length = utils.toFiniteNumber(headers.getContentLength());\n\n return length == null ? getBodyLength(body) : length;\n}\n\nexport default isFetchSupported && (async (config) => {\n let {\n url,\n method,\n data,\n signal,\n cancelToken,\n timeout,\n onDownloadProgress,\n onUploadProgress,\n responseType,\n headers,\n withCredentials = 'same-origin',\n fetchOptions\n } = resolveConfig(config);\n\n responseType = responseType ? (responseType + '').toLowerCase() : 'text';\n\n let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout);\n\n let request;\n\n const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {\n composedSignal.unsubscribe();\n });\n\n let requestContentLength;\n\n try {\n if (\n onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' &&\n (requestContentLength = await resolveBodyLength(headers, data)) !== 0\n ) {\n let _request = new Request(url, {\n method: 'POST',\n body: data,\n duplex: \"half\"\n });\n\n let contentTypeHeader;\n\n if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) {\n headers.setContentType(contentTypeHeader)\n }\n\n if (_request.body) {\n const [onProgress, flush] = progressEventDecorator(\n requestContentLength,\n progressEventReducer(asyncDecorator(onUploadProgress))\n );\n\n data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);\n }\n }\n\n if (!utils.isString(withCredentials)) {\n withCredentials = withCredentials ? 'include' : 'omit';\n }\n\n // Cloudflare Workers throws when credentials are defined\n // see https://github.com/cloudflare/workerd/issues/902\n const isCredentialsSupported = \"credentials\" in Request.prototype;\n request = new Request(url, {\n ...fetchOptions,\n signal: composedSignal,\n method: method.toUpperCase(),\n headers: headers.normalize().toJSON(),\n body: data,\n duplex: \"half\",\n credentials: isCredentialsSupported ? withCredentials : undefined\n });\n\n let response = await fetch(request);\n\n const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response');\n\n if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) {\n const options = {};\n\n ['status', 'statusText', 'headers'].forEach(prop => {\n options[prop] = response[prop];\n });\n\n const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length'));\n\n const [onProgress, flush] = onDownloadProgress && progressEventDecorator(\n responseContentLength,\n progressEventReducer(asyncDecorator(onDownloadProgress), true)\n ) || [];\n\n response = new Response(\n trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {\n flush && flush();\n unsubscribe && unsubscribe();\n }),\n options\n );\n }\n\n responseType = responseType || 'text';\n\n let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config);\n\n !isStreamResponse && unsubscribe && unsubscribe();\n\n return await new Promise((resolve, reject) => {\n settle(resolve, reject, {\n data: responseData,\n headers: AxiosHeaders.from(response.headers),\n status: response.status,\n statusText: response.statusText,\n config,\n request\n })\n })\n } catch (err) {\n unsubscribe && unsubscribe();\n\n if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) {\n throw Object.assign(\n new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request),\n {\n cause: err.cause || err\n }\n )\n }\n\n throw AxiosError.from(err, err && err.code, config, request);\n }\n});\n\n\n","import utils from '../utils.js';\nimport httpAdapter from './http.js';\nimport xhrAdapter from './xhr.js';\nimport fetchAdapter from './fetch.js';\nimport AxiosError from \"../core/AxiosError.js\";\n\nconst knownAdapters = {\n http: httpAdapter,\n xhr: xhrAdapter,\n fetch: fetchAdapter\n}\n\nutils.forEach(knownAdapters, (fn, value) => {\n if (fn) {\n try {\n Object.defineProperty(fn, 'name', {value});\n } catch (e) {\n // eslint-disable-next-line no-empty\n }\n Object.defineProperty(fn, 'adapterName', {value});\n }\n});\n\nconst renderReason = (reason) => `- ${reason}`;\n\nconst isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;\n\nexport default {\n getAdapter: (adapters) => {\n adapters = utils.isArray(adapters) ? adapters : [adapters];\n\n const {length} = adapters;\n let nameOrAdapter;\n let adapter;\n\n const rejectedReasons = {};\n\n for (let i = 0; i < length; i++) {\n nameOrAdapter = adapters[i];\n let id;\n\n adapter = nameOrAdapter;\n\n if (!isResolvedHandle(nameOrAdapter)) {\n adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];\n\n if (adapter === undefined) {\n throw new AxiosError(`Unknown adapter '${id}'`);\n }\n }\n\n if (adapter) {\n break;\n }\n\n rejectedReasons[id || '#' + i] = adapter;\n }\n\n if (!adapter) {\n\n const reasons = Object.entries(rejectedReasons)\n .map(([id, state]) => `adapter ${id} ` +\n (state === false ? 'is not supported by the environment' : 'is not available in the build')\n );\n\n let s = length ?\n (reasons.length > 1 ? 'since :\\n' + reasons.map(renderReason).join('\\n') : ' ' + renderReason(reasons[0])) :\n 'as no adapter specified';\n\n throw new AxiosError(\n `There is no suitable adapter to dispatch the request ` + s,\n 'ERR_NOT_SUPPORT'\n );\n }\n\n return adapter;\n },\n adapters: knownAdapters\n}\n","'use strict';\n\nimport transformData from './transformData.js';\nimport isCancel from '../cancel/isCancel.js';\nimport defaults from '../defaults/index.js';\nimport CanceledError from '../cancel/CanceledError.js';\nimport AxiosHeaders from '../core/AxiosHeaders.js';\nimport adapters from \"../adapters/adapters.js\";\n\n/**\n * Throws a `CanceledError` if cancellation has been requested.\n *\n * @param {Object} config The config that is to be used for the request\n *\n * @returns {void}\n */\nfunction throwIfCancellationRequested(config) {\n if (config.cancelToken) {\n config.cancelToken.throwIfRequested();\n }\n\n if (config.signal && config.signal.aborted) {\n throw new CanceledError(null, config);\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 *\n * @returns {Promise} The Promise to be fulfilled\n */\nexport default function dispatchRequest(config) {\n throwIfCancellationRequested(config);\n\n config.headers = AxiosHeaders.from(config.headers);\n\n // Transform request data\n config.data = transformData.call(\n config,\n config.transformRequest\n );\n\n if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {\n config.headers.setContentType('application/x-www-form-urlencoded', false);\n }\n\n const adapter = adapters.getAdapter(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.call(\n config,\n config.transformResponse,\n response\n );\n\n response.headers = AxiosHeaders.from(response.headers);\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.call(\n config,\n config.transformResponse,\n reason.response\n );\n reason.response.headers = AxiosHeaders.from(reason.response.headers);\n }\n }\n\n return Promise.reject(reason);\n });\n}\n","'use strict';\n\nimport {VERSION} from '../env/data.js';\nimport AxiosError from '../core/AxiosError.js';\n\nconst validators = {};\n\n// eslint-disable-next-line func-names\n['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {\n validators[type] = function validator(thing) {\n return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;\n };\n});\n\nconst deprecatedWarnings = {};\n\n/**\n * Transitional option validator\n *\n * @param {function|boolean?} validator - set to false if the transitional option has been removed\n * @param {string?} version - deprecated version / removed since version\n * @param {string?} message - some message with additional info\n *\n * @returns {function}\n */\nvalidators.transitional = function transitional(validator, version, message) {\n function formatMessage(opt, desc) {\n return '[Axios v' + VERSION + '] Transitional option \\'' + opt + '\\'' + desc + (message ? '. ' + message : '');\n }\n\n // eslint-disable-next-line func-names\n return (value, opt, opts) => {\n if (validator === false) {\n throw new AxiosError(\n formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),\n AxiosError.ERR_DEPRECATED\n );\n }\n\n if (version && !deprecatedWarnings[opt]) {\n deprecatedWarnings[opt] = true;\n // eslint-disable-next-line no-console\n console.warn(\n formatMessage(\n opt,\n ' has been deprecated since v' + version + ' and will be removed in the near future'\n )\n );\n }\n\n return validator ? validator(value, opt, opts) : true;\n };\n};\n\nvalidators.spelling = function spelling(correctSpelling) {\n return (value, opt) => {\n // eslint-disable-next-line no-console\n console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);\n return true;\n }\n};\n\n/**\n * Assert object's properties type\n *\n * @param {object} options\n * @param {object} schema\n * @param {boolean?} allowUnknown\n *\n * @returns {object}\n */\n\nfunction assertOptions(options, schema, allowUnknown) {\n if (typeof options !== 'object') {\n throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);\n }\n const keys = Object.keys(options);\n let i = keys.length;\n while (i-- > 0) {\n const opt = keys[i];\n const validator = schema[opt];\n if (validator) {\n const value = options[opt];\n const result = value === undefined || validator(value, opt, options);\n if (result !== true) {\n throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);\n }\n continue;\n }\n if (allowUnknown !== true) {\n throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);\n }\n }\n}\n\nexport default {\n assertOptions,\n validators\n};\n","'use strict';\n\nimport utils from './../utils.js';\nimport buildURL from '../helpers/buildURL.js';\nimport InterceptorManager from './InterceptorManager.js';\nimport dispatchRequest from './dispatchRequest.js';\nimport mergeConfig from './mergeConfig.js';\nimport buildFullPath from './buildFullPath.js';\nimport validator from '../helpers/validator.js';\nimport AxiosHeaders from './AxiosHeaders.js';\n\nconst validators = validator.validators;\n\n/**\n * Create a new instance of Axios\n *\n * @param {Object} instanceConfig The default config for the instance\n *\n * @return {Axios} A new instance of Axios\n */\nclass Axios {\n constructor(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 {String|Object} configOrUrl The config specific for this request (merged with this.defaults)\n * @param {?Object} config\n *\n * @returns {Promise} The Promise to be fulfilled\n */\n async request(configOrUrl, config) {\n try {\n return await this._request(configOrUrl, config);\n } catch (err) {\n if (err instanceof Error) {\n let dummy = {};\n\n Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error());\n\n // slice off the Error: ... line\n const stack = dummy.stack ? dummy.stack.replace(/^.+\\n/, '') : '';\n try {\n if (!err.stack) {\n err.stack = stack;\n // match without the 2 top stack lines\n } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\\n.+\\n/, ''))) {\n err.stack += '\\n' + stack\n }\n } catch (e) {\n // ignore the case where \"stack\" is an un-writable property\n }\n }\n\n throw err;\n }\n }\n\n _request(configOrUrl, config) {\n /*eslint no-param-reassign:0*/\n // Allow for axios('example/url'[, config]) a la fetch API\n if (typeof configOrUrl === 'string') {\n config = config || {};\n config.url = configOrUrl;\n } else {\n config = configOrUrl || {};\n }\n\n config = mergeConfig(this.defaults, config);\n\n const {transitional, paramsSerializer, headers} = config;\n\n if (transitional !== undefined) {\n validator.assertOptions(transitional, {\n silentJSONParsing: validators.transitional(validators.boolean),\n forcedJSONParsing: validators.transitional(validators.boolean),\n clarifyTimeoutError: validators.transitional(validators.boolean)\n }, false);\n }\n\n if (paramsSerializer != null) {\n if (utils.isFunction(paramsSerializer)) {\n config.paramsSerializer = {\n serialize: paramsSerializer\n }\n } else {\n validator.assertOptions(paramsSerializer, {\n encode: validators.function,\n serialize: validators.function\n }, true);\n }\n }\n\n // Set config.allowAbsoluteUrls\n if (config.allowAbsoluteUrls !== undefined) {\n // do nothing\n } else if (this.defaults.allowAbsoluteUrls !== undefined) {\n config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;\n } else {\n config.allowAbsoluteUrls = true;\n }\n\n validator.assertOptions(config, {\n baseUrl: validators.spelling('baseURL'),\n withXsrfToken: validators.spelling('withXSRFToken')\n }, true);\n\n // Set config.method\n config.method = (config.method || this.defaults.method || 'get').toLowerCase();\n\n // Flatten headers\n let contextHeaders = headers && utils.merge(\n headers.common,\n headers[config.method]\n );\n\n headers && utils.forEach(\n ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],\n (method) => {\n delete headers[method];\n }\n );\n\n config.headers = AxiosHeaders.concat(contextHeaders, headers);\n\n // filter out skipped interceptors\n const requestInterceptorChain = [];\n let synchronousRequestInterceptors = true;\n this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {\n if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {\n return;\n }\n\n synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;\n\n requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);\n });\n\n const responseInterceptorChain = [];\n this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {\n responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);\n });\n\n let promise;\n let i = 0;\n let len;\n\n if (!synchronousRequestInterceptors) {\n const chain = [dispatchRequest.bind(this), undefined];\n chain.unshift.apply(chain, requestInterceptorChain);\n chain.push.apply(chain, responseInterceptorChain);\n len = chain.length;\n\n promise = Promise.resolve(config);\n\n while (i < len) {\n promise = promise.then(chain[i++], chain[i++]);\n }\n\n return promise;\n }\n\n len = requestInterceptorChain.length;\n\n let newConfig = config;\n\n i = 0;\n\n while (i < len) {\n const onFulfilled = requestInterceptorChain[i++];\n const onRejected = requestInterceptorChain[i++];\n try {\n newConfig = onFulfilled(newConfig);\n } catch (error) {\n onRejected.call(this, error);\n break;\n }\n }\n\n try {\n promise = dispatchRequest.call(this, newConfig);\n } catch (error) {\n return Promise.reject(error);\n }\n\n i = 0;\n len = responseInterceptorChain.length;\n\n while (i < len) {\n promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);\n }\n\n return promise;\n }\n\n getUri(config) {\n config = mergeConfig(this.defaults, config);\n const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);\n return buildURL(fullPath, config.params, config.paramsSerializer);\n }\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(mergeConfig(config || {}, {\n method,\n url,\n data: (config || {}).data\n }));\n };\n});\n\nutils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {\n /*eslint func-names:0*/\n\n function generateHTTPMethod(isForm) {\n return function httpMethod(url, data, config) {\n return this.request(mergeConfig(config || {}, {\n method,\n headers: isForm ? {\n 'Content-Type': 'multipart/form-data'\n } : {},\n url,\n data\n }));\n };\n }\n\n Axios.prototype[method] = generateHTTPMethod();\n\n Axios.prototype[method + 'Form'] = generateHTTPMethod(true);\n});\n\nexport default Axios;\n","'use strict';\n\nimport CanceledError from './CanceledError.js';\n\n/**\n * A `CancelToken` is an object that can be used to request cancellation of an operation.\n *\n * @param {Function} executor The executor function.\n *\n * @returns {CancelToken}\n */\nclass CancelToken {\n constructor(executor) {\n if (typeof executor !== 'function') {\n throw new TypeError('executor must be a function.');\n }\n\n let resolvePromise;\n\n this.promise = new Promise(function promiseExecutor(resolve) {\n resolvePromise = resolve;\n });\n\n const token = this;\n\n // eslint-disable-next-line func-names\n this.promise.then(cancel => {\n if (!token._listeners) return;\n\n let i = token._listeners.length;\n\n while (i-- > 0) {\n token._listeners[i](cancel);\n }\n token._listeners = null;\n });\n\n // eslint-disable-next-line func-names\n this.promise.then = onfulfilled => {\n let _resolve;\n // eslint-disable-next-line func-names\n const promise = new Promise(resolve => {\n token.subscribe(resolve);\n _resolve = resolve;\n }).then(onfulfilled);\n\n promise.cancel = function reject() {\n token.unsubscribe(_resolve);\n };\n\n return promise;\n };\n\n executor(function cancel(message, config, request) {\n if (token.reason) {\n // Cancellation has already been requested\n return;\n }\n\n token.reason = new CanceledError(message, config, request);\n resolvePromise(token.reason);\n });\n }\n\n /**\n * Throws a `CanceledError` if cancellation has been requested.\n */\n throwIfRequested() {\n if (this.reason) {\n throw this.reason;\n }\n }\n\n /**\n * Subscribe to the cancel signal\n */\n\n subscribe(listener) {\n if (this.reason) {\n listener(this.reason);\n return;\n }\n\n if (this._listeners) {\n this._listeners.push(listener);\n } else {\n this._listeners = [listener];\n }\n }\n\n /**\n * Unsubscribe from the cancel signal\n */\n\n unsubscribe(listener) {\n if (!this._listeners) {\n return;\n }\n const index = this._listeners.indexOf(listener);\n if (index !== -1) {\n this._listeners.splice(index, 1);\n }\n }\n\n toAbortSignal() {\n const controller = new AbortController();\n\n const abort = (err) => {\n controller.abort(err);\n };\n\n this.subscribe(abort);\n\n controller.signal.unsubscribe = () => this.unsubscribe(abort);\n\n return controller.signal;\n }\n\n /**\n * Returns an object that contains a new `CancelToken` and a function that, when called,\n * cancels the `CancelToken`.\n */\n static source() {\n let cancel;\n const token = new CancelToken(function executor(c) {\n cancel = c;\n });\n return {\n token,\n cancel\n };\n }\n}\n\nexport default CancelToken;\n","'use strict';\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 *\n * @returns {Function}\n */\nexport default function spread(callback) {\n return function wrap(arr) {\n return callback.apply(null, arr);\n };\n}\n","'use strict';\n\nimport utils from './../utils.js';\n\n/**\n * Determines whether the payload is an error thrown by Axios\n *\n * @param {*} payload The value to test\n *\n * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false\n */\nexport default function isAxiosError(payload) {\n return utils.isObject(payload) && (payload.isAxiosError === true);\n}\n","const HttpStatusCode = {\n Continue: 100,\n SwitchingProtocols: 101,\n Processing: 102,\n EarlyHints: 103,\n Ok: 200,\n Created: 201,\n Accepted: 202,\n NonAuthoritativeInformation: 203,\n NoContent: 204,\n ResetContent: 205,\n PartialContent: 206,\n MultiStatus: 207,\n AlreadyReported: 208,\n ImUsed: 226,\n MultipleChoices: 300,\n MovedPermanently: 301,\n Found: 302,\n SeeOther: 303,\n NotModified: 304,\n UseProxy: 305,\n Unused: 306,\n TemporaryRedirect: 307,\n PermanentRedirect: 308,\n BadRequest: 400,\n Unauthorized: 401,\n PaymentRequired: 402,\n Forbidden: 403,\n NotFound: 404,\n MethodNotAllowed: 405,\n NotAcceptable: 406,\n ProxyAuthenticationRequired: 407,\n RequestTimeout: 408,\n Conflict: 409,\n Gone: 410,\n LengthRequired: 411,\n PreconditionFailed: 412,\n PayloadTooLarge: 413,\n UriTooLong: 414,\n UnsupportedMediaType: 415,\n RangeNotSatisfiable: 416,\n ExpectationFailed: 417,\n ImATeapot: 418,\n MisdirectedRequest: 421,\n UnprocessableEntity: 422,\n Locked: 423,\n FailedDependency: 424,\n TooEarly: 425,\n UpgradeRequired: 426,\n PreconditionRequired: 428,\n TooManyRequests: 429,\n RequestHeaderFieldsTooLarge: 431,\n UnavailableForLegalReasons: 451,\n InternalServerError: 500,\n NotImplemented: 501,\n BadGateway: 502,\n ServiceUnavailable: 503,\n GatewayTimeout: 504,\n HttpVersionNotSupported: 505,\n VariantAlsoNegotiates: 506,\n InsufficientStorage: 507,\n LoopDetected: 508,\n NotExtended: 510,\n NetworkAuthenticationRequired: 511,\n};\n\nObject.entries(HttpStatusCode).forEach(([key, value]) => {\n HttpStatusCode[value] = key;\n});\n\nexport default HttpStatusCode;\n","'use strict';\n\nimport utils from './utils.js';\nimport bind from './helpers/bind.js';\nimport Axios from './core/Axios.js';\nimport mergeConfig from './core/mergeConfig.js';\nimport defaults from './defaults/index.js';\nimport formDataToJSON from './helpers/formDataToJSON.js';\nimport CanceledError from './cancel/CanceledError.js';\nimport CancelToken from './cancel/CancelToken.js';\nimport isCancel from './cancel/isCancel.js';\nimport {VERSION} from './env/data.js';\nimport toFormData from './helpers/toFormData.js';\nimport AxiosError from './core/AxiosError.js';\nimport spread from './helpers/spread.js';\nimport isAxiosError from './helpers/isAxiosError.js';\nimport AxiosHeaders from \"./core/AxiosHeaders.js\";\nimport adapters from './adapters/adapters.js';\nimport HttpStatusCode from './helpers/HttpStatusCode.js';\n\n/**\n * Create an instance of Axios\n *\n * @param {Object} defaultConfig The default config for the instance\n *\n * @returns {Axios} A new instance of Axios\n */\nfunction createInstance(defaultConfig) {\n const context = new Axios(defaultConfig);\n const instance = bind(Axios.prototype.request, context);\n\n // Copy axios.prototype to instance\n utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});\n\n // Copy context to instance\n utils.extend(instance, context, null, {allOwnKeys: true});\n\n // Factory for creating new instances\n instance.create = function create(instanceConfig) {\n return createInstance(mergeConfig(defaultConfig, instanceConfig));\n };\n\n return instance;\n}\n\n// Create the default instance to be exported\nconst axios = createInstance(defaults);\n\n// Expose Axios class to allow class inheritance\naxios.Axios = Axios;\n\n// Expose Cancel & CancelToken\naxios.CanceledError = CanceledError;\naxios.CancelToken = CancelToken;\naxios.isCancel = isCancel;\naxios.VERSION = VERSION;\naxios.toFormData = toFormData;\n\n// Expose AxiosError class\naxios.AxiosError = AxiosError;\n\n// alias for CanceledError for backward compatibility\naxios.Cancel = axios.CanceledError;\n\n// Expose all/spread\naxios.all = function all(promises) {\n return Promise.all(promises);\n};\n\naxios.spread = spread;\n\n// Expose isAxiosError\naxios.isAxiosError = isAxiosError;\n\n// Expose mergeConfig\naxios.mergeConfig = mergeConfig;\n\naxios.AxiosHeaders = AxiosHeaders;\n\naxios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);\n\naxios.getAdapter = adapters.getAdapter;\n\naxios.HttpStatusCode = HttpStatusCode;\n\naxios.default = axios;\n\n// this module should only have a default export\nexport default axios\n"],"names":["utils","prototype","PlatformFormData","encode","url","crypto","FormData","platform","defaults","AxiosHeaders","stream","util","readBlob","Readable","zlib","followRedirects","proxyFromEnv","callbackify","EventEmitter","formDataToStream","AxiosTransformStream","https","http","ZlibHeaderTransformStream","composeSignals","validators","InterceptorManager","Axios","CancelToken","HttpStatusCode"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/axios/index.d.cts b/node_modules/axios/index.d.cts new file mode 100644 index 0000000..b1911ca --- /dev/null +++ b/node_modules/axios/index.d.cts @@ -0,0 +1,550 @@ +interface RawAxiosHeaders { + [key: string]: axios.AxiosHeaderValue; +} + +type MethodsHeaders = Partial<{ + [Key in axios.Method as Lowercase]: AxiosHeaders; +} & {common: AxiosHeaders}>; + +type AxiosHeaderMatcher = (this: AxiosHeaders, value: string, name: string, headers: RawAxiosHeaders) => boolean; + +type AxiosHeaderParser = (this: AxiosHeaders, value: axios.AxiosHeaderValue, header: string) => any; + +type CommonRequestHeadersList = 'Accept' | 'Content-Length' | 'User-Agent'| 'Content-Encoding' | 'Authorization'; + +type ContentType = axios.AxiosHeaderValue | 'text/html' | 'text/plain' | 'multipart/form-data' | 'application/json' | 'application/x-www-form-urlencoded' | 'application/octet-stream'; + +type CommonResponseHeadersList = 'Server' | 'Content-Type' | 'Content-Length' | 'Cache-Control'| 'Content-Encoding'; + +declare class AxiosHeaders { + constructor( + headers?: RawAxiosHeaders | AxiosHeaders | string + ); + + [key: string]: any; + + set(headerName?: string, value?: axios.AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + set(headers?: RawAxiosHeaders | AxiosHeaders | string, rewrite?: boolean): AxiosHeaders; + + get(headerName: string, parser: RegExp): RegExpExecArray | null; + get(headerName: string, matcher?: true | AxiosHeaderParser): axios.AxiosHeaderValue; + + has(header: string, matcher?: AxiosHeaderMatcher): boolean; + + delete(header: string | string[], matcher?: AxiosHeaderMatcher): boolean; + + clear(matcher?: AxiosHeaderMatcher): boolean; + + normalize(format: boolean): AxiosHeaders; + + concat(...targets: Array): AxiosHeaders; + + toJSON(asStrings?: boolean): RawAxiosHeaders; + + static from(thing?: AxiosHeaders | RawAxiosHeaders | string): AxiosHeaders; + + static accessor(header: string | string[]): AxiosHeaders; + + static concat(...targets: Array): AxiosHeaders; + + setContentType(value: ContentType, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + getContentType(parser?: RegExp): RegExpExecArray | null; + getContentType(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue; + hasContentType(matcher?: AxiosHeaderMatcher): boolean; + + setContentLength(value: axios.AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + getContentLength(parser?: RegExp): RegExpExecArray | null; + getContentLength(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue; + hasContentLength(matcher?: AxiosHeaderMatcher): boolean; + + setAccept(value: axios.AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + getAccept(parser?: RegExp): RegExpExecArray | null; + getAccept(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue; + hasAccept(matcher?: AxiosHeaderMatcher): boolean; + + setUserAgent(value: axios.AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + getUserAgent(parser?: RegExp): RegExpExecArray | null; + getUserAgent(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue; + hasUserAgent(matcher?: AxiosHeaderMatcher): boolean; + + setContentEncoding(value: axios.AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + getContentEncoding(parser?: RegExp): RegExpExecArray | null; + getContentEncoding(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue; + hasContentEncoding(matcher?: AxiosHeaderMatcher): boolean; + + setAuthorization(value: axios.AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + getAuthorization(parser?: RegExp): RegExpExecArray | null; + getAuthorization(matcher?: AxiosHeaderMatcher): axios.AxiosHeaderValue; + hasAuthorization(matcher?: AxiosHeaderMatcher): boolean; + + [Symbol.iterator](): IterableIterator<[string, axios.AxiosHeaderValue]>; +} + +declare class AxiosError extends Error { + constructor( + message?: string, + code?: string, + config?: axios.InternalAxiosRequestConfig, + request?: any, + response?: axios.AxiosResponse + ); + + config?: axios.InternalAxiosRequestConfig; + code?: string; + request?: any; + response?: axios.AxiosResponse; + isAxiosError: boolean; + status?: number; + toJSON: () => object; + cause?: Error; + static readonly ERR_FR_TOO_MANY_REDIRECTS = "ERR_FR_TOO_MANY_REDIRECTS"; + static readonly ERR_BAD_OPTION_VALUE = "ERR_BAD_OPTION_VALUE"; + static readonly ERR_BAD_OPTION = "ERR_BAD_OPTION"; + static readonly ERR_NETWORK = "ERR_NETWORK"; + static readonly ERR_DEPRECATED = "ERR_DEPRECATED"; + static readonly ERR_BAD_RESPONSE = "ERR_BAD_RESPONSE"; + static readonly ERR_BAD_REQUEST = "ERR_BAD_REQUEST"; + static readonly ERR_NOT_SUPPORT = "ERR_NOT_SUPPORT"; + static readonly ERR_INVALID_URL = "ERR_INVALID_URL"; + static readonly ERR_CANCELED = "ERR_CANCELED"; + static readonly ECONNABORTED = "ECONNABORTED"; + static readonly ETIMEDOUT = "ETIMEDOUT"; +} + +declare class CanceledError extends AxiosError { +} + +declare class Axios { + constructor(config?: axios.AxiosRequestConfig); + defaults: axios.AxiosDefaults; + interceptors: { + request: axios.AxiosInterceptorManager; + response: axios.AxiosInterceptorManager; + }; + getUri(config?: axios.AxiosRequestConfig): string; + request, D = any>(config: axios.AxiosRequestConfig): Promise; + get, D = any>(url: string, config?: axios.AxiosRequestConfig): Promise; + delete, D = any>(url: string, config?: axios.AxiosRequestConfig): Promise; + head, D = any>(url: string, config?: axios.AxiosRequestConfig): Promise; + options, D = any>(url: string, config?: axios.AxiosRequestConfig): Promise; + post, D = any>(url: string, data?: D, config?: axios.AxiosRequestConfig): Promise; + put, D = any>(url: string, data?: D, config?: axios.AxiosRequestConfig): Promise; + patch, D = any>(url: string, data?: D, config?: axios.AxiosRequestConfig): Promise; + postForm, D = any>(url: string, data?: D, config?: axios.AxiosRequestConfig): Promise; + putForm, D = any>(url: string, data?: D, config?: axios.AxiosRequestConfig): Promise; + patchForm, D = any>(url: string, data?: D, config?: axios.AxiosRequestConfig): Promise; +} + +declare enum HttpStatusCode { + Continue = 100, + SwitchingProtocols = 101, + Processing = 102, + EarlyHints = 103, + Ok = 200, + Created = 201, + Accepted = 202, + NonAuthoritativeInformation = 203, + NoContent = 204, + ResetContent = 205, + PartialContent = 206, + MultiStatus = 207, + AlreadyReported = 208, + ImUsed = 226, + MultipleChoices = 300, + MovedPermanently = 301, + Found = 302, + SeeOther = 303, + NotModified = 304, + UseProxy = 305, + Unused = 306, + TemporaryRedirect = 307, + PermanentRedirect = 308, + BadRequest = 400, + Unauthorized = 401, + PaymentRequired = 402, + Forbidden = 403, + NotFound = 404, + MethodNotAllowed = 405, + NotAcceptable = 406, + ProxyAuthenticationRequired = 407, + RequestTimeout = 408, + Conflict = 409, + Gone = 410, + LengthRequired = 411, + PreconditionFailed = 412, + PayloadTooLarge = 413, + UriTooLong = 414, + UnsupportedMediaType = 415, + RangeNotSatisfiable = 416, + ExpectationFailed = 417, + ImATeapot = 418, + MisdirectedRequest = 421, + UnprocessableEntity = 422, + Locked = 423, + FailedDependency = 424, + TooEarly = 425, + UpgradeRequired = 426, + PreconditionRequired = 428, + TooManyRequests = 429, + RequestHeaderFieldsTooLarge = 431, + UnavailableForLegalReasons = 451, + InternalServerError = 500, + NotImplemented = 501, + BadGateway = 502, + ServiceUnavailable = 503, + GatewayTimeout = 504, + HttpVersionNotSupported = 505, + VariantAlsoNegotiates = 506, + InsufficientStorage = 507, + LoopDetected = 508, + NotExtended = 510, + NetworkAuthenticationRequired = 511, +} + +type InternalAxiosError = AxiosError; + +declare namespace axios { + type AxiosError = InternalAxiosError; + + type RawAxiosRequestHeaders = Partial; + + type AxiosRequestHeaders = RawAxiosRequestHeaders & AxiosHeaders; + + type AxiosHeaderValue = AxiosHeaders | string | string[] | number | boolean | null; + + type RawCommonResponseHeaders = { + [Key in CommonResponseHeadersList]: AxiosHeaderValue; + } & { + "set-cookie": string[]; + }; + + type RawAxiosResponseHeaders = Partial; + + type AxiosResponseHeaders = RawAxiosResponseHeaders & AxiosHeaders; + + interface AxiosRequestTransformer { + (this: InternalAxiosRequestConfig, data: any, headers: AxiosRequestHeaders): any; + } + + interface AxiosResponseTransformer { + (this: InternalAxiosRequestConfig, data: any, headers: AxiosResponseHeaders, status?: number): any; + } + + interface AxiosAdapter { + (config: InternalAxiosRequestConfig): AxiosPromise; + } + + interface AxiosBasicCredentials { + username: string; + password: string; + } + + interface AxiosProxyConfig { + host: string; + port: number; + auth?: AxiosBasicCredentials; + protocol?: string; + } + + type Method = + | 'get' | 'GET' + | 'delete' | 'DELETE' + | 'head' | 'HEAD' + | 'options' | 'OPTIONS' + | 'post' | 'POST' + | 'put' | 'PUT' + | 'patch' | 'PATCH' + | 'purge' | 'PURGE' + | 'link' | 'LINK' + | 'unlink' | 'UNLINK'; + + type ResponseType = + | 'arraybuffer' + | 'blob' + | 'document' + | 'json' + | 'text' + | 'stream' + | 'formdata'; + + type responseEncoding = + | 'ascii' | 'ASCII' + | 'ansi' | 'ANSI' + | 'binary' | 'BINARY' + | 'base64' | 'BASE64' + | 'base64url' | 'BASE64URL' + | 'hex' | 'HEX' + | 'latin1' | 'LATIN1' + | 'ucs-2' | 'UCS-2' + | 'ucs2' | 'UCS2' + | 'utf-8' | 'UTF-8' + | 'utf8' | 'UTF8' + | 'utf16le' | 'UTF16LE'; + + interface TransitionalOptions { + silentJSONParsing?: boolean; + forcedJSONParsing?: boolean; + clarifyTimeoutError?: boolean; + } + + interface GenericAbortSignal { + readonly aborted: boolean; + onabort?: ((...args: any) => any) | null; + addEventListener?: (...args: any) => any; + removeEventListener?: (...args: any) => any; + } + + interface FormDataVisitorHelpers { + defaultVisitor: SerializerVisitor; + convertValue: (value: any) => any; + isVisitable: (value: any) => boolean; + } + + interface SerializerVisitor { + ( + this: GenericFormData, + value: any, + key: string | number, + path: null | Array, + helpers: FormDataVisitorHelpers + ): boolean; + } + + interface SerializerOptions { + visitor?: SerializerVisitor; + dots?: boolean; + metaTokens?: boolean; + indexes?: boolean | null; + } + + // tslint:disable-next-line + interface FormSerializerOptions extends SerializerOptions { + } + + interface ParamEncoder { + (value: any, defaultEncoder: (value: any) => any): any; + } + + interface CustomParamsSerializer { + (params: Record, options?: ParamsSerializerOptions): string; + } + + interface ParamsSerializerOptions extends SerializerOptions { + encode?: ParamEncoder; + serialize?: CustomParamsSerializer; + } + + type MaxUploadRate = number; + + type MaxDownloadRate = number; + + type BrowserProgressEvent = any; + + interface AxiosProgressEvent { + loaded: number; + total?: number; + progress?: number; + bytes: number; + rate?: number; + estimated?: number; + upload?: boolean; + download?: boolean; + event?: BrowserProgressEvent; + lengthComputable: boolean; + } + + type Milliseconds = number; + + type AxiosAdapterName = 'fetch' | 'xhr' | 'http' | (string & {}); + + type AxiosAdapterConfig = AxiosAdapter | AxiosAdapterName; + + type AddressFamily = 4 | 6 | undefined; + + interface LookupAddressEntry { + address: string; + family?: AddressFamily; + } + + type LookupAddress = string | LookupAddressEntry; + + interface AxiosRequestConfig { + url?: string; + method?: Method | string; + baseURL?: string; + allowAbsoluteUrls?: boolean; + transformRequest?: AxiosRequestTransformer | AxiosRequestTransformer[]; + transformResponse?: AxiosResponseTransformer | AxiosResponseTransformer[]; + headers?: (RawAxiosRequestHeaders & MethodsHeaders) | AxiosHeaders; + params?: any; + paramsSerializer?: ParamsSerializerOptions | CustomParamsSerializer; + data?: D; + timeout?: Milliseconds; + timeoutErrorMessage?: string; + withCredentials?: boolean; + adapter?: AxiosAdapterConfig | AxiosAdapterConfig[]; + auth?: AxiosBasicCredentials; + responseType?: ResponseType; + responseEncoding?: responseEncoding | string; + xsrfCookieName?: string; + xsrfHeaderName?: string; + onUploadProgress?: (progressEvent: AxiosProgressEvent) => void; + onDownloadProgress?: (progressEvent: AxiosProgressEvent) => void; + maxContentLength?: number; + validateStatus?: ((status: number) => boolean) | null; + maxBodyLength?: number; + maxRedirects?: number; + maxRate?: number | [MaxUploadRate, MaxDownloadRate]; + beforeRedirect?: (options: Record, responseDetails: {headers: Record, statusCode: HttpStatusCode}) => void; + socketPath?: string | null; + transport?: any; + httpAgent?: any; + httpsAgent?: any; + proxy?: AxiosProxyConfig | false; + cancelToken?: CancelToken; + decompress?: boolean; + transitional?: TransitionalOptions; + signal?: GenericAbortSignal; + insecureHTTPParser?: boolean; + env?: { + FormData?: new (...args: any[]) => object; + }; + formSerializer?: FormSerializerOptions; + family?: AddressFamily; + lookup?: ((hostname: string, options: object, cb: (err: Error | null, address: LookupAddress | LookupAddress[], family?: AddressFamily) => void) => void) | + ((hostname: string, options: object) => Promise<[address: LookupAddressEntry | LookupAddressEntry[], family?: AddressFamily] | LookupAddress>); + withXSRFToken?: boolean | ((config: InternalAxiosRequestConfig) => boolean | undefined); + fetchOptions?: Record; + } + + // Alias + type RawAxiosRequestConfig = AxiosRequestConfig; + + interface InternalAxiosRequestConfig extends AxiosRequestConfig { + headers: AxiosRequestHeaders; + } + + interface HeadersDefaults { + common: RawAxiosRequestHeaders; + delete: RawAxiosRequestHeaders; + get: RawAxiosRequestHeaders; + head: RawAxiosRequestHeaders; + post: RawAxiosRequestHeaders; + put: RawAxiosRequestHeaders; + patch: RawAxiosRequestHeaders; + options?: RawAxiosRequestHeaders; + purge?: RawAxiosRequestHeaders; + link?: RawAxiosRequestHeaders; + unlink?: RawAxiosRequestHeaders; + } + + interface AxiosDefaults extends Omit, 'headers'> { + headers: HeadersDefaults; + } + + interface CreateAxiosDefaults extends Omit, 'headers'> { + headers?: RawAxiosRequestHeaders | AxiosHeaders | Partial; + } + + interface AxiosResponse { + data: T; + status: number; + statusText: string; + headers: RawAxiosResponseHeaders | AxiosResponseHeaders; + config: InternalAxiosRequestConfig; + request?: any; + } + + type AxiosPromise = Promise>; + + interface CancelStatic { + new (message?: string): Cancel; + } + + interface Cancel { + message: string | undefined; + } + + interface Canceler { + (message?: string, config?: AxiosRequestConfig, request?: any): void; + } + + interface CancelTokenStatic { + new (executor: (cancel: Canceler) => void): CancelToken; + source(): CancelTokenSource; + } + + interface CancelToken { + promise: Promise; + reason?: Cancel; + throwIfRequested(): void; + } + + interface CancelTokenSource { + token: CancelToken; + cancel: Canceler; + } + + interface AxiosInterceptorOptions { + synchronous?: boolean; + runWhen?: (config: InternalAxiosRequestConfig) => boolean; + } + + type AxiosRequestInterceptorUse = (onFulfilled?: ((value: T) => T | Promise) | null, onRejected?: ((error: any) => any) | null, options?: AxiosInterceptorOptions) => number; + + type AxiosResponseInterceptorUse = (onFulfilled?: ((value: T) => T | Promise) | null, onRejected?: ((error: any) => any) | null) => number; + + interface AxiosInterceptorManager { + use: V extends AxiosResponse ? AxiosResponseInterceptorUse : AxiosRequestInterceptorUse; + eject(id: number): void; + clear(): void; + } + + interface AxiosInstance extends Axios { + , D = any>(config: AxiosRequestConfig): Promise; + , D = any>(url: string, config?: AxiosRequestConfig): Promise; + + create(config?: CreateAxiosDefaults): AxiosInstance; + defaults: Omit & { + headers: HeadersDefaults & { + [key: string]: AxiosHeaderValue + } + }; + } + + interface GenericFormData { + append(name: string, value: any, options?: any): any; + } + + interface GenericHTMLFormElement { + name: string; + method: string; + submit(): void; + } + + interface AxiosStatic extends AxiosInstance { + Cancel: CancelStatic; + CancelToken: CancelTokenStatic; + Axios: typeof Axios; + AxiosError: typeof AxiosError; + CanceledError: typeof CanceledError; + HttpStatusCode: typeof HttpStatusCode; + readonly VERSION: string; + isCancel(value: any): value is Cancel; + all(values: Array>): Promise; + spread(callback: (...args: T[]) => R): (array: T[]) => R; + isAxiosError(payload: any): payload is AxiosError; + toFormData(sourceObj: object, targetFormData?: GenericFormData, options?: FormSerializerOptions): GenericFormData; + formToJSON(form: GenericFormData|GenericHTMLFormElement): object; + getAdapter(adapters: AxiosAdapterConfig | AxiosAdapterConfig[] | undefined): AxiosAdapter; + AxiosHeaders: typeof AxiosHeaders; + } +} + +declare const axios: axios.AxiosStatic; + +export = axios; diff --git a/node_modules/axios/index.d.ts b/node_modules/axios/index.d.ts new file mode 100644 index 0000000..840fdcb --- /dev/null +++ b/node_modules/axios/index.d.ts @@ -0,0 +1,572 @@ +// TypeScript Version: 4.7 +export type AxiosHeaderValue = AxiosHeaders | string | string[] | number | boolean | null; + +interface RawAxiosHeaders { + [key: string]: AxiosHeaderValue; +} + +type MethodsHeaders = Partial<{ + [Key in Method as Lowercase]: AxiosHeaders; +} & {common: AxiosHeaders}>; + +type AxiosHeaderMatcher = string | RegExp | ((this: AxiosHeaders, value: string, name: string) => boolean); + +type AxiosHeaderParser = (this: AxiosHeaders, value: AxiosHeaderValue, header: string) => any; + +export class AxiosHeaders { + constructor( + headers?: RawAxiosHeaders | AxiosHeaders | string + ); + + [key: string]: any; + + set(headerName?: string, value?: AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + set(headers?: RawAxiosHeaders | AxiosHeaders | string, rewrite?: boolean): AxiosHeaders; + + get(headerName: string, parser: RegExp): RegExpExecArray | null; + get(headerName: string, matcher?: true | AxiosHeaderParser): AxiosHeaderValue; + + has(header: string, matcher?: AxiosHeaderMatcher): boolean; + + delete(header: string | string[], matcher?: AxiosHeaderMatcher): boolean; + + clear(matcher?: AxiosHeaderMatcher): boolean; + + normalize(format: boolean): AxiosHeaders; + + concat(...targets: Array): AxiosHeaders; + + toJSON(asStrings?: boolean): RawAxiosHeaders; + + static from(thing?: AxiosHeaders | RawAxiosHeaders | string): AxiosHeaders; + + static accessor(header: string | string[]): AxiosHeaders; + + static concat(...targets: Array): AxiosHeaders; + + setContentType(value: ContentType, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + getContentType(parser?: RegExp): RegExpExecArray | null; + getContentType(matcher?: AxiosHeaderMatcher): AxiosHeaderValue; + hasContentType(matcher?: AxiosHeaderMatcher): boolean; + + setContentLength(value: AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + getContentLength(parser?: RegExp): RegExpExecArray | null; + getContentLength(matcher?: AxiosHeaderMatcher): AxiosHeaderValue; + hasContentLength(matcher?: AxiosHeaderMatcher): boolean; + + setAccept(value: AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + getAccept(parser?: RegExp): RegExpExecArray | null; + getAccept(matcher?: AxiosHeaderMatcher): AxiosHeaderValue; + hasAccept(matcher?: AxiosHeaderMatcher): boolean; + + setUserAgent(value: AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + getUserAgent(parser?: RegExp): RegExpExecArray | null; + getUserAgent(matcher?: AxiosHeaderMatcher): AxiosHeaderValue; + hasUserAgent(matcher?: AxiosHeaderMatcher): boolean; + + setContentEncoding(value: AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + getContentEncoding(parser?: RegExp): RegExpExecArray | null; + getContentEncoding(matcher?: AxiosHeaderMatcher): AxiosHeaderValue; + hasContentEncoding(matcher?: AxiosHeaderMatcher): boolean; + + setAuthorization(value: AxiosHeaderValue, rewrite?: boolean | AxiosHeaderMatcher): AxiosHeaders; + getAuthorization(parser?: RegExp): RegExpExecArray | null; + getAuthorization(matcher?: AxiosHeaderMatcher): AxiosHeaderValue; + hasAuthorization(matcher?: AxiosHeaderMatcher): boolean; + + getSetCookie(): string[]; + + [Symbol.iterator](): IterableIterator<[string, AxiosHeaderValue]>; +} + +type CommonRequestHeadersList = 'Accept' | 'Content-Length' | 'User-Agent' | 'Content-Encoding' | 'Authorization'; + +type ContentType = AxiosHeaderValue | 'text/html' | 'text/plain' | 'multipart/form-data' | 'application/json' | 'application/x-www-form-urlencoded' | 'application/octet-stream'; + +export type RawAxiosRequestHeaders = Partial; + +export type AxiosRequestHeaders = RawAxiosRequestHeaders & AxiosHeaders; + +type CommonResponseHeadersList = 'Server' | 'Content-Type' | 'Content-Length' | 'Cache-Control'| 'Content-Encoding'; + +type RawCommonResponseHeaders = { + [Key in CommonResponseHeadersList]: AxiosHeaderValue; +} & { + "set-cookie": string[]; +}; + +export type RawAxiosResponseHeaders = Partial; + +export type AxiosResponseHeaders = RawAxiosResponseHeaders & AxiosHeaders; + +export interface AxiosRequestTransformer { + (this: InternalAxiosRequestConfig, data: any, headers: AxiosRequestHeaders): any; +} + +export interface AxiosResponseTransformer { + (this: InternalAxiosRequestConfig, data: any, headers: AxiosResponseHeaders, status?: number): any; +} + +export interface AxiosAdapter { + (config: InternalAxiosRequestConfig): AxiosPromise; +} + +export interface AxiosBasicCredentials { + username: string; + password: string; +} + +export interface AxiosProxyConfig { + host: string; + port: number; + auth?: AxiosBasicCredentials; + protocol?: string; +} + +export enum HttpStatusCode { + Continue = 100, + SwitchingProtocols = 101, + Processing = 102, + EarlyHints = 103, + Ok = 200, + Created = 201, + Accepted = 202, + NonAuthoritativeInformation = 203, + NoContent = 204, + ResetContent = 205, + PartialContent = 206, + MultiStatus = 207, + AlreadyReported = 208, + ImUsed = 226, + MultipleChoices = 300, + MovedPermanently = 301, + Found = 302, + SeeOther = 303, + NotModified = 304, + UseProxy = 305, + Unused = 306, + TemporaryRedirect = 307, + PermanentRedirect = 308, + BadRequest = 400, + Unauthorized = 401, + PaymentRequired = 402, + Forbidden = 403, + NotFound = 404, + MethodNotAllowed = 405, + NotAcceptable = 406, + ProxyAuthenticationRequired = 407, + RequestTimeout = 408, + Conflict = 409, + Gone = 410, + LengthRequired = 411, + PreconditionFailed = 412, + PayloadTooLarge = 413, + UriTooLong = 414, + UnsupportedMediaType = 415, + RangeNotSatisfiable = 416, + ExpectationFailed = 417, + ImATeapot = 418, + MisdirectedRequest = 421, + UnprocessableEntity = 422, + Locked = 423, + FailedDependency = 424, + TooEarly = 425, + UpgradeRequired = 426, + PreconditionRequired = 428, + TooManyRequests = 429, + RequestHeaderFieldsTooLarge = 431, + UnavailableForLegalReasons = 451, + InternalServerError = 500, + NotImplemented = 501, + BadGateway = 502, + ServiceUnavailable = 503, + GatewayTimeout = 504, + HttpVersionNotSupported = 505, + VariantAlsoNegotiates = 506, + InsufficientStorage = 507, + LoopDetected = 508, + NotExtended = 510, + NetworkAuthenticationRequired = 511, +} + +export type Method = + | 'get' | 'GET' + | 'delete' | 'DELETE' + | 'head' | 'HEAD' + | 'options' | 'OPTIONS' + | 'post' | 'POST' + | 'put' | 'PUT' + | 'patch' | 'PATCH' + | 'purge' | 'PURGE' + | 'link' | 'LINK' + | 'unlink' | 'UNLINK'; + +export type ResponseType = + | 'arraybuffer' + | 'blob' + | 'document' + | 'json' + | 'text' + | 'stream' + | 'formdata'; + +export type responseEncoding = + | 'ascii' | 'ASCII' + | 'ansi' | 'ANSI' + | 'binary' | 'BINARY' + | 'base64' | 'BASE64' + | 'base64url' | 'BASE64URL' + | 'hex' | 'HEX' + | 'latin1' | 'LATIN1' + | 'ucs-2' | 'UCS-2' + | 'ucs2' | 'UCS2' + | 'utf-8' | 'UTF-8' + | 'utf8' | 'UTF8' + | 'utf16le' | 'UTF16LE'; + +export interface TransitionalOptions { + silentJSONParsing?: boolean; + forcedJSONParsing?: boolean; + clarifyTimeoutError?: boolean; +} + +export interface GenericAbortSignal { + readonly aborted: boolean; + onabort?: ((...args: any) => any) | null; + addEventListener?: (...args: any) => any; + removeEventListener?: (...args: any) => any; +} + +export interface FormDataVisitorHelpers { + defaultVisitor: SerializerVisitor; + convertValue: (value: any) => any; + isVisitable: (value: any) => boolean; +} + +export interface SerializerVisitor { + ( + this: GenericFormData, + value: any, + key: string | number, + path: null | Array, + helpers: FormDataVisitorHelpers + ): boolean; +} + +export interface SerializerOptions { + visitor?: SerializerVisitor; + dots?: boolean; + metaTokens?: boolean; + indexes?: boolean | null; +} + +// tslint:disable-next-line +export interface FormSerializerOptions extends SerializerOptions { +} + +export interface ParamEncoder { + (value: any, defaultEncoder: (value: any) => any): any; +} + +export interface CustomParamsSerializer { + (params: Record, options?: ParamsSerializerOptions): string; +} + +export interface ParamsSerializerOptions extends SerializerOptions { + encode?: ParamEncoder; + serialize?: CustomParamsSerializer; +} + +type MaxUploadRate = number; + +type MaxDownloadRate = number; + +type BrowserProgressEvent = any; + +export interface AxiosProgressEvent { + loaded: number; + total?: number; + progress?: number; + bytes: number; + rate?: number; + estimated?: number; + upload?: boolean; + download?: boolean; + event?: BrowserProgressEvent; + lengthComputable: boolean; +} + +type Milliseconds = number; + +type AxiosAdapterName = 'fetch' | 'xhr' | 'http' | (string & {}); + +type AxiosAdapterConfig = AxiosAdapter | AxiosAdapterName; + +export type AddressFamily = 4 | 6 | undefined; + +export interface LookupAddressEntry { + address: string; + family?: AddressFamily; +} + +export type LookupAddress = string | LookupAddressEntry; + +export interface AxiosRequestConfig { + url?: string; + method?: Method | string; + baseURL?: string; + allowAbsoluteUrls?: boolean; + transformRequest?: AxiosRequestTransformer | AxiosRequestTransformer[]; + transformResponse?: AxiosResponseTransformer | AxiosResponseTransformer[]; + headers?: (RawAxiosRequestHeaders & MethodsHeaders) | AxiosHeaders; + params?: any; + paramsSerializer?: ParamsSerializerOptions | CustomParamsSerializer; + data?: D; + timeout?: Milliseconds; + timeoutErrorMessage?: string; + withCredentials?: boolean; + adapter?: AxiosAdapterConfig | AxiosAdapterConfig[]; + auth?: AxiosBasicCredentials; + responseType?: ResponseType; + responseEncoding?: responseEncoding | string; + xsrfCookieName?: string; + xsrfHeaderName?: string; + onUploadProgress?: (progressEvent: AxiosProgressEvent) => void; + onDownloadProgress?: (progressEvent: AxiosProgressEvent) => void; + maxContentLength?: number; + validateStatus?: ((status: number) => boolean) | null; + maxBodyLength?: number; + maxRedirects?: number; + maxRate?: number | [MaxUploadRate, MaxDownloadRate]; + beforeRedirect?: (options: Record, responseDetails: {headers: Record, statusCode: HttpStatusCode}) => void; + socketPath?: string | null; + transport?: any; + httpAgent?: any; + httpsAgent?: any; + proxy?: AxiosProxyConfig | false; + cancelToken?: CancelToken; + decompress?: boolean; + transitional?: TransitionalOptions; + signal?: GenericAbortSignal; + insecureHTTPParser?: boolean; + env?: { + FormData?: new (...args: any[]) => object; + }; + formSerializer?: FormSerializerOptions; + family?: AddressFamily; + lookup?: ((hostname: string, options: object, cb: (err: Error | null, address: LookupAddress | LookupAddress[], family?: AddressFamily) => void) => void) | + ((hostname: string, options: object) => Promise<[address: LookupAddressEntry | LookupAddressEntry[], family?: AddressFamily] | LookupAddress>); + withXSRFToken?: boolean | ((config: InternalAxiosRequestConfig) => boolean | undefined); + fetchOptions?: Record; +} + +// Alias +export type RawAxiosRequestConfig = AxiosRequestConfig; + +export interface InternalAxiosRequestConfig extends AxiosRequestConfig { + headers: AxiosRequestHeaders; +} + +export interface HeadersDefaults { + common: RawAxiosRequestHeaders; + delete: RawAxiosRequestHeaders; + get: RawAxiosRequestHeaders; + head: RawAxiosRequestHeaders; + post: RawAxiosRequestHeaders; + put: RawAxiosRequestHeaders; + patch: RawAxiosRequestHeaders; + options?: RawAxiosRequestHeaders; + purge?: RawAxiosRequestHeaders; + link?: RawAxiosRequestHeaders; + unlink?: RawAxiosRequestHeaders; +} + +export interface AxiosDefaults extends Omit, 'headers'> { + headers: HeadersDefaults; +} + +export interface CreateAxiosDefaults extends Omit, 'headers'> { + headers?: RawAxiosRequestHeaders | AxiosHeaders | Partial; +} + +export interface AxiosResponse { + data: T; + status: number; + statusText: string; + headers: RawAxiosResponseHeaders | AxiosResponseHeaders; + config: InternalAxiosRequestConfig; + request?: any; +} + +export class AxiosError extends Error { + constructor( + message?: string, + code?: string, + config?: InternalAxiosRequestConfig, + request?: any, + response?: AxiosResponse + ); + + config?: InternalAxiosRequestConfig; + code?: string; + request?: any; + response?: AxiosResponse; + isAxiosError: boolean; + status?: number; + toJSON: () => object; + cause?: Error; + static from( + error: Error | unknown, + code?: string, + config?: InternalAxiosRequestConfig, + request?: any, + response?: AxiosResponse, + customProps?: object, +): AxiosError; + static readonly ERR_FR_TOO_MANY_REDIRECTS = "ERR_FR_TOO_MANY_REDIRECTS"; + static readonly ERR_BAD_OPTION_VALUE = "ERR_BAD_OPTION_VALUE"; + static readonly ERR_BAD_OPTION = "ERR_BAD_OPTION"; + static readonly ERR_NETWORK = "ERR_NETWORK"; + static readonly ERR_DEPRECATED = "ERR_DEPRECATED"; + static readonly ERR_BAD_RESPONSE = "ERR_BAD_RESPONSE"; + static readonly ERR_BAD_REQUEST = "ERR_BAD_REQUEST"; + static readonly ERR_NOT_SUPPORT = "ERR_NOT_SUPPORT"; + static readonly ERR_INVALID_URL = "ERR_INVALID_URL"; + static readonly ERR_CANCELED = "ERR_CANCELED"; + static readonly ECONNABORTED = "ECONNABORTED"; + static readonly ETIMEDOUT = "ETIMEDOUT"; +} + +export class CanceledError extends AxiosError { +} + +export type AxiosPromise = Promise>; + +export interface CancelStatic { + new (message?: string): Cancel; +} + +export interface Cancel { + message: string | undefined; +} + +export interface Canceler { + (message?: string, config?: AxiosRequestConfig, request?: any): void; +} + +export interface CancelTokenStatic { + new (executor: (cancel: Canceler) => void): CancelToken; + source(): CancelTokenSource; +} + +export interface CancelToken { + promise: Promise; + reason?: Cancel; + throwIfRequested(): void; +} + +export interface CancelTokenSource { + token: CancelToken; + cancel: Canceler; +} + +export interface AxiosInterceptorOptions { + synchronous?: boolean; + runWhen?: (config: InternalAxiosRequestConfig) => boolean; +} + +type AxiosRequestInterceptorUse = (onFulfilled?: ((value: T) => T | Promise) | null, onRejected?: ((error: any) => any) | null, options?: AxiosInterceptorOptions) => number; + +type AxiosResponseInterceptorUse = (onFulfilled?: ((value: T) => T | Promise) | null, onRejected?: ((error: any) => any) | null) => number; + +export interface AxiosInterceptorManager { + use: V extends AxiosResponse ? AxiosResponseInterceptorUse : AxiosRequestInterceptorUse; + eject(id: number): void; + clear(): void; +} + +export class Axios { + constructor(config?: AxiosRequestConfig); + defaults: AxiosDefaults; + interceptors: { + request: AxiosInterceptorManager; + response: AxiosInterceptorManager; + }; + getUri(config?: AxiosRequestConfig): string; + request, D = any>(config: AxiosRequestConfig): Promise; + get, D = any>(url: string, config?: AxiosRequestConfig): Promise; + delete, D = any>(url: string, config?: AxiosRequestConfig): Promise; + head, D = any>(url: string, config?: AxiosRequestConfig): Promise; + options, D = any>(url: string, config?: AxiosRequestConfig): Promise; + post, D = any>(url: string, data?: D, config?: AxiosRequestConfig): Promise; + put, D = any>(url: string, data?: D, config?: AxiosRequestConfig): Promise; + patch, D = any>(url: string, data?: D, config?: AxiosRequestConfig): Promise; + postForm, D = any>(url: string, data?: D, config?: AxiosRequestConfig): Promise; + putForm, D = any>(url: string, data?: D, config?: AxiosRequestConfig): Promise; + patchForm, D = any>(url: string, data?: D, config?: AxiosRequestConfig): Promise; +} + +export interface AxiosInstance extends Axios { + , D = any>(config: AxiosRequestConfig): Promise; + , D = any>(url: string, config?: AxiosRequestConfig): Promise; + + create(config?: CreateAxiosDefaults): AxiosInstance; + defaults: Omit & { + headers: HeadersDefaults & { + [key: string]: AxiosHeaderValue + } + }; +} + +export interface GenericFormData { + append(name: string, value: any, options?: any): any; +} + +export interface GenericHTMLFormElement { + name: string; + method: string; + submit(): void; +} + +export function getAdapter(adapters: AxiosAdapterConfig | AxiosAdapterConfig[] | undefined): AxiosAdapter; + +export function toFormData(sourceObj: object, targetFormData?: GenericFormData, options?: FormSerializerOptions): GenericFormData; + +export function formToJSON(form: GenericFormData|GenericHTMLFormElement): object; + +export function isAxiosError(payload: any): payload is AxiosError; + +export function spread(callback: (...args: T[]) => R): (array: T[]) => R; + +export function isCancel(value: any): value is Cancel; + +export function all(values: Array>): Promise; + +export function mergeConfig(config1: AxiosRequestConfig, config2: AxiosRequestConfig): AxiosRequestConfig; + +export interface AxiosStatic extends AxiosInstance { + Cancel: CancelStatic; + CancelToken: CancelTokenStatic; + Axios: typeof Axios; + AxiosError: typeof AxiosError; + HttpStatusCode: typeof HttpStatusCode; + readonly VERSION: string; + isCancel: typeof isCancel; + all: typeof all; + spread: typeof spread; + isAxiosError: typeof isAxiosError; + toFormData: typeof toFormData; + formToJSON: typeof formToJSON; + getAdapter: typeof getAdapter; + CanceledError: typeof CanceledError; + AxiosHeaders: typeof AxiosHeaders; + mergeConfig: typeof mergeConfig; +} + +declare const axios: AxiosStatic; + +export default axios; diff --git a/node_modules/axios/index.js b/node_modules/axios/index.js new file mode 100644 index 0000000..fba3990 --- /dev/null +++ b/node_modules/axios/index.js @@ -0,0 +1,43 @@ +import axios from './lib/axios.js'; + +// This module is intended to unwrap Axios default export as named. +// Keep top-level export same with static properties +// so that it can keep same with es module or cjs +const { + Axios, + AxiosError, + CanceledError, + isCancel, + CancelToken, + VERSION, + all, + Cancel, + isAxiosError, + spread, + toFormData, + AxiosHeaders, + HttpStatusCode, + formToJSON, + getAdapter, + mergeConfig +} = axios; + +export { + axios as default, + Axios, + AxiosError, + CanceledError, + isCancel, + CancelToken, + VERSION, + all, + Cancel, + isAxiosError, + spread, + toFormData, + AxiosHeaders, + HttpStatusCode, + formToJSON, + getAdapter, + mergeConfig +} diff --git a/node_modules/axios/lib/adapters/README.md b/node_modules/axios/lib/adapters/README.md new file mode 100644 index 0000000..68f1118 --- /dev/null +++ b/node_modules/axios/lib/adapters/README.md @@ -0,0 +1,37 @@ +# axios // adapters + +The modules under `adapters/` are modules that handle dispatching a request and settling a returned `Promise` once a response is received. + +## Example + +```js +var settle = require('./../core/settle'); + +module.exports = function myAdapter(config) { + // At this point: + // - config has been merged with defaults + // - request transformers have already run + // - request interceptors have already run + + // Make the request using config provided + // Upon response settle the Promise + + return new Promise(function(resolve, reject) { + + var response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config: config, + request: request + }; + + settle(resolve, reject, response); + + // From here: + // - response transformers will run + // - response interceptors will run + }); +} +``` diff --git a/node_modules/axios/lib/adapters/adapters.js b/node_modules/axios/lib/adapters/adapters.js new file mode 100644 index 0000000..b466dd5 --- /dev/null +++ b/node_modules/axios/lib/adapters/adapters.js @@ -0,0 +1,79 @@ +import utils from '../utils.js'; +import httpAdapter from './http.js'; +import xhrAdapter from './xhr.js'; +import fetchAdapter from './fetch.js'; +import AxiosError from "../core/AxiosError.js"; + +const knownAdapters = { + http: httpAdapter, + xhr: xhrAdapter, + fetch: fetchAdapter +} + +utils.forEach(knownAdapters, (fn, value) => { + if (fn) { + try { + Object.defineProperty(fn, 'name', {value}); + } catch (e) { + // eslint-disable-next-line no-empty + } + Object.defineProperty(fn, 'adapterName', {value}); + } +}); + +const renderReason = (reason) => `- ${reason}`; + +const isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false; + +export default { + getAdapter: (adapters) => { + adapters = utils.isArray(adapters) ? adapters : [adapters]; + + const {length} = adapters; + let nameOrAdapter; + let adapter; + + const rejectedReasons = {}; + + for (let i = 0; i < length; i++) { + nameOrAdapter = adapters[i]; + let id; + + adapter = nameOrAdapter; + + if (!isResolvedHandle(nameOrAdapter)) { + adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()]; + + if (adapter === undefined) { + throw new AxiosError(`Unknown adapter '${id}'`); + } + } + + if (adapter) { + break; + } + + rejectedReasons[id || '#' + i] = adapter; + } + + if (!adapter) { + + const reasons = Object.entries(rejectedReasons) + .map(([id, state]) => `adapter ${id} ` + + (state === false ? 'is not supported by the environment' : 'is not available in the build') + ); + + let s = length ? + (reasons.length > 1 ? 'since :\n' + reasons.map(renderReason).join('\n') : ' ' + renderReason(reasons[0])) : + 'as no adapter specified'; + + throw new AxiosError( + `There is no suitable adapter to dispatch the request ` + s, + 'ERR_NOT_SUPPORT' + ); + } + + return adapter; + }, + adapters: knownAdapters +} diff --git a/node_modules/axios/lib/adapters/fetch.js b/node_modules/axios/lib/adapters/fetch.js new file mode 100644 index 0000000..974910d --- /dev/null +++ b/node_modules/axios/lib/adapters/fetch.js @@ -0,0 +1,229 @@ +import platform from "../platform/index.js"; +import utils from "../utils.js"; +import AxiosError from "../core/AxiosError.js"; +import composeSignals from "../helpers/composeSignals.js"; +import {trackStream} from "../helpers/trackStream.js"; +import AxiosHeaders from "../core/AxiosHeaders.js"; +import {progressEventReducer, progressEventDecorator, asyncDecorator} from "../helpers/progressEventReducer.js"; +import resolveConfig from "../helpers/resolveConfig.js"; +import settle from "../core/settle.js"; + +const isFetchSupported = typeof fetch === 'function' && typeof Request === 'function' && typeof Response === 'function'; +const isReadableStreamSupported = isFetchSupported && typeof ReadableStream === 'function'; + +// used only inside the fetch adapter +const encodeText = isFetchSupported && (typeof TextEncoder === 'function' ? + ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) : + async (str) => new Uint8Array(await new Response(str).arrayBuffer()) +); + +const test = (fn, ...args) => { + try { + return !!fn(...args); + } catch (e) { + return false + } +} + +const supportsRequestStream = isReadableStreamSupported && test(() => { + let duplexAccessed = false; + + const hasContentType = new Request(platform.origin, { + body: new ReadableStream(), + method: 'POST', + get duplex() { + duplexAccessed = true; + return 'half'; + }, + }).headers.has('Content-Type'); + + return duplexAccessed && !hasContentType; +}); + +const DEFAULT_CHUNK_SIZE = 64 * 1024; + +const supportsResponseStream = isReadableStreamSupported && + test(() => utils.isReadableStream(new Response('').body)); + + +const resolvers = { + stream: supportsResponseStream && ((res) => res.body) +}; + +isFetchSupported && (((res) => { + ['text', 'arrayBuffer', 'blob', 'formData', 'stream'].forEach(type => { + !resolvers[type] && (resolvers[type] = utils.isFunction(res[type]) ? (res) => res[type]() : + (_, config) => { + throw new AxiosError(`Response type '${type}' is not supported`, AxiosError.ERR_NOT_SUPPORT, config); + }) + }); +})(new Response)); + +const getBodyLength = async (body) => { + if (body == null) { + return 0; + } + + if(utils.isBlob(body)) { + return body.size; + } + + if(utils.isSpecCompliantForm(body)) { + const _request = new Request(platform.origin, { + method: 'POST', + body, + }); + return (await _request.arrayBuffer()).byteLength; + } + + if(utils.isArrayBufferView(body) || utils.isArrayBuffer(body)) { + return body.byteLength; + } + + if(utils.isURLSearchParams(body)) { + body = body + ''; + } + + if(utils.isString(body)) { + return (await encodeText(body)).byteLength; + } +} + +const resolveBodyLength = async (headers, body) => { + const length = utils.toFiniteNumber(headers.getContentLength()); + + return length == null ? getBodyLength(body) : length; +} + +export default isFetchSupported && (async (config) => { + let { + url, + method, + data, + signal, + cancelToken, + timeout, + onDownloadProgress, + onUploadProgress, + responseType, + headers, + withCredentials = 'same-origin', + fetchOptions + } = resolveConfig(config); + + responseType = responseType ? (responseType + '').toLowerCase() : 'text'; + + let composedSignal = composeSignals([signal, cancelToken && cancelToken.toAbortSignal()], timeout); + + let request; + + const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => { + composedSignal.unsubscribe(); + }); + + let requestContentLength; + + try { + if ( + onUploadProgress && supportsRequestStream && method !== 'get' && method !== 'head' && + (requestContentLength = await resolveBodyLength(headers, data)) !== 0 + ) { + let _request = new Request(url, { + method: 'POST', + body: data, + duplex: "half" + }); + + let contentTypeHeader; + + if (utils.isFormData(data) && (contentTypeHeader = _request.headers.get('content-type'))) { + headers.setContentType(contentTypeHeader) + } + + if (_request.body) { + const [onProgress, flush] = progressEventDecorator( + requestContentLength, + progressEventReducer(asyncDecorator(onUploadProgress)) + ); + + data = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush); + } + } + + if (!utils.isString(withCredentials)) { + withCredentials = withCredentials ? 'include' : 'omit'; + } + + // Cloudflare Workers throws when credentials are defined + // see https://github.com/cloudflare/workerd/issues/902 + const isCredentialsSupported = "credentials" in Request.prototype; + request = new Request(url, { + ...fetchOptions, + signal: composedSignal, + method: method.toUpperCase(), + headers: headers.normalize().toJSON(), + body: data, + duplex: "half", + credentials: isCredentialsSupported ? withCredentials : undefined + }); + + let response = await fetch(request); + + const isStreamResponse = supportsResponseStream && (responseType === 'stream' || responseType === 'response'); + + if (supportsResponseStream && (onDownloadProgress || (isStreamResponse && unsubscribe))) { + const options = {}; + + ['status', 'statusText', 'headers'].forEach(prop => { + options[prop] = response[prop]; + }); + + const responseContentLength = utils.toFiniteNumber(response.headers.get('content-length')); + + const [onProgress, flush] = onDownloadProgress && progressEventDecorator( + responseContentLength, + progressEventReducer(asyncDecorator(onDownloadProgress), true) + ) || []; + + response = new Response( + trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => { + flush && flush(); + unsubscribe && unsubscribe(); + }), + options + ); + } + + responseType = responseType || 'text'; + + let responseData = await resolvers[utils.findKey(resolvers, responseType) || 'text'](response, config); + + !isStreamResponse && unsubscribe && unsubscribe(); + + return await new Promise((resolve, reject) => { + settle(resolve, reject, { + data: responseData, + headers: AxiosHeaders.from(response.headers), + status: response.status, + statusText: response.statusText, + config, + request + }) + }) + } catch (err) { + unsubscribe && unsubscribe(); + + if (err && err.name === 'TypeError' && /Load failed|fetch/i.test(err.message)) { + throw Object.assign( + new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request), + { + cause: err.cause || err + } + ) + } + + throw AxiosError.from(err, err && err.code, config, request); + } +}); + + diff --git a/node_modules/axios/lib/adapters/http.js b/node_modules/axios/lib/adapters/http.js new file mode 100644 index 0000000..0577bf0 --- /dev/null +++ b/node_modules/axios/lib/adapters/http.js @@ -0,0 +1,695 @@ +'use strict'; + +import utils from './../utils.js'; +import settle from './../core/settle.js'; +import buildFullPath from '../core/buildFullPath.js'; +import buildURL from './../helpers/buildURL.js'; +import proxyFromEnv from 'proxy-from-env'; +import http from 'http'; +import https from 'https'; +import util from 'util'; +import followRedirects from 'follow-redirects'; +import zlib from 'zlib'; +import {VERSION} from '../env/data.js'; +import transitionalDefaults from '../defaults/transitional.js'; +import AxiosError from '../core/AxiosError.js'; +import CanceledError from '../cancel/CanceledError.js'; +import platform from '../platform/index.js'; +import fromDataURI from '../helpers/fromDataURI.js'; +import stream from 'stream'; +import AxiosHeaders from '../core/AxiosHeaders.js'; +import AxiosTransformStream from '../helpers/AxiosTransformStream.js'; +import {EventEmitter} from 'events'; +import formDataToStream from "../helpers/formDataToStream.js"; +import readBlob from "../helpers/readBlob.js"; +import ZlibHeaderTransformStream from '../helpers/ZlibHeaderTransformStream.js'; +import callbackify from "../helpers/callbackify.js"; +import {progressEventReducer, progressEventDecorator, asyncDecorator} from "../helpers/progressEventReducer.js"; + +const zlibOptions = { + flush: zlib.constants.Z_SYNC_FLUSH, + finishFlush: zlib.constants.Z_SYNC_FLUSH +}; + +const brotliOptions = { + flush: zlib.constants.BROTLI_OPERATION_FLUSH, + finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH +} + +const isBrotliSupported = utils.isFunction(zlib.createBrotliDecompress); + +const {http: httpFollow, https: httpsFollow} = followRedirects; + +const isHttps = /https:?/; + +const supportedProtocols = platform.protocols.map(protocol => { + return protocol + ':'; +}); + +const flushOnFinish = (stream, [throttled, flush]) => { + stream + .on('end', flush) + .on('error', flush); + + return throttled; +} + +/** + * If the proxy or config beforeRedirects functions are defined, call them with the options + * object. + * + * @param {Object} options - The options object that was passed to the request. + * + * @returns {Object} + */ +function dispatchBeforeRedirect(options, responseDetails) { + if (options.beforeRedirects.proxy) { + options.beforeRedirects.proxy(options); + } + if (options.beforeRedirects.config) { + options.beforeRedirects.config(options, responseDetails); + } +} + +/** + * If the proxy or config afterRedirects functions are defined, call them with the options + * + * @param {http.ClientRequestArgs} options + * @param {AxiosProxyConfig} configProxy configuration from Axios options object + * @param {string} location + * + * @returns {http.ClientRequestArgs} + */ +function setProxy(options, configProxy, location) { + let proxy = configProxy; + if (!proxy && proxy !== false) { + const proxyUrl = proxyFromEnv.getProxyForUrl(location); + if (proxyUrl) { + proxy = new URL(proxyUrl); + } + } + if (proxy) { + // Basic proxy authorization + if (proxy.username) { + proxy.auth = (proxy.username || '') + ':' + (proxy.password || ''); + } + + if (proxy.auth) { + // Support proxy auth object form + if (proxy.auth.username || proxy.auth.password) { + proxy.auth = (proxy.auth.username || '') + ':' + (proxy.auth.password || ''); + } + const base64 = Buffer + .from(proxy.auth, 'utf8') + .toString('base64'); + options.headers['Proxy-Authorization'] = 'Basic ' + base64; + } + + options.headers.host = options.hostname + (options.port ? ':' + options.port : ''); + const proxyHost = proxy.hostname || proxy.host; + options.hostname = proxyHost; + // Replace 'host' since options is not a URL object + options.host = proxyHost; + options.port = proxy.port; + options.path = location; + if (proxy.protocol) { + options.protocol = proxy.protocol.includes(':') ? proxy.protocol : `${proxy.protocol}:`; + } + } + + options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) { + // Configure proxy for redirected request, passing the original config proxy to apply + // the exact same logic as if the redirected request was performed by axios directly. + setProxy(redirectOptions, configProxy, redirectOptions.href); + }; +} + +const isHttpAdapterSupported = typeof process !== 'undefined' && utils.kindOf(process) === 'process'; + +// temporary hotfix + +const wrapAsync = (asyncExecutor) => { + return new Promise((resolve, reject) => { + let onDone; + let isDone; + + const done = (value, isRejected) => { + if (isDone) return; + isDone = true; + onDone && onDone(value, isRejected); + } + + const _resolve = (value) => { + done(value); + resolve(value); + }; + + const _reject = (reason) => { + done(reason, true); + reject(reason); + } + + asyncExecutor(_resolve, _reject, (onDoneHandler) => (onDone = onDoneHandler)).catch(_reject); + }) +}; + +const resolveFamily = ({address, family}) => { + if (!utils.isString(address)) { + throw TypeError('address must be a string'); + } + return ({ + address, + family: family || (address.indexOf('.') < 0 ? 6 : 4) + }); +} + +const buildAddressEntry = (address, family) => resolveFamily(utils.isObject(address) ? address : {address, family}); + +/*eslint consistent-return:0*/ +export default isHttpAdapterSupported && function httpAdapter(config) { + return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) { + let {data, lookup, family} = config; + const {responseType, responseEncoding} = config; + const method = config.method.toUpperCase(); + let isDone; + let rejected = false; + let req; + + if (lookup) { + const _lookup = callbackify(lookup, (value) => utils.isArray(value) ? value : [value]); + // hotfix to support opt.all option which is required for node 20.x + lookup = (hostname, opt, cb) => { + _lookup(hostname, opt, (err, arg0, arg1) => { + if (err) { + return cb(err); + } + + const addresses = utils.isArray(arg0) ? arg0.map(addr => buildAddressEntry(addr)) : [buildAddressEntry(arg0, arg1)]; + + opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family); + }); + } + } + + // temporary internal emitter until the AxiosRequest class will be implemented + const emitter = new EventEmitter(); + + const onFinished = () => { + if (config.cancelToken) { + config.cancelToken.unsubscribe(abort); + } + + if (config.signal) { + config.signal.removeEventListener('abort', abort); + } + + emitter.removeAllListeners(); + } + + onDone((value, isRejected) => { + isDone = true; + if (isRejected) { + rejected = true; + onFinished(); + } + }); + + function abort(reason) { + emitter.emit('abort', !reason || reason.type ? new CanceledError(null, config, req) : reason); + } + + emitter.once('abort', reject); + + if (config.cancelToken || config.signal) { + config.cancelToken && config.cancelToken.subscribe(abort); + if (config.signal) { + config.signal.aborted ? abort() : config.signal.addEventListener('abort', abort); + } + } + + // Parse url + const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls); + const parsed = new URL(fullPath, platform.hasBrowserEnv ? platform.origin : undefined); + const protocol = parsed.protocol || supportedProtocols[0]; + + if (protocol === 'data:') { + let convertedData; + + if (method !== 'GET') { + return settle(resolve, reject, { + status: 405, + statusText: 'method not allowed', + headers: {}, + config + }); + } + + try { + convertedData = fromDataURI(config.url, responseType === 'blob', { + Blob: config.env && config.env.Blob + }); + } catch (err) { + throw AxiosError.from(err, AxiosError.ERR_BAD_REQUEST, config); + } + + if (responseType === 'text') { + convertedData = convertedData.toString(responseEncoding); + + if (!responseEncoding || responseEncoding === 'utf8') { + convertedData = utils.stripBOM(convertedData); + } + } else if (responseType === 'stream') { + convertedData = stream.Readable.from(convertedData); + } + + return settle(resolve, reject, { + data: convertedData, + status: 200, + statusText: 'OK', + headers: new AxiosHeaders(), + config + }); + } + + if (supportedProtocols.indexOf(protocol) === -1) { + return reject(new AxiosError( + 'Unsupported protocol ' + protocol, + AxiosError.ERR_BAD_REQUEST, + config + )); + } + + const headers = AxiosHeaders.from(config.headers).normalize(); + + // Set User-Agent (required by some servers) + // See https://github.com/axios/axios/issues/69 + // User-Agent is specified; handle case where no UA header is desired + // Only set header if it hasn't been set in config + headers.set('User-Agent', 'axios/' + VERSION, false); + + const {onUploadProgress, onDownloadProgress} = config; + const maxRate = config.maxRate; + let maxUploadRate = undefined; + let maxDownloadRate = undefined; + + // support for spec compliant FormData objects + if (utils.isSpecCompliantForm(data)) { + const userBoundary = headers.getContentType(/boundary=([-_\w\d]{10,70})/i); + + data = formDataToStream(data, (formHeaders) => { + headers.set(formHeaders); + }, { + tag: `axios-${VERSION}-boundary`, + boundary: userBoundary && userBoundary[1] || undefined + }); + // support for https://www.npmjs.com/package/form-data api + } else if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) { + headers.set(data.getHeaders()); + + if (!headers.hasContentLength()) { + try { + const knownLength = await util.promisify(data.getLength).call(data); + Number.isFinite(knownLength) && knownLength >= 0 && headers.setContentLength(knownLength); + /*eslint no-empty:0*/ + } catch (e) { + } + } + } else if (utils.isBlob(data) || utils.isFile(data)) { + data.size && headers.setContentType(data.type || 'application/octet-stream'); + headers.setContentLength(data.size || 0); + data = stream.Readable.from(readBlob(data)); + } else if (data && !utils.isStream(data)) { + if (Buffer.isBuffer(data)) { + // Nothing to do... + } else if (utils.isArrayBuffer(data)) { + data = Buffer.from(new Uint8Array(data)); + } else if (utils.isString(data)) { + data = Buffer.from(data, 'utf-8'); + } else { + return reject(new AxiosError( + 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream', + AxiosError.ERR_BAD_REQUEST, + config + )); + } + + // Add Content-Length header if data exists + headers.setContentLength(data.length, false); + + if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) { + return reject(new AxiosError( + 'Request body larger than maxBodyLength limit', + AxiosError.ERR_BAD_REQUEST, + config + )); + } + } + + const contentLength = utils.toFiniteNumber(headers.getContentLength()); + + if (utils.isArray(maxRate)) { + maxUploadRate = maxRate[0]; + maxDownloadRate = maxRate[1]; + } else { + maxUploadRate = maxDownloadRate = maxRate; + } + + if (data && (onUploadProgress || maxUploadRate)) { + if (!utils.isStream(data)) { + data = stream.Readable.from(data, {objectMode: false}); + } + + data = stream.pipeline([data, new AxiosTransformStream({ + maxRate: utils.toFiniteNumber(maxUploadRate) + })], utils.noop); + + onUploadProgress && data.on('progress', flushOnFinish( + data, + progressEventDecorator( + contentLength, + progressEventReducer(asyncDecorator(onUploadProgress), false, 3) + ) + )); + } + + // HTTP basic authentication + let auth = undefined; + if (config.auth) { + const username = config.auth.username || ''; + const password = config.auth.password || ''; + auth = username + ':' + password; + } + + if (!auth && parsed.username) { + const urlUsername = parsed.username; + const urlPassword = parsed.password; + auth = urlUsername + ':' + urlPassword; + } + + auth && headers.delete('authorization'); + + let path; + + try { + path = buildURL( + parsed.pathname + parsed.search, + config.params, + config.paramsSerializer + ).replace(/^\?/, ''); + } catch (err) { + const customErr = new Error(err.message); + customErr.config = config; + customErr.url = config.url; + customErr.exists = true; + return reject(customErr); + } + + headers.set( + 'Accept-Encoding', + 'gzip, compress, deflate' + (isBrotliSupported ? ', br' : ''), false + ); + + const options = { + path, + method: method, + headers: headers.toJSON(), + agents: { http: config.httpAgent, https: config.httpsAgent }, + auth, + protocol, + family, + beforeRedirect: dispatchBeforeRedirect, + beforeRedirects: {} + }; + + // cacheable-lookup integration hotfix + !utils.isUndefined(lookup) && (options.lookup = lookup); + + if (config.socketPath) { + options.socketPath = config.socketPath; + } else { + options.hostname = parsed.hostname.startsWith("[") ? parsed.hostname.slice(1, -1) : parsed.hostname; + options.port = parsed.port; + setProxy(options, config.proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path); + } + + let transport; + const isHttpsRequest = isHttps.test(options.protocol); + options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent; + if (config.transport) { + transport = config.transport; + } else if (config.maxRedirects === 0) { + transport = isHttpsRequest ? https : http; + } else { + if (config.maxRedirects) { + options.maxRedirects = config.maxRedirects; + } + if (config.beforeRedirect) { + options.beforeRedirects.config = config.beforeRedirect; + } + transport = isHttpsRequest ? httpsFollow : httpFollow; + } + + if (config.maxBodyLength > -1) { + options.maxBodyLength = config.maxBodyLength; + } else { + // follow-redirects does not skip comparison, so it should always succeed for axios -1 unlimited + options.maxBodyLength = Infinity; + } + + if (config.insecureHTTPParser) { + options.insecureHTTPParser = config.insecureHTTPParser; + } + + // Create the request + req = transport.request(options, function handleResponse(res) { + if (req.destroyed) return; + + const streams = [res]; + + const responseLength = +res.headers['content-length']; + + if (onDownloadProgress || maxDownloadRate) { + const transformStream = new AxiosTransformStream({ + maxRate: utils.toFiniteNumber(maxDownloadRate) + }); + + onDownloadProgress && transformStream.on('progress', flushOnFinish( + transformStream, + progressEventDecorator( + responseLength, + progressEventReducer(asyncDecorator(onDownloadProgress), true, 3) + ) + )); + + streams.push(transformStream); + } + + // decompress the response body transparently if required + let responseStream = res; + + // return the last request in case of redirects + const lastRequest = res.req || req; + + // if decompress disabled we should not decompress + if (config.decompress !== false && res.headers['content-encoding']) { + // if no content, but headers still say that it is encoded, + // remove the header not confuse downstream operations + if (method === 'HEAD' || res.statusCode === 204) { + delete res.headers['content-encoding']; + } + + switch ((res.headers['content-encoding'] || '').toLowerCase()) { + /*eslint default-case:0*/ + case 'gzip': + case 'x-gzip': + case 'compress': + case 'x-compress': + // add the unzipper to the body stream processing pipeline + streams.push(zlib.createUnzip(zlibOptions)); + + // remove the content-encoding in order to not confuse downstream operations + delete res.headers['content-encoding']; + break; + case 'deflate': + streams.push(new ZlibHeaderTransformStream()); + + // add the unzipper to the body stream processing pipeline + streams.push(zlib.createUnzip(zlibOptions)); + + // remove the content-encoding in order to not confuse downstream operations + delete res.headers['content-encoding']; + break; + case 'br': + if (isBrotliSupported) { + streams.push(zlib.createBrotliDecompress(brotliOptions)); + delete res.headers['content-encoding']; + } + } + } + + responseStream = streams.length > 1 ? stream.pipeline(streams, utils.noop) : streams[0]; + + const offListeners = stream.finished(responseStream, () => { + offListeners(); + onFinished(); + }); + + const response = { + status: res.statusCode, + statusText: res.statusMessage, + headers: new AxiosHeaders(res.headers), + config, + request: lastRequest + }; + + if (responseType === 'stream') { + response.data = responseStream; + settle(resolve, reject, response); + } else { + const responseBuffer = []; + let totalResponseBytes = 0; + + responseStream.on('data', function handleStreamData(chunk) { + responseBuffer.push(chunk); + totalResponseBytes += chunk.length; + + // make sure the content length is not over the maxContentLength if specified + if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) { + // stream.destroy() emit aborted event before calling reject() on Node.js v16 + rejected = true; + responseStream.destroy(); + reject(new AxiosError('maxContentLength size of ' + config.maxContentLength + ' exceeded', + AxiosError.ERR_BAD_RESPONSE, config, lastRequest)); + } + }); + + responseStream.on('aborted', function handlerStreamAborted() { + if (rejected) { + return; + } + + const err = new AxiosError( + 'stream has been aborted', + AxiosError.ERR_BAD_RESPONSE, + config, + lastRequest + ); + responseStream.destroy(err); + reject(err); + }); + + responseStream.on('error', function handleStreamError(err) { + if (req.destroyed) return; + reject(AxiosError.from(err, null, config, lastRequest)); + }); + + responseStream.on('end', function handleStreamEnd() { + try { + let responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer); + if (responseType !== 'arraybuffer') { + responseData = responseData.toString(responseEncoding); + if (!responseEncoding || responseEncoding === 'utf8') { + responseData = utils.stripBOM(responseData); + } + } + response.data = responseData; + } catch (err) { + return reject(AxiosError.from(err, null, config, response.request, response)); + } + settle(resolve, reject, response); + }); + } + + emitter.once('abort', err => { + if (!responseStream.destroyed) { + responseStream.emit('error', err); + responseStream.destroy(); + } + }); + }); + + emitter.once('abort', err => { + reject(err); + req.destroy(err); + }); + + // Handle errors + req.on('error', function handleRequestError(err) { + // @todo remove + // if (req.aborted && err.code !== AxiosError.ERR_FR_TOO_MANY_REDIRECTS) return; + reject(AxiosError.from(err, null, config, req)); + }); + + // set tcp keep alive to prevent drop connection by peer + req.on('socket', function handleRequestSocket(socket) { + // default interval of sending ack packet is 1 minute + socket.setKeepAlive(true, 1000 * 60); + }); + + // Handle request timeout + if (config.timeout) { + // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types. + const timeout = parseInt(config.timeout, 10); + + if (Number.isNaN(timeout)) { + reject(new AxiosError( + 'error trying to parse `config.timeout` to int', + AxiosError.ERR_BAD_OPTION_VALUE, + config, + req + )); + + return; + } + + // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system. + // And timer callback will be fired, and abort() will be invoked before connection, then get "socket hang up" and code ECONNRESET. + // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up. + // And then these socket which be hang up will devouring CPU little by little. + // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect. + req.setTimeout(timeout, function handleRequestTimeout() { + if (isDone) return; + let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded'; + const transitional = config.transitional || transitionalDefaults; + if (config.timeoutErrorMessage) { + timeoutErrorMessage = config.timeoutErrorMessage; + } + reject(new AxiosError( + timeoutErrorMessage, + transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED, + config, + req + )); + abort(); + }); + } + + + // Send the request + if (utils.isStream(data)) { + let ended = false; + let errored = false; + + data.on('end', () => { + ended = true; + }); + + data.once('error', err => { + errored = true; + req.destroy(err); + }); + + data.on('close', () => { + if (!ended && !errored) { + abort(new CanceledError('Request stream has been aborted', config, req)); + } + }); + + data.pipe(req); + } else { + req.end(data); + } + }); +} + +export const __setProxy = setProxy; diff --git a/node_modules/axios/lib/adapters/xhr.js b/node_modules/axios/lib/adapters/xhr.js new file mode 100644 index 0000000..a7ee548 --- /dev/null +++ b/node_modules/axios/lib/adapters/xhr.js @@ -0,0 +1,197 @@ +import utils from './../utils.js'; +import settle from './../core/settle.js'; +import transitionalDefaults from '../defaults/transitional.js'; +import AxiosError from '../core/AxiosError.js'; +import CanceledError from '../cancel/CanceledError.js'; +import parseProtocol from '../helpers/parseProtocol.js'; +import platform from '../platform/index.js'; +import AxiosHeaders from '../core/AxiosHeaders.js'; +import {progressEventReducer} from '../helpers/progressEventReducer.js'; +import resolveConfig from "../helpers/resolveConfig.js"; + +const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined'; + +export default isXHRAdapterSupported && function (config) { + return new Promise(function dispatchXhrRequest(resolve, reject) { + const _config = resolveConfig(config); + let requestData = _config.data; + const requestHeaders = AxiosHeaders.from(_config.headers).normalize(); + let {responseType, onUploadProgress, onDownloadProgress} = _config; + let onCanceled; + let uploadThrottled, downloadThrottled; + let flushUpload, flushDownload; + + function done() { + flushUpload && flushUpload(); // flush events + flushDownload && flushDownload(); // flush events + + _config.cancelToken && _config.cancelToken.unsubscribe(onCanceled); + + _config.signal && _config.signal.removeEventListener('abort', onCanceled); + } + + let request = new XMLHttpRequest(); + + request.open(_config.method.toUpperCase(), _config.url, true); + + // Set the request timeout in MS + request.timeout = _config.timeout; + + function onloadend() { + if (!request) { + return; + } + // Prepare the response + const responseHeaders = AxiosHeaders.from( + 'getAllResponseHeaders' in request && request.getAllResponseHeaders() + ); + const responseData = !responseType || responseType === 'text' || responseType === 'json' ? + request.responseText : request.response; + const response = { + data: responseData, + status: request.status, + statusText: request.statusText, + headers: responseHeaders, + config, + request + }; + + settle(function _resolve(value) { + resolve(value); + done(); + }, function _reject(err) { + reject(err); + done(); + }, response); + + // Clean up request + request = null; + } + + if ('onloadend' in request) { + // Use onloadend if available + request.onloadend = onloadend; + } else { + // Listen for ready state to emulate onloadend + request.onreadystatechange = function handleLoad() { + if (!request || request.readyState !== 4) { + return; + } + + // The request errored out and we didn't get a response, this will be + // handled by onerror instead + // With one exception: request that using file: protocol, most browsers + // will return status as 0 even though it's a successful request + if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) { + return; + } + // readystate handler is calling before onerror or ontimeout handlers, + // so we should call onloadend on the next 'tick' + setTimeout(onloadend); + }; + } + + // Handle browser request cancellation (as opposed to a manual cancellation) + request.onabort = function handleAbort() { + if (!request) { + return; + } + + reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request)); + + // Clean up request + request = null; + }; + + // Handle low level network errors + request.onerror = function handleError() { + // Real errors are hidden from us by the browser + // onerror should only fire if it's a network error + reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request)); + + // Clean up request + request = null; + }; + + // Handle timeout + request.ontimeout = function handleTimeout() { + let timeoutErrorMessage = _config.timeout ? 'timeout of ' + _config.timeout + 'ms exceeded' : 'timeout exceeded'; + const transitional = _config.transitional || transitionalDefaults; + if (_config.timeoutErrorMessage) { + timeoutErrorMessage = _config.timeoutErrorMessage; + } + reject(new AxiosError( + timeoutErrorMessage, + transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED, + config, + request)); + + // Clean up request + request = null; + }; + + // Remove Content-Type if data is undefined + requestData === undefined && requestHeaders.setContentType(null); + + // Add headers to the request + if ('setRequestHeader' in request) { + utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) { + request.setRequestHeader(key, val); + }); + } + + // Add withCredentials to request if needed + if (!utils.isUndefined(_config.withCredentials)) { + request.withCredentials = !!_config.withCredentials; + } + + // Add responseType to request if needed + if (responseType && responseType !== 'json') { + request.responseType = _config.responseType; + } + + // Handle progress if needed + if (onDownloadProgress) { + ([downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true)); + request.addEventListener('progress', downloadThrottled); + } + + // Not all browsers support upload events + if (onUploadProgress && request.upload) { + ([uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress)); + + request.upload.addEventListener('progress', uploadThrottled); + + request.upload.addEventListener('loadend', flushUpload); + } + + if (_config.cancelToken || _config.signal) { + // Handle cancellation + // eslint-disable-next-line func-names + onCanceled = cancel => { + if (!request) { + return; + } + reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel); + request.abort(); + request = null; + }; + + _config.cancelToken && _config.cancelToken.subscribe(onCanceled); + if (_config.signal) { + _config.signal.aborted ? onCanceled() : _config.signal.addEventListener('abort', onCanceled); + } + } + + const protocol = parseProtocol(_config.url); + + if (protocol && platform.protocols.indexOf(protocol) === -1) { + reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config)); + return; + } + + + // Send the request + request.send(requestData || null); + }); +} diff --git a/node_modules/axios/lib/axios.js b/node_modules/axios/lib/axios.js new file mode 100644 index 0000000..873f246 --- /dev/null +++ b/node_modules/axios/lib/axios.js @@ -0,0 +1,89 @@ +'use strict'; + +import utils from './utils.js'; +import bind from './helpers/bind.js'; +import Axios from './core/Axios.js'; +import mergeConfig from './core/mergeConfig.js'; +import defaults from './defaults/index.js'; +import formDataToJSON from './helpers/formDataToJSON.js'; +import CanceledError from './cancel/CanceledError.js'; +import CancelToken from './cancel/CancelToken.js'; +import isCancel from './cancel/isCancel.js'; +import {VERSION} from './env/data.js'; +import toFormData from './helpers/toFormData.js'; +import AxiosError from './core/AxiosError.js'; +import spread from './helpers/spread.js'; +import isAxiosError from './helpers/isAxiosError.js'; +import AxiosHeaders from "./core/AxiosHeaders.js"; +import adapters from './adapters/adapters.js'; +import HttpStatusCode from './helpers/HttpStatusCode.js'; + +/** + * Create an instance of Axios + * + * @param {Object} defaultConfig The default config for the instance + * + * @returns {Axios} A new instance of Axios + */ +function createInstance(defaultConfig) { + const context = new Axios(defaultConfig); + const instance = bind(Axios.prototype.request, context); + + // Copy axios.prototype to instance + utils.extend(instance, Axios.prototype, context, {allOwnKeys: true}); + + // Copy context to instance + utils.extend(instance, context, null, {allOwnKeys: true}); + + // Factory for creating new instances + instance.create = function create(instanceConfig) { + return createInstance(mergeConfig(defaultConfig, instanceConfig)); + }; + + return instance; +} + +// Create the default instance to be exported +const axios = createInstance(defaults); + +// Expose Axios class to allow class inheritance +axios.Axios = Axios; + +// Expose Cancel & CancelToken +axios.CanceledError = CanceledError; +axios.CancelToken = CancelToken; +axios.isCancel = isCancel; +axios.VERSION = VERSION; +axios.toFormData = toFormData; + +// Expose AxiosError class +axios.AxiosError = AxiosError; + +// alias for CanceledError for backward compatibility +axios.Cancel = axios.CanceledError; + +// Expose all/spread +axios.all = function all(promises) { + return Promise.all(promises); +}; + +axios.spread = spread; + +// Expose isAxiosError +axios.isAxiosError = isAxiosError; + +// Expose mergeConfig +axios.mergeConfig = mergeConfig; + +axios.AxiosHeaders = AxiosHeaders; + +axios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing); + +axios.getAdapter = adapters.getAdapter; + +axios.HttpStatusCode = HttpStatusCode; + +axios.default = axios; + +// this module should only have a default export +export default axios diff --git a/node_modules/axios/lib/cancel/CancelToken.js b/node_modules/axios/lib/cancel/CancelToken.js new file mode 100644 index 0000000..0fc2025 --- /dev/null +++ b/node_modules/axios/lib/cancel/CancelToken.js @@ -0,0 +1,135 @@ +'use strict'; + +import CanceledError from './CanceledError.js'; + +/** + * A `CancelToken` is an object that can be used to request cancellation of an operation. + * + * @param {Function} executor The executor function. + * + * @returns {CancelToken} + */ +class CancelToken { + constructor(executor) { + if (typeof executor !== 'function') { + throw new TypeError('executor must be a function.'); + } + + let resolvePromise; + + this.promise = new Promise(function promiseExecutor(resolve) { + resolvePromise = resolve; + }); + + const token = this; + + // eslint-disable-next-line func-names + this.promise.then(cancel => { + if (!token._listeners) return; + + let i = token._listeners.length; + + while (i-- > 0) { + token._listeners[i](cancel); + } + token._listeners = null; + }); + + // eslint-disable-next-line func-names + this.promise.then = onfulfilled => { + let _resolve; + // eslint-disable-next-line func-names + const promise = new Promise(resolve => { + token.subscribe(resolve); + _resolve = resolve; + }).then(onfulfilled); + + promise.cancel = function reject() { + token.unsubscribe(_resolve); + }; + + return promise; + }; + + executor(function cancel(message, config, request) { + if (token.reason) { + // Cancellation has already been requested + return; + } + + token.reason = new CanceledError(message, config, request); + resolvePromise(token.reason); + }); + } + + /** + * Throws a `CanceledError` if cancellation has been requested. + */ + throwIfRequested() { + if (this.reason) { + throw this.reason; + } + } + + /** + * Subscribe to the cancel signal + */ + + subscribe(listener) { + if (this.reason) { + listener(this.reason); + return; + } + + if (this._listeners) { + this._listeners.push(listener); + } else { + this._listeners = [listener]; + } + } + + /** + * Unsubscribe from the cancel signal + */ + + unsubscribe(listener) { + if (!this._listeners) { + return; + } + const index = this._listeners.indexOf(listener); + if (index !== -1) { + this._listeners.splice(index, 1); + } + } + + toAbortSignal() { + const controller = new AbortController(); + + const abort = (err) => { + controller.abort(err); + }; + + this.subscribe(abort); + + controller.signal.unsubscribe = () => this.unsubscribe(abort); + + return controller.signal; + } + + /** + * Returns an object that contains a new `CancelToken` and a function that, when called, + * cancels the `CancelToken`. + */ + static source() { + let cancel; + const token = new CancelToken(function executor(c) { + cancel = c; + }); + return { + token, + cancel + }; + } +} + +export default CancelToken; diff --git a/node_modules/axios/lib/cancel/CanceledError.js b/node_modules/axios/lib/cancel/CanceledError.js new file mode 100644 index 0000000..880066e --- /dev/null +++ b/node_modules/axios/lib/cancel/CanceledError.js @@ -0,0 +1,25 @@ +'use strict'; + +import AxiosError from '../core/AxiosError.js'; +import utils from '../utils.js'; + +/** + * A `CanceledError` is an object that is thrown when an operation is canceled. + * + * @param {string=} message The message. + * @param {Object=} config The config. + * @param {Object=} request The request. + * + * @returns {CanceledError} The created error. + */ +function CanceledError(message, config, request) { + // eslint-disable-next-line no-eq-null,eqeqeq + AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request); + this.name = 'CanceledError'; +} + +utils.inherits(CanceledError, AxiosError, { + __CANCEL__: true +}); + +export default CanceledError; diff --git a/node_modules/axios/lib/cancel/isCancel.js b/node_modules/axios/lib/cancel/isCancel.js new file mode 100644 index 0000000..a444a12 --- /dev/null +++ b/node_modules/axios/lib/cancel/isCancel.js @@ -0,0 +1,5 @@ +'use strict'; + +export default function isCancel(value) { + return !!(value && value.__CANCEL__); +} diff --git a/node_modules/axios/lib/core/Axios.js b/node_modules/axios/lib/core/Axios.js new file mode 100644 index 0000000..cff383e --- /dev/null +++ b/node_modules/axios/lib/core/Axios.js @@ -0,0 +1,242 @@ +'use strict'; + +import utils from './../utils.js'; +import buildURL from '../helpers/buildURL.js'; +import InterceptorManager from './InterceptorManager.js'; +import dispatchRequest from './dispatchRequest.js'; +import mergeConfig from './mergeConfig.js'; +import buildFullPath from './buildFullPath.js'; +import validator from '../helpers/validator.js'; +import AxiosHeaders from './AxiosHeaders.js'; + +const validators = validator.validators; + +/** + * Create a new instance of Axios + * + * @param {Object} instanceConfig The default config for the instance + * + * @return {Axios} A new instance of Axios + */ +class Axios { + constructor(instanceConfig) { + this.defaults = instanceConfig || {}; + this.interceptors = { + request: new InterceptorManager(), + response: new InterceptorManager() + }; + } + + /** + * Dispatch a request + * + * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults) + * @param {?Object} config + * + * @returns {Promise} The Promise to be fulfilled + */ + async request(configOrUrl, config) { + try { + return await this._request(configOrUrl, config); + } catch (err) { + if (err instanceof Error) { + let dummy = {}; + + Error.captureStackTrace ? Error.captureStackTrace(dummy) : (dummy = new Error()); + + // slice off the Error: ... line + const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, '') : ''; + try { + if (!err.stack) { + err.stack = stack; + // match without the 2 top stack lines + } else if (stack && !String(err.stack).endsWith(stack.replace(/^.+\n.+\n/, ''))) { + err.stack += '\n' + stack + } + } catch (e) { + // ignore the case where "stack" is an un-writable property + } + } + + throw err; + } + } + + _request(configOrUrl, config) { + /*eslint no-param-reassign:0*/ + // Allow for axios('example/url'[, config]) a la fetch API + if (typeof configOrUrl === 'string') { + config = config || {}; + config.url = configOrUrl; + } else { + config = configOrUrl || {}; + } + + config = mergeConfig(this.defaults, config); + + const {transitional, paramsSerializer, headers} = config; + + if (transitional !== undefined) { + validator.assertOptions(transitional, { + silentJSONParsing: validators.transitional(validators.boolean), + forcedJSONParsing: validators.transitional(validators.boolean), + clarifyTimeoutError: validators.transitional(validators.boolean) + }, false); + } + + if (paramsSerializer != null) { + if (utils.isFunction(paramsSerializer)) { + config.paramsSerializer = { + serialize: paramsSerializer + } + } else { + validator.assertOptions(paramsSerializer, { + encode: validators.function, + serialize: validators.function + }, true); + } + } + + // Set config.allowAbsoluteUrls + if (config.allowAbsoluteUrls !== undefined) { + // do nothing + } else if (this.defaults.allowAbsoluteUrls !== undefined) { + config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls; + } else { + config.allowAbsoluteUrls = true; + } + + validator.assertOptions(config, { + baseUrl: validators.spelling('baseURL'), + withXsrfToken: validators.spelling('withXSRFToken') + }, true); + + // Set config.method + config.method = (config.method || this.defaults.method || 'get').toLowerCase(); + + // Flatten headers + let contextHeaders = headers && utils.merge( + headers.common, + headers[config.method] + ); + + headers && utils.forEach( + ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'], + (method) => { + delete headers[method]; + } + ); + + config.headers = AxiosHeaders.concat(contextHeaders, headers); + + // filter out skipped interceptors + const requestInterceptorChain = []; + let synchronousRequestInterceptors = true; + this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { + if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) { + return; + } + + synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous; + + requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected); + }); + + const responseInterceptorChain = []; + this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { + responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected); + }); + + let promise; + let i = 0; + let len; + + if (!synchronousRequestInterceptors) { + const chain = [dispatchRequest.bind(this), undefined]; + chain.unshift.apply(chain, requestInterceptorChain); + chain.push.apply(chain, responseInterceptorChain); + len = chain.length; + + promise = Promise.resolve(config); + + while (i < len) { + promise = promise.then(chain[i++], chain[i++]); + } + + return promise; + } + + len = requestInterceptorChain.length; + + let newConfig = config; + + i = 0; + + while (i < len) { + const onFulfilled = requestInterceptorChain[i++]; + const onRejected = requestInterceptorChain[i++]; + try { + newConfig = onFulfilled(newConfig); + } catch (error) { + onRejected.call(this, error); + break; + } + } + + try { + promise = dispatchRequest.call(this, newConfig); + } catch (error) { + return Promise.reject(error); + } + + i = 0; + len = responseInterceptorChain.length; + + while (i < len) { + promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]); + } + + return promise; + } + + getUri(config) { + config = mergeConfig(this.defaults, config); + const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls); + return buildURL(fullPath, config.params, config.paramsSerializer); + } +} + +// Provide aliases for supported request methods +utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) { + /*eslint func-names:0*/ + Axios.prototype[method] = function(url, config) { + return this.request(mergeConfig(config || {}, { + method, + url, + data: (config || {}).data + })); + }; +}); + +utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) { + /*eslint func-names:0*/ + + function generateHTTPMethod(isForm) { + return function httpMethod(url, data, config) { + return this.request(mergeConfig(config || {}, { + method, + headers: isForm ? { + 'Content-Type': 'multipart/form-data' + } : {}, + url, + data + })); + }; + } + + Axios.prototype[method] = generateHTTPMethod(); + + Axios.prototype[method + 'Form'] = generateHTTPMethod(true); +}); + +export default Axios; diff --git a/node_modules/axios/lib/core/AxiosError.js b/node_modules/axios/lib/core/AxiosError.js new file mode 100644 index 0000000..73da248 --- /dev/null +++ b/node_modules/axios/lib/core/AxiosError.js @@ -0,0 +1,103 @@ +'use strict'; + +import utils from '../utils.js'; + +/** + * Create an Error with the specified message, config, error code, request and response. + * + * @param {string} message The error message. + * @param {string} [code] The error code (for example, 'ECONNABORTED'). + * @param {Object} [config] The config. + * @param {Object} [request] The request. + * @param {Object} [response] The response. + * + * @returns {Error} The created error. + */ +function AxiosError(message, code, config, request, response) { + Error.call(this); + + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + this.stack = (new Error()).stack; + } + + this.message = message; + this.name = 'AxiosError'; + code && (this.code = code); + config && (this.config = config); + request && (this.request = request); + if (response) { + this.response = response; + this.status = response.status ? response.status : null; + } +} + +utils.inherits(AxiosError, Error, { + toJSON: function toJSON() { + return { + // Standard + message: this.message, + name: this.name, + // Microsoft + description: this.description, + number: this.number, + // Mozilla + fileName: this.fileName, + lineNumber: this.lineNumber, + columnNumber: this.columnNumber, + stack: this.stack, + // Axios + config: utils.toJSONObject(this.config), + code: this.code, + status: this.status + }; + } +}); + +const prototype = AxiosError.prototype; +const descriptors = {}; + +[ + 'ERR_BAD_OPTION_VALUE', + 'ERR_BAD_OPTION', + 'ECONNABORTED', + 'ETIMEDOUT', + 'ERR_NETWORK', + 'ERR_FR_TOO_MANY_REDIRECTS', + 'ERR_DEPRECATED', + 'ERR_BAD_RESPONSE', + 'ERR_BAD_REQUEST', + 'ERR_CANCELED', + 'ERR_NOT_SUPPORT', + 'ERR_INVALID_URL' +// eslint-disable-next-line func-names +].forEach(code => { + descriptors[code] = {value: code}; +}); + +Object.defineProperties(AxiosError, descriptors); +Object.defineProperty(prototype, 'isAxiosError', {value: true}); + +// eslint-disable-next-line func-names +AxiosError.from = (error, code, config, request, response, customProps) => { + const axiosError = Object.create(prototype); + + utils.toFlatObject(error, axiosError, function filter(obj) { + return obj !== Error.prototype; + }, prop => { + return prop !== 'isAxiosError'; + }); + + AxiosError.call(axiosError, error.message, code, config, request, response); + + axiosError.cause = error; + + axiosError.name = error.name; + + customProps && Object.assign(axiosError, customProps); + + return axiosError; +}; + +export default AxiosError; diff --git a/node_modules/axios/lib/core/AxiosHeaders.js b/node_modules/axios/lib/core/AxiosHeaders.js new file mode 100644 index 0000000..6744581 --- /dev/null +++ b/node_modules/axios/lib/core/AxiosHeaders.js @@ -0,0 +1,314 @@ +'use strict'; + +import utils from '../utils.js'; +import parseHeaders from '../helpers/parseHeaders.js'; + +const $internals = Symbol('internals'); + +function normalizeHeader(header) { + return header && String(header).trim().toLowerCase(); +} + +function normalizeValue(value) { + if (value === false || value == null) { + return value; + } + + return utils.isArray(value) ? value.map(normalizeValue) : String(value); +} + +function parseTokens(str) { + const tokens = Object.create(null); + const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g; + let match; + + while ((match = tokensRE.exec(str))) { + tokens[match[1]] = match[2]; + } + + return tokens; +} + +const isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim()); + +function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) { + if (utils.isFunction(filter)) { + return filter.call(this, value, header); + } + + if (isHeaderNameFilter) { + value = header; + } + + if (!utils.isString(value)) return; + + if (utils.isString(filter)) { + return value.indexOf(filter) !== -1; + } + + if (utils.isRegExp(filter)) { + return filter.test(value); + } +} + +function formatHeader(header) { + return header.trim() + .toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => { + return char.toUpperCase() + str; + }); +} + +function buildAccessors(obj, header) { + const accessorName = utils.toCamelCase(' ' + header); + + ['get', 'set', 'has'].forEach(methodName => { + Object.defineProperty(obj, methodName + accessorName, { + value: function(arg1, arg2, arg3) { + return this[methodName].call(this, header, arg1, arg2, arg3); + }, + configurable: true + }); + }); +} + +class AxiosHeaders { + constructor(headers) { + headers && this.set(headers); + } + + set(header, valueOrRewrite, rewrite) { + const self = this; + + function setHeader(_value, _header, _rewrite) { + const lHeader = normalizeHeader(_header); + + if (!lHeader) { + throw new Error('header name must be a non-empty string'); + } + + const key = utils.findKey(self, lHeader); + + if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) { + self[key || _header] = normalizeValue(_value); + } + } + + const setHeaders = (headers, _rewrite) => + utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite)); + + if (utils.isPlainObject(header) || header instanceof this.constructor) { + setHeaders(header, valueOrRewrite) + } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) { + setHeaders(parseHeaders(header), valueOrRewrite); + } else if (utils.isObject(header) && utils.isIterable(header)) { + let obj = {}, dest, key; + for (const entry of header) { + if (!utils.isArray(entry)) { + throw TypeError('Object iterator must return a key-value pair'); + } + + obj[key = entry[0]] = (dest = obj[key]) ? + (utils.isArray(dest) ? [...dest, entry[1]] : [dest, entry[1]]) : entry[1]; + } + + setHeaders(obj, valueOrRewrite) + } else { + header != null && setHeader(valueOrRewrite, header, rewrite); + } + + return this; + } + + get(header, parser) { + header = normalizeHeader(header); + + if (header) { + const key = utils.findKey(this, header); + + if (key) { + const value = this[key]; + + if (!parser) { + return value; + } + + if (parser === true) { + return parseTokens(value); + } + + if (utils.isFunction(parser)) { + return parser.call(this, value, key); + } + + if (utils.isRegExp(parser)) { + return parser.exec(value); + } + + throw new TypeError('parser must be boolean|regexp|function'); + } + } + } + + has(header, matcher) { + header = normalizeHeader(header); + + if (header) { + const key = utils.findKey(this, header); + + return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher))); + } + + return false; + } + + delete(header, matcher) { + const self = this; + let deleted = false; + + function deleteHeader(_header) { + _header = normalizeHeader(_header); + + if (_header) { + const key = utils.findKey(self, _header); + + if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) { + delete self[key]; + + deleted = true; + } + } + } + + if (utils.isArray(header)) { + header.forEach(deleteHeader); + } else { + deleteHeader(header); + } + + return deleted; + } + + clear(matcher) { + const keys = Object.keys(this); + let i = keys.length; + let deleted = false; + + while (i--) { + const key = keys[i]; + if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) { + delete this[key]; + deleted = true; + } + } + + return deleted; + } + + normalize(format) { + const self = this; + const headers = {}; + + utils.forEach(this, (value, header) => { + const key = utils.findKey(headers, header); + + if (key) { + self[key] = normalizeValue(value); + delete self[header]; + return; + } + + const normalized = format ? formatHeader(header) : String(header).trim(); + + if (normalized !== header) { + delete self[header]; + } + + self[normalized] = normalizeValue(value); + + headers[normalized] = true; + }); + + return this; + } + + concat(...targets) { + return this.constructor.concat(this, ...targets); + } + + toJSON(asStrings) { + const obj = Object.create(null); + + utils.forEach(this, (value, header) => { + value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value); + }); + + return obj; + } + + [Symbol.iterator]() { + return Object.entries(this.toJSON())[Symbol.iterator](); + } + + toString() { + return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\n'); + } + + getSetCookie() { + return this.get("set-cookie") || []; + } + + get [Symbol.toStringTag]() { + return 'AxiosHeaders'; + } + + static from(thing) { + return thing instanceof this ? thing : new this(thing); + } + + static concat(first, ...targets) { + const computed = new this(first); + + targets.forEach((target) => computed.set(target)); + + return computed; + } + + static accessor(header) { + const internals = this[$internals] = (this[$internals] = { + accessors: {} + }); + + const accessors = internals.accessors; + const prototype = this.prototype; + + function defineAccessor(_header) { + const lHeader = normalizeHeader(_header); + + if (!accessors[lHeader]) { + buildAccessors(prototype, _header); + accessors[lHeader] = true; + } + } + + utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header); + + return this; + } +} + +AxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']); + +// reserved names hotfix +utils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => { + let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set` + return { + get: () => value, + set(headerValue) { + this[mapped] = headerValue; + } + } +}); + +utils.freezeMethods(AxiosHeaders); + +export default AxiosHeaders; diff --git a/node_modules/axios/lib/core/InterceptorManager.js b/node_modules/axios/lib/core/InterceptorManager.js new file mode 100644 index 0000000..6657a9d --- /dev/null +++ b/node_modules/axios/lib/core/InterceptorManager.js @@ -0,0 +1,71 @@ +'use strict'; + +import utils from './../utils.js'; + +class InterceptorManager { + constructor() { + this.handlers = []; + } + + /** + * Add a new interceptor to the stack + * + * @param {Function} fulfilled The function to handle `then` for a `Promise` + * @param {Function} rejected The function to handle `reject` for a `Promise` + * + * @return {Number} An ID used to remove interceptor later + */ + use(fulfilled, rejected, options) { + this.handlers.push({ + fulfilled, + rejected, + synchronous: options ? options.synchronous : false, + runWhen: options ? options.runWhen : null + }); + return this.handlers.length - 1; + } + + /** + * Remove an interceptor from the stack + * + * @param {Number} id The ID that was returned by `use` + * + * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise + */ + eject(id) { + if (this.handlers[id]) { + this.handlers[id] = null; + } + } + + /** + * Clear all interceptors from the stack + * + * @returns {void} + */ + clear() { + if (this.handlers) { + this.handlers = []; + } + } + + /** + * Iterate over all the registered interceptors + * + * This method is particularly useful for skipping over any + * interceptors that may have become `null` calling `eject`. + * + * @param {Function} fn The function to call for each interceptor + * + * @returns {void} + */ + forEach(fn) { + utils.forEach(this.handlers, function forEachHandler(h) { + if (h !== null) { + fn(h); + } + }); + } +} + +export default InterceptorManager; diff --git a/node_modules/axios/lib/core/README.md b/node_modules/axios/lib/core/README.md new file mode 100644 index 0000000..84559ce --- /dev/null +++ b/node_modules/axios/lib/core/README.md @@ -0,0 +1,8 @@ +# axios // core + +The modules found in `core/` should be modules that are specific to the domain logic of axios. These modules would most likely not make sense to be consumed outside of the axios module, as their logic is too specific. Some examples of core modules are: + +- Dispatching requests + - Requests sent via `adapters/` (see lib/adapters/README.md) +- Managing interceptors +- Handling config diff --git a/node_modules/axios/lib/core/buildFullPath.js b/node_modules/axios/lib/core/buildFullPath.js new file mode 100644 index 0000000..3050bd6 --- /dev/null +++ b/node_modules/axios/lib/core/buildFullPath.js @@ -0,0 +1,22 @@ +'use strict'; + +import isAbsoluteURL from '../helpers/isAbsoluteURL.js'; +import combineURLs from '../helpers/combineURLs.js'; + +/** + * Creates a new URL by combining the baseURL with the requestedURL, + * only when the requestedURL is not already an absolute URL. + * If the requestURL is absolute, this function returns the requestedURL untouched. + * + * @param {string} baseURL The base URL + * @param {string} requestedURL Absolute or relative URL to combine + * + * @returns {string} The combined full path + */ +export default function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) { + let isRelativeUrl = !isAbsoluteURL(requestedURL); + if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) { + return combineURLs(baseURL, requestedURL); + } + return requestedURL; +} diff --git a/node_modules/axios/lib/core/dispatchRequest.js b/node_modules/axios/lib/core/dispatchRequest.js new file mode 100644 index 0000000..9e306aa --- /dev/null +++ b/node_modules/axios/lib/core/dispatchRequest.js @@ -0,0 +1,81 @@ +'use strict'; + +import transformData from './transformData.js'; +import isCancel from '../cancel/isCancel.js'; +import defaults from '../defaults/index.js'; +import CanceledError from '../cancel/CanceledError.js'; +import AxiosHeaders from '../core/AxiosHeaders.js'; +import adapters from "../adapters/adapters.js"; + +/** + * Throws a `CanceledError` if cancellation has been requested. + * + * @param {Object} config The config that is to be used for the request + * + * @returns {void} + */ +function throwIfCancellationRequested(config) { + if (config.cancelToken) { + config.cancelToken.throwIfRequested(); + } + + if (config.signal && config.signal.aborted) { + throw new CanceledError(null, config); + } +} + +/** + * Dispatch a request to the server using the configured adapter. + * + * @param {object} config The config that is to be used for the request + * + * @returns {Promise} The Promise to be fulfilled + */ +export default function dispatchRequest(config) { + throwIfCancellationRequested(config); + + config.headers = AxiosHeaders.from(config.headers); + + // Transform request data + config.data = transformData.call( + config, + config.transformRequest + ); + + if (['post', 'put', 'patch'].indexOf(config.method) !== -1) { + config.headers.setContentType('application/x-www-form-urlencoded', false); + } + + const adapter = adapters.getAdapter(config.adapter || defaults.adapter); + + return adapter(config).then(function onAdapterResolution(response) { + throwIfCancellationRequested(config); + + // Transform response data + response.data = transformData.call( + config, + config.transformResponse, + response + ); + + response.headers = AxiosHeaders.from(response.headers); + + return response; + }, function onAdapterRejection(reason) { + if (!isCancel(reason)) { + throwIfCancellationRequested(config); + + // Transform response data + if (reason && reason.response) { + reason.response.data = transformData.call( + config, + config.transformResponse, + reason.response + ); + reason.response.headers = AxiosHeaders.from(reason.response.headers); + } + } + + return Promise.reject(reason); + }); +} diff --git a/node_modules/axios/lib/core/mergeConfig.js b/node_modules/axios/lib/core/mergeConfig.js new file mode 100644 index 0000000..c510073 --- /dev/null +++ b/node_modules/axios/lib/core/mergeConfig.js @@ -0,0 +1,106 @@ +'use strict'; + +import utils from '../utils.js'; +import AxiosHeaders from "./AxiosHeaders.js"; + +const headersToObject = (thing) => thing instanceof AxiosHeaders ? { ...thing } : thing; + +/** + * Config-specific merge-function which creates a new config-object + * by merging two configuration objects together. + * + * @param {Object} config1 + * @param {Object} config2 + * + * @returns {Object} New object resulting from merging config2 to config1 + */ +export default function mergeConfig(config1, config2) { + // eslint-disable-next-line no-param-reassign + config2 = config2 || {}; + const config = {}; + + function getMergedValue(target, source, prop, caseless) { + if (utils.isPlainObject(target) && utils.isPlainObject(source)) { + return utils.merge.call({caseless}, target, source); + } else if (utils.isPlainObject(source)) { + return utils.merge({}, source); + } else if (utils.isArray(source)) { + return source.slice(); + } + return source; + } + + // eslint-disable-next-line consistent-return + function mergeDeepProperties(a, b, prop , caseless) { + if (!utils.isUndefined(b)) { + return getMergedValue(a, b, prop , caseless); + } else if (!utils.isUndefined(a)) { + return getMergedValue(undefined, a, prop , caseless); + } + } + + // eslint-disable-next-line consistent-return + function valueFromConfig2(a, b) { + if (!utils.isUndefined(b)) { + return getMergedValue(undefined, b); + } + } + + // eslint-disable-next-line consistent-return + function defaultToConfig2(a, b) { + if (!utils.isUndefined(b)) { + return getMergedValue(undefined, b); + } else if (!utils.isUndefined(a)) { + return getMergedValue(undefined, a); + } + } + + // eslint-disable-next-line consistent-return + function mergeDirectKeys(a, b, prop) { + if (prop in config2) { + return getMergedValue(a, b); + } else if (prop in config1) { + return getMergedValue(undefined, a); + } + } + + const mergeMap = { + url: valueFromConfig2, + method: valueFromConfig2, + data: valueFromConfig2, + baseURL: defaultToConfig2, + transformRequest: defaultToConfig2, + transformResponse: defaultToConfig2, + paramsSerializer: defaultToConfig2, + timeout: defaultToConfig2, + timeoutMessage: defaultToConfig2, + withCredentials: defaultToConfig2, + withXSRFToken: defaultToConfig2, + adapter: defaultToConfig2, + responseType: defaultToConfig2, + xsrfCookieName: defaultToConfig2, + xsrfHeaderName: defaultToConfig2, + onUploadProgress: defaultToConfig2, + onDownloadProgress: defaultToConfig2, + decompress: defaultToConfig2, + maxContentLength: defaultToConfig2, + maxBodyLength: defaultToConfig2, + beforeRedirect: defaultToConfig2, + transport: defaultToConfig2, + httpAgent: defaultToConfig2, + httpsAgent: defaultToConfig2, + cancelToken: defaultToConfig2, + socketPath: defaultToConfig2, + responseEncoding: defaultToConfig2, + validateStatus: mergeDirectKeys, + headers: (a, b , prop) => mergeDeepProperties(headersToObject(a), headersToObject(b),prop, true) + }; + + utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) { + const merge = mergeMap[prop] || mergeDeepProperties; + const configValue = merge(config1[prop], config2[prop], prop); + (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue); + }); + + return config; +} diff --git a/node_modules/axios/lib/core/settle.js b/node_modules/axios/lib/core/settle.js new file mode 100644 index 0000000..ac905c4 --- /dev/null +++ b/node_modules/axios/lib/core/settle.js @@ -0,0 +1,27 @@ +'use strict'; + +import AxiosError from './AxiosError.js'; + +/** + * Resolve or reject a Promise based on response status. + * + * @param {Function} resolve A function that resolves the promise. + * @param {Function} reject A function that rejects the promise. + * @param {object} response The response. + * + * @returns {object} The response. + */ +export default function settle(resolve, reject, response) { + const validateStatus = response.config.validateStatus; + if (!response.status || !validateStatus || validateStatus(response.status)) { + resolve(response); + } else { + reject(new AxiosError( + 'Request failed with status code ' + response.status, + [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4], + response.config, + response.request, + response + )); + } +} diff --git a/node_modules/axios/lib/core/transformData.js b/node_modules/axios/lib/core/transformData.js new file mode 100644 index 0000000..eeb5a8a --- /dev/null +++ b/node_modules/axios/lib/core/transformData.js @@ -0,0 +1,28 @@ +'use strict'; + +import utils from './../utils.js'; +import defaults from '../defaults/index.js'; +import AxiosHeaders from '../core/AxiosHeaders.js'; + +/** + * Transform the data for a request or a response + * + * @param {Array|Function} fns A single function or Array of functions + * @param {?Object} response The response object + * + * @returns {*} The resulting transformed data + */ +export default function transformData(fns, response) { + const config = this || defaults; + const context = response || config; + const headers = AxiosHeaders.from(context.headers); + let data = context.data; + + utils.forEach(fns, function transform(fn) { + data = fn.call(config, data, headers.normalize(), response ? response.status : undefined); + }); + + headers.normalize(); + + return data; +} diff --git a/node_modules/axios/lib/defaults/index.js b/node_modules/axios/lib/defaults/index.js new file mode 100644 index 0000000..e543fea --- /dev/null +++ b/node_modules/axios/lib/defaults/index.js @@ -0,0 +1,161 @@ +'use strict'; + +import utils from '../utils.js'; +import AxiosError from '../core/AxiosError.js'; +import transitionalDefaults from './transitional.js'; +import toFormData from '../helpers/toFormData.js'; +import toURLEncodedForm from '../helpers/toURLEncodedForm.js'; +import platform from '../platform/index.js'; +import formDataToJSON from '../helpers/formDataToJSON.js'; + +/** + * It takes a string, tries to parse it, and if it fails, it returns the stringified version + * of the input + * + * @param {any} rawValue - The value to be stringified. + * @param {Function} parser - A function that parses a string into a JavaScript object. + * @param {Function} encoder - A function that takes a value and returns a string. + * + * @returns {string} A stringified version of the rawValue. + */ +function stringifySafely(rawValue, parser, encoder) { + if (utils.isString(rawValue)) { + try { + (parser || JSON.parse)(rawValue); + return utils.trim(rawValue); + } catch (e) { + if (e.name !== 'SyntaxError') { + throw e; + } + } + } + + return (encoder || JSON.stringify)(rawValue); +} + +const defaults = { + + transitional: transitionalDefaults, + + adapter: ['xhr', 'http', 'fetch'], + + transformRequest: [function transformRequest(data, headers) { + const contentType = headers.getContentType() || ''; + const hasJSONContentType = contentType.indexOf('application/json') > -1; + const isObjectPayload = utils.isObject(data); + + if (isObjectPayload && utils.isHTMLForm(data)) { + data = new FormData(data); + } + + const isFormData = utils.isFormData(data); + + if (isFormData) { + return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data; + } + + if (utils.isArrayBuffer(data) || + utils.isBuffer(data) || + utils.isStream(data) || + utils.isFile(data) || + utils.isBlob(data) || + utils.isReadableStream(data) + ) { + return data; + } + if (utils.isArrayBufferView(data)) { + return data.buffer; + } + if (utils.isURLSearchParams(data)) { + headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false); + return data.toString(); + } + + let isFileList; + + if (isObjectPayload) { + if (contentType.indexOf('application/x-www-form-urlencoded') > -1) { + return toURLEncodedForm(data, this.formSerializer).toString(); + } + + if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) { + const _FormData = this.env && this.env.FormData; + + return toFormData( + isFileList ? {'files[]': data} : data, + _FormData && new _FormData(), + this.formSerializer + ); + } + } + + if (isObjectPayload || hasJSONContentType ) { + headers.setContentType('application/json', false); + return stringifySafely(data); + } + + return data; + }], + + transformResponse: [function transformResponse(data) { + const transitional = this.transitional || defaults.transitional; + const forcedJSONParsing = transitional && transitional.forcedJSONParsing; + const JSONRequested = this.responseType === 'json'; + + if (utils.isResponse(data) || utils.isReadableStream(data)) { + return data; + } + + if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) { + const silentJSONParsing = transitional && transitional.silentJSONParsing; + const strictJSONParsing = !silentJSONParsing && JSONRequested; + + try { + return JSON.parse(data); + } catch (e) { + if (strictJSONParsing) { + if (e.name === 'SyntaxError') { + throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response); + } + throw e; + } + } + } + + return data; + }], + + /** + * A timeout in milliseconds to abort a request. If set to 0 (default) a + * timeout is not created. + */ + timeout: 0, + + xsrfCookieName: 'XSRF-TOKEN', + xsrfHeaderName: 'X-XSRF-TOKEN', + + maxContentLength: -1, + maxBodyLength: -1, + + env: { + FormData: platform.classes.FormData, + Blob: platform.classes.Blob + }, + + validateStatus: function validateStatus(status) { + return status >= 200 && status < 300; + }, + + headers: { + common: { + 'Accept': 'application/json, text/plain, */*', + 'Content-Type': undefined + } + } +}; + +utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => { + defaults.headers[method] = {}; +}); + +export default defaults; diff --git a/node_modules/axios/lib/defaults/transitional.js b/node_modules/axios/lib/defaults/transitional.js new file mode 100644 index 0000000..f891331 --- /dev/null +++ b/node_modules/axios/lib/defaults/transitional.js @@ -0,0 +1,7 @@ +'use strict'; + +export default { + silentJSONParsing: true, + forcedJSONParsing: true, + clarifyTimeoutError: false +}; diff --git a/node_modules/axios/lib/env/README.md b/node_modules/axios/lib/env/README.md new file mode 100644 index 0000000..b41baff --- /dev/null +++ b/node_modules/axios/lib/env/README.md @@ -0,0 +1,3 @@ +# axios // env + +The `data.js` file is updated automatically when the package version is upgrading. Please do not edit it manually. diff --git a/node_modules/axios/lib/env/classes/FormData.js b/node_modules/axios/lib/env/classes/FormData.js new file mode 100644 index 0000000..862adb9 --- /dev/null +++ b/node_modules/axios/lib/env/classes/FormData.js @@ -0,0 +1,2 @@ +import _FormData from 'form-data'; +export default typeof FormData !== 'undefined' ? FormData : _FormData; diff --git a/node_modules/axios/lib/env/data.js b/node_modules/axios/lib/env/data.js new file mode 100644 index 0000000..ef074ef --- /dev/null +++ b/node_modules/axios/lib/env/data.js @@ -0,0 +1 @@ +export const VERSION = "1.9.0"; \ No newline at end of file diff --git a/node_modules/axios/lib/helpers/AxiosTransformStream.js b/node_modules/axios/lib/helpers/AxiosTransformStream.js new file mode 100644 index 0000000..4140071 --- /dev/null +++ b/node_modules/axios/lib/helpers/AxiosTransformStream.js @@ -0,0 +1,143 @@ +'use strict'; + +import stream from 'stream'; +import utils from '../utils.js'; + +const kInternals = Symbol('internals'); + +class AxiosTransformStream extends stream.Transform{ + constructor(options) { + options = utils.toFlatObject(options, { + maxRate: 0, + chunkSize: 64 * 1024, + minChunkSize: 100, + timeWindow: 500, + ticksRate: 2, + samplesCount: 15 + }, null, (prop, source) => { + return !utils.isUndefined(source[prop]); + }); + + super({ + readableHighWaterMark: options.chunkSize + }); + + const internals = this[kInternals] = { + timeWindow: options.timeWindow, + chunkSize: options.chunkSize, + maxRate: options.maxRate, + minChunkSize: options.minChunkSize, + bytesSeen: 0, + isCaptured: false, + notifiedBytesLoaded: 0, + ts: Date.now(), + bytes: 0, + onReadCallback: null + }; + + this.on('newListener', event => { + if (event === 'progress') { + if (!internals.isCaptured) { + internals.isCaptured = true; + } + } + }); + } + + _read(size) { + const internals = this[kInternals]; + + if (internals.onReadCallback) { + internals.onReadCallback(); + } + + return super._read(size); + } + + _transform(chunk, encoding, callback) { + const internals = this[kInternals]; + const maxRate = internals.maxRate; + + const readableHighWaterMark = this.readableHighWaterMark; + + const timeWindow = internals.timeWindow; + + const divider = 1000 / timeWindow; + const bytesThreshold = (maxRate / divider); + const minChunkSize = internals.minChunkSize !== false ? Math.max(internals.minChunkSize, bytesThreshold * 0.01) : 0; + + const pushChunk = (_chunk, _callback) => { + const bytes = Buffer.byteLength(_chunk); + internals.bytesSeen += bytes; + internals.bytes += bytes; + + internals.isCaptured && this.emit('progress', internals.bytesSeen); + + if (this.push(_chunk)) { + process.nextTick(_callback); + } else { + internals.onReadCallback = () => { + internals.onReadCallback = null; + process.nextTick(_callback); + }; + } + } + + const transformChunk = (_chunk, _callback) => { + const chunkSize = Buffer.byteLength(_chunk); + let chunkRemainder = null; + let maxChunkSize = readableHighWaterMark; + let bytesLeft; + let passed = 0; + + if (maxRate) { + const now = Date.now(); + + if (!internals.ts || (passed = (now - internals.ts)) >= timeWindow) { + internals.ts = now; + bytesLeft = bytesThreshold - internals.bytes; + internals.bytes = bytesLeft < 0 ? -bytesLeft : 0; + passed = 0; + } + + bytesLeft = bytesThreshold - internals.bytes; + } + + if (maxRate) { + if (bytesLeft <= 0) { + // next time window + return setTimeout(() => { + _callback(null, _chunk); + }, timeWindow - passed); + } + + if (bytesLeft < maxChunkSize) { + maxChunkSize = bytesLeft; + } + } + + if (maxChunkSize && chunkSize > maxChunkSize && (chunkSize - maxChunkSize) > minChunkSize) { + chunkRemainder = _chunk.subarray(maxChunkSize); + _chunk = _chunk.subarray(0, maxChunkSize); + } + + pushChunk(_chunk, chunkRemainder ? () => { + process.nextTick(_callback, null, chunkRemainder); + } : _callback); + }; + + transformChunk(chunk, function transformNextChunk(err, _chunk) { + if (err) { + return callback(err); + } + + if (_chunk) { + transformChunk(_chunk, transformNextChunk); + } else { + callback(null); + } + }); + } +} + +export default AxiosTransformStream; diff --git a/node_modules/axios/lib/helpers/AxiosURLSearchParams.js b/node_modules/axios/lib/helpers/AxiosURLSearchParams.js new file mode 100644 index 0000000..b9aa9f0 --- /dev/null +++ b/node_modules/axios/lib/helpers/AxiosURLSearchParams.js @@ -0,0 +1,58 @@ +'use strict'; + +import toFormData from './toFormData.js'; + +/** + * It encodes a string by replacing all characters that are not in the unreserved set with + * their percent-encoded equivalents + * + * @param {string} str - The string to encode. + * + * @returns {string} The encoded string. + */ +function encode(str) { + const charMap = { + '!': '%21', + "'": '%27', + '(': '%28', + ')': '%29', + '~': '%7E', + '%20': '+', + '%00': '\x00' + }; + return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) { + return charMap[match]; + }); +} + +/** + * It takes a params object and converts it to a FormData object + * + * @param {Object} params - The parameters to be converted to a FormData object. + * @param {Object} options - The options object passed to the Axios constructor. + * + * @returns {void} + */ +function AxiosURLSearchParams(params, options) { + this._pairs = []; + + params && toFormData(params, this, options); +} + +const prototype = AxiosURLSearchParams.prototype; + +prototype.append = function append(name, value) { + this._pairs.push([name, value]); +}; + +prototype.toString = function toString(encoder) { + const _encode = encoder ? function(value) { + return encoder.call(this, value, encode); + } : encode; + + return this._pairs.map(function each(pair) { + return _encode(pair[0]) + '=' + _encode(pair[1]); + }, '').join('&'); +}; + +export default AxiosURLSearchParams; diff --git a/node_modules/axios/lib/helpers/HttpStatusCode.js b/node_modules/axios/lib/helpers/HttpStatusCode.js new file mode 100644 index 0000000..b3e7adc --- /dev/null +++ b/node_modules/axios/lib/helpers/HttpStatusCode.js @@ -0,0 +1,71 @@ +const HttpStatusCode = { + Continue: 100, + SwitchingProtocols: 101, + Processing: 102, + EarlyHints: 103, + Ok: 200, + Created: 201, + Accepted: 202, + NonAuthoritativeInformation: 203, + NoContent: 204, + ResetContent: 205, + PartialContent: 206, + MultiStatus: 207, + AlreadyReported: 208, + ImUsed: 226, + MultipleChoices: 300, + MovedPermanently: 301, + Found: 302, + SeeOther: 303, + NotModified: 304, + UseProxy: 305, + Unused: 306, + TemporaryRedirect: 307, + PermanentRedirect: 308, + BadRequest: 400, + Unauthorized: 401, + PaymentRequired: 402, + Forbidden: 403, + NotFound: 404, + MethodNotAllowed: 405, + NotAcceptable: 406, + ProxyAuthenticationRequired: 407, + RequestTimeout: 408, + Conflict: 409, + Gone: 410, + LengthRequired: 411, + PreconditionFailed: 412, + PayloadTooLarge: 413, + UriTooLong: 414, + UnsupportedMediaType: 415, + RangeNotSatisfiable: 416, + ExpectationFailed: 417, + ImATeapot: 418, + MisdirectedRequest: 421, + UnprocessableEntity: 422, + Locked: 423, + FailedDependency: 424, + TooEarly: 425, + UpgradeRequired: 426, + PreconditionRequired: 428, + TooManyRequests: 429, + RequestHeaderFieldsTooLarge: 431, + UnavailableForLegalReasons: 451, + InternalServerError: 500, + NotImplemented: 501, + BadGateway: 502, + ServiceUnavailable: 503, + GatewayTimeout: 504, + HttpVersionNotSupported: 505, + VariantAlsoNegotiates: 506, + InsufficientStorage: 507, + LoopDetected: 508, + NotExtended: 510, + NetworkAuthenticationRequired: 511, +}; + +Object.entries(HttpStatusCode).forEach(([key, value]) => { + HttpStatusCode[value] = key; +}); + +export default HttpStatusCode; diff --git a/node_modules/axios/lib/helpers/README.md b/node_modules/axios/lib/helpers/README.md new file mode 100644 index 0000000..4ae3419 --- /dev/null +++ b/node_modules/axios/lib/helpers/README.md @@ -0,0 +1,7 @@ +# axios // helpers + +The modules found in `helpers/` should be generic modules that are _not_ specific to the domain logic of axios. These modules could theoretically be published to npm on their own and consumed by other modules or apps. Some examples of generic modules are things like: + +- Browser polyfills +- Managing cookies +- Parsing HTTP headers diff --git a/node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js b/node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js new file mode 100644 index 0000000..d1791f0 --- /dev/null +++ b/node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js @@ -0,0 +1,28 @@ +"use strict"; + +import stream from "stream"; + +class ZlibHeaderTransformStream extends stream.Transform { + __transform(chunk, encoding, callback) { + this.push(chunk); + callback(); + } + + _transform(chunk, encoding, callback) { + if (chunk.length !== 0) { + this._transform = this.__transform; + + // Add Default Compression headers if no zlib headers are present + if (chunk[0] !== 120) { // Hex: 78 + const header = Buffer.alloc(2); + header[0] = 120; // Hex: 78 + header[1] = 156; // Hex: 9C + this.push(header, encoding); + } + } + + this.__transform(chunk, encoding, callback); + } +} + +export default ZlibHeaderTransformStream; diff --git a/node_modules/axios/lib/helpers/bind.js b/node_modules/axios/lib/helpers/bind.js new file mode 100644 index 0000000..b3aa83b --- /dev/null +++ b/node_modules/axios/lib/helpers/bind.js @@ -0,0 +1,7 @@ +'use strict'; + +export default function bind(fn, thisArg) { + return function wrap() { + return fn.apply(thisArg, arguments); + }; +} diff --git a/node_modules/axios/lib/helpers/buildURL.js b/node_modules/axios/lib/helpers/buildURL.js new file mode 100644 index 0000000..5c5eb57 --- /dev/null +++ b/node_modules/axios/lib/helpers/buildURL.js @@ -0,0 +1,69 @@ +'use strict'; + +import utils from '../utils.js'; +import AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js'; + +/** + * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their + * URI encoded counterparts + * + * @param {string} val The value to be encoded. + * + * @returns {string} The encoded value. + */ +function encode(val) { + return encodeURIComponent(val). + replace(/%3A/gi, ':'). + replace(/%24/g, '$'). + replace(/%2C/gi, ','). + replace(/%20/g, '+'). + replace(/%5B/gi, '['). + replace(/%5D/gi, ']'); +} + +/** + * Build a URL by appending params to the end + * + * @param {string} url The base of the url (e.g., http://www.google.com) + * @param {object} [params] The params to be appended + * @param {?(object|Function)} options + * + * @returns {string} The formatted url + */ +export default function buildURL(url, params, options) { + /*eslint no-param-reassign:0*/ + if (!params) { + return url; + } + + const _encode = options && options.encode || encode; + + if (utils.isFunction(options)) { + options = { + serialize: options + }; + } + + const serializeFn = options && options.serialize; + + let serializedParams; + + if (serializeFn) { + serializedParams = serializeFn(params, options); + } else { + serializedParams = utils.isURLSearchParams(params) ? + params.toString() : + new AxiosURLSearchParams(params, options).toString(_encode); + } + + if (serializedParams) { + const hashmarkIndex = url.indexOf("#"); + + if (hashmarkIndex !== -1) { + url = url.slice(0, hashmarkIndex); + } + url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams; + } + + return url; +} diff --git a/node_modules/axios/lib/helpers/callbackify.js b/node_modules/axios/lib/helpers/callbackify.js new file mode 100644 index 0000000..4603bad --- /dev/null +++ b/node_modules/axios/lib/helpers/callbackify.js @@ -0,0 +1,16 @@ +import utils from "../utils.js"; + +const callbackify = (fn, reducer) => { + return utils.isAsyncFn(fn) ? function (...args) { + const cb = args.pop(); + fn.apply(this, args).then((value) => { + try { + reducer ? cb(null, ...reducer(value)) : cb(null, value); + } catch (err) { + cb(err); + } + }, cb); + } : fn; +} + +export default callbackify; diff --git a/node_modules/axios/lib/helpers/combineURLs.js b/node_modules/axios/lib/helpers/combineURLs.js new file mode 100644 index 0000000..9f04f02 --- /dev/null +++ b/node_modules/axios/lib/helpers/combineURLs.js @@ -0,0 +1,15 @@ +'use strict'; + +/** + * Creates a new URL by combining the specified URLs + * + * @param {string} baseURL The base URL + * @param {string} relativeURL The relative URL + * + * @returns {string} The combined URL + */ +export default function combineURLs(baseURL, relativeURL) { + return relativeURL + ? baseURL.replace(/\/?\/$/, '') + '/' + relativeURL.replace(/^\/+/, '') + : baseURL; +} diff --git a/node_modules/axios/lib/helpers/composeSignals.js b/node_modules/axios/lib/helpers/composeSignals.js new file mode 100644 index 0000000..84087c8 --- /dev/null +++ b/node_modules/axios/lib/helpers/composeSignals.js @@ -0,0 +1,48 @@ +import CanceledError from "../cancel/CanceledError.js"; +import AxiosError from "../core/AxiosError.js"; +import utils from '../utils.js'; + +const composeSignals = (signals, timeout) => { + const {length} = (signals = signals ? signals.filter(Boolean) : []); + + if (timeout || length) { + let controller = new AbortController(); + + let aborted; + + const onabort = function (reason) { + if (!aborted) { + aborted = true; + unsubscribe(); + const err = reason instanceof Error ? reason : this.reason; + controller.abort(err instanceof AxiosError ? err : new CanceledError(err instanceof Error ? err.message : err)); + } + } + + let timer = timeout && setTimeout(() => { + timer = null; + onabort(new AxiosError(`timeout ${timeout} of ms exceeded`, AxiosError.ETIMEDOUT)) + }, timeout) + + const unsubscribe = () => { + if (signals) { + timer && clearTimeout(timer); + timer = null; + signals.forEach(signal => { + signal.unsubscribe ? signal.unsubscribe(onabort) : signal.removeEventListener('abort', onabort); + }); + signals = null; + } + } + + signals.forEach((signal) => signal.addEventListener('abort', onabort)); + + const {signal} = controller; + + signal.unsubscribe = () => utils.asap(unsubscribe); + + return signal; + } +} + +export default composeSignals; diff --git a/node_modules/axios/lib/helpers/cookies.js b/node_modules/axios/lib/helpers/cookies.js new file mode 100644 index 0000000..d039ac4 --- /dev/null +++ b/node_modules/axios/lib/helpers/cookies.js @@ -0,0 +1,42 @@ +import utils from './../utils.js'; +import platform from '../platform/index.js'; + +export default platform.hasStandardBrowserEnv ? + + // Standard browser envs support document.cookie + { + write(name, value, expires, path, domain, secure) { + const cookie = [name + '=' + encodeURIComponent(value)]; + + utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString()); + + utils.isString(path) && cookie.push('path=' + path); + + utils.isString(domain) && cookie.push('domain=' + domain); + + secure === true && cookie.push('secure'); + + document.cookie = cookie.join('; '); + }, + + read(name) { + const match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)')); + return (match ? decodeURIComponent(match[3]) : null); + }, + + remove(name) { + this.write(name, '', Date.now() - 86400000); + } + } + + : + + // Non-standard browser env (web workers, react-native) lack needed support. + { + write() {}, + read() { + return null; + }, + remove() {} + }; + diff --git a/node_modules/axios/lib/helpers/deprecatedMethod.js b/node_modules/axios/lib/helpers/deprecatedMethod.js new file mode 100644 index 0000000..9e8fae6 --- /dev/null +++ b/node_modules/axios/lib/helpers/deprecatedMethod.js @@ -0,0 +1,26 @@ +'use strict'; + +/*eslint no-console:0*/ + +/** + * Supply a warning to the developer that a method they are using + * has been deprecated. + * + * @param {string} method The name of the deprecated method + * @param {string} [instead] The alternate method to use if applicable + * @param {string} [docs] The documentation URL to get further details + * + * @returns {void} + */ +export default function deprecatedMethod(method, instead, docs) { + try { + console.warn( + 'DEPRECATED method `' + method + '`.' + + (instead ? ' Use `' + instead + '` instead.' : '') + + ' This method will be removed in a future release.'); + + if (docs) { + console.warn('For more information about usage see ' + docs); + } + } catch (e) { /* Ignore */ } +} diff --git a/node_modules/axios/lib/helpers/formDataToJSON.js b/node_modules/axios/lib/helpers/formDataToJSON.js new file mode 100644 index 0000000..906ce60 --- /dev/null +++ b/node_modules/axios/lib/helpers/formDataToJSON.js @@ -0,0 +1,95 @@ +'use strict'; + +import utils from '../utils.js'; + +/** + * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z'] + * + * @param {string} name - The name of the property to get. + * + * @returns An array of strings. + */ +function parsePropPath(name) { + // foo[x][y][z] + // foo.x.y.z + // foo-x-y-z + // foo x y z + return utils.matchAll(/\w+|\[(\w*)]/g, name).map(match => { + return match[0] === '[]' ? '' : match[1] || match[0]; + }); +} + +/** + * Convert an array to an object. + * + * @param {Array} arr - The array to convert to an object. + * + * @returns An object with the same keys and values as the array. + */ +function arrayToObject(arr) { + const obj = {}; + const keys = Object.keys(arr); + let i; + const len = keys.length; + let key; + for (i = 0; i < len; i++) { + key = keys[i]; + obj[key] = arr[key]; + } + return obj; +} + +/** + * It takes a FormData object and returns a JavaScript object + * + * @param {string} formData The FormData object to convert to JSON. + * + * @returns {Object | null} The converted object. + */ +function formDataToJSON(formData) { + function buildPath(path, value, target, index) { + let name = path[index++]; + + if (name === '__proto__') return true; + + const isNumericKey = Number.isFinite(+name); + const isLast = index >= path.length; + name = !name && utils.isArray(target) ? target.length : name; + + if (isLast) { + if (utils.hasOwnProp(target, name)) { + target[name] = [target[name], value]; + } else { + target[name] = value; + } + + return !isNumericKey; + } + + if (!target[name] || !utils.isObject(target[name])) { + target[name] = []; + } + + const result = buildPath(path, value, target[name], index); + + if (result && utils.isArray(target[name])) { + target[name] = arrayToObject(target[name]); + } + + return !isNumericKey; + } + + if (utils.isFormData(formData) && utils.isFunction(formData.entries)) { + const obj = {}; + + utils.forEachEntry(formData, (name, value) => { + buildPath(parsePropPath(name), value, obj, 0); + }); + + return obj; + } + + return null; +} + +export default formDataToJSON; diff --git a/node_modules/axios/lib/helpers/formDataToStream.js b/node_modules/axios/lib/helpers/formDataToStream.js new file mode 100644 index 0000000..afc6174 --- /dev/null +++ b/node_modules/axios/lib/helpers/formDataToStream.js @@ -0,0 +1,112 @@ +import util from 'util'; +import {Readable} from 'stream'; +import utils from "../utils.js"; +import readBlob from "./readBlob.js"; +import platform from "../platform/index.js"; + +const BOUNDARY_ALPHABET = platform.ALPHABET.ALPHA_DIGIT + '-_'; + +const textEncoder = typeof TextEncoder === 'function' ? new TextEncoder() : new util.TextEncoder(); + +const CRLF = '\r\n'; +const CRLF_BYTES = textEncoder.encode(CRLF); +const CRLF_BYTES_COUNT = 2; + +class FormDataPart { + constructor(name, value) { + const {escapeName} = this.constructor; + const isStringValue = utils.isString(value); + + let headers = `Content-Disposition: form-data; name="${escapeName(name)}"${ + !isStringValue && value.name ? `; filename="${escapeName(value.name)}"` : '' + }${CRLF}`; + + if (isStringValue) { + value = textEncoder.encode(String(value).replace(/\r?\n|\r\n?/g, CRLF)); + } else { + headers += `Content-Type: ${value.type || "application/octet-stream"}${CRLF}` + } + + this.headers = textEncoder.encode(headers + CRLF); + + this.contentLength = isStringValue ? value.byteLength : value.size; + + this.size = this.headers.byteLength + this.contentLength + CRLF_BYTES_COUNT; + + this.name = name; + this.value = value; + } + + async *encode(){ + yield this.headers; + + const {value} = this; + + if(utils.isTypedArray(value)) { + yield value; + } else { + yield* readBlob(value); + } + + yield CRLF_BYTES; + } + + static escapeName(name) { + return String(name).replace(/[\r\n"]/g, (match) => ({ + '\r' : '%0D', + '\n' : '%0A', + '"' : '%22', + }[match])); + } +} + +const formDataToStream = (form, headersHandler, options) => { + const { + tag = 'form-data-boundary', + size = 25, + boundary = tag + '-' + platform.generateString(size, BOUNDARY_ALPHABET) + } = options || {}; + + if(!utils.isFormData(form)) { + throw TypeError('FormData instance required'); + } + + if (boundary.length < 1 || boundary.length > 70) { + throw Error('boundary must be 10-70 characters long') + } + + const boundaryBytes = textEncoder.encode('--' + boundary + CRLF); + const footerBytes = textEncoder.encode('--' + boundary + '--' + CRLF); + let contentLength = footerBytes.byteLength; + + const parts = Array.from(form.entries()).map(([name, value]) => { + const part = new FormDataPart(name, value); + contentLength += part.size; + return part; + }); + + contentLength += boundaryBytes.byteLength * parts.length; + + contentLength = utils.toFiniteNumber(contentLength); + + const computedHeaders = { + 'Content-Type': `multipart/form-data; boundary=${boundary}` + } + + if (Number.isFinite(contentLength)) { + computedHeaders['Content-Length'] = contentLength; + } + + headersHandler && headersHandler(computedHeaders); + + return Readable.from((async function *() { + for(const part of parts) { + yield boundaryBytes; + yield* part.encode(); + } + + yield footerBytes; + })()); +}; + +export default formDataToStream; diff --git a/node_modules/axios/lib/helpers/fromDataURI.js b/node_modules/axios/lib/helpers/fromDataURI.js new file mode 100644 index 0000000..eb71d3f --- /dev/null +++ b/node_modules/axios/lib/helpers/fromDataURI.js @@ -0,0 +1,53 @@ +'use strict'; + +import AxiosError from '../core/AxiosError.js'; +import parseProtocol from './parseProtocol.js'; +import platform from '../platform/index.js'; + +const DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/; + +/** + * Parse data uri to a Buffer or Blob + * + * @param {String} uri + * @param {?Boolean} asBlob + * @param {?Object} options + * @param {?Function} options.Blob + * + * @returns {Buffer|Blob} + */ +export default function fromDataURI(uri, asBlob, options) { + const _Blob = options && options.Blob || platform.classes.Blob; + const protocol = parseProtocol(uri); + + if (asBlob === undefined && _Blob) { + asBlob = true; + } + + if (protocol === 'data') { + uri = protocol.length ? uri.slice(protocol.length + 1) : uri; + + const match = DATA_URL_PATTERN.exec(uri); + + if (!match) { + throw new AxiosError('Invalid URL', AxiosError.ERR_INVALID_URL); + } + + const mime = match[1]; + const isBase64 = match[2]; + const body = match[3]; + const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? 'base64' : 'utf8'); + + if (asBlob) { + if (!_Blob) { + throw new AxiosError('Blob is not supported', AxiosError.ERR_NOT_SUPPORT); + } + + return new _Blob([buffer], {type: mime}); + } + + return buffer; + } + + throw new AxiosError('Unsupported protocol ' + protocol, AxiosError.ERR_NOT_SUPPORT); +} diff --git a/node_modules/axios/lib/helpers/isAbsoluteURL.js b/node_modules/axios/lib/helpers/isAbsoluteURL.js new file mode 100644 index 0000000..4747a45 --- /dev/null +++ b/node_modules/axios/lib/helpers/isAbsoluteURL.js @@ -0,0 +1,15 @@ +'use strict'; + +/** + * Determines whether the specified URL is absolute + * + * @param {string} url The URL to test + * + * @returns {boolean} True if the specified URL is absolute, otherwise false + */ +export default function isAbsoluteURL(url) { + // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL). + // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed + // by any combination of letters, digits, plus, period, or hyphen. + return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url); +} diff --git a/node_modules/axios/lib/helpers/isAxiosError.js b/node_modules/axios/lib/helpers/isAxiosError.js new file mode 100644 index 0000000..da6cd63 --- /dev/null +++ b/node_modules/axios/lib/helpers/isAxiosError.js @@ -0,0 +1,14 @@ +'use strict'; + +import utils from './../utils.js'; + +/** + * Determines whether the payload is an error thrown by Axios + * + * @param {*} payload The value to test + * + * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false + */ +export default function isAxiosError(payload) { + return utils.isObject(payload) && (payload.isAxiosError === true); +} diff --git a/node_modules/axios/lib/helpers/isURLSameOrigin.js b/node_modules/axios/lib/helpers/isURLSameOrigin.js new file mode 100644 index 0000000..6a92aa1 --- /dev/null +++ b/node_modules/axios/lib/helpers/isURLSameOrigin.js @@ -0,0 +1,14 @@ +import platform from '../platform/index.js'; + +export default platform.hasStandardBrowserEnv ? ((origin, isMSIE) => (url) => { + url = new URL(url, platform.origin); + + return ( + origin.protocol === url.protocol && + origin.host === url.host && + (isMSIE || origin.port === url.port) + ); +})( + new URL(platform.origin), + platform.navigator && /(msie|trident)/i.test(platform.navigator.userAgent) +) : () => true; diff --git a/node_modules/axios/lib/helpers/null.js b/node_modules/axios/lib/helpers/null.js new file mode 100644 index 0000000..b9f82c4 --- /dev/null +++ b/node_modules/axios/lib/helpers/null.js @@ -0,0 +1,2 @@ +// eslint-disable-next-line strict +export default null; diff --git a/node_modules/axios/lib/helpers/parseHeaders.js b/node_modules/axios/lib/helpers/parseHeaders.js new file mode 100644 index 0000000..50af948 --- /dev/null +++ b/node_modules/axios/lib/helpers/parseHeaders.js @@ -0,0 +1,55 @@ +'use strict'; + +import utils from './../utils.js'; + +// RawAxiosHeaders whose duplicates are ignored by node +// c.f. https://nodejs.org/api/http.html#http_message_headers +const ignoreDuplicateOf = utils.toObjectSet([ + 'age', 'authorization', 'content-length', 'content-type', 'etag', + 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since', + 'last-modified', 'location', 'max-forwards', 'proxy-authorization', + 'referer', 'retry-after', 'user-agent' +]); + +/** + * Parse headers into an object + * + * ``` + * Date: Wed, 27 Aug 2014 08:58:49 GMT + * Content-Type: application/json + * Connection: keep-alive + * Transfer-Encoding: chunked + * ``` + * + * @param {String} rawHeaders Headers needing to be parsed + * + * @returns {Object} Headers parsed into an object + */ +export default rawHeaders => { + const parsed = {}; + let key; + let val; + let i; + + rawHeaders && rawHeaders.split('\n').forEach(function parser(line) { + i = line.indexOf(':'); + key = line.substring(0, i).trim().toLowerCase(); + val = line.substring(i + 1).trim(); + + if (!key || (parsed[key] && ignoreDuplicateOf[key])) { + return; + } + + if (key === 'set-cookie') { + if (parsed[key]) { + parsed[key].push(val); + } else { + parsed[key] = [val]; + } + } else { + parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val; + } + }); + + return parsed; +}; diff --git a/node_modules/axios/lib/helpers/parseProtocol.js b/node_modules/axios/lib/helpers/parseProtocol.js new file mode 100644 index 0000000..586ec96 --- /dev/null +++ b/node_modules/axios/lib/helpers/parseProtocol.js @@ -0,0 +1,6 @@ +'use strict'; + +export default function parseProtocol(url) { + const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url); + return match && match[1] || ''; +} diff --git a/node_modules/axios/lib/helpers/progressEventReducer.js b/node_modules/axios/lib/helpers/progressEventReducer.js new file mode 100644 index 0000000..ff601cc --- /dev/null +++ b/node_modules/axios/lib/helpers/progressEventReducer.js @@ -0,0 +1,44 @@ +import speedometer from "./speedometer.js"; +import throttle from "./throttle.js"; +import utils from "../utils.js"; + +export const progressEventReducer = (listener, isDownloadStream, freq = 3) => { + let bytesNotified = 0; + const _speedometer = speedometer(50, 250); + + return throttle(e => { + const loaded = e.loaded; + const total = e.lengthComputable ? e.total : undefined; + const progressBytes = loaded - bytesNotified; + const rate = _speedometer(progressBytes); + const inRange = loaded <= total; + + bytesNotified = loaded; + + const data = { + loaded, + total, + progress: total ? (loaded / total) : undefined, + bytes: progressBytes, + rate: rate ? rate : undefined, + estimated: rate && total && inRange ? (total - loaded) / rate : undefined, + event: e, + lengthComputable: total != null, + [isDownloadStream ? 'download' : 'upload']: true + }; + + listener(data); + }, freq); +} + +export const progressEventDecorator = (total, throttled) => { + const lengthComputable = total != null; + + return [(loaded) => throttled[0]({ + lengthComputable, + total, + loaded + }), throttled[1]]; +} + +export const asyncDecorator = (fn) => (...args) => utils.asap(() => fn(...args)); diff --git a/node_modules/axios/lib/helpers/readBlob.js b/node_modules/axios/lib/helpers/readBlob.js new file mode 100644 index 0000000..6de748e --- /dev/null +++ b/node_modules/axios/lib/helpers/readBlob.js @@ -0,0 +1,15 @@ +const {asyncIterator} = Symbol; + +const readBlob = async function* (blob) { + if (blob.stream) { + yield* blob.stream() + } else if (blob.arrayBuffer) { + yield await blob.arrayBuffer() + } else if (blob[asyncIterator]) { + yield* blob[asyncIterator](); + } else { + yield blob; + } +} + +export default readBlob; diff --git a/node_modules/axios/lib/helpers/resolveConfig.js b/node_modules/axios/lib/helpers/resolveConfig.js new file mode 100644 index 0000000..7b16882 --- /dev/null +++ b/node_modules/axios/lib/helpers/resolveConfig.js @@ -0,0 +1,57 @@ +import platform from "../platform/index.js"; +import utils from "../utils.js"; +import isURLSameOrigin from "./isURLSameOrigin.js"; +import cookies from "./cookies.js"; +import buildFullPath from "../core/buildFullPath.js"; +import mergeConfig from "../core/mergeConfig.js"; +import AxiosHeaders from "../core/AxiosHeaders.js"; +import buildURL from "./buildURL.js"; + +export default (config) => { + const newConfig = mergeConfig({}, config); + + let {data, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth} = newConfig; + + newConfig.headers = headers = AxiosHeaders.from(headers); + + newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer); + + // HTTP basic authentication + if (auth) { + headers.set('Authorization', 'Basic ' + + btoa((auth.username || '') + ':' + (auth.password ? unescape(encodeURIComponent(auth.password)) : '')) + ); + } + + let contentType; + + if (utils.isFormData(data)) { + if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) { + headers.setContentType(undefined); // Let the browser set it + } else if ((contentType = headers.getContentType()) !== false) { + // fix semicolon duplication issue for ReactNative FormData implementation + const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : []; + headers.setContentType([type || 'multipart/form-data', ...tokens].join('; ')); + } + } + + // Add xsrf header + // This is only done if running in a standard browser environment. + // Specifically not if we're in a web worker, or react-native. + + if (platform.hasStandardBrowserEnv) { + withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig)); + + if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(newConfig.url))) { + // Add xsrf header + const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies.read(xsrfCookieName); + + if (xsrfValue) { + headers.set(xsrfHeaderName, xsrfValue); + } + } + } + + return newConfig; +} + diff --git a/node_modules/axios/lib/helpers/speedometer.js b/node_modules/axios/lib/helpers/speedometer.js new file mode 100644 index 0000000..3b3c666 --- /dev/null +++ b/node_modules/axios/lib/helpers/speedometer.js @@ -0,0 +1,55 @@ +'use strict'; + +/** + * Calculate data maxRate + * @param {Number} [samplesCount= 10] + * @param {Number} [min= 1000] + * @returns {Function} + */ +function speedometer(samplesCount, min) { + samplesCount = samplesCount || 10; + const bytes = new Array(samplesCount); + const timestamps = new Array(samplesCount); + let head = 0; + let tail = 0; + let firstSampleTS; + + min = min !== undefined ? min : 1000; + + return function push(chunkLength) { + const now = Date.now(); + + const startedAt = timestamps[tail]; + + if (!firstSampleTS) { + firstSampleTS = now; + } + + bytes[head] = chunkLength; + timestamps[head] = now; + + let i = tail; + let bytesCount = 0; + + while (i !== head) { + bytesCount += bytes[i++]; + i = i % samplesCount; + } + + head = (head + 1) % samplesCount; + + if (head === tail) { + tail = (tail + 1) % samplesCount; + } + + if (now - firstSampleTS < min) { + return; + } + + const passed = startedAt && now - startedAt; + + return passed ? Math.round(bytesCount * 1000 / passed) : undefined; + }; +} + +export default speedometer; diff --git a/node_modules/axios/lib/helpers/spread.js b/node_modules/axios/lib/helpers/spread.js new file mode 100644 index 0000000..13479cb --- /dev/null +++ b/node_modules/axios/lib/helpers/spread.js @@ -0,0 +1,28 @@ +'use strict'; + +/** + * Syntactic sugar for invoking a function and expanding an array for arguments. + * + * Common use case would be to use `Function.prototype.apply`. + * + * ```js + * function f(x, y, z) {} + * var args = [1, 2, 3]; + * f.apply(null, args); + * ``` + * + * With `spread` this example can be re-written. + * + * ```js + * spread(function(x, y, z) {})([1, 2, 3]); + * ``` + * + * @param {Function} callback + * + * @returns {Function} + */ +export default function spread(callback) { + return function wrap(arr) { + return callback.apply(null, arr); + }; +} diff --git a/node_modules/axios/lib/helpers/throttle.js b/node_modules/axios/lib/helpers/throttle.js new file mode 100644 index 0000000..e256272 --- /dev/null +++ b/node_modules/axios/lib/helpers/throttle.js @@ -0,0 +1,44 @@ +/** + * Throttle decorator + * @param {Function} fn + * @param {Number} freq + * @return {Function} + */ +function throttle(fn, freq) { + let timestamp = 0; + let threshold = 1000 / freq; + let lastArgs; + let timer; + + const invoke = (args, now = Date.now()) => { + timestamp = now; + lastArgs = null; + if (timer) { + clearTimeout(timer); + timer = null; + } + fn.apply(null, args); + } + + const throttled = (...args) => { + const now = Date.now(); + const passed = now - timestamp; + if ( passed >= threshold) { + invoke(args, now); + } else { + lastArgs = args; + if (!timer) { + timer = setTimeout(() => { + timer = null; + invoke(lastArgs) + }, threshold - passed); + } + } + } + + const flush = () => lastArgs && invoke(lastArgs); + + return [throttled, flush]; +} + +export default throttle; diff --git a/node_modules/axios/lib/helpers/toFormData.js b/node_modules/axios/lib/helpers/toFormData.js new file mode 100644 index 0000000..a41e966 --- /dev/null +++ b/node_modules/axios/lib/helpers/toFormData.js @@ -0,0 +1,219 @@ +'use strict'; + +import utils from '../utils.js'; +import AxiosError from '../core/AxiosError.js'; +// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored +import PlatformFormData from '../platform/node/classes/FormData.js'; + +/** + * Determines if the given thing is a array or js object. + * + * @param {string} thing - The object or array to be visited. + * + * @returns {boolean} + */ +function isVisitable(thing) { + return utils.isPlainObject(thing) || utils.isArray(thing); +} + +/** + * It removes the brackets from the end of a string + * + * @param {string} key - The key of the parameter. + * + * @returns {string} the key without the brackets. + */ +function removeBrackets(key) { + return utils.endsWith(key, '[]') ? key.slice(0, -2) : key; +} + +/** + * It takes a path, a key, and a boolean, and returns a string + * + * @param {string} path - The path to the current key. + * @param {string} key - The key of the current object being iterated over. + * @param {string} dots - If true, the key will be rendered with dots instead of brackets. + * + * @returns {string} The path to the current key. + */ +function renderKey(path, key, dots) { + if (!path) return key; + return path.concat(key).map(function each(token, i) { + // eslint-disable-next-line no-param-reassign + token = removeBrackets(token); + return !dots && i ? '[' + token + ']' : token; + }).join(dots ? '.' : ''); +} + +/** + * If the array is an array and none of its elements are visitable, then it's a flat array. + * + * @param {Array} arr - The array to check + * + * @returns {boolean} + */ +function isFlatArray(arr) { + return utils.isArray(arr) && !arr.some(isVisitable); +} + +const predicates = utils.toFlatObject(utils, {}, null, function filter(prop) { + return /^is[A-Z]/.test(prop); +}); + +/** + * Convert a data object to FormData + * + * @param {Object} obj + * @param {?Object} [formData] + * @param {?Object} [options] + * @param {Function} [options.visitor] + * @param {Boolean} [options.metaTokens = true] + * @param {Boolean} [options.dots = false] + * @param {?Boolean} [options.indexes = false] + * + * @returns {Object} + **/ + +/** + * It converts an object into a FormData object + * + * @param {Object} obj - The object to convert to form data. + * @param {string} formData - The FormData object to append to. + * @param {Object} options + * + * @returns + */ +function toFormData(obj, formData, options) { + if (!utils.isObject(obj)) { + throw new TypeError('target must be an object'); + } + + // eslint-disable-next-line no-param-reassign + formData = formData || new (PlatformFormData || FormData)(); + + // eslint-disable-next-line no-param-reassign + options = utils.toFlatObject(options, { + metaTokens: true, + dots: false, + indexes: false + }, false, function defined(option, source) { + // eslint-disable-next-line no-eq-null,eqeqeq + return !utils.isUndefined(source[option]); + }); + + const metaTokens = options.metaTokens; + // eslint-disable-next-line no-use-before-define + const visitor = options.visitor || defaultVisitor; + const dots = options.dots; + const indexes = options.indexes; + const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob; + const useBlob = _Blob && utils.isSpecCompliantForm(formData); + + if (!utils.isFunction(visitor)) { + throw new TypeError('visitor must be a function'); + } + + function convertValue(value) { + if (value === null) return ''; + + if (utils.isDate(value)) { + return value.toISOString(); + } + + if (!useBlob && utils.isBlob(value)) { + throw new AxiosError('Blob is not supported. Use a Buffer instead.'); + } + + if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) { + return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value); + } + + return value; + } + + /** + * Default visitor. + * + * @param {*} value + * @param {String|Number} key + * @param {Array} path + * @this {FormData} + * + * @returns {boolean} return true to visit the each prop of the value recursively + */ + function defaultVisitor(value, key, path) { + let arr = value; + + if (value && !path && typeof value === 'object') { + if (utils.endsWith(key, '{}')) { + // eslint-disable-next-line no-param-reassign + key = metaTokens ? key : key.slice(0, -2); + // eslint-disable-next-line no-param-reassign + value = JSON.stringify(value); + } else if ( + (utils.isArray(value) && isFlatArray(value)) || + ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value)) + )) { + // eslint-disable-next-line no-param-reassign + key = removeBrackets(key); + + arr.forEach(function each(el, index) { + !(utils.isUndefined(el) || el === null) && formData.append( + // eslint-disable-next-line no-nested-ternary + indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'), + convertValue(el) + ); + }); + return false; + } + } + + if (isVisitable(value)) { + return true; + } + + formData.append(renderKey(path, key, dots), convertValue(value)); + + return false; + } + + const stack = []; + + const exposedHelpers = Object.assign(predicates, { + defaultVisitor, + convertValue, + isVisitable + }); + + function build(value, path) { + if (utils.isUndefined(value)) return; + + if (stack.indexOf(value) !== -1) { + throw Error('Circular reference detected in ' + path.join('.')); + } + + stack.push(value); + + utils.forEach(value, function each(el, key) { + const result = !(utils.isUndefined(el) || el === null) && visitor.call( + formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers + ); + + if (result === true) { + build(el, path ? path.concat(key) : [key]); + } + }); + + stack.pop(); + } + + if (!utils.isObject(obj)) { + throw new TypeError('data must be an object'); + } + + build(obj); + + return formData; +} + +export default toFormData; diff --git a/node_modules/axios/lib/helpers/toURLEncodedForm.js b/node_modules/axios/lib/helpers/toURLEncodedForm.js new file mode 100644 index 0000000..988a38a --- /dev/null +++ b/node_modules/axios/lib/helpers/toURLEncodedForm.js @@ -0,0 +1,18 @@ +'use strict'; + +import utils from '../utils.js'; +import toFormData from './toFormData.js'; +import platform from '../platform/index.js'; + +export default function toURLEncodedForm(data, options) { + return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({ + visitor: function(value, key, path, helpers) { + if (platform.isNode && utils.isBuffer(value)) { + this.append(key, value.toString('base64')); + return false; + } + + return helpers.defaultVisitor.apply(this, arguments); + } + }, options)); +} diff --git a/node_modules/axios/lib/helpers/trackStream.js b/node_modules/axios/lib/helpers/trackStream.js new file mode 100644 index 0000000..95d6008 --- /dev/null +++ b/node_modules/axios/lib/helpers/trackStream.js @@ -0,0 +1,87 @@ + +export const streamChunk = function* (chunk, chunkSize) { + let len = chunk.byteLength; + + if (!chunkSize || len < chunkSize) { + yield chunk; + return; + } + + let pos = 0; + let end; + + while (pos < len) { + end = pos + chunkSize; + yield chunk.slice(pos, end); + pos = end; + } +} + +export const readBytes = async function* (iterable, chunkSize) { + for await (const chunk of readStream(iterable)) { + yield* streamChunk(chunk, chunkSize); + } +} + +const readStream = async function* (stream) { + if (stream[Symbol.asyncIterator]) { + yield* stream; + return; + } + + const reader = stream.getReader(); + try { + for (;;) { + const {done, value} = await reader.read(); + if (done) { + break; + } + yield value; + } + } finally { + await reader.cancel(); + } +} + +export const trackStream = (stream, chunkSize, onProgress, onFinish) => { + const iterator = readBytes(stream, chunkSize); + + let bytes = 0; + let done; + let _onFinish = (e) => { + if (!done) { + done = true; + onFinish && onFinish(e); + } + } + + return new ReadableStream({ + async pull(controller) { + try { + const {done, value} = await iterator.next(); + + if (done) { + _onFinish(); + controller.close(); + return; + } + + let len = value.byteLength; + if (onProgress) { + let loadedBytes = bytes += len; + onProgress(loadedBytes); + } + controller.enqueue(new Uint8Array(value)); + } catch (err) { + _onFinish(err); + throw err; + } + }, + cancel(reason) { + _onFinish(reason); + return iterator.return(); + } + }, { + highWaterMark: 2 + }) +} diff --git a/node_modules/axios/lib/helpers/validator.js b/node_modules/axios/lib/helpers/validator.js new file mode 100644 index 0000000..1270568 --- /dev/null +++ b/node_modules/axios/lib/helpers/validator.js @@ -0,0 +1,99 @@ +'use strict'; + +import {VERSION} from '../env/data.js'; +import AxiosError from '../core/AxiosError.js'; + +const validators = {}; + +// eslint-disable-next-line func-names +['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => { + validators[type] = function validator(thing) { + return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type; + }; +}); + +const deprecatedWarnings = {}; + +/** + * Transitional option validator + * + * @param {function|boolean?} validator - set to false if the transitional option has been removed + * @param {string?} version - deprecated version / removed since version + * @param {string?} message - some message with additional info + * + * @returns {function} + */ +validators.transitional = function transitional(validator, version, message) { + function formatMessage(opt, desc) { + return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : ''); + } + + // eslint-disable-next-line func-names + return (value, opt, opts) => { + if (validator === false) { + throw new AxiosError( + formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')), + AxiosError.ERR_DEPRECATED + ); + } + + if (version && !deprecatedWarnings[opt]) { + deprecatedWarnings[opt] = true; + // eslint-disable-next-line no-console + console.warn( + formatMessage( + opt, + ' has been deprecated since v' + version + ' and will be removed in the near future' + ) + ); + } + + return validator ? validator(value, opt, opts) : true; + }; +}; + +validators.spelling = function spelling(correctSpelling) { + return (value, opt) => { + // eslint-disable-next-line no-console + console.warn(`${opt} is likely a misspelling of ${correctSpelling}`); + return true; + } +}; + +/** + * Assert object's properties type + * + * @param {object} options + * @param {object} schema + * @param {boolean?} allowUnknown + * + * @returns {object} + */ + +function assertOptions(options, schema, allowUnknown) { + if (typeof options !== 'object') { + throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE); + } + const keys = Object.keys(options); + let i = keys.length; + while (i-- > 0) { + const opt = keys[i]; + const validator = schema[opt]; + if (validator) { + const value = options[opt]; + const result = value === undefined || validator(value, opt, options); + if (result !== true) { + throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE); + } + continue; + } + if (allowUnknown !== true) { + throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION); + } + } +} + +export default { + assertOptions, + validators +}; diff --git a/node_modules/axios/lib/platform/browser/classes/Blob.js b/node_modules/axios/lib/platform/browser/classes/Blob.js new file mode 100644 index 0000000..6c506c4 --- /dev/null +++ b/node_modules/axios/lib/platform/browser/classes/Blob.js @@ -0,0 +1,3 @@ +'use strict' + +export default typeof Blob !== 'undefined' ? Blob : null diff --git a/node_modules/axios/lib/platform/browser/classes/FormData.js b/node_modules/axios/lib/platform/browser/classes/FormData.js new file mode 100644 index 0000000..f36d31b --- /dev/null +++ b/node_modules/axios/lib/platform/browser/classes/FormData.js @@ -0,0 +1,3 @@ +'use strict'; + +export default typeof FormData !== 'undefined' ? FormData : null; diff --git a/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js b/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js new file mode 100644 index 0000000..b7dae95 --- /dev/null +++ b/node_modules/axios/lib/platform/browser/classes/URLSearchParams.js @@ -0,0 +1,4 @@ +'use strict'; + +import AxiosURLSearchParams from '../../../helpers/AxiosURLSearchParams.js'; +export default typeof URLSearchParams !== 'undefined' ? URLSearchParams : AxiosURLSearchParams; diff --git a/node_modules/axios/lib/platform/browser/index.js b/node_modules/axios/lib/platform/browser/index.js new file mode 100644 index 0000000..08c206f --- /dev/null +++ b/node_modules/axios/lib/platform/browser/index.js @@ -0,0 +1,13 @@ +import URLSearchParams from './classes/URLSearchParams.js' +import FormData from './classes/FormData.js' +import Blob from './classes/Blob.js' + +export default { + isBrowser: true, + classes: { + URLSearchParams, + FormData, + Blob + }, + protocols: ['http', 'https', 'file', 'blob', 'url', 'data'] +}; diff --git a/node_modules/axios/lib/platform/common/utils.js b/node_modules/axios/lib/platform/common/utils.js new file mode 100644 index 0000000..52a3186 --- /dev/null +++ b/node_modules/axios/lib/platform/common/utils.js @@ -0,0 +1,51 @@ +const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined'; + +const _navigator = typeof navigator === 'object' && navigator || undefined; + +/** + * Determine if we're running in a standard browser environment + * + * This allows axios to run in a web worker, and react-native. + * Both environments support XMLHttpRequest, but not fully standard globals. + * + * web workers: + * typeof window -> undefined + * typeof document -> undefined + * + * react-native: + * navigator.product -> 'ReactNative' + * nativescript + * navigator.product -> 'NativeScript' or 'NS' + * + * @returns {boolean} + */ +const hasStandardBrowserEnv = hasBrowserEnv && + (!_navigator || ['ReactNative', 'NativeScript', 'NS'].indexOf(_navigator.product) < 0); + +/** + * Determine if we're running in a standard browser webWorker environment + * + * Although the `isStandardBrowserEnv` method indicates that + * `allows axios to run in a web worker`, the WebWorker will still be + * filtered out due to its judgment standard + * `typeof window !== 'undefined' && typeof document !== 'undefined'`. + * This leads to a problem when axios post `FormData` in webWorker + */ +const hasStandardBrowserWebWorkerEnv = (() => { + return ( + typeof WorkerGlobalScope !== 'undefined' && + // eslint-disable-next-line no-undef + self instanceof WorkerGlobalScope && + typeof self.importScripts === 'function' + ); +})(); + +const origin = hasBrowserEnv && window.location.href || 'http://localhost'; + +export { + hasBrowserEnv, + hasStandardBrowserWebWorkerEnv, + hasStandardBrowserEnv, + _navigator as navigator, + origin +} diff --git a/node_modules/axios/lib/platform/index.js b/node_modules/axios/lib/platform/index.js new file mode 100644 index 0000000..860ba21 --- /dev/null +++ b/node_modules/axios/lib/platform/index.js @@ -0,0 +1,7 @@ +import platform from './node/index.js'; +import * as utils from './common/utils.js'; + +export default { + ...utils, + ...platform +} diff --git a/node_modules/axios/lib/platform/node/classes/FormData.js b/node_modules/axios/lib/platform/node/classes/FormData.js new file mode 100644 index 0000000..b07f947 --- /dev/null +++ b/node_modules/axios/lib/platform/node/classes/FormData.js @@ -0,0 +1,3 @@ +import FormData from 'form-data'; + +export default FormData; diff --git a/node_modules/axios/lib/platform/node/classes/URLSearchParams.js b/node_modules/axios/lib/platform/node/classes/URLSearchParams.js new file mode 100644 index 0000000..fba5842 --- /dev/null +++ b/node_modules/axios/lib/platform/node/classes/URLSearchParams.js @@ -0,0 +1,4 @@ +'use strict'; + +import url from 'url'; +export default url.URLSearchParams; diff --git a/node_modules/axios/lib/platform/node/index.js b/node_modules/axios/lib/platform/node/index.js new file mode 100644 index 0000000..cd1ca0c --- /dev/null +++ b/node_modules/axios/lib/platform/node/index.js @@ -0,0 +1,38 @@ +import crypto from 'crypto'; +import URLSearchParams from './classes/URLSearchParams.js' +import FormData from './classes/FormData.js' + +const ALPHA = 'abcdefghijklmnopqrstuvwxyz' + +const DIGIT = '0123456789'; + +const ALPHABET = { + DIGIT, + ALPHA, + ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT +} + +const generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => { + let str = ''; + const {length} = alphabet; + const randomValues = new Uint32Array(size); + crypto.randomFillSync(randomValues); + for (let i = 0; i < size; i++) { + str += alphabet[randomValues[i] % length]; + } + + return str; +} + + +export default { + isNode: true, + classes: { + URLSearchParams, + FormData, + Blob: typeof Blob !== 'undefined' && Blob || null + }, + ALPHABET, + generateString, + protocols: [ 'http', 'https', 'file', 'data' ] +}; diff --git a/node_modules/axios/lib/utils.js b/node_modules/axios/lib/utils.js new file mode 100644 index 0000000..a5ed039 --- /dev/null +++ b/node_modules/axios/lib/utils.js @@ -0,0 +1,744 @@ +'use strict'; + +import bind from './helpers/bind.js'; + +// utils is a library of generic helper functions non-specific to axios + +const {toString} = Object.prototype; +const {getPrototypeOf} = Object; +const {iterator, toStringTag} = Symbol; + +const kindOf = (cache => thing => { + const str = toString.call(thing); + return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase()); +})(Object.create(null)); + +const kindOfTest = (type) => { + type = type.toLowerCase(); + return (thing) => kindOf(thing) === type +} + +const typeOfTest = type => thing => typeof thing === type; + +/** + * Determine if a value is an Array + * + * @param {Object} val The value to test + * + * @returns {boolean} True if value is an Array, otherwise false + */ +const {isArray} = Array; + +/** + * Determine if a value is undefined + * + * @param {*} val The value to test + * + * @returns {boolean} True if the value is undefined, otherwise false + */ +const isUndefined = typeOfTest('undefined'); + +/** + * Determine if a value is a Buffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Buffer, otherwise false + */ +function isBuffer(val) { + return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor) + && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val); +} + +/** + * Determine if a value is an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is an ArrayBuffer, otherwise false + */ +const isArrayBuffer = kindOfTest('ArrayBuffer'); + + +/** + * Determine if a value is a view on an ArrayBuffer + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false + */ +function isArrayBufferView(val) { + let result; + if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) { + result = ArrayBuffer.isView(val); + } else { + result = (val) && (val.buffer) && (isArrayBuffer(val.buffer)); + } + return result; +} + +/** + * Determine if a value is a String + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a String, otherwise false + */ +const isString = typeOfTest('string'); + +/** + * Determine if a value is a Function + * + * @param {*} val The value to test + * @returns {boolean} True if value is a Function, otherwise false + */ +const isFunction = typeOfTest('function'); + +/** + * Determine if a value is a Number + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Number, otherwise false + */ +const isNumber = typeOfTest('number'); + +/** + * Determine if a value is an Object + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an Object, otherwise false + */ +const isObject = (thing) => thing !== null && typeof thing === 'object'; + +/** + * Determine if a value is a Boolean + * + * @param {*} thing The value to test + * @returns {boolean} True if value is a Boolean, otherwise false + */ +const isBoolean = thing => thing === true || thing === false; + +/** + * Determine if a value is a plain Object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a plain Object, otherwise false + */ +const isPlainObject = (val) => { + if (kindOf(val) !== 'object') { + return false; + } + + const prototype = getPrototypeOf(val); + return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(toStringTag in val) && !(iterator in val); +} + +/** + * Determine if a value is a Date + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Date, otherwise false + */ +const isDate = kindOfTest('Date'); + +/** + * Determine if a value is a File + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ +const isFile = kindOfTest('File'); + +/** + * Determine if a value is a Blob + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Blob, otherwise false + */ +const isBlob = kindOfTest('Blob'); + +/** + * Determine if a value is a FileList + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a File, otherwise false + */ +const isFileList = kindOfTest('FileList'); + +/** + * Determine if a value is a Stream + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a Stream, otherwise false + */ +const isStream = (val) => isObject(val) && isFunction(val.pipe); + +/** + * Determine if a value is a FormData + * + * @param {*} thing The value to test + * + * @returns {boolean} True if value is an FormData, otherwise false + */ +const isFormData = (thing) => { + let kind; + return thing && ( + (typeof FormData === 'function' && thing instanceof FormData) || ( + isFunction(thing.append) && ( + (kind = kindOf(thing)) === 'formdata' || + // detect form-data instance + (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]') + ) + ) + ) +} + +/** + * Determine if a value is a URLSearchParams object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a URLSearchParams object, otherwise false + */ +const isURLSearchParams = kindOfTest('URLSearchParams'); + +const [isReadableStream, isRequest, isResponse, isHeaders] = ['ReadableStream', 'Request', 'Response', 'Headers'].map(kindOfTest); + +/** + * Trim excess whitespace off the beginning and end of a string + * + * @param {String} str The String to trim + * + * @returns {String} The String freed of excess whitespace + */ +const trim = (str) => str.trim ? + str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, ''); + +/** + * Iterate over an Array or an Object invoking a function for each item. + * + * If `obj` is an Array callback will be called passing + * the value, index, and complete array for each item. + * + * If 'obj' is an Object callback will be called passing + * the value, key, and complete object for each property. + * + * @param {Object|Array} obj The object to iterate + * @param {Function} fn The callback to invoke for each item + * + * @param {Boolean} [allOwnKeys = false] + * @returns {any} + */ +function forEach(obj, fn, {allOwnKeys = false} = {}) { + // Don't bother if no value provided + if (obj === null || typeof obj === 'undefined') { + return; + } + + let i; + let l; + + // Force an array if not already something iterable + if (typeof obj !== 'object') { + /*eslint no-param-reassign:0*/ + obj = [obj]; + } + + if (isArray(obj)) { + // Iterate over array values + for (i = 0, l = obj.length; i < l; i++) { + fn.call(null, obj[i], i, obj); + } + } else { + // Iterate over object keys + const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj); + const len = keys.length; + let key; + + for (i = 0; i < len; i++) { + key = keys[i]; + fn.call(null, obj[key], key, obj); + } + } +} + +function findKey(obj, key) { + key = key.toLowerCase(); + const keys = Object.keys(obj); + let i = keys.length; + let _key; + while (i-- > 0) { + _key = keys[i]; + if (key === _key.toLowerCase()) { + return _key; + } + } + return null; +} + +const _global = (() => { + /*eslint no-undef:0*/ + if (typeof globalThis !== "undefined") return globalThis; + return typeof self !== "undefined" ? self : (typeof window !== 'undefined' ? window : global) +})(); + +const isContextDefined = (context) => !isUndefined(context) && context !== _global; + +/** + * Accepts varargs expecting each argument to be an object, then + * immutably merges the properties of each object and returns result. + * + * When multiple objects contain the same key the later object in + * the arguments list will take precedence. + * + * Example: + * + * ```js + * var result = merge({foo: 123}, {foo: 456}); + * console.log(result.foo); // outputs 456 + * ``` + * + * @param {Object} obj1 Object to merge + * + * @returns {Object} Result of all merge properties + */ +function merge(/* obj1, obj2, obj3, ... */) { + const {caseless} = isContextDefined(this) && this || {}; + const result = {}; + const assignValue = (val, key) => { + const targetKey = caseless && findKey(result, key) || key; + if (isPlainObject(result[targetKey]) && isPlainObject(val)) { + result[targetKey] = merge(result[targetKey], val); + } else if (isPlainObject(val)) { + result[targetKey] = merge({}, val); + } else if (isArray(val)) { + result[targetKey] = val.slice(); + } else { + result[targetKey] = val; + } + } + + for (let i = 0, l = arguments.length; i < l; i++) { + arguments[i] && forEach(arguments[i], assignValue); + } + return result; +} + +/** + * Extends object a by mutably adding to it the properties of object b. + * + * @param {Object} a The object to be extended + * @param {Object} b The object to copy properties from + * @param {Object} thisArg The object to bind function to + * + * @param {Boolean} [allOwnKeys] + * @returns {Object} The resulting value of object a + */ +const extend = (a, b, thisArg, {allOwnKeys}= {}) => { + forEach(b, (val, key) => { + if (thisArg && isFunction(val)) { + a[key] = bind(val, thisArg); + } else { + a[key] = val; + } + }, {allOwnKeys}); + return a; +} + +/** + * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + * + * @param {string} content with BOM + * + * @returns {string} content value without BOM + */ +const stripBOM = (content) => { + if (content.charCodeAt(0) === 0xFEFF) { + content = content.slice(1); + } + return content; +} + +/** + * Inherit the prototype methods from one constructor into another + * @param {function} constructor + * @param {function} superConstructor + * @param {object} [props] + * @param {object} [descriptors] + * + * @returns {void} + */ +const inherits = (constructor, superConstructor, props, descriptors) => { + constructor.prototype = Object.create(superConstructor.prototype, descriptors); + constructor.prototype.constructor = constructor; + Object.defineProperty(constructor, 'super', { + value: superConstructor.prototype + }); + props && Object.assign(constructor.prototype, props); +} + +/** + * Resolve object with deep prototype chain to a flat object + * @param {Object} sourceObj source object + * @param {Object} [destObj] + * @param {Function|Boolean} [filter] + * @param {Function} [propFilter] + * + * @returns {Object} + */ +const toFlatObject = (sourceObj, destObj, filter, propFilter) => { + let props; + let i; + let prop; + const merged = {}; + + destObj = destObj || {}; + // eslint-disable-next-line no-eq-null,eqeqeq + if (sourceObj == null) return destObj; + + do { + props = Object.getOwnPropertyNames(sourceObj); + i = props.length; + while (i-- > 0) { + prop = props[i]; + if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) { + destObj[prop] = sourceObj[prop]; + merged[prop] = true; + } + } + sourceObj = filter !== false && getPrototypeOf(sourceObj); + } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype); + + return destObj; +} + +/** + * Determines whether a string ends with the characters of a specified string + * + * @param {String} str + * @param {String} searchString + * @param {Number} [position= 0] + * + * @returns {boolean} + */ +const endsWith = (str, searchString, position) => { + str = String(str); + if (position === undefined || position > str.length) { + position = str.length; + } + position -= searchString.length; + const lastIndex = str.indexOf(searchString, position); + return lastIndex !== -1 && lastIndex === position; +} + + +/** + * Returns new array from array like object or null if failed + * + * @param {*} [thing] + * + * @returns {?Array} + */ +const toArray = (thing) => { + if (!thing) return null; + if (isArray(thing)) return thing; + let i = thing.length; + if (!isNumber(i)) return null; + const arr = new Array(i); + while (i-- > 0) { + arr[i] = thing[i]; + } + return arr; +} + +/** + * Checking if the Uint8Array exists and if it does, it returns a function that checks if the + * thing passed in is an instance of Uint8Array + * + * @param {TypedArray} + * + * @returns {Array} + */ +// eslint-disable-next-line func-names +const isTypedArray = (TypedArray => { + // eslint-disable-next-line func-names + return thing => { + return TypedArray && thing instanceof TypedArray; + }; +})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array)); + +/** + * For each entry in the object, call the function with the key and value. + * + * @param {Object} obj - The object to iterate over. + * @param {Function} fn - The function to call for each entry. + * + * @returns {void} + */ +const forEachEntry = (obj, fn) => { + const generator = obj && obj[iterator]; + + const _iterator = generator.call(obj); + + let result; + + while ((result = _iterator.next()) && !result.done) { + const pair = result.value; + fn.call(obj, pair[0], pair[1]); + } +} + +/** + * It takes a regular expression and a string, and returns an array of all the matches + * + * @param {string} regExp - The regular expression to match against. + * @param {string} str - The string to search. + * + * @returns {Array} + */ +const matchAll = (regExp, str) => { + let matches; + const arr = []; + + while ((matches = regExp.exec(str)) !== null) { + arr.push(matches); + } + + return arr; +} + +/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */ +const isHTMLForm = kindOfTest('HTMLFormElement'); + +const toCamelCase = str => { + return str.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g, + function replacer(m, p1, p2) { + return p1.toUpperCase() + p2; + } + ); +}; + +/* Creating a function that will check if an object has a property. */ +const hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype); + +/** + * Determine if a value is a RegExp object + * + * @param {*} val The value to test + * + * @returns {boolean} True if value is a RegExp object, otherwise false + */ +const isRegExp = kindOfTest('RegExp'); + +const reduceDescriptors = (obj, reducer) => { + const descriptors = Object.getOwnPropertyDescriptors(obj); + const reducedDescriptors = {}; + + forEach(descriptors, (descriptor, name) => { + let ret; + if ((ret = reducer(descriptor, name, obj)) !== false) { + reducedDescriptors[name] = ret || descriptor; + } + }); + + Object.defineProperties(obj, reducedDescriptors); +} + +/** + * Makes all methods read-only + * @param {Object} obj + */ + +const freezeMethods = (obj) => { + reduceDescriptors(obj, (descriptor, name) => { + // skip restricted props in strict mode + if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) { + return false; + } + + const value = obj[name]; + + if (!isFunction(value)) return; + + descriptor.enumerable = false; + + if ('writable' in descriptor) { + descriptor.writable = false; + return; + } + + if (!descriptor.set) { + descriptor.set = () => { + throw Error('Can not rewrite read-only method \'' + name + '\''); + }; + } + }); +} + +const toObjectSet = (arrayOrString, delimiter) => { + const obj = {}; + + const define = (arr) => { + arr.forEach(value => { + obj[value] = true; + }); + } + + isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter)); + + return obj; +} + +const noop = () => {} + +const toFiniteNumber = (value, defaultValue) => { + return value != null && Number.isFinite(value = +value) ? value : defaultValue; +} + +/** + * If the thing is a FormData object, return true, otherwise return false. + * + * @param {unknown} thing - The thing to check. + * + * @returns {boolean} + */ +function isSpecCompliantForm(thing) { + return !!(thing && isFunction(thing.append) && thing[toStringTag] === 'FormData' && thing[iterator]); +} + +const toJSONObject = (obj) => { + const stack = new Array(10); + + const visit = (source, i) => { + + if (isObject(source)) { + if (stack.indexOf(source) >= 0) { + return; + } + + if(!('toJSON' in source)) { + stack[i] = source; + const target = isArray(source) ? [] : {}; + + forEach(source, (value, key) => { + const reducedValue = visit(value, i + 1); + !isUndefined(reducedValue) && (target[key] = reducedValue); + }); + + stack[i] = undefined; + + return target; + } + } + + return source; + } + + return visit(obj, 0); +} + +const isAsyncFn = kindOfTest('AsyncFunction'); + +const isThenable = (thing) => + thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch); + +// original code +// https://github.com/DigitalBrainJS/AxiosPromise/blob/16deab13710ec09779922131f3fa5954320f83ab/lib/utils.js#L11-L34 + +const _setImmediate = ((setImmediateSupported, postMessageSupported) => { + if (setImmediateSupported) { + return setImmediate; + } + + return postMessageSupported ? ((token, callbacks) => { + _global.addEventListener("message", ({source, data}) => { + if (source === _global && data === token) { + callbacks.length && callbacks.shift()(); + } + }, false); + + return (cb) => { + callbacks.push(cb); + _global.postMessage(token, "*"); + } + })(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb); +})( + typeof setImmediate === 'function', + isFunction(_global.postMessage) +); + +const asap = typeof queueMicrotask !== 'undefined' ? + queueMicrotask.bind(_global) : ( typeof process !== 'undefined' && process.nextTick || _setImmediate); + +// ********************* + + +const isIterable = (thing) => thing != null && isFunction(thing[iterator]); + + +export default { + isArray, + isArrayBuffer, + isBuffer, + isFormData, + isArrayBufferView, + isString, + isNumber, + isBoolean, + isObject, + isPlainObject, + isReadableStream, + isRequest, + isResponse, + isHeaders, + isUndefined, + isDate, + isFile, + isBlob, + isRegExp, + isFunction, + isStream, + isURLSearchParams, + isTypedArray, + isFileList, + forEach, + merge, + extend, + trim, + stripBOM, + inherits, + toFlatObject, + kindOf, + kindOfTest, + endsWith, + toArray, + forEachEntry, + matchAll, + isHTMLForm, + hasOwnProperty, + hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection + reduceDescriptors, + freezeMethods, + toObjectSet, + toCamelCase, + noop, + toFiniteNumber, + findKey, + global: _global, + isContextDefined, + isSpecCompliantForm, + toJSONObject, + isAsyncFn, + isThenable, + setImmediate: _setImmediate, + asap, + isIterable +}; diff --git a/node_modules/axios/package.json b/node_modules/axios/package.json new file mode 100644 index 0000000..521a676 --- /dev/null +++ b/node_modules/axios/package.json @@ -0,0 +1,219 @@ +{ + "name": "axios", + "version": "1.9.0", + "description": "Promise based HTTP client for the browser and node.js", + "main": "index.js", + "exports": { + ".": { + "types": { + "require": "./index.d.cts", + "default": "./index.d.ts" + }, + "browser": { + "require": "./dist/browser/axios.cjs", + "default": "./index.js" + }, + "default": { + "require": "./dist/node/axios.cjs", + "default": "./index.js" + } + }, + "./lib/adapters/http.js": "./lib/adapters/http.js", + "./lib/adapters/xhr.js": "./lib/adapters/xhr.js", + "./unsafe/*": "./lib/*", + "./unsafe/core/settle.js": "./lib/core/settle.js", + "./unsafe/core/buildFullPath.js": "./lib/core/buildFullPath.js", + "./unsafe/helpers/isAbsoluteURL.js": "./lib/helpers/isAbsoluteURL.js", + "./unsafe/helpers/buildURL.js": "./lib/helpers/buildURL.js", + "./unsafe/helpers/combineURLs.js": "./lib/helpers/combineURLs.js", + "./unsafe/adapters/http.js": "./lib/adapters/http.js", + "./unsafe/adapters/xhr.js": "./lib/adapters/xhr.js", + "./unsafe/utils.js": "./lib/utils.js", + "./package.json": "./package.json" + }, + "type": "module", + "types": "index.d.ts", + "scripts": { + "test": "npm run test:eslint && npm run test:mocha && npm run test:karma && npm run test:dtslint && npm run test:exports", + "test:eslint": "node bin/ssl_hotfix.js eslint lib/**/*.js", + "test:dtslint": "dtslint --localTs node_modules/typescript/lib", + "test:mocha": "node bin/ssl_hotfix.js mocha test/unit/**/*.js --timeout 30000 --exit", + "test:exports": "node bin/ssl_hotfix.js mocha test/module/test.js --timeout 30000 --exit", + "test:karma": "node bin/ssl_hotfix.js cross-env LISTEN_ADDR=:: karma start karma.conf.cjs --single-run", + "test:karma:firefox": "node bin/ssl_hotfix.js cross-env LISTEN_ADDR=:: Browsers=Firefox karma start karma.conf.cjs --single-run", + "test:karma:server": "node bin/ssl_hotfix.js cross-env karma start karma.conf.cjs", + "test:build:version": "node ./bin/check-build-version.js", + "start": "node ./sandbox/server.js", + "preversion": "gulp version", + "version": "npm run build && git add dist && git add package.json", + "prepublishOnly": "npm run test:build:version", + "postpublish": "git push && git push --tags", + "build": "gulp clear && cross-env NODE_ENV=production rollup -c -m", + "examples": "node ./examples/server.js", + "coveralls": "cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js", + "fix": "eslint --fix lib/**/*.js", + "prepare": "husky install && npm run prepare:hooks", + "prepare:hooks": "npx husky set .husky/commit-msg \"npx commitlint --edit $1\"", + "release:dry": "release-it --dry-run --no-npm", + "release:info": "release-it --release-version", + "release:beta:no-npm": "release-it --preRelease=beta --no-npm", + "release:beta": "release-it --preRelease=beta", + "release:no-npm": "release-it --no-npm", + "release:changelog:fix": "node ./bin/injectContributorsList.js && git add CHANGELOG.md", + "release": "release-it" + }, + "repository": { + "type": "git", + "url": "https://github.com/axios/axios.git" + }, + "keywords": [ + "xhr", + "http", + "ajax", + "promise", + "node" + ], + "author": "Matt Zabriskie", + "license": "MIT", + "bugs": { + "url": "https://github.com/axios/axios/issues" + }, + "homepage": "https://axios-http.com", + "devDependencies": { + "@babel/core": "^7.23.9", + "@babel/preset-env": "^7.23.9", + "@commitlint/cli": "^17.8.1", + "@commitlint/config-conventional": "^17.8.1", + "@release-it/conventional-changelog": "^5.1.1", + "@rollup/plugin-babel": "^5.3.1", + "@rollup/plugin-commonjs": "^15.1.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-multi-entry": "^4.1.0", + "@rollup/plugin-node-resolve": "^9.0.0", + "abortcontroller-polyfill": "^1.7.5", + "auto-changelog": "^2.4.0", + "body-parser": "^1.20.2", + "chalk": "^5.3.0", + "coveralls": "^3.1.1", + "cross-env": "^7.0.3", + "dev-null": "^0.1.1", + "dtslint": "^4.2.1", + "es6-promise": "^4.2.8", + "eslint": "^8.56.0", + "express": "^4.18.2", + "formdata-node": "^5.0.1", + "formidable": "^2.1.2", + "fs-extra": "^10.1.0", + "get-stream": "^3.0.0", + "gulp": "^4.0.2", + "gzip-size": "^7.0.0", + "handlebars": "^4.7.8", + "husky": "^8.0.3", + "istanbul-instrumenter-loader": "^3.0.1", + "jasmine-core": "^2.99.1", + "karma": "^6.3.17", + "karma-chrome-launcher": "^3.2.0", + "karma-firefox-launcher": "^2.1.2", + "karma-jasmine": "^1.1.2", + "karma-jasmine-ajax": "^0.1.13", + "karma-rollup-preprocessor": "^7.0.8", + "karma-safari-launcher": "^1.0.0", + "karma-sauce-launcher": "^4.3.6", + "karma-sinon": "^1.0.5", + "karma-sourcemap-loader": "^0.3.8", + "memoizee": "^0.4.15", + "minimist": "^1.2.8", + "mocha": "^10.3.0", + "multer": "^1.4.4", + "pretty-bytes": "^6.1.1", + "release-it": "^15.11.0", + "rollup": "^2.79.1", + "rollup-plugin-auto-external": "^2.0.0", + "rollup-plugin-bundle-size": "^1.0.3", + "rollup-plugin-terser": "^7.0.2", + "sinon": "^4.5.0", + "stream-throttle": "^0.1.3", + "string-replace-async": "^3.0.2", + "terser-webpack-plugin": "^4.2.3", + "typescript": "^4.9.5", + "@rollup/plugin-alias": "^5.1.0" + }, + "browser": { + "./lib/adapters/http.js": "./lib/helpers/null.js", + "./lib/platform/node/index.js": "./lib/platform/browser/index.js", + "./lib/platform/node/classes/FormData.js": "./lib/helpers/null.js" + }, + "jsdelivr": "dist/axios.min.js", + "unpkg": "dist/axios.min.js", + "typings": "./index.d.ts", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + }, + "bundlesize": [ + { + "path": "./dist/axios.min.js", + "threshold": "5kB" + } + ], + "contributors": [ + "Matt Zabriskie (https://github.com/mzabriskie)", + "Nick Uraltsev (https://github.com/nickuraltsev)", + "Dmitriy Mozgovoy (https://github.com/DigitalBrainJS)", + "Jay (https://github.com/jasonsaayman)", + "Emily Morehouse (https://github.com/emilyemorehouse)", + "Rubรฉn Norte (https://github.com/rubennorte)", + "Justin Beckwith (https://github.com/JustinBeckwith)", + "Martti Laine (https://github.com/codeclown)", + "Xianming Zhong (https://github.com/chinesedfan)", + "Rikki Gibson (https://github.com/RikkiGibson)", + "Remco Haszing (https://github.com/remcohaszing)", + "Yasu Flores (https://github.com/yasuf)", + "Ben Carp (https://github.com/carpben)" + ], + "sideEffects": false, + "release-it": { + "git": { + "commitMessage": "chore(release): v${version}", + "push": true, + "commit": true, + "tag": true, + "requireCommits": false, + "requireCleanWorkingDir": false + }, + "github": { + "release": true, + "draft": true + }, + "npm": { + "publish": false, + "ignoreVersion": false + }, + "plugins": { + "@release-it/conventional-changelog": { + "preset": "angular", + "infile": "CHANGELOG.md", + "header": "# Changelog" + } + }, + "hooks": { + "before:init": "npm test", + "after:bump": "gulp version --bump ${version} && npm run build && npm run test:build:version && git add ./dist && git add ./package-lock.json", + "before:release": "npm run release:changelog:fix", + "after:release": "echo Successfully released ${name} v${version} to ${repo.repository}." + } + }, + "commitlint": { + "rules": { + "header-max-length": [ + 2, + "always", + 130 + ] + }, + "extends": [ + "@commitlint/config-conventional" + ] + } +} \ No newline at end of file diff --git a/node_modules/boolbase/README.md b/node_modules/boolbase/README.md new file mode 100644 index 0000000..85eefa5 --- /dev/null +++ b/node_modules/boolbase/README.md @@ -0,0 +1,10 @@ +#boolbase +This very simple module provides two basic functions, one that always returns true (`trueFunc`) and one that always returns false (`falseFunc`). + +###WTF? + +By having only a single instance of these functions around, it's possible to do some nice optimizations. Eg. [`CSSselect`](https://github.com/fb55/CSSselect) uses these functions to determine whether a selector won't match any elements. If that's the case, the DOM doesn't even have to be touched. + +###And why is this a separate module? + +I'm trying to modularize `CSSselect` and most modules depend on these functions. IMHO, having a separate module is the easiest solution to this problem. \ No newline at end of file diff --git a/node_modules/boolbase/index.js b/node_modules/boolbase/index.js new file mode 100644 index 0000000..8799fd9 --- /dev/null +++ b/node_modules/boolbase/index.js @@ -0,0 +1,8 @@ +module.exports = { + trueFunc: function trueFunc(){ + return true; + }, + falseFunc: function falseFunc(){ + return false; + } +}; \ No newline at end of file diff --git a/node_modules/boolbase/package.json b/node_modules/boolbase/package.json new file mode 100644 index 0000000..78330a8 --- /dev/null +++ b/node_modules/boolbase/package.json @@ -0,0 +1,23 @@ +{ + "name": "boolbase", + "version": "1.0.0", + "description": "two functions: One that returns true, one that returns false", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com/fb55/boolbase" + }, + "keywords": [ + "boolean", + "function" + ], + "author": "Felix Boehm ", + "license": "ISC", + "bugs": { + "url": "https://github.com/fb55/boolbase/issues" + }, + "homepage": "https://github.com/fb55/boolbase" +} diff --git a/node_modules/call-bind-apply-helpers/.eslintrc b/node_modules/call-bind-apply-helpers/.eslintrc new file mode 100644 index 0000000..201e859 --- /dev/null +++ b/node_modules/call-bind-apply-helpers/.eslintrc @@ -0,0 +1,17 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "func-name-matching": 0, + "id-length": 0, + "new-cap": [2, { + "capIsNewExceptions": [ + "GetIntrinsic", + ], + }], + "no-extra-parens": 0, + "no-magic-numbers": 0, + }, +} diff --git a/node_modules/call-bind-apply-helpers/.github/FUNDING.yml b/node_modules/call-bind-apply-helpers/.github/FUNDING.yml new file mode 100644 index 0000000..0011e9d --- /dev/null +++ b/node_modules/call-bind-apply-helpers/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/call-bind-apply-helpers +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/call-bind-apply-helpers/.nycrc b/node_modules/call-bind-apply-helpers/.nycrc new file mode 100644 index 0000000..bdd626c --- /dev/null +++ b/node_modules/call-bind-apply-helpers/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/call-bind-apply-helpers/CHANGELOG.md b/node_modules/call-bind-apply-helpers/CHANGELOG.md new file mode 100644 index 0000000..2484942 --- /dev/null +++ b/node_modules/call-bind-apply-helpers/CHANGELOG.md @@ -0,0 +1,30 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.0.2](https://github.com/ljharb/call-bind-apply-helpers/compare/v1.0.1...v1.0.2) - 2025-02-12 + +### Commits + +- [types] improve inferred types [`e6f9586`](https://github.com/ljharb/call-bind-apply-helpers/commit/e6f95860a3c72879cb861a858cdfb8138fbedec1) +- [Dev Deps] update `@arethetypeswrong/cli`, `@ljharb/tsconfig`, `@types/tape`, `es-value-fixtures`, `for-each`, `has-strict-mode`, `object-inspect` [`e43d540`](https://github.com/ljharb/call-bind-apply-helpers/commit/e43d5409f97543bfbb11f345d47d8ce4e066d8c1) + +## [v1.0.1](https://github.com/ljharb/call-bind-apply-helpers/compare/v1.0.0...v1.0.1) - 2024-12-08 + +### Commits + +- [types] `reflectApply`: fix types [`4efc396`](https://github.com/ljharb/call-bind-apply-helpers/commit/4efc3965351a4f02cc55e836fa391d3d11ef2ef8) +- [Fix] `reflectApply`: oops, Reflect is not a function [`83cc739`](https://github.com/ljharb/call-bind-apply-helpers/commit/83cc7395de6b79b7730bdf092f1436f0b1263c75) +- [Dev Deps] update `@arethetypeswrong/cli` [`80bd5d3`](https://github.com/ljharb/call-bind-apply-helpers/commit/80bd5d3ae58b4f6b6995ce439dd5a1bcb178a940) + +## v1.0.0 - 2024-12-05 + +### Commits + +- Initial implementation, tests, readme [`7879629`](https://github.com/ljharb/call-bind-apply-helpers/commit/78796290f9b7430c9934d6f33d94ae9bc89fce04) +- Initial commit [`3f1dc16`](https://github.com/ljharb/call-bind-apply-helpers/commit/3f1dc164afc43285631b114a5f9dd9137b2b952f) +- npm init [`081df04`](https://github.com/ljharb/call-bind-apply-helpers/commit/081df048c312fcee400922026f6e97281200a603) +- Only apps should have lockfiles [`5b9ca0f`](https://github.com/ljharb/call-bind-apply-helpers/commit/5b9ca0fe8101ebfaf309c549caac4e0a017ed930) diff --git a/node_modules/call-bind-apply-helpers/LICENSE b/node_modules/call-bind-apply-helpers/LICENSE new file mode 100644 index 0000000..f82f389 --- /dev/null +++ b/node_modules/call-bind-apply-helpers/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/call-bind-apply-helpers/README.md b/node_modules/call-bind-apply-helpers/README.md new file mode 100644 index 0000000..8fc0dae --- /dev/null +++ b/node_modules/call-bind-apply-helpers/README.md @@ -0,0 +1,62 @@ +# call-bind-apply-helpers [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][deps-svg]][deps-url] +[![dev dependency status][dev-deps-svg]][dev-deps-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Helper functions around Function call/apply/bind, for use in `call-bind`. + +The only packages that should likely ever use this package directly are `call-bind` and `get-intrinsic`. +Please use `call-bind` unless you have a very good reason not to. + +## Getting started + +```sh +npm install --save call-bind-apply-helpers +``` + +## Usage/Examples + +```js +const assert = require('assert'); +const callBindBasic = require('call-bind-apply-helpers'); + +function f(a, b) { + assert.equal(this, 1); + assert.equal(a, 2); + assert.equal(b, 3); + assert.equal(arguments.length, 2); +} + +const fBound = callBindBasic([f, 1]); + +delete Function.prototype.call; +delete Function.prototype.bind; + +fBound(2, 3); +``` + +## Tests + +Clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.org/package/call-bind-apply-helpers +[npm-version-svg]: https://versionbadg.es/ljharb/call-bind-apply-helpers.svg +[deps-svg]: https://david-dm.org/ljharb/call-bind-apply-helpers.svg +[deps-url]: https://david-dm.org/ljharb/call-bind-apply-helpers +[dev-deps-svg]: https://david-dm.org/ljharb/call-bind-apply-helpers/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/call-bind-apply-helpers#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/call-bind-apply-helpers.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/call-bind-apply-helpers.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/call-bind-apply-helpers.svg +[downloads-url]: https://npm-stat.com/charts.html?package=call-bind-apply-helpers +[codecov-image]: https://codecov.io/gh/ljharb/call-bind-apply-helpers/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/call-bind-apply-helpers/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/call-bind-apply-helpers +[actions-url]: https://github.com/ljharb/call-bind-apply-helpers/actions diff --git a/node_modules/call-bind-apply-helpers/actualApply.d.ts b/node_modules/call-bind-apply-helpers/actualApply.d.ts new file mode 100644 index 0000000..b87286a --- /dev/null +++ b/node_modules/call-bind-apply-helpers/actualApply.d.ts @@ -0,0 +1 @@ +export = Reflect.apply; \ No newline at end of file diff --git a/node_modules/call-bind-apply-helpers/actualApply.js b/node_modules/call-bind-apply-helpers/actualApply.js new file mode 100644 index 0000000..ffa5135 --- /dev/null +++ b/node_modules/call-bind-apply-helpers/actualApply.js @@ -0,0 +1,10 @@ +'use strict'; + +var bind = require('function-bind'); + +var $apply = require('./functionApply'); +var $call = require('./functionCall'); +var $reflectApply = require('./reflectApply'); + +/** @type {import('./actualApply')} */ +module.exports = $reflectApply || bind.call($call, $apply); diff --git a/node_modules/call-bind-apply-helpers/applyBind.d.ts b/node_modules/call-bind-apply-helpers/applyBind.d.ts new file mode 100644 index 0000000..d176c1a --- /dev/null +++ b/node_modules/call-bind-apply-helpers/applyBind.d.ts @@ -0,0 +1,19 @@ +import actualApply from './actualApply'; + +type TupleSplitHead = T['length'] extends N + ? T + : T extends [...infer R, any] + ? TupleSplitHead + : never + +type TupleSplitTail = O['length'] extends N + ? T + : T extends [infer F, ...infer R] + ? TupleSplitTail<[...R], N, [...O, F]> + : never + +type TupleSplit = [TupleSplitHead, TupleSplitTail] + +declare function applyBind(...args: TupleSplit, 2>[1]): ReturnType; + +export = applyBind; \ No newline at end of file diff --git a/node_modules/call-bind-apply-helpers/applyBind.js b/node_modules/call-bind-apply-helpers/applyBind.js new file mode 100644 index 0000000..d2b7723 --- /dev/null +++ b/node_modules/call-bind-apply-helpers/applyBind.js @@ -0,0 +1,10 @@ +'use strict'; + +var bind = require('function-bind'); +var $apply = require('./functionApply'); +var actualApply = require('./actualApply'); + +/** @type {import('./applyBind')} */ +module.exports = function applyBind() { + return actualApply(bind, $apply, arguments); +}; diff --git a/node_modules/call-bind-apply-helpers/functionApply.d.ts b/node_modules/call-bind-apply-helpers/functionApply.d.ts new file mode 100644 index 0000000..1f6e11b --- /dev/null +++ b/node_modules/call-bind-apply-helpers/functionApply.d.ts @@ -0,0 +1 @@ +export = Function.prototype.apply; \ No newline at end of file diff --git a/node_modules/call-bind-apply-helpers/functionApply.js b/node_modules/call-bind-apply-helpers/functionApply.js new file mode 100644 index 0000000..c71df9c --- /dev/null +++ b/node_modules/call-bind-apply-helpers/functionApply.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./functionApply')} */ +module.exports = Function.prototype.apply; diff --git a/node_modules/call-bind-apply-helpers/functionCall.d.ts b/node_modules/call-bind-apply-helpers/functionCall.d.ts new file mode 100644 index 0000000..15e93df --- /dev/null +++ b/node_modules/call-bind-apply-helpers/functionCall.d.ts @@ -0,0 +1 @@ +export = Function.prototype.call; \ No newline at end of file diff --git a/node_modules/call-bind-apply-helpers/functionCall.js b/node_modules/call-bind-apply-helpers/functionCall.js new file mode 100644 index 0000000..7a8d873 --- /dev/null +++ b/node_modules/call-bind-apply-helpers/functionCall.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./functionCall')} */ +module.exports = Function.prototype.call; diff --git a/node_modules/call-bind-apply-helpers/index.d.ts b/node_modules/call-bind-apply-helpers/index.d.ts new file mode 100644 index 0000000..541516b --- /dev/null +++ b/node_modules/call-bind-apply-helpers/index.d.ts @@ -0,0 +1,64 @@ +type RemoveFromTuple< + Tuple extends readonly unknown[], + RemoveCount extends number, + Index extends 1[] = [] +> = Index["length"] extends RemoveCount + ? Tuple + : Tuple extends [infer First, ...infer Rest] + ? RemoveFromTuple + : Tuple; + +type ConcatTuples< + Prefix extends readonly unknown[], + Suffix extends readonly unknown[] +> = [...Prefix, ...Suffix]; + +type ExtractFunctionParams = T extends (this: infer TThis, ...args: infer P extends readonly unknown[]) => infer R + ? { thisArg: TThis; params: P; returnType: R } + : never; + +type BindFunction< + T extends (this: any, ...args: any[]) => any, + TThis, + TBoundArgs extends readonly unknown[], + ReceiverBound extends boolean +> = ExtractFunctionParams extends { + thisArg: infer OrigThis; + params: infer P extends readonly unknown[]; + returnType: infer R; +} + ? ReceiverBound extends true + ? (...args: RemoveFromTuple>) => R extends [OrigThis, ...infer Rest] + ? [TThis, ...Rest] // Replace `this` with `thisArg` + : R + : >>( + thisArg: U, + ...args: RemainingArgs + ) => R extends [OrigThis, ...infer Rest] + ? [U, ...ConcatTuples] // Preserve bound args in return type + : R + : never; + +declare function callBind< + const T extends (this: any, ...args: any[]) => any, + Extracted extends ExtractFunctionParams, + const TBoundArgs extends Partial & readonly unknown[], + const TThis extends Extracted["thisArg"] +>( + args: [fn: T, thisArg: TThis, ...boundArgs: TBoundArgs] +): BindFunction; + +declare function callBind< + const T extends (this: any, ...args: any[]) => any, + Extracted extends ExtractFunctionParams, + const TBoundArgs extends Partial & readonly unknown[] +>( + args: [fn: T, ...boundArgs: TBoundArgs] +): BindFunction; + +declare function callBind( + args: [fn: Exclude, ...rest: TArgs] +): never; + +// export as namespace callBind; +export = callBind; diff --git a/node_modules/call-bind-apply-helpers/index.js b/node_modules/call-bind-apply-helpers/index.js new file mode 100644 index 0000000..2f6dab4 --- /dev/null +++ b/node_modules/call-bind-apply-helpers/index.js @@ -0,0 +1,15 @@ +'use strict'; + +var bind = require('function-bind'); +var $TypeError = require('es-errors/type'); + +var $call = require('./functionCall'); +var $actualApply = require('./actualApply'); + +/** @type {(args: [Function, thisArg?: unknown, ...args: unknown[]]) => Function} TODO FIXME, find a way to use import('.') */ +module.exports = function callBindBasic(args) { + if (args.length < 1 || typeof args[0] !== 'function') { + throw new $TypeError('a function is required'); + } + return $actualApply(bind, $call, args); +}; diff --git a/node_modules/call-bind-apply-helpers/package.json b/node_modules/call-bind-apply-helpers/package.json new file mode 100644 index 0000000..923b8be --- /dev/null +++ b/node_modules/call-bind-apply-helpers/package.json @@ -0,0 +1,85 @@ +{ + "name": "call-bind-apply-helpers", + "version": "1.0.2", + "description": "Helper functions around Function call/apply/bind, for use in `call-bind`", + "main": "index.js", + "exports": { + ".": "./index.js", + "./actualApply": "./actualApply.js", + "./applyBind": "./applyBind.js", + "./functionApply": "./functionApply.js", + "./functionCall": "./functionCall.js", + "./reflectApply": "./reflectApply.js", + "./package.json": "./package.json" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=auto", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "prelint": "evalmd README.md", + "lint": "eslint --ext=.js,.mjs .", + "postlint": "tsc -p . && attw -P", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "npx npm@'>=10.2' audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/call-bind-apply-helpers.git" + }, + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/call-bind-apply-helpers/issues" + }, + "homepage": "https://github.com/ljharb/call-bind-apply-helpers#readme", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.3", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.3", + "@types/for-each": "^0.3.3", + "@types/function-bind": "^1.1.10", + "@types/object-inspect": "^1.13.0", + "@types/tape": "^5.8.1", + "auto-changelog": "^2.5.0", + "encoding": "^0.1.13", + "es-value-fixtures": "^1.7.1", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "for-each": "^0.3.5", + "has-strict-mode": "^1.1.0", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "object-inspect": "^1.13.4", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "testling": { + "files": "test/index.js" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/node_modules/call-bind-apply-helpers/reflectApply.d.ts b/node_modules/call-bind-apply-helpers/reflectApply.d.ts new file mode 100644 index 0000000..6b2ae76 --- /dev/null +++ b/node_modules/call-bind-apply-helpers/reflectApply.d.ts @@ -0,0 +1,3 @@ +declare const reflectApply: false | typeof Reflect.apply; + +export = reflectApply; diff --git a/node_modules/call-bind-apply-helpers/reflectApply.js b/node_modules/call-bind-apply-helpers/reflectApply.js new file mode 100644 index 0000000..3d03caa --- /dev/null +++ b/node_modules/call-bind-apply-helpers/reflectApply.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./reflectApply')} */ +module.exports = typeof Reflect !== 'undefined' && Reflect && Reflect.apply; diff --git a/node_modules/call-bind-apply-helpers/test/index.js b/node_modules/call-bind-apply-helpers/test/index.js new file mode 100644 index 0000000..1cdc89e --- /dev/null +++ b/node_modules/call-bind-apply-helpers/test/index.js @@ -0,0 +1,63 @@ +'use strict'; + +var callBind = require('../'); +var hasStrictMode = require('has-strict-mode')(); +var forEach = require('for-each'); +var inspect = require('object-inspect'); +var v = require('es-value-fixtures'); + +var test = require('tape'); + +test('callBindBasic', function (t) { + forEach(v.nonFunctions, function (nonFunction) { + t['throws']( + // @ts-expect-error + function () { callBind([nonFunction]); }, + TypeError, + inspect(nonFunction) + ' is not a function' + ); + }); + + var sentinel = { sentinel: true }; + /** @type {(this: T, a: A, b: B) => [T | undefined, A, B]} */ + var func = function (a, b) { + // eslint-disable-next-line no-invalid-this + return [!hasStrictMode && this === global ? undefined : this, a, b]; + }; + t.equal(func.length, 2, 'original function length is 2'); + + /** type {(thisArg: unknown, a: number, b: number) => [unknown, number, number]} */ + var bound = callBind([func]); + /** type {((a: number, b: number) => [typeof sentinel, typeof a, typeof b])} */ + var boundR = callBind([func, sentinel]); + /** type {((b: number) => [typeof sentinel, number, typeof b])} */ + var boundArg = callBind([func, sentinel, /** @type {const} */ (1)]); + + // @ts-expect-error + t.deepEqual(bound(), [undefined, undefined, undefined], 'bound func with no args'); + + // @ts-expect-error + t.deepEqual(func(), [undefined, undefined, undefined], 'unbound func with too few args'); + // @ts-expect-error + t.deepEqual(bound(1, 2), [hasStrictMode ? 1 : Object(1), 2, undefined], 'bound func too few args'); + // @ts-expect-error + t.deepEqual(boundR(), [sentinel, undefined, undefined], 'bound func with receiver, with too few args'); + // @ts-expect-error + t.deepEqual(boundArg(), [sentinel, 1, undefined], 'bound func with receiver and arg, with too few args'); + + t.deepEqual(func(1, 2), [undefined, 1, 2], 'unbound func with right args'); + t.deepEqual(bound(1, 2, 3), [hasStrictMode ? 1 : Object(1), 2, 3], 'bound func with right args'); + t.deepEqual(boundR(1, 2), [sentinel, 1, 2], 'bound func with receiver, with right args'); + t.deepEqual(boundArg(2), [sentinel, 1, 2], 'bound func with receiver and arg, with right arg'); + + // @ts-expect-error + t.deepEqual(func(1, 2, 3), [undefined, 1, 2], 'unbound func with too many args'); + // @ts-expect-error + t.deepEqual(bound(1, 2, 3, 4), [hasStrictMode ? 1 : Object(1), 2, 3], 'bound func with too many args'); + // @ts-expect-error + t.deepEqual(boundR(1, 2, 3), [sentinel, 1, 2], 'bound func with receiver, with too many args'); + // @ts-expect-error + t.deepEqual(boundArg(2, 3), [sentinel, 1, 2], 'bound func with receiver and arg, with too many args'); + + t.end(); +}); diff --git a/node_modules/call-bind-apply-helpers/tsconfig.json b/node_modules/call-bind-apply-helpers/tsconfig.json new file mode 100644 index 0000000..aef9993 --- /dev/null +++ b/node_modules/call-bind-apply-helpers/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "es2021", + }, + "exclude": [ + "coverage", + ], +} \ No newline at end of file diff --git a/node_modules/cheerio-select/LICENSE b/node_modules/cheerio-select/LICENSE new file mode 100644 index 0000000..c464f86 --- /dev/null +++ b/node_modules/cheerio-select/LICENSE @@ -0,0 +1,11 @@ +Copyright (c) Felix Bรถhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/cheerio-select/README.md b/node_modules/cheerio-select/README.md new file mode 100644 index 0000000..140a661 --- /dev/null +++ b/node_modules/cheerio-select/README.md @@ -0,0 +1,18 @@ +# cheerio-select [![NPM version](http://img.shields.io/npm/v/cheerio-select.svg)](https://npmjs.org/package/cheerio-select) [![Build Status](https://travis-ci.org/cheeriojs/cheerio-select.svg?branch=master)](http://travis-ci.org/cheeriojs/cheerio-select) [![Downloads](https://img.shields.io/npm/dm/cheerio-select.svg)](https://npmjs.org/package/cheerio-select) [![Coverage](https://coveralls.io/repos/cheeriojs/cheerio-select/badge.svg?branch=master)](https://coveralls.io/r/cheeriojs/cheerio-select) + +CSS selector engine supporting jQuery selectors, based on [`css-select`](https://github.com/fb55/css-select). + +Supports all jQuery positional pseudo-selectors: + +- `:first` +- `:last` +- `:eq` +- `:nth` +- `:gt` +- `:lt` +- `:even` +- `:odd` +- `:not(:positional)`, where `:positional` is any of the above. + +This library is a thin wrapper around [`css-select`](https://github.com/fb55/css-select). +Only use this module if you will actually use jQuery positional selectors. diff --git a/node_modules/cheerio-select/lib/esm/helpers.d.ts b/node_modules/cheerio-select/lib/esm/helpers.d.ts new file mode 100644 index 0000000..13dba26 --- /dev/null +++ b/node_modules/cheerio-select/lib/esm/helpers.d.ts @@ -0,0 +1,5 @@ +import type { AnyNode } from "domhandler"; +import type { Selector } from "css-what"; +export declare function getDocumentRoot(node: AnyNode): AnyNode; +export declare function groupSelectors(selectors: Selector[][]): [plain: Selector[][], filtered: Selector[][]]; +//# sourceMappingURL=helpers.d.ts.map \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/esm/helpers.d.ts.map b/node_modules/cheerio-select/lib/esm/helpers.d.ts.map new file mode 100644 index 0000000..689bf8d --- /dev/null +++ b/node_modules/cheerio-select/lib/esm/helpers.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"helpers.d.ts","sourceRoot":"https://raw.githubusercontent.com/cheeriojs/cheerio-select/ef063a6ca4c3f0d02d2fc3505e750b6fb81c448d/src/","sources":["helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGzC,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAGtD;AAED,wBAAgB,cAAc,CAC1B,SAAS,EAAE,QAAQ,EAAE,EAAE,GACxB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,CAa/C"} \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/esm/helpers.js b/node_modules/cheerio-select/lib/esm/helpers.js new file mode 100644 index 0000000..1e5c8d5 --- /dev/null +++ b/node_modules/cheerio-select/lib/esm/helpers.js @@ -0,0 +1,20 @@ +import { isFilter } from "./positionals.js"; +export function getDocumentRoot(node) { + while (node.parent) + node = node.parent; + return node; +} +export function groupSelectors(selectors) { + const filteredSelectors = []; + const plainSelectors = []; + for (const selector of selectors) { + if (selector.some(isFilter)) { + filteredSelectors.push(selector); + } + else { + plainSelectors.push(selector); + } + } + return [plainSelectors, filteredSelectors]; +} +//# sourceMappingURL=helpers.js.map \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/esm/helpers.js.map b/node_modules/cheerio-select/lib/esm/helpers.js.map new file mode 100644 index 0000000..2ad294d --- /dev/null +++ b/node_modules/cheerio-select/lib/esm/helpers.js.map @@ -0,0 +1 @@ +{"version":3,"file":"helpers.js","sourceRoot":"https://raw.githubusercontent.com/cheeriojs/cheerio-select/ef063a6ca4c3f0d02d2fc3505e750b6fb81c448d/src/","sources":["helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,MAAM,UAAU,eAAe,CAAC,IAAa;IACzC,OAAO,IAAI,CAAC,MAAM;QAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;IACvC,OAAO,IAAI,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc,CAC1B,SAAuB;IAEvB,MAAM,iBAAiB,GAAiB,EAAE,CAAC;IAC3C,MAAM,cAAc,GAAiB,EAAE,CAAC;IAExC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE;QAC9B,IAAI,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE;YACzB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACpC;aAAM;YACH,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACjC;KACJ;IAED,OAAO,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;AAC/C,CAAC"} \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/esm/index.d.ts b/node_modules/cheerio-select/lib/esm/index.d.ts new file mode 100644 index 0000000..9b6baff --- /dev/null +++ b/node_modules/cheerio-select/lib/esm/index.d.ts @@ -0,0 +1,12 @@ +import { type Options as CSSSelectOptions } from "css-select"; +import type { Element, AnyNode, Document } from "domhandler"; +export { filters, pseudos, aliases } from "css-select"; +export interface Options extends CSSSelectOptions { + /** Optional reference to the root of the document. If not set, this will be computed when needed. */ + root?: Document; +} +export declare function is(element: Element, selector: string | ((el: Element) => boolean), options?: Options): boolean; +export declare function some(elements: Element[], selector: string | ((el: Element) => boolean), options?: Options): boolean; +export declare function filter(selector: string, elements: AnyNode[], options?: Options): Element[]; +export declare function select(selector: string | ((el: Element) => boolean), root: AnyNode | AnyNode[], options?: Options, limit?: number): Element[]; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/esm/index.d.ts.map b/node_modules/cheerio-select/lib/esm/index.d.ts.map new file mode 100644 index 0000000..4127f83 --- /dev/null +++ b/node_modules/cheerio-select/lib/esm/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"https://raw.githubusercontent.com/cheeriojs/cheerio-select/ef063a6ca4c3f0d02d2fc3505e750b6fb81c448d/src/","sources":["index.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,KAAK,OAAO,IAAI,gBAAgB,EAEnC,MAAM,YAAY,CAAC;AAGpB,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAU7D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAYvD,MAAM,WAAW,OAAQ,SAAQ,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;IAC/D,qGAAqG;IACrG,IAAI,CAAC,EAAE,QAAQ,CAAC;CACnB;AAED,wBAAgB,EAAE,CACd,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,EAC7C,OAAO,GAAE,OAAY,GACtB,OAAO,CAET;AAED,wBAAgB,IAAI,CAChB,QAAQ,EAAE,OAAO,EAAE,EACnB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,EAC7C,OAAO,GAAE,OAAY,GACtB,OAAO,CAWT;AAsCD,wBAAgB,MAAM,CAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,GAAE,OAAY,GACtB,OAAO,EAAE,CAEX;AAoGD,wBAAgB,MAAM,CAClB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,EAC7C,IAAI,EAAE,OAAO,GAAG,OAAO,EAAE,EACzB,OAAO,GAAE,OAAY,EACrB,KAAK,SAAW,GACjB,OAAO,EAAE,CA2BX"} \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/esm/index.js b/node_modules/cheerio-select/lib/esm/index.js new file mode 100644 index 0000000..ea6c7f0 --- /dev/null +++ b/node_modules/cheerio-select/lib/esm/index.js @@ -0,0 +1,241 @@ +import { parse, SelectorType, isTraversal } from "css-what"; +import { _compileToken as compileToken, prepareContext, } from "css-select"; +import * as DomUtils from "domutils"; +import * as boolbase from "boolbase"; +import { getDocumentRoot, groupSelectors } from "./helpers.js"; +import { isFilter, getLimit, } from "./positionals.js"; +// Re-export pseudo extension points +export { filters, pseudos, aliases } from "css-select"; +const UNIVERSAL_SELECTOR = { + type: SelectorType.Universal, + namespace: null, +}; +const SCOPE_PSEUDO = { + type: SelectorType.Pseudo, + name: "scope", + data: null, +}; +export function is(element, selector, options = {}) { + return some([element], selector, options); +} +export function some(elements, selector, options = {}) { + if (typeof selector === "function") + return elements.some(selector); + const [plain, filtered] = groupSelectors(parse(selector)); + return ((plain.length > 0 && elements.some(compileToken(plain, options))) || + filtered.some((sel) => filterBySelector(sel, elements, options).length > 0)); +} +function filterByPosition(filter, elems, data, options) { + const num = typeof data === "string" ? parseInt(data, 10) : NaN; + switch (filter) { + case "first": + case "lt": + // Already done in `getLimit` + return elems; + case "last": + return elems.length > 0 ? [elems[elems.length - 1]] : elems; + case "nth": + case "eq": + return isFinite(num) && Math.abs(num) < elems.length + ? [num < 0 ? elems[elems.length + num] : elems[num]] + : []; + case "gt": + return isFinite(num) ? elems.slice(num + 1) : []; + case "even": + return elems.filter((_, i) => i % 2 === 0); + case "odd": + return elems.filter((_, i) => i % 2 === 1); + case "not": { + const filtered = new Set(filterParsed(data, elems, options)); + return elems.filter((e) => !filtered.has(e)); + } + } +} +export function filter(selector, elements, options = {}) { + return filterParsed(parse(selector), elements, options); +} +/** + * Filter a set of elements by a selector. + * + * Will return elements in the original order. + * + * @param selector Selector to filter by. + * @param elements Elements to filter. + * @param options Options for selector. + */ +function filterParsed(selector, elements, options) { + if (elements.length === 0) + return []; + const [plainSelectors, filteredSelectors] = groupSelectors(selector); + let found; + if (plainSelectors.length) { + const filtered = filterElements(elements, plainSelectors, options); + // If there are no filters, just return + if (filteredSelectors.length === 0) { + return filtered; + } + // Otherwise, we have to do some filtering + if (filtered.length) { + found = new Set(filtered); + } + } + for (let i = 0; i < filteredSelectors.length && (found === null || found === void 0 ? void 0 : found.size) !== elements.length; i++) { + const filteredSelector = filteredSelectors[i]; + const missing = found + ? elements.filter((e) => DomUtils.isTag(e) && !found.has(e)) + : elements; + if (missing.length === 0) + break; + const filtered = filterBySelector(filteredSelector, elements, options); + if (filtered.length) { + if (!found) { + /* + * If we haven't found anything before the last selector, + * just return what we found now. + */ + if (i === filteredSelectors.length - 1) { + return filtered; + } + found = new Set(filtered); + } + else { + filtered.forEach((el) => found.add(el)); + } + } + } + return typeof found !== "undefined" + ? (found.size === elements.length + ? elements + : // Filter elements to preserve order + elements.filter((el) => found.has(el))) + : []; +} +function filterBySelector(selector, elements, options) { + var _a; + if (selector.some(isTraversal)) { + /* + * Get root node, run selector with the scope + * set to all of our nodes. + */ + const root = (_a = options.root) !== null && _a !== void 0 ? _a : getDocumentRoot(elements[0]); + const opts = { ...options, context: elements, relativeSelector: false }; + selector.push(SCOPE_PSEUDO); + return findFilterElements(root, selector, opts, true, elements.length); + } + // Performance optimization: If we don't have to traverse, just filter set. + return findFilterElements(elements, selector, options, false, elements.length); +} +export function select(selector, root, options = {}, limit = Infinity) { + if (typeof selector === "function") { + return find(root, selector); + } + const [plain, filtered] = groupSelectors(parse(selector)); + const results = filtered.map((sel) => findFilterElements(root, sel, options, true, limit)); + // Plain selectors can be queried in a single go + if (plain.length) { + results.push(findElements(root, plain, options, limit)); + } + if (results.length === 0) { + return []; + } + // If there was only a single selector, just return the result + if (results.length === 1) { + return results[0]; + } + // Sort results, filtering for duplicates + return DomUtils.uniqueSort(results.reduce((a, b) => [...a, ...b])); +} +/** + * + * @param root Element(s) to search from. + * @param selector Selector to look for. + * @param options Options for querying. + * @param queryForSelector Query multiple levels deep for the initial selector, even if it doesn't contain a traversal. + */ +function findFilterElements(root, selector, options, queryForSelector, totalLimit) { + const filterIndex = selector.findIndex(isFilter); + const sub = selector.slice(0, filterIndex); + const filter = selector[filterIndex]; + // If we are at the end of the selector, we can limit the number of elements to retrieve. + const partLimit = selector.length - 1 === filterIndex ? totalLimit : Infinity; + /* + * Set the number of elements to retrieve. + * Eg. for :first, we only have to get a single element. + */ + const limit = getLimit(filter.name, filter.data, partLimit); + if (limit === 0) + return []; + /* + * Skip `findElements` call if our selector starts with a positional + * pseudo. + */ + const elemsNoLimit = sub.length === 0 && !Array.isArray(root) + ? DomUtils.getChildren(root).filter(DomUtils.isTag) + : sub.length === 0 + ? (Array.isArray(root) ? root : [root]).filter(DomUtils.isTag) + : queryForSelector || sub.some(isTraversal) + ? findElements(root, [sub], options, limit) + : filterElements(root, [sub], options); + const elems = elemsNoLimit.slice(0, limit); + let result = filterByPosition(filter.name, elems, filter.data, options); + if (result.length === 0 || selector.length === filterIndex + 1) { + return result; + } + const remainingSelector = selector.slice(filterIndex + 1); + const remainingHasTraversal = remainingSelector.some(isTraversal); + if (remainingHasTraversal) { + if (isTraversal(remainingSelector[0])) { + const { type } = remainingSelector[0]; + if (type === SelectorType.Sibling || + type === SelectorType.Adjacent) { + // If we have a sibling traversal, we need to also look at the siblings. + result = prepareContext(result, DomUtils, true); + } + // Avoid a traversal-first selector error. + remainingSelector.unshift(UNIVERSAL_SELECTOR); + } + options = { + ...options, + // Avoid absolutizing the selector + relativeSelector: false, + /* + * Add a custom root func, to make sure traversals don't match elements + * that aren't a part of the considered tree. + */ + rootFunc: (el) => result.includes(el), + }; + } + else if (options.rootFunc && options.rootFunc !== boolbase.trueFunc) { + options = { ...options, rootFunc: boolbase.trueFunc }; + } + /* + * If we have another filter, recursively call `findFilterElements`, + * with the `recursive` flag disabled. We only have to look for more + * elements when we see a traversal. + * + * Otherwise, + */ + return remainingSelector.some(isFilter) + ? findFilterElements(result, remainingSelector, options, false, totalLimit) + : remainingHasTraversal + ? // Query existing elements to resolve traversal. + findElements(result, [remainingSelector], options, totalLimit) + : // If we don't have any more traversals, simply filter elements. + filterElements(result, [remainingSelector], options); +} +function findElements(root, sel, options, limit) { + const query = compileToken(sel, options, root); + return find(root, query, limit); +} +function find(root, query, limit = Infinity) { + const elems = prepareContext(root, DomUtils, query.shouldTestNextSiblings); + return DomUtils.find((node) => DomUtils.isTag(node) && query(node), elems, true, limit); +} +function filterElements(elements, sel, options) { + const els = (Array.isArray(elements) ? elements : [elements]).filter(DomUtils.isTag); + if (els.length === 0) + return els; + const query = compileToken(sel, options); + return query === boolbase.trueFunc ? els : els.filter(query); +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/esm/index.js.map b/node_modules/cheerio-select/lib/esm/index.js.map new file mode 100644 index 0000000..ed9f158 --- /dev/null +++ b/node_modules/cheerio-select/lib/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"https://raw.githubusercontent.com/cheeriojs/cheerio-select/ef063a6ca4c3f0d02d2fc3505e750b6fb81c448d/src/","sources":["index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/esm/package.json b/node_modules/cheerio-select/lib/esm/package.json new file mode 100644 index 0000000..089153b --- /dev/null +++ b/node_modules/cheerio-select/lib/esm/package.json @@ -0,0 +1 @@ +{"type":"module"} diff --git a/node_modules/cheerio-select/lib/esm/positionals.d.ts b/node_modules/cheerio-select/lib/esm/positionals.d.ts new file mode 100644 index 0000000..5315dd3 --- /dev/null +++ b/node_modules/cheerio-select/lib/esm/positionals.d.ts @@ -0,0 +1,10 @@ +import type { Selector, PseudoSelector } from "css-what"; +export declare type Filter = "first" | "last" | "eq" | "nth" | "gt" | "lt" | "even" | "odd" | "not"; +export declare const filterNames: Set; +export interface CheerioSelector extends PseudoSelector { + name: Filter; + data: string | null; +} +export declare function isFilter(s: Selector): s is CheerioSelector; +export declare function getLimit(filter: Filter, data: string | null, partLimit: number): number; +//# sourceMappingURL=positionals.d.ts.map \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/esm/positionals.d.ts.map b/node_modules/cheerio-select/lib/esm/positionals.d.ts.map new file mode 100644 index 0000000..0e0db37 --- /dev/null +++ b/node_modules/cheerio-select/lib/esm/positionals.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"positionals.d.ts","sourceRoot":"https://raw.githubusercontent.com/cheeriojs/cheerio-select/ef063a6ca4c3f0d02d2fc3505e750b6fb81c448d/src/","sources":["positionals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEzD,oBAAY,MAAM,GACZ,OAAO,GACP,MAAM,GACN,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,MAAM,GACN,KAAK,GACL,KAAK,CAAC;AACZ,eAAO,MAAM,WAAW,EAAE,GAAG,CAAC,MAAM,CASlC,CAAC;AAEH,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,IAAI,eAAe,CAS1D;AAED,wBAAgB,QAAQ,CACpB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,SAAS,EAAE,MAAM,GAClB,MAAM,CAyBR"} \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/esm/positionals.js b/node_modules/cheerio-select/lib/esm/positionals.js new file mode 100644 index 0000000..61f5d6e --- /dev/null +++ b/node_modules/cheerio-select/lib/esm/positionals.js @@ -0,0 +1,47 @@ +export const filterNames = new Set([ + "first", + "last", + "eq", + "gt", + "nth", + "lt", + "even", + "odd", +]); +export function isFilter(s) { + if (s.type !== "pseudo") + return false; + if (filterNames.has(s.name)) + return true; + if (s.name === "not" && Array.isArray(s.data)) { + // Only consider `:not` with embedded filters + return s.data.some((s) => s.some(isFilter)); + } + return false; +} +export function getLimit(filter, data, partLimit) { + const num = data != null ? parseInt(data, 10) : NaN; + switch (filter) { + case "first": + return 1; + case "nth": + case "eq": + return isFinite(num) ? (num >= 0 ? num + 1 : Infinity) : 0; + case "lt": + return isFinite(num) + ? num >= 0 + ? Math.min(num, partLimit) + : Infinity + : 0; + case "gt": + return isFinite(num) ? Infinity : 0; + case "odd": + return 2 * partLimit; + case "even": + return 2 * partLimit - 1; + case "last": + case "not": + return Infinity; + } +} +//# sourceMappingURL=positionals.js.map \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/esm/positionals.js.map b/node_modules/cheerio-select/lib/esm/positionals.js.map new file mode 100644 index 0000000..0b26c24 --- /dev/null +++ b/node_modules/cheerio-select/lib/esm/positionals.js.map @@ -0,0 +1 @@ +{"version":3,"file":"positionals.js","sourceRoot":"https://raw.githubusercontent.com/cheeriojs/cheerio-select/ef063a6ca4c3f0d02d2fc3505e750b6fb81c448d/src/","sources":["positionals.ts"],"names":[],"mappings":"AAYA,MAAM,CAAC,MAAM,WAAW,GAAgB,IAAI,GAAG,CAAS;IACpD,OAAO;IACP,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,MAAM;IACN,KAAK;CACR,CAAC,CAAC;AAOH,MAAM,UAAU,QAAQ,CAAC,CAAW;IAChC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;QAC3C,6CAA6C;QAC7C,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;KAC/C;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,QAAQ,CACpB,MAAc,EACd,IAAmB,EACnB,SAAiB;IAEjB,MAAM,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAEpD,QAAQ,MAAM,EAAE;QACZ,KAAK,OAAO;YACR,OAAO,CAAC,CAAC;QACb,KAAK,KAAK,CAAC;QACX,KAAK,IAAI;YACL,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,KAAK,IAAI;YACL,OAAO,QAAQ,CAAC,GAAG,CAAC;gBAChB,CAAC,CAAC,GAAG,IAAI,CAAC;oBACN,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC;oBAC1B,CAAC,CAAC,QAAQ;gBACd,CAAC,CAAC,CAAC,CAAC;QACZ,KAAK,IAAI;YACL,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,KAAK,KAAK;YACN,OAAO,CAAC,GAAG,SAAS,CAAC;QACzB,KAAK,MAAM;YACP,OAAO,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;QAC7B,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK;YACN,OAAO,QAAQ,CAAC;KACvB;AACL,CAAC"} \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/helpers.d.ts b/node_modules/cheerio-select/lib/helpers.d.ts new file mode 100644 index 0000000..13dba26 --- /dev/null +++ b/node_modules/cheerio-select/lib/helpers.d.ts @@ -0,0 +1,5 @@ +import type { AnyNode } from "domhandler"; +import type { Selector } from "css-what"; +export declare function getDocumentRoot(node: AnyNode): AnyNode; +export declare function groupSelectors(selectors: Selector[][]): [plain: Selector[][], filtered: Selector[][]]; +//# sourceMappingURL=helpers.d.ts.map \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/helpers.d.ts.map b/node_modules/cheerio-select/lib/helpers.d.ts.map new file mode 100644 index 0000000..689bf8d --- /dev/null +++ b/node_modules/cheerio-select/lib/helpers.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"helpers.d.ts","sourceRoot":"https://raw.githubusercontent.com/cheeriojs/cheerio-select/ef063a6ca4c3f0d02d2fc3505e750b6fb81c448d/src/","sources":["helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGzC,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAGtD;AAED,wBAAgB,cAAc,CAC1B,SAAS,EAAE,QAAQ,EAAE,EAAE,GACxB,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,CAAC,CAa/C"} \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/helpers.js b/node_modules/cheerio-select/lib/helpers.js new file mode 100644 index 0000000..f996a6c --- /dev/null +++ b/node_modules/cheerio-select/lib/helpers.js @@ -0,0 +1,26 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.groupSelectors = exports.getDocumentRoot = void 0; +var positionals_js_1 = require("./positionals.js"); +function getDocumentRoot(node) { + while (node.parent) + node = node.parent; + return node; +} +exports.getDocumentRoot = getDocumentRoot; +function groupSelectors(selectors) { + var filteredSelectors = []; + var plainSelectors = []; + for (var _i = 0, selectors_1 = selectors; _i < selectors_1.length; _i++) { + var selector = selectors_1[_i]; + if (selector.some(positionals_js_1.isFilter)) { + filteredSelectors.push(selector); + } + else { + plainSelectors.push(selector); + } + } + return [plainSelectors, filteredSelectors]; +} +exports.groupSelectors = groupSelectors; +//# sourceMappingURL=helpers.js.map \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/helpers.js.map b/node_modules/cheerio-select/lib/helpers.js.map new file mode 100644 index 0000000..95bf143 --- /dev/null +++ b/node_modules/cheerio-select/lib/helpers.js.map @@ -0,0 +1 @@ +{"version":3,"file":"helpers.js","sourceRoot":"https://raw.githubusercontent.com/cheeriojs/cheerio-select/ef063a6ca4c3f0d02d2fc3505e750b6fb81c448d/src/","sources":["helpers.ts"],"names":[],"mappings":";;;AAEA,mDAA4C;AAE5C,SAAgB,eAAe,CAAC,IAAa;IACzC,OAAO,IAAI,CAAC,MAAM;QAAE,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC;IACvC,OAAO,IAAI,CAAC;AAChB,CAAC;AAHD,0CAGC;AAED,SAAgB,cAAc,CAC1B,SAAuB;IAEvB,IAAM,iBAAiB,GAAiB,EAAE,CAAC;IAC3C,IAAM,cAAc,GAAiB,EAAE,CAAC;IAExC,KAAuB,UAAS,EAAT,uBAAS,EAAT,uBAAS,EAAT,IAAS,EAAE;QAA7B,IAAM,QAAQ,kBAAA;QACf,IAAI,QAAQ,CAAC,IAAI,CAAC,yBAAQ,CAAC,EAAE;YACzB,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACpC;aAAM;YACH,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;SACjC;KACJ;IAED,OAAO,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;AAC/C,CAAC;AAfD,wCAeC"} \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/index.d.ts b/node_modules/cheerio-select/lib/index.d.ts new file mode 100644 index 0000000..9b6baff --- /dev/null +++ b/node_modules/cheerio-select/lib/index.d.ts @@ -0,0 +1,12 @@ +import { type Options as CSSSelectOptions } from "css-select"; +import type { Element, AnyNode, Document } from "domhandler"; +export { filters, pseudos, aliases } from "css-select"; +export interface Options extends CSSSelectOptions { + /** Optional reference to the root of the document. If not set, this will be computed when needed. */ + root?: Document; +} +export declare function is(element: Element, selector: string | ((el: Element) => boolean), options?: Options): boolean; +export declare function some(elements: Element[], selector: string | ((el: Element) => boolean), options?: Options): boolean; +export declare function filter(selector: string, elements: AnyNode[], options?: Options): Element[]; +export declare function select(selector: string | ((el: Element) => boolean), root: AnyNode | AnyNode[], options?: Options, limit?: number): Element[]; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/index.d.ts.map b/node_modules/cheerio-select/lib/index.d.ts.map new file mode 100644 index 0000000..4127f83 --- /dev/null +++ b/node_modules/cheerio-select/lib/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"https://raw.githubusercontent.com/cheeriojs/cheerio-select/ef063a6ca4c3f0d02d2fc3505e750b6fb81c448d/src/","sources":["index.ts"],"names":[],"mappings":"AACA,OAAO,EAEH,KAAK,OAAO,IAAI,gBAAgB,EAEnC,MAAM,YAAY,CAAC;AAGpB,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAU7D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAYvD,MAAM,WAAW,OAAQ,SAAQ,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC;IAC/D,qGAAqG;IACrG,IAAI,CAAC,EAAE,QAAQ,CAAC;CACnB;AAED,wBAAgB,EAAE,CACd,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,EAC7C,OAAO,GAAE,OAAY,GACtB,OAAO,CAET;AAED,wBAAgB,IAAI,CAChB,QAAQ,EAAE,OAAO,EAAE,EACnB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,EAC7C,OAAO,GAAE,OAAY,GACtB,OAAO,CAWT;AAsCD,wBAAgB,MAAM,CAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,OAAO,EAAE,EACnB,OAAO,GAAE,OAAY,GACtB,OAAO,EAAE,CAEX;AAoGD,wBAAgB,MAAM,CAClB,QAAQ,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,CAAC,EAC7C,IAAI,EAAE,OAAO,GAAG,OAAO,EAAE,EACzB,OAAO,GAAE,OAAY,EACrB,KAAK,SAAW,GACjB,OAAO,EAAE,CA2BX"} \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/index.js b/node_modules/cheerio-select/lib/index.js new file mode 100644 index 0000000..9366d71 --- /dev/null +++ b/node_modules/cheerio-select/lib/index.js @@ -0,0 +1,302 @@ +"use strict"; +var __assign = (this && this.__assign) || function () { + __assign = Object.assign || function(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) + t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); +}; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.select = exports.filter = exports.some = exports.is = exports.aliases = exports.pseudos = exports.filters = void 0; +var css_what_1 = require("css-what"); +var css_select_1 = require("css-select"); +var DomUtils = __importStar(require("domutils")); +var boolbase = __importStar(require("boolbase")); +var helpers_js_1 = require("./helpers.js"); +var positionals_js_1 = require("./positionals.js"); +// Re-export pseudo extension points +var css_select_2 = require("css-select"); +Object.defineProperty(exports, "filters", { enumerable: true, get: function () { return css_select_2.filters; } }); +Object.defineProperty(exports, "pseudos", { enumerable: true, get: function () { return css_select_2.pseudos; } }); +Object.defineProperty(exports, "aliases", { enumerable: true, get: function () { return css_select_2.aliases; } }); +var UNIVERSAL_SELECTOR = { + type: css_what_1.SelectorType.Universal, + namespace: null, +}; +var SCOPE_PSEUDO = { + type: css_what_1.SelectorType.Pseudo, + name: "scope", + data: null, +}; +function is(element, selector, options) { + if (options === void 0) { options = {}; } + return some([element], selector, options); +} +exports.is = is; +function some(elements, selector, options) { + if (options === void 0) { options = {}; } + if (typeof selector === "function") + return elements.some(selector); + var _a = (0, helpers_js_1.groupSelectors)((0, css_what_1.parse)(selector)), plain = _a[0], filtered = _a[1]; + return ((plain.length > 0 && elements.some((0, css_select_1._compileToken)(plain, options))) || + filtered.some(function (sel) { return filterBySelector(sel, elements, options).length > 0; })); +} +exports.some = some; +function filterByPosition(filter, elems, data, options) { + var num = typeof data === "string" ? parseInt(data, 10) : NaN; + switch (filter) { + case "first": + case "lt": + // Already done in `getLimit` + return elems; + case "last": + return elems.length > 0 ? [elems[elems.length - 1]] : elems; + case "nth": + case "eq": + return isFinite(num) && Math.abs(num) < elems.length + ? [num < 0 ? elems[elems.length + num] : elems[num]] + : []; + case "gt": + return isFinite(num) ? elems.slice(num + 1) : []; + case "even": + return elems.filter(function (_, i) { return i % 2 === 0; }); + case "odd": + return elems.filter(function (_, i) { return i % 2 === 1; }); + case "not": { + var filtered_1 = new Set(filterParsed(data, elems, options)); + return elems.filter(function (e) { return !filtered_1.has(e); }); + } + } +} +function filter(selector, elements, options) { + if (options === void 0) { options = {}; } + return filterParsed((0, css_what_1.parse)(selector), elements, options); +} +exports.filter = filter; +/** + * Filter a set of elements by a selector. + * + * Will return elements in the original order. + * + * @param selector Selector to filter by. + * @param elements Elements to filter. + * @param options Options for selector. + */ +function filterParsed(selector, elements, options) { + if (elements.length === 0) + return []; + var _a = (0, helpers_js_1.groupSelectors)(selector), plainSelectors = _a[0], filteredSelectors = _a[1]; + var found; + if (plainSelectors.length) { + var filtered = filterElements(elements, plainSelectors, options); + // If there are no filters, just return + if (filteredSelectors.length === 0) { + return filtered; + } + // Otherwise, we have to do some filtering + if (filtered.length) { + found = new Set(filtered); + } + } + for (var i = 0; i < filteredSelectors.length && (found === null || found === void 0 ? void 0 : found.size) !== elements.length; i++) { + var filteredSelector = filteredSelectors[i]; + var missing = found + ? elements.filter(function (e) { return DomUtils.isTag(e) && !found.has(e); }) + : elements; + if (missing.length === 0) + break; + var filtered = filterBySelector(filteredSelector, elements, options); + if (filtered.length) { + if (!found) { + /* + * If we haven't found anything before the last selector, + * just return what we found now. + */ + if (i === filteredSelectors.length - 1) { + return filtered; + } + found = new Set(filtered); + } + else { + filtered.forEach(function (el) { return found.add(el); }); + } + } + } + return typeof found !== "undefined" + ? (found.size === elements.length + ? elements + : // Filter elements to preserve order + elements.filter(function (el) { + return found.has(el); + })) + : []; +} +function filterBySelector(selector, elements, options) { + var _a; + if (selector.some(css_what_1.isTraversal)) { + /* + * Get root node, run selector with the scope + * set to all of our nodes. + */ + var root = (_a = options.root) !== null && _a !== void 0 ? _a : (0, helpers_js_1.getDocumentRoot)(elements[0]); + var opts = __assign(__assign({}, options), { context: elements, relativeSelector: false }); + selector.push(SCOPE_PSEUDO); + return findFilterElements(root, selector, opts, true, elements.length); + } + // Performance optimization: If we don't have to traverse, just filter set. + return findFilterElements(elements, selector, options, false, elements.length); +} +function select(selector, root, options, limit) { + if (options === void 0) { options = {}; } + if (limit === void 0) { limit = Infinity; } + if (typeof selector === "function") { + return find(root, selector); + } + var _a = (0, helpers_js_1.groupSelectors)((0, css_what_1.parse)(selector)), plain = _a[0], filtered = _a[1]; + var results = filtered.map(function (sel) { + return findFilterElements(root, sel, options, true, limit); + }); + // Plain selectors can be queried in a single go + if (plain.length) { + results.push(findElements(root, plain, options, limit)); + } + if (results.length === 0) { + return []; + } + // If there was only a single selector, just return the result + if (results.length === 1) { + return results[0]; + } + // Sort results, filtering for duplicates + return DomUtils.uniqueSort(results.reduce(function (a, b) { return __spreadArray(__spreadArray([], a, true), b, true); })); +} +exports.select = select; +/** + * + * @param root Element(s) to search from. + * @param selector Selector to look for. + * @param options Options for querying. + * @param queryForSelector Query multiple levels deep for the initial selector, even if it doesn't contain a traversal. + */ +function findFilterElements(root, selector, options, queryForSelector, totalLimit) { + var filterIndex = selector.findIndex(positionals_js_1.isFilter); + var sub = selector.slice(0, filterIndex); + var filter = selector[filterIndex]; + // If we are at the end of the selector, we can limit the number of elements to retrieve. + var partLimit = selector.length - 1 === filterIndex ? totalLimit : Infinity; + /* + * Set the number of elements to retrieve. + * Eg. for :first, we only have to get a single element. + */ + var limit = (0, positionals_js_1.getLimit)(filter.name, filter.data, partLimit); + if (limit === 0) + return []; + /* + * Skip `findElements` call if our selector starts with a positional + * pseudo. + */ + var elemsNoLimit = sub.length === 0 && !Array.isArray(root) + ? DomUtils.getChildren(root).filter(DomUtils.isTag) + : sub.length === 0 + ? (Array.isArray(root) ? root : [root]).filter(DomUtils.isTag) + : queryForSelector || sub.some(css_what_1.isTraversal) + ? findElements(root, [sub], options, limit) + : filterElements(root, [sub], options); + var elems = elemsNoLimit.slice(0, limit); + var result = filterByPosition(filter.name, elems, filter.data, options); + if (result.length === 0 || selector.length === filterIndex + 1) { + return result; + } + var remainingSelector = selector.slice(filterIndex + 1); + var remainingHasTraversal = remainingSelector.some(css_what_1.isTraversal); + if (remainingHasTraversal) { + if ((0, css_what_1.isTraversal)(remainingSelector[0])) { + var type = remainingSelector[0].type; + if (type === css_what_1.SelectorType.Sibling || + type === css_what_1.SelectorType.Adjacent) { + // If we have a sibling traversal, we need to also look at the siblings. + result = (0, css_select_1.prepareContext)(result, DomUtils, true); + } + // Avoid a traversal-first selector error. + remainingSelector.unshift(UNIVERSAL_SELECTOR); + } + options = __assign(__assign({}, options), { + // Avoid absolutizing the selector + relativeSelector: false, + /* + * Add a custom root func, to make sure traversals don't match elements + * that aren't a part of the considered tree. + */ + rootFunc: function (el) { return result.includes(el); } }); + } + else if (options.rootFunc && options.rootFunc !== boolbase.trueFunc) { + options = __assign(__assign({}, options), { rootFunc: boolbase.trueFunc }); + } + /* + * If we have another filter, recursively call `findFilterElements`, + * with the `recursive` flag disabled. We only have to look for more + * elements when we see a traversal. + * + * Otherwise, + */ + return remainingSelector.some(positionals_js_1.isFilter) + ? findFilterElements(result, remainingSelector, options, false, totalLimit) + : remainingHasTraversal + ? // Query existing elements to resolve traversal. + findElements(result, [remainingSelector], options, totalLimit) + : // If we don't have any more traversals, simply filter elements. + filterElements(result, [remainingSelector], options); +} +function findElements(root, sel, options, limit) { + var query = (0, css_select_1._compileToken)(sel, options, root); + return find(root, query, limit); +} +function find(root, query, limit) { + if (limit === void 0) { limit = Infinity; } + var elems = (0, css_select_1.prepareContext)(root, DomUtils, query.shouldTestNextSiblings); + return DomUtils.find(function (node) { return DomUtils.isTag(node) && query(node); }, elems, true, limit); +} +function filterElements(elements, sel, options) { + var els = (Array.isArray(elements) ? elements : [elements]).filter(DomUtils.isTag); + if (els.length === 0) + return els; + var query = (0, css_select_1._compileToken)(sel, options); + return query === boolbase.trueFunc ? els : els.filter(query); +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/index.js.map b/node_modules/cheerio-select/lib/index.js.map new file mode 100644 index 0000000..19a157e --- /dev/null +++ b/node_modules/cheerio-select/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"https://raw.githubusercontent.com/cheeriojs/cheerio-select/ef063a6ca4c3f0d02d2fc3505e750b6fb81c448d/src/","sources":["index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/positionals.d.ts b/node_modules/cheerio-select/lib/positionals.d.ts new file mode 100644 index 0000000..5315dd3 --- /dev/null +++ b/node_modules/cheerio-select/lib/positionals.d.ts @@ -0,0 +1,10 @@ +import type { Selector, PseudoSelector } from "css-what"; +export declare type Filter = "first" | "last" | "eq" | "nth" | "gt" | "lt" | "even" | "odd" | "not"; +export declare const filterNames: Set; +export interface CheerioSelector extends PseudoSelector { + name: Filter; + data: string | null; +} +export declare function isFilter(s: Selector): s is CheerioSelector; +export declare function getLimit(filter: Filter, data: string | null, partLimit: number): number; +//# sourceMappingURL=positionals.d.ts.map \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/positionals.d.ts.map b/node_modules/cheerio-select/lib/positionals.d.ts.map new file mode 100644 index 0000000..0e0db37 --- /dev/null +++ b/node_modules/cheerio-select/lib/positionals.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"positionals.d.ts","sourceRoot":"https://raw.githubusercontent.com/cheeriojs/cheerio-select/ef063a6ca4c3f0d02d2fc3505e750b6fb81c448d/src/","sources":["positionals.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAEzD,oBAAY,MAAM,GACZ,OAAO,GACP,MAAM,GACN,IAAI,GACJ,KAAK,GACL,IAAI,GACJ,IAAI,GACJ,MAAM,GACN,KAAK,GACL,KAAK,CAAC;AACZ,eAAO,MAAM,WAAW,EAAE,GAAG,CAAC,MAAM,CASlC,CAAC;AAEH,MAAM,WAAW,eAAgB,SAAQ,cAAc;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,GAAG,CAAC,IAAI,eAAe,CAS1D;AAED,wBAAgB,QAAQ,CACpB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,SAAS,EAAE,MAAM,GAClB,MAAM,CAyBR"} \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/positionals.js b/node_modules/cheerio-select/lib/positionals.js new file mode 100644 index 0000000..754bb25 --- /dev/null +++ b/node_modules/cheerio-select/lib/positionals.js @@ -0,0 +1,52 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.getLimit = exports.isFilter = exports.filterNames = void 0; +exports.filterNames = new Set([ + "first", + "last", + "eq", + "gt", + "nth", + "lt", + "even", + "odd", +]); +function isFilter(s) { + if (s.type !== "pseudo") + return false; + if (exports.filterNames.has(s.name)) + return true; + if (s.name === "not" && Array.isArray(s.data)) { + // Only consider `:not` with embedded filters + return s.data.some(function (s) { return s.some(isFilter); }); + } + return false; +} +exports.isFilter = isFilter; +function getLimit(filter, data, partLimit) { + var num = data != null ? parseInt(data, 10) : NaN; + switch (filter) { + case "first": + return 1; + case "nth": + case "eq": + return isFinite(num) ? (num >= 0 ? num + 1 : Infinity) : 0; + case "lt": + return isFinite(num) + ? num >= 0 + ? Math.min(num, partLimit) + : Infinity + : 0; + case "gt": + return isFinite(num) ? Infinity : 0; + case "odd": + return 2 * partLimit; + case "even": + return 2 * partLimit - 1; + case "last": + case "not": + return Infinity; + } +} +exports.getLimit = getLimit; +//# sourceMappingURL=positionals.js.map \ No newline at end of file diff --git a/node_modules/cheerio-select/lib/positionals.js.map b/node_modules/cheerio-select/lib/positionals.js.map new file mode 100644 index 0000000..eed1e88 --- /dev/null +++ b/node_modules/cheerio-select/lib/positionals.js.map @@ -0,0 +1 @@ +{"version":3,"file":"positionals.js","sourceRoot":"https://raw.githubusercontent.com/cheeriojs/cheerio-select/ef063a6ca4c3f0d02d2fc3505e750b6fb81c448d/src/","sources":["positionals.ts"],"names":[],"mappings":";;;AAYa,QAAA,WAAW,GAAgB,IAAI,GAAG,CAAS;IACpD,OAAO;IACP,MAAM;IACN,IAAI;IACJ,IAAI;IACJ,KAAK;IACL,IAAI;IACJ,MAAM;IACN,KAAK;CACR,CAAC,CAAC;AAOH,SAAgB,QAAQ,CAAC,CAAW;IAChC,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,mBAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;QAC3C,6CAA6C;QAC7C,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAhB,CAAgB,CAAC,CAAC;KAC/C;IAED,OAAO,KAAK,CAAC;AACjB,CAAC;AATD,4BASC;AAED,SAAgB,QAAQ,CACpB,MAAc,EACd,IAAmB,EACnB,SAAiB;IAEjB,IAAM,GAAG,GAAG,IAAI,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;IAEpD,QAAQ,MAAM,EAAE;QACZ,KAAK,OAAO;YACR,OAAO,CAAC,CAAC;QACb,KAAK,KAAK,CAAC;QACX,KAAK,IAAI;YACL,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/D,KAAK,IAAI;YACL,OAAO,QAAQ,CAAC,GAAG,CAAC;gBAChB,CAAC,CAAC,GAAG,IAAI,CAAC;oBACN,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,CAAC;oBAC1B,CAAC,CAAC,QAAQ;gBACd,CAAC,CAAC,CAAC,CAAC;QACZ,KAAK,IAAI;YACL,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACxC,KAAK,KAAK;YACN,OAAO,CAAC,GAAG,SAAS,CAAC;QACzB,KAAK,MAAM;YACP,OAAO,CAAC,GAAG,SAAS,GAAG,CAAC,CAAC;QAC7B,KAAK,MAAM,CAAC;QACZ,KAAK,KAAK;YACN,OAAO,QAAQ,CAAC;KACvB;AACL,CAAC;AA7BD,4BA6BC"} \ No newline at end of file diff --git a/node_modules/cheerio-select/package.json b/node_modules/cheerio-select/package.json new file mode 100644 index 0000000..96b34cb --- /dev/null +++ b/node_modules/cheerio-select/package.json @@ -0,0 +1,76 @@ +{ + "name": "cheerio-select", + "description": "CSS selector engine supporting jQuery selectors", + "version": "2.1.0", + "author": "Felix Boehm ", + "funding": { + "url": "https://github.com/sponsors/fb55" + }, + "license": "BSD-2-Clause", + "sideEffects": false, + "repository": { + "type": "git", + "url": "git://github.com/cheeriojs/cheerio-select.git" + }, + "directories": { + "lib": "lib/" + }, + "main": "lib/index.js", + "types": "lib/index.d.ts", + "module": "lib/esm/index.js", + "exports": { + "require": "./lib/index.js", + "import": "./lib/esm/index.js" + }, + "files": [ + "lib/**/*" + ], + "scripts": { + "test": "npm run test:jest && npm run lint", + "test:jest": "jest", + "lint": "npm run lint:es && npm run lint:prettier", + "lint:es": "eslint src", + "lint:prettier": "npm run format:prettier:raw -- --check", + "format": "npm run format:es && npm run format:prettier", + "format:es": "npm run lint:es -- --fix", + "format:prettier": "npm run format:prettier:raw -- --write", + "format:prettier:raw": "prettier '**/*.{ts,md,json,yml}'", + "build": "npm run build:cjs && npm run build:esm", + "build:cjs": "tsc --sourceRoot https://raw.githubusercontent.com/cheeriojs/cheerio-select/$(git rev-parse HEAD)/src/", + "build:esm": "npm run build:cjs -- --module esnext --target es2019 --outDir lib/esm && echo '{\"type\":\"module\"}' > lib/esm/package.json", + "prepare": "npm run build" + }, + "dependencies": { + "boolbase": "^1.0.0", + "css-select": "^5.1.0", + "css-what": "^6.1.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1" + }, + "devDependencies": { + "@types/boolbase": "^1.0.1", + "@types/jest": "^27.5.0", + "@types/node": "^17.0.33", + "@typescript-eslint/eslint-plugin": "^5.23.0", + "@typescript-eslint/parser": "^5.23.0", + "eslint": "^8.15.0", + "eslint-config-prettier": "^8.5.0", + "htmlparser2": "^8.0.1", + "jest": "^27.5.1", + "prettier": "^2.6.2", + "ts-jest": "^27.1.4", + "typescript": "^4.6.4" + }, + "jest": { + "preset": "ts-jest", + "testEnvironment": "node", + "coverageProvider": "v8", + "moduleNameMapper": { + "^(.*)\\.js$": "$1" + } + }, + "prettier": { + "tabWidth": 4 + } +} diff --git a/node_modules/cheerio/LICENSE b/node_modules/cheerio/LICENSE new file mode 100644 index 0000000..b0c8b19 --- /dev/null +++ b/node_modules/cheerio/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 The Cheerio contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/cheerio/Readme.md b/node_modules/cheerio/Readme.md new file mode 100644 index 0000000..e45ed57 --- /dev/null +++ b/node_modules/cheerio/Readme.md @@ -0,0 +1,247 @@ +

cheerio

+ +
The fast, flexible, and elegant library for parsing and manipulating HTML and XML.
+ + + +
+ +[ไธญๆ–‡ๆ–‡ๆกฃ (Chinese Readme)](https://github.com/cheeriojs/cheerio/wiki/Chinese-README) + +```js +import * as cheerio from 'cheerio'; +const $ = cheerio.load('

Hello world

'); + +$('h2.title').text('Hello there!'); +$('h2').addClass('welcome'); + +$.html(); +//=>

Hello there!

+``` + +## Installation + +`npm install cheerio` + +## Features + +**❤ Proven syntax:** Cheerio implements a subset of core jQuery. Cheerio +removes all the DOM inconsistencies and browser cruft from the jQuery library, +revealing its truly gorgeous API. + +**ϟ Blazingly fast:** Cheerio works with a very simple, consistent DOM +model. As a result parsing, manipulating, and rendering are incredibly +efficient. + +**❁ Incredibly flexible:** Cheerio wraps around +[parse5](https://github.com/inikulin/parse5) for parsing HTML and can optionally +use the forgiving [htmlparser2](https://github.com/fb55/htmlparser2/). Cheerio +can parse nearly any HTML or XML document. Cheerio works in both browser and +server environments. + +## API + +### Loading + +First you need to load in the HTML. This step in jQuery is implicit, since +jQuery operates on the one, baked-in DOM. With Cheerio, we need to pass in the +HTML document. + +```js +// ESM or TypeScript: +import * as cheerio from 'cheerio'; + +// In other environments: +const cheerio = require('cheerio'); + +const $ = cheerio.load('
    ...
'); + +$.html(); +//=>
    ...
+``` + +### Selectors + +Once you've loaded the HTML, you can use jQuery-style selectors to find elements +within the document. + +#### \$( selector, [context], [root] ) + +`selector` searches within the `context` scope which searches within the `root` +scope. `selector` and `context` can be a string expression, DOM Element, array +of DOM elements, or cheerio object. `root`, if provided, is typically the HTML +document string. + +This selector method is the starting point for traversing and manipulating the +document. Like in jQuery, it's the primary method for selecting elements in the +document. + +```js +$('.apple', '#fruits').text(); +//=> Apple + +$('ul .pear').attr('class'); +//=> pear + +$('li[class=orange]').html(); +//=> Orange +``` + +### Rendering + +When you're ready to render the document, you can call the `html` method on the +"root" selection: + +```js +$.root().html(); +//=> +// +// +//
    +//
  • Apple
  • +//
  • Orange
  • +//
  • Pear
  • +//
+// +// +``` + +If you want to render the +[`outerHTML`](https://developer.mozilla.org/en-US/docs/Web/API/Element/outerHTML) +of a selection, you can use the `outerHTML` prop: + +```js +$('.pear').prop('outerHTML'); +//=>
  • Pear
  • +``` + +You may also render the text content of a Cheerio object using the `text` +method: + +```js +const $ = cheerio.load('This is content.'); +$('body').text(); +//=> This is content. +``` + +### The "DOM Node" object + +Cheerio collections are made up of objects that bear some resemblance to +[browser-based DOM nodes](https://developer.mozilla.org/en-US/docs/Web/API/Node). +You can expect them to define the following properties: + +- `tagName` +- `parentNode` +- `previousSibling` +- `nextSibling` +- `nodeValue` +- `firstChild` +- `childNodes` +- `lastChild` + +## Screencasts + +[https://vimeo.com/31950192](https://vimeo.com/31950192) + +> This video tutorial is a follow-up to Nettut's "How to Scrape Web Pages with +> Node.js and jQuery", using cheerio instead of JSDOM + jQuery. This video shows +> how easy it is to use cheerio and how much faster cheerio is than JSDOM + +> jQuery. + +## Cheerio in the real world + +Are you using cheerio in production? Add it to the +[wiki](https://github.com/cheeriojs/cheerio/wiki/Cheerio-in-Production)! + +## Sponsors + +Does your company use Cheerio in production? Please consider +[sponsoring this project](https://github.com/cheeriojs/cheerio?sponsor=1)! Your +help will allow maintainers to dedicate more time and resources to its +development and support. + +**Headlining Sponsors** + + + + + Tidelift + + + Github + + + AirBnB + + + + +**Other Sponsors** + + + + + Casinoonlineaams.com + + + Casino utan svensk licens + + + ZenRows + + + ะ†ะณั€ะพะฒั– ะฐะฒั‚ะพะผะฐั‚ะธ + + + OnlineCasinosSpelen + + + CasinoZonderRegistratie.net + + + Nieuwe-Casinos.net + + + Vedonlyontiyhtiot.com + + + Puter.com + + + No Deposit Bonus + + + + +## Backers + +[Become a backer](https://github.com/cheeriojs/cheerio?sponsor=1) to show your +support for Cheerio and help us maintain and improve this open source project. + + + + + Vasy Kafidoff + + + Espen Klem + + + + +## License + +MIT diff --git a/node_modules/cheerio/dist/browser/api/attributes.d.ts b/node_modules/cheerio/dist/browser/api/attributes.d.ts new file mode 100644 index 0000000..a358044 --- /dev/null +++ b/node_modules/cheerio/dist/browser/api/attributes.d.ts @@ -0,0 +1,385 @@ +/** + * Methods for getting and modifying attributes. + * + * @module cheerio/attributes + */ +import { type AnyNode, type Element } from 'domhandler'; +import type { Cheerio } from '../cheerio.js'; +/** + * Method for getting attributes. Gets the attribute value for only the first + * element in the matched set. + * + * @category Attributes + * @example + * + * ```js + * $('ul').attr('id'); + * //=> fruits + * ``` + * + * @param name - Name of the attribute. + * @returns The attribute's value. + * @see {@link https://api.jquery.com/attr/} + */ +export declare function attr(this: Cheerio, name: string): string | undefined; +/** + * Method for getting all attributes and their values of the first element in + * the matched set. + * + * @category Attributes + * @example + * + * ```js + * $('ul').attr(); + * //=> { id: 'fruits' } + * ``` + * + * @returns The attribute's values. + * @see {@link https://api.jquery.com/attr/} + */ +export declare function attr(this: Cheerio): Record | undefined; +/** + * Method for setting attributes. Sets the attribute value for only the first + * element in the matched set. If you set an attribute's value to `null`, you + * remove that attribute. You may also pass a `map` and `function`. + * + * @category Attributes + * @example + * + * ```js + * $('.apple').attr('id', 'favorite').html(); + * //=>
  • Apple
  • + * ``` + * + * @param name - Name of the attribute. + * @param value - The new value of the attribute. + * @returns The instance itself. + * @see {@link https://api.jquery.com/attr/} + */ +export declare function attr(this: Cheerio, name: string, value?: string | null | ((this: Element, i: number, attrib: string) => string | null)): Cheerio; +/** + * Method for setting multiple attributes at once. Sets the attribute value for + * only the first element in the matched set. If you set an attribute's value to + * `null`, you remove that attribute. + * + * @category Attributes + * @example + * + * ```js + * $('.apple').attr({ id: 'favorite' }).html(); + * //=>
  • Apple
  • + * ``` + * + * @param values - Map of attribute names and values. + * @returns The instance itself. + * @see {@link https://api.jquery.com/attr/} + */ +export declare function attr(this: Cheerio, values: Record): Cheerio; +interface StyleProp { + length: number; + [key: string]: string | number; + [index: number]: string; +} +/** + * Method for getting and setting properties. Gets the property value for only + * the first element in the matched set. + * + * @category Attributes + * @example + * + * ```js + * $('input[type="checkbox"]').prop('checked'); + * //=> false + * + * $('input[type="checkbox"]').prop('checked', true).val(); + * //=> ok + * ``` + * + * @param name - Name of the property. + * @returns If `value` is specified the instance itself, otherwise the prop's + * value. + * @see {@link https://api.jquery.com/prop/} + */ +export declare function prop(this: Cheerio, name: 'tagName' | 'nodeName'): string | undefined; +export declare function prop(this: Cheerio, name: 'innerHTML' | 'outerHTML' | 'innerText' | 'textContent'): string | null; +/** + * Get a parsed CSS style object. + * + * @param name - Name of the property. + * @returns The style object, or `undefined` if the element has no `style` + * attribute. + */ +export declare function prop(this: Cheerio, name: 'style'): StyleProp | undefined; +/** + * Resolve `href` or `src` of supported elements. Requires the `baseURI` option + * to be set, and a global `URL` object to be part of the environment. + * + * @example With `baseURI` set to `'https://example.com'`: + * + * ```js + * $('').prop('src'); + * //=> 'https://example.com/image.png' + * ``` + * + * @param name - Name of the property. + * @returns The resolved URL, or `undefined` if the element is not supported. + */ +export declare function prop(this: Cheerio, name: 'href' | 'src'): string | undefined; +/** + * Get a property of an element. + * + * @param name - Name of the property. + * @returns The property's value. + */ +export declare function prop(this: Cheerio, name: K): Element[K]; +/** + * Set a property of an element. + * + * @param name - Name of the property. + * @param value - Value to set the property to. + * @returns The instance itself. + */ +export declare function prop(this: Cheerio, name: K, value: Element[K] | ((this: Element, i: number, prop: K) => Element[keyof Element])): Cheerio; +/** + * Set multiple properties of an element. + * + * @example + * + * ```js + * $('input[type="checkbox"]').prop({ + * checked: true, + * disabled: false, + * }); + * ``` + * + * @param map - Object of properties to set. + * @returns The instance itself. + */ +export declare function prop(this: Cheerio, map: Record): Cheerio; +/** + * Set a property of an element. + * + * @param name - Name of the property. + * @param value - Value to set the property to. + * @returns The instance itself. + */ +export declare function prop(this: Cheerio, name: string, value: string | boolean | null | ((this: Element, i: number, prop: string) => string | boolean)): Cheerio; +/** + * Get a property of an element. + * + * @param name - The property's name. + * @returns The property's value. + */ +export declare function prop(this: Cheerio, name: string): string; +/** + * Method for getting data attributes, for only the first element in the matched + * set. + * + * @category Attributes + * @example + * + * ```js + * $('
    ').data('apple-color'); + * //=> 'red' + * ``` + * + * @param name - Name of the data attribute. + * @returns The data attribute's value, or `undefined` if the attribute does not + * exist. + * @see {@link https://api.jquery.com/data/} + */ +export declare function data(this: Cheerio, name: string): unknown | undefined; +/** + * Method for getting all of an element's data attributes, for only the first + * element in the matched set. + * + * @category Attributes + * @example + * + * ```js + * $('
    ').data(); + * //=> { appleColor: 'red' } + * ``` + * + * @returns A map with all of the data attributes. + * @see {@link https://api.jquery.com/data/} + */ +export declare function data(this: Cheerio): Record; +/** + * Method for setting data attributes, for only the first element in the matched + * set. + * + * @category Attributes + * @example + * + * ```js + * const apple = $('.apple').data('kind', 'mac'); + * + * apple.data('kind'); + * //=> 'mac' + * ``` + * + * @param name - Name of the data attribute. + * @param value - The new value. + * @returns The instance itself. + * @see {@link https://api.jquery.com/data/} + */ +export declare function data(this: Cheerio, name: string, value: unknown): Cheerio; +/** + * Method for setting multiple data attributes at once, for only the first + * element in the matched set. + * + * @category Attributes + * @example + * + * ```js + * const apple = $('.apple').data({ kind: 'mac' }); + * + * apple.data('kind'); + * //=> 'mac' + * ``` + * + * @param values - Map of names to values. + * @returns The instance itself. + * @see {@link https://api.jquery.com/data/} + */ +export declare function data(this: Cheerio, values: Record): Cheerio; +/** + * Method for getting the value of input, select, and textarea. Note: Support + * for `map`, and `function` has not been added yet. + * + * @category Attributes + * @example + * + * ```js + * $('input[type="text"]').val(); + * //=> input_text + * ``` + * + * @returns The value. + * @see {@link https://api.jquery.com/val/} + */ +export declare function val(this: Cheerio): string | undefined | string[]; +/** + * Method for setting the value of input, select, and textarea. Note: Support + * for `map`, and `function` has not been added yet. + * + * @category Attributes + * @example + * + * ```js + * $('input[type="text"]').val('test').html(); + * //=> + * ``` + * + * @param value - The new value. + * @returns The instance itself. + * @see {@link https://api.jquery.com/val/} + */ +export declare function val(this: Cheerio, value: string | string[]): Cheerio; +/** + * Method for removing attributes by `name`. + * + * @category Attributes + * @example + * + * ```js + * $('.pear').removeAttr('class').html(); + * //=>
  • Pear
  • + * + * $('.apple').attr('id', 'favorite'); + * $('.apple').removeAttr('id class').html(); + * //=>
  • Apple
  • + * ``` + * + * @param name - Name of the attribute. + * @returns The instance itself. + * @see {@link https://api.jquery.com/removeAttr/} + */ +export declare function removeAttr(this: Cheerio, name: string): Cheerio; +/** + * Check to see if _any_ of the matched elements have the given `className`. + * + * @category Attributes + * @example + * + * ```js + * $('.pear').hasClass('pear'); + * //=> true + * + * $('apple').hasClass('fruit'); + * //=> false + * + * $('li').hasClass('pear'); + * //=> true + * ``` + * + * @param className - Name of the class. + * @returns Indicates if an element has the given `className`. + * @see {@link https://api.jquery.com/hasClass/} + */ +export declare function hasClass(this: Cheerio, className: string): boolean; +/** + * Adds class(es) to all of the matched elements. Also accepts a `function`. + * + * @category Attributes + * @example + * + * ```js + * $('.pear').addClass('fruit').html(); + * //=>
  • Pear
  • + * + * $('.apple').addClass('fruit red').html(); + * //=>
  • Apple
  • + * ``` + * + * @param value - Name of new class. + * @returns The instance itself. + * @see {@link https://api.jquery.com/addClass/} + */ +export declare function addClass>(this: R, value?: string | ((this: Element, i: number, className: string) => string | undefined)): R; +/** + * Removes one or more space-separated classes from the selected elements. If no + * `className` is defined, all classes will be removed. Also accepts a + * `function`. + * + * @category Attributes + * @example + * + * ```js + * $('.pear').removeClass('pear').html(); + * //=>
  • Pear
  • + * + * $('.apple').addClass('red').removeClass().html(); + * //=>
  • Apple
  • + * ``` + * + * @param name - Name of the class. If not specified, removes all elements. + * @returns The instance itself. + * @see {@link https://api.jquery.com/removeClass/} + */ +export declare function removeClass>(this: R, name?: string | ((this: Element, i: number, className: string) => string | undefined)): R; +/** + * Add or remove class(es) from the matched elements, depending on either the + * class's presence or the value of the switch argument. Also accepts a + * `function`. + * + * @category Attributes + * @example + * + * ```js + * $('.apple.green').toggleClass('fruit green red').html(); + * //=>
  • Apple
  • + * + * $('.apple.green').toggleClass('fruit green red', true).html(); + * //=>
  • Apple
  • + * ``` + * + * @param value - Name of the class. Can also be a function. + * @param stateVal - If specified the state of the class. + * @returns The instance itself. + * @see {@link https://api.jquery.com/toggleClass/} + */ +export declare function toggleClass>(this: R, value?: string | ((this: Element, i: number, className: string, stateVal?: boolean) => string), stateVal?: boolean): R; +export {}; +//# sourceMappingURL=attributes.d.ts.map \ No newline at end of file diff --git a/node_modules/cheerio/dist/browser/api/attributes.d.ts.map b/node_modules/cheerio/dist/browser/api/attributes.d.ts.map new file mode 100644 index 0000000..1e09a61 --- /dev/null +++ b/node_modules/cheerio/dist/browser/api/attributes.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../../../src/api/attributes.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/cheerio/dist/browser/api/attributes.js b/node_modules/cheerio/dist/browser/api/attributes.js new file mode 100644 index 0000000..0782b5b --- /dev/null +++ b/node_modules/cheerio/dist/browser/api/attributes.js @@ -0,0 +1,619 @@ +/** + * Methods for getting and modifying attributes. + * + * @module cheerio/attributes + */ +import { text } from '../static.js'; +import { domEach, camelCase, cssCase } from '../utils.js'; +import { isTag } from 'domhandler'; +import { innerText, textContent } from 'domutils'; +const hasOwn = Object.prototype.hasOwnProperty; +const rspace = /\s+/; +const dataAttrPrefix = 'data-'; +// Attributes that are booleans +const rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i; +// Matches strings that look like JSON objects or arrays +const rbrace = /^{[^]*}$|^\[[^]*]$/; +function getAttr(elem, name, xmlMode) { + var _a; + if (!elem || !isTag(elem)) + return undefined; + (_a = elem.attribs) !== null && _a !== void 0 ? _a : (elem.attribs = {}); + // Return the entire attribs object if no attribute specified + if (!name) { + return elem.attribs; + } + if (hasOwn.call(elem.attribs, name)) { + // Get the (decoded) attribute + return !xmlMode && rboolean.test(name) ? name : elem.attribs[name]; + } + // Mimic the DOM and return text content as value for `option's` + if (elem.name === 'option' && name === 'value') { + return text(elem.children); + } + // Mimic DOM with default value for radios/checkboxes + if (elem.name === 'input' && + (elem.attribs['type'] === 'radio' || elem.attribs['type'] === 'checkbox') && + name === 'value') { + return 'on'; + } + return undefined; +} +/** + * Sets the value of an attribute. The attribute will be deleted if the value is + * `null`. + * + * @private + * @param el - The element to set the attribute on. + * @param name - The attribute's name. + * @param value - The attribute's value. + */ +function setAttr(el, name, value) { + if (value === null) { + removeAttribute(el, name); + } + else { + el.attribs[name] = `${value}`; + } +} +export function attr(name, value) { + // Set the value (with attr map support) + if (typeof name === 'object' || value !== undefined) { + if (typeof value === 'function') { + if (typeof name !== 'string') { + { + throw new Error('Bad combination of arguments.'); + } + } + return domEach(this, (el, i) => { + if (isTag(el)) + setAttr(el, name, value.call(el, i, el.attribs[name])); + }); + } + return domEach(this, (el) => { + if (!isTag(el)) + return; + if (typeof name === 'object') { + for (const objName of Object.keys(name)) { + const objValue = name[objName]; + setAttr(el, objName, objValue); + } + } + else { + setAttr(el, name, value); + } + }); + } + return arguments.length > 1 + ? this + : getAttr(this[0], name, this.options.xmlMode); +} +/** + * Gets a node's prop. + * + * @private + * @category Attributes + * @param el - Element to get the prop of. + * @param name - Name of the prop. + * @param xmlMode - Disable handling of special HTML attributes. + * @returns The prop's value. + */ +function getProp(el, name, xmlMode) { + return name in el + ? // @ts-expect-error TS doesn't like us accessing the value directly here. + el[name] + : !xmlMode && rboolean.test(name) + ? getAttr(el, name, false) !== undefined + : getAttr(el, name, xmlMode); +} +/** + * Sets the value of a prop. + * + * @private + * @param el - The element to set the prop on. + * @param name - The prop's name. + * @param value - The prop's value. + * @param xmlMode - Disable handling of special HTML attributes. + */ +function setProp(el, name, value, xmlMode) { + if (name in el) { + // @ts-expect-error Overriding value + el[name] = value; + } + else { + setAttr(el, name, !xmlMode && rboolean.test(name) ? (value ? '' : null) : `${value}`); + } +} +export function prop(name, value) { + var _a; + if (typeof name === 'string' && value === undefined) { + const el = this[0]; + if (!el || !isTag(el)) + return undefined; + switch (name) { + case 'style': { + const property = this.css(); + const keys = Object.keys(property); + for (let i = 0; i < keys.length; i++) { + property[i] = keys[i]; + } + property.length = keys.length; + return property; + } + case 'tagName': + case 'nodeName': { + return el.name.toUpperCase(); + } + case 'href': + case 'src': { + const prop = (_a = el.attribs) === null || _a === void 0 ? void 0 : _a[name]; + if (typeof URL !== 'undefined' && + ((name === 'href' && (el.tagName === 'a' || el.tagName === 'link')) || + (name === 'src' && + (el.tagName === 'img' || + el.tagName === 'iframe' || + el.tagName === 'audio' || + el.tagName === 'video' || + el.tagName === 'source'))) && + prop !== undefined && + this.options.baseURI) { + return new URL(prop, this.options.baseURI).href; + } + return prop; + } + case 'innerText': { + return innerText(el); + } + case 'textContent': { + return textContent(el); + } + case 'outerHTML': { + return this.clone().wrap('').parent().html(); + } + case 'innerHTML': { + return this.html(); + } + default: { + return getProp(el, name, this.options.xmlMode); + } + } + } + if (typeof name === 'object' || value !== undefined) { + if (typeof value === 'function') { + if (typeof name === 'object') { + throw new TypeError('Bad combination of arguments.'); + } + return domEach(this, (el, i) => { + if (isTag(el)) { + setProp(el, name, value.call(el, i, getProp(el, name, this.options.xmlMode)), this.options.xmlMode); + } + }); + } + return domEach(this, (el) => { + if (!isTag(el)) + return; + if (typeof name === 'object') { + for (const key of Object.keys(name)) { + const val = name[key]; + setProp(el, key, val, this.options.xmlMode); + } + } + else { + setProp(el, name, value, this.options.xmlMode); + } + }); + } + return undefined; +} +/** + * Sets the value of a data attribute. + * + * @private + * @param elem - The element to set the data attribute on. + * @param name - The data attribute's name. + * @param value - The data attribute's value. + */ +function setData(elem, name, value) { + var _a; + (_a = elem.data) !== null && _a !== void 0 ? _a : (elem.data = {}); + if (typeof name === 'object') + Object.assign(elem.data, name); + else if (typeof name === 'string' && value !== undefined) { + elem.data[name] = value; + } +} +/** + * Read _all_ HTML5 `data-*` attributes from the equivalent HTML5 `data-*` + * attribute, and cache the value in the node's internal data store. + * + * @private + * @category Attributes + * @param el - Element to get the data attribute of. + * @returns A map with all of the data attributes. + */ +function readAllData(el) { + for (const domName of Object.keys(el.attribs)) { + if (!domName.startsWith(dataAttrPrefix)) { + continue; + } + const jsName = camelCase(domName.slice(dataAttrPrefix.length)); + if (!hasOwn.call(el.data, jsName)) { + el.data[jsName] = parseDataValue(el.attribs[domName]); + } + } + return el.data; +} +/** + * Read the specified attribute from the equivalent HTML5 `data-*` attribute, + * and (if present) cache the value in the node's internal data store. + * + * @private + * @category Attributes + * @param el - Element to get the data attribute of. + * @param name - Name of the data attribute. + * @returns The data attribute's value. + */ +function readData(el, name) { + const domName = dataAttrPrefix + cssCase(name); + const data = el.data; + if (hasOwn.call(data, name)) { + return data[name]; + } + if (hasOwn.call(el.attribs, domName)) { + return (data[name] = parseDataValue(el.attribs[domName])); + } + return undefined; +} +/** + * Coerce string data-* attributes to their corresponding JavaScript primitives. + * + * @private + * @category Attributes + * @param value - The value to parse. + * @returns The parsed value. + */ +function parseDataValue(value) { + if (value === 'null') + return null; + if (value === 'true') + return true; + if (value === 'false') + return false; + const num = Number(value); + if (value === String(num)) + return num; + if (rbrace.test(value)) { + try { + return JSON.parse(value); + } + catch { + /* Ignore */ + } + } + return value; +} +export function data(name, value) { + var _a; + const elem = this[0]; + if (!elem || !isTag(elem)) + return; + const dataEl = elem; + (_a = dataEl.data) !== null && _a !== void 0 ? _a : (dataEl.data = {}); + // Return the entire data object if no data specified + if (name == null) { + return readAllData(dataEl); + } + // Set the value (with attr map support) + if (typeof name === 'object' || value !== undefined) { + domEach(this, (el) => { + if (isTag(el)) { + if (typeof name === 'object') + setData(el, name); + else + setData(el, name, value); + } + }); + return this; + } + return readData(dataEl, name); +} +export function val(value) { + const querying = arguments.length === 0; + const element = this[0]; + if (!element || !isTag(element)) + return querying ? undefined : this; + switch (element.name) { + case 'textarea': { + return this.text(value); + } + case 'select': { + const option = this.find('option:selected'); + if (!querying) { + if (this.attr('multiple') == null && typeof value === 'object') { + return this; + } + this.find('option').removeAttr('selected'); + const values = typeof value === 'object' ? value : [value]; + for (const val of values) { + this.find(`option[value="${val}"]`).attr('selected', ''); + } + return this; + } + return this.attr('multiple') + ? option.toArray().map((el) => text(el.children)) + : option.attr('value'); + } + case 'input': + case 'option': { + return querying + ? this.attr('value') + : this.attr('value', value); + } + } + return undefined; +} +/** + * Remove an attribute. + * + * @private + * @param elem - Node to remove attribute from. + * @param name - Name of the attribute to remove. + */ +function removeAttribute(elem, name) { + if (!elem.attribs || !hasOwn.call(elem.attribs, name)) + return; + delete elem.attribs[name]; +} +/** + * Splits a space-separated list of names to individual names. + * + * @category Attributes + * @param names - Names to split. + * @returns - Split names. + */ +function splitNames(names) { + return names ? names.trim().split(rspace) : []; +} +/** + * Method for removing attributes by `name`. + * + * @category Attributes + * @example + * + * ```js + * $('.pear').removeAttr('class').html(); + * //=>
  • Pear
  • + * + * $('.apple').attr('id', 'favorite'); + * $('.apple').removeAttr('id class').html(); + * //=>
  • Apple
  • + * ``` + * + * @param name - Name of the attribute. + * @returns The instance itself. + * @see {@link https://api.jquery.com/removeAttr/} + */ +export function removeAttr(name) { + const attrNames = splitNames(name); + for (const attrName of attrNames) { + domEach(this, (elem) => { + if (isTag(elem)) + removeAttribute(elem, attrName); + }); + } + return this; +} +/** + * Check to see if _any_ of the matched elements have the given `className`. + * + * @category Attributes + * @example + * + * ```js + * $('.pear').hasClass('pear'); + * //=> true + * + * $('apple').hasClass('fruit'); + * //=> false + * + * $('li').hasClass('pear'); + * //=> true + * ``` + * + * @param className - Name of the class. + * @returns Indicates if an element has the given `className`. + * @see {@link https://api.jquery.com/hasClass/} + */ +export function hasClass(className) { + return this.toArray().some((elem) => { + const clazz = isTag(elem) && elem.attribs['class']; + let idx = -1; + if (clazz && className.length > 0) { + while ((idx = clazz.indexOf(className, idx + 1)) > -1) { + const end = idx + className.length; + if ((idx === 0 || rspace.test(clazz[idx - 1])) && + (end === clazz.length || rspace.test(clazz[end]))) { + return true; + } + } + } + return false; + }); +} +/** + * Adds class(es) to all of the matched elements. Also accepts a `function`. + * + * @category Attributes + * @example + * + * ```js + * $('.pear').addClass('fruit').html(); + * //=>
  • Pear
  • + * + * $('.apple').addClass('fruit red').html(); + * //=>
  • Apple
  • + * ``` + * + * @param value - Name of new class. + * @returns The instance itself. + * @see {@link https://api.jquery.com/addClass/} + */ +export function addClass(value) { + // Support functions + if (typeof value === 'function') { + return domEach(this, (el, i) => { + if (isTag(el)) { + const className = el.attribs['class'] || ''; + addClass.call([el], value.call(el, i, className)); + } + }); + } + // Return if no value or not a string or function + if (!value || typeof value !== 'string') + return this; + const classNames = value.split(rspace); + const numElements = this.length; + for (let i = 0; i < numElements; i++) { + const el = this[i]; + // If selected element isn't a tag, move on + if (!isTag(el)) + continue; + // If we don't already have classes โ€” always set xmlMode to false here, as it doesn't matter for classes + const className = getAttr(el, 'class', false); + if (className) { + let setClass = ` ${className} `; + // Check if class already exists + for (const cn of classNames) { + const appendClass = `${cn} `; + if (!setClass.includes(` ${appendClass}`)) + setClass += appendClass; + } + setAttr(el, 'class', setClass.trim()); + } + else { + setAttr(el, 'class', classNames.join(' ').trim()); + } + } + return this; +} +/** + * Removes one or more space-separated classes from the selected elements. If no + * `className` is defined, all classes will be removed. Also accepts a + * `function`. + * + * @category Attributes + * @example + * + * ```js + * $('.pear').removeClass('pear').html(); + * //=>
  • Pear
  • + * + * $('.apple').addClass('red').removeClass().html(); + * //=>
  • Apple
  • + * ``` + * + * @param name - Name of the class. If not specified, removes all elements. + * @returns The instance itself. + * @see {@link https://api.jquery.com/removeClass/} + */ +export function removeClass(name) { + // Handle if value is a function + if (typeof name === 'function') { + return domEach(this, (el, i) => { + if (isTag(el)) { + removeClass.call([el], name.call(el, i, el.attribs['class'] || '')); + } + }); + } + const classes = splitNames(name); + const numClasses = classes.length; + const removeAll = arguments.length === 0; + return domEach(this, (el) => { + if (!isTag(el)) + return; + if (removeAll) { + // Short circuit the remove all case as this is the nice one + el.attribs['class'] = ''; + } + else { + const elClasses = splitNames(el.attribs['class']); + let changed = false; + for (let j = 0; j < numClasses; j++) { + const index = elClasses.indexOf(classes[j]); + if (index >= 0) { + elClasses.splice(index, 1); + changed = true; + /* + * We have to do another pass to ensure that there are not duplicate + * classes listed + */ + j--; + } + } + if (changed) { + el.attribs['class'] = elClasses.join(' '); + } + } + }); +} +/** + * Add or remove class(es) from the matched elements, depending on either the + * class's presence or the value of the switch argument. Also accepts a + * `function`. + * + * @category Attributes + * @example + * + * ```js + * $('.apple.green').toggleClass('fruit green red').html(); + * //=>
  • Apple
  • + * + * $('.apple.green').toggleClass('fruit green red', true).html(); + * //=>
  • Apple
  • + * ``` + * + * @param value - Name of the class. Can also be a function. + * @param stateVal - If specified the state of the class. + * @returns The instance itself. + * @see {@link https://api.jquery.com/toggleClass/} + */ +export function toggleClass(value, stateVal) { + // Support functions + if (typeof value === 'function') { + return domEach(this, (el, i) => { + if (isTag(el)) { + toggleClass.call([el], value.call(el, i, el.attribs['class'] || '', stateVal), stateVal); + } + }); + } + // Return if no value or not a string or function + if (!value || typeof value !== 'string') + return this; + const classNames = value.split(rspace); + const numClasses = classNames.length; + const state = typeof stateVal === 'boolean' ? (stateVal ? 1 : -1) : 0; + const numElements = this.length; + for (let i = 0; i < numElements; i++) { + const el = this[i]; + // If selected element isn't a tag, move on + if (!isTag(el)) + continue; + const elementClasses = splitNames(el.attribs['class']); + // Check if class already exists + for (let j = 0; j < numClasses; j++) { + // Check if the class name is currently defined + const index = elementClasses.indexOf(classNames[j]); + // Add if stateValue === true or we are toggling and there is no value + if (state >= 0 && index < 0) { + elementClasses.push(classNames[j]); + } + else if (state <= 0 && index >= 0) { + // Otherwise remove but only if the item exists + elementClasses.splice(index, 1); + } + } + el.attribs['class'] = elementClasses.join(' '); + } + return this; +} +//# sourceMappingURL=attributes.js.map \ No newline at end of file diff --git a/node_modules/cheerio/dist/browser/api/attributes.js.map b/node_modules/cheerio/dist/browser/api/attributes.js.map new file mode 100644 index 0000000..1c70ce1 --- /dev/null +++ b/node_modules/cheerio/dist/browser/api/attributes.js.map @@ -0,0 +1 @@ +{"version":3,"file":"attributes.js","sourceRoot":"","sources":["../../../src/api/attributes.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/cheerio/dist/browser/api/css.d.ts b/node_modules/cheerio/dist/browser/api/css.d.ts new file mode 100644 index 0000000..9997f34 --- /dev/null +++ b/node_modules/cheerio/dist/browser/api/css.d.ts @@ -0,0 +1,42 @@ +import { type Element, type AnyNode } from 'domhandler'; +import type { Cheerio } from '../cheerio.js'; +/** + * Get the value of a style property for the first element in the set of matched + * elements. + * + * @category CSS + * @param names - Optionally the names of the properties of interest. + * @returns A map of all of the style properties. + * @see {@link https://api.jquery.com/css/} + */ +export declare function css(this: Cheerio, names?: string[]): Record | undefined; +/** + * Get the value of a style property for the first element in the set of matched + * elements. + * + * @category CSS + * @param name - The name of the property. + * @returns The property value for the given name. + * @see {@link https://api.jquery.com/css/} + */ +export declare function css(this: Cheerio, name: string): string | undefined; +/** + * Set one CSS property for every matched element. + * + * @category CSS + * @param prop - The name of the property. + * @param val - The new value. + * @returns The instance itself. + * @see {@link https://api.jquery.com/css/} + */ +export declare function css(this: Cheerio, prop: string, val: string | ((this: Element, i: number, style: string) => string | undefined)): Cheerio; +/** + * Set multiple CSS properties for every matched element. + * + * @category CSS + * @param map - A map of property names and values. + * @returns The instance itself. + * @see {@link https://api.jquery.com/css/} + */ +export declare function css(this: Cheerio, map: Record): Cheerio; +//# sourceMappingURL=css.d.ts.map \ No newline at end of file diff --git a/node_modules/cheerio/dist/browser/api/css.d.ts.map b/node_modules/cheerio/dist/browser/api/css.d.ts.map new file mode 100644 index 0000000..06bff02 --- /dev/null +++ b/node_modules/cheerio/dist/browser/api/css.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"css.d.ts","sourceRoot":"","sources":["../../../src/api/css.ts"],"names":[],"mappings":"AACA,OAAO,EAAS,KAAK,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C;;;;;;;;GAQG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,OAAO,EACnC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,KAAK,CAAC,EAAE,MAAM,EAAE,GACf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;AACtC;;;;;;;;GAQG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,OAAO,EACnC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,IAAI,EAAE,MAAM,GACX,MAAM,GAAG,SAAS,CAAC;AACtB;;;;;;;;GAQG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,OAAO,EACnC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,IAAI,EAAE,MAAM,EACZ,GAAG,EACC,MAAM,GACN,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAC,GACpE,OAAO,CAAC,CAAC,CAAC,CAAC;AACd;;;;;;;GAOG;AACH,wBAAgB,GAAG,CAAC,CAAC,SAAS,OAAO,EACnC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/node_modules/cheerio/dist/browser/api/css.js b/node_modules/cheerio/dist/browser/api/css.js new file mode 100644 index 0000000..0c000ec --- /dev/null +++ b/node_modules/cheerio/dist/browser/api/css.js @@ -0,0 +1,116 @@ +import { domEach } from '../utils.js'; +import { isTag } from 'domhandler'; +/** + * Set multiple CSS properties for every matched element. + * + * @category CSS + * @param prop - The names of the properties. + * @param val - The new values. + * @returns The instance itself. + * @see {@link https://api.jquery.com/css/} + */ +export function css(prop, val) { + if ((prop != null && val != null) || + // When `prop` is a "plain" object + (typeof prop === 'object' && !Array.isArray(prop))) { + return domEach(this, (el, i) => { + if (isTag(el)) { + // `prop` can't be an array here anymore. + setCss(el, prop, val, i); + } + }); + } + if (this.length === 0) { + return undefined; + } + return getCss(this[0], prop); +} +/** + * Set styles of all elements. + * + * @private + * @param el - Element to set style of. + * @param prop - Name of property. + * @param value - Value to set property to. + * @param idx - Optional index within the selection. + */ +function setCss(el, prop, value, idx) { + if (typeof prop === 'string') { + const styles = getCss(el); + const val = typeof value === 'function' ? value.call(el, idx, styles[prop]) : value; + if (val === '') { + delete styles[prop]; + } + else if (val != null) { + styles[prop] = val; + } + el.attribs['style'] = stringify(styles); + } + else if (typeof prop === 'object') { + const keys = Object.keys(prop); + for (let i = 0; i < keys.length; i++) { + const k = keys[i]; + setCss(el, k, prop[k], i); + } + } +} +function getCss(el, prop) { + if (!el || !isTag(el)) + return; + const styles = parse(el.attribs['style']); + if (typeof prop === 'string') { + return styles[prop]; + } + if (Array.isArray(prop)) { + const newStyles = {}; + for (const item of prop) { + if (styles[item] != null) { + newStyles[item] = styles[item]; + } + } + return newStyles; + } + return styles; +} +/** + * Stringify `obj` to styles. + * + * @private + * @category CSS + * @param obj - Object to stringify. + * @returns The serialized styles. + */ +function stringify(obj) { + return Object.keys(obj).reduce((str, prop) => `${str}${str ? ' ' : ''}${prop}: ${obj[prop]};`, ''); +} +/** + * Parse `styles`. + * + * @private + * @category CSS + * @param styles - Styles to be parsed. + * @returns The parsed styles. + */ +function parse(styles) { + styles = (styles || '').trim(); + if (!styles) + return {}; + const obj = {}; + let key; + for (const str of styles.split(';')) { + const n = str.indexOf(':'); + // If there is no :, or if it is the first/last character, add to the previous item's value + if (n < 1 || n === str.length - 1) { + const trimmed = str.trimEnd(); + if (trimmed.length > 0 && key !== undefined) { + obj[key] += `;${trimmed}`; + } + } + else { + key = str.slice(0, n).trim(); + obj[key] = str.slice(n + 1).trim(); + } + } + return obj; +} +//# sourceMappingURL=css.js.map \ No newline at end of file diff --git a/node_modules/cheerio/dist/browser/api/css.js.map b/node_modules/cheerio/dist/browser/api/css.js.map new file mode 100644 index 0000000..d09cdaf --- /dev/null +++ b/node_modules/cheerio/dist/browser/api/css.js.map @@ -0,0 +1 @@ +{"version":3,"file":"css.js","sourceRoot":"","sources":["../../../src/api/css.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/cheerio/dist/browser/api/extract.d.ts b/node_modules/cheerio/dist/browser/api/extract.d.ts new file mode 100644 index 0000000..b8d73a7 --- /dev/null +++ b/node_modules/cheerio/dist/browser/api/extract.d.ts @@ -0,0 +1,29 @@ +import type { AnyNode, Element } from 'domhandler'; +import type { Cheerio } from '../cheerio.js'; +import type { prop } from './attributes.js'; +type ExtractDescriptorFn = (el: Element, key: string, obj: Record) => unknown; +interface ExtractDescriptor { + selector: string; + value?: string | ExtractDescriptorFn | ExtractMap; +} +type ExtractValue = string | ExtractDescriptor | [string | ExtractDescriptor]; +export interface ExtractMap { + [key: string]: ExtractValue; +} +type ExtractedValue = V extends [ + string | ExtractDescriptor +] ? NonNullable>[] : V extends string ? string | undefined : V extends ExtractDescriptor ? V['value'] extends ExtractMap ? ExtractedMap | undefined : V['value'] extends ExtractDescriptorFn ? ReturnType | undefined : ReturnType | undefined : never; +export type ExtractedMap = { + [key in keyof M]: ExtractedValue; +}; +/** + * Extract multiple values from a document, and store them in an object. + * + * @param map - An object containing key-value pairs. The keys are the names of + * the properties to be created on the object, and the values are the + * selectors to be used to extract the values. + * @returns An object containing the extracted values. + */ +export declare function extract(this: Cheerio, map: M): ExtractedMap; +export {}; +//# sourceMappingURL=extract.d.ts.map \ No newline at end of file diff --git a/node_modules/cheerio/dist/browser/api/extract.d.ts.map b/node_modules/cheerio/dist/browser/api/extract.d.ts.map new file mode 100644 index 0000000..8bbe7ab --- /dev/null +++ b/node_modules/cheerio/dist/browser/api/extract.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"extract.d.ts","sourceRoot":"","sources":["../../../src/api/extract.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,KAAK,mBAAmB,GAAG,CACzB,EAAE,EAAE,OAAO,EACX,GAAG,EAAE,MAAM,EAEX,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACzB,OAAO,CAAC;AAEb,UAAU,iBAAiB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,mBAAmB,GAAG,UAAU,CAAC;CACnD;AAED,KAAK,YAAY,GAAG,MAAM,GAAG,iBAAiB,GAAG,CAAC,MAAM,GAAG,iBAAiB,CAAC,CAAC;AAE9E,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAC;CAC7B;AAED,KAAK,cAAc,CAAC,CAAC,SAAS,YAAY,EAAE,CAAC,SAAS,UAAU,IAAI,CAAC,SAAS;IAC5E,MAAM,GAAG,iBAAiB;CAC3B,GACG,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,GACtC,CAAC,SAAS,MAAM,GACd,MAAM,GAAG,SAAS,GAClB,CAAC,SAAS,iBAAiB,GACzB,CAAC,CAAC,OAAO,CAAC,SAAS,UAAU,GAC3B,YAAY,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,GACpC,CAAC,CAAC,OAAO,CAAC,SAAS,mBAAmB,GACpC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,SAAS,GAClC,UAAU,CAAC,OAAO,IAAI,CAAC,GAAG,SAAS,GACvC,KAAK,CAAC;AAEd,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,UAAU,IAAI;KAC9C,GAAG,IAAI,MAAM,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;CAC5C,CAAC;AAeF;;;;;;;GAOG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,OAAO,EAC7D,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,EAChB,GAAG,EAAE,CAAC,GACL,YAAY,CAAC,CAAC,CAAC,CA2BjB"} \ No newline at end of file diff --git a/node_modules/cheerio/dist/browser/api/extract.js b/node_modules/cheerio/dist/browser/api/extract.js new file mode 100644 index 0000000..7203789 --- /dev/null +++ b/node_modules/cheerio/dist/browser/api/extract.js @@ -0,0 +1,42 @@ +function getExtractDescr(descr) { + var _a; + if (typeof descr === 'string') { + return { selector: descr, value: 'textContent' }; + } + return { + selector: descr.selector, + value: (_a = descr.value) !== null && _a !== void 0 ? _a : 'textContent', + }; +} +/** + * Extract multiple values from a document, and store them in an object. + * + * @param map - An object containing key-value pairs. The keys are the names of + * the properties to be created on the object, and the values are the + * selectors to be used to extract the values. + * @returns An object containing the extracted values. + */ +export function extract(map) { + const ret = {}; + for (const key in map) { + const descr = map[key]; + const isArray = Array.isArray(descr); + const { selector, value } = getExtractDescr(isArray ? descr[0] : descr); + const fn = typeof value === 'function' + ? value + : typeof value === 'string' + ? (el) => this._make(el).prop(value) + : (el) => this._make(el).extract(value); + if (isArray) { + ret[key] = this._findBySelector(selector, Number.POSITIVE_INFINITY) + .map((_, el) => fn(el, key, ret)) + .get(); + } + else { + const $ = this._findBySelector(selector, 1); + ret[key] = $.length > 0 ? fn($[0], key, ret) : undefined; + } + } + return ret; +} +//# sourceMappingURL=extract.js.map \ No newline at end of file diff --git a/node_modules/cheerio/dist/browser/api/extract.js.map b/node_modules/cheerio/dist/browser/api/extract.js.map new file mode 100644 index 0000000..b6cd793 --- /dev/null +++ b/node_modules/cheerio/dist/browser/api/extract.js.map @@ -0,0 +1 @@ +{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../../src/api/extract.ts"],"names":[],"mappings":"AAwCA,SAAS,eAAe,CACtB,KAAiC;;IAEjC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;IACnD,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,KAAK,EAAE,MAAA,KAAK,CAAC,KAAK,mCAAI,aAAa;KACpC,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,OAAO,CAErB,GAAM;IAEN,MAAM,GAAG,GAA4B,EAAE,CAAC;IAExC,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAErC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAExE,MAAM,EAAE,GACN,OAAO,KAAK,KAAK,UAAU;YACzB,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ;gBACzB,CAAC,CAAC,CAAC,EAAW,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;gBAC7C,CAAC,CAAC,CAAC,EAAW,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAEvD,IAAI,OAAO,EAAE,CAAC;YACZ,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,iBAAiB,CAAC;iBAChE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;iBAChC,GAAG,EAAE,CAAC;QACX,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;YAC5C,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3D,CAAC;IACH,CAAC;IAED,OAAO,GAAsB,CAAC;AAChC,CAAC"} \ No newline at end of file diff --git a/node_modules/cheerio/dist/browser/api/forms.d.ts b/node_modules/cheerio/dist/browser/api/forms.d.ts new file mode 100644 index 0000000..dbec41e --- /dev/null +++ b/node_modules/cheerio/dist/browser/api/forms.d.ts @@ -0,0 +1,36 @@ +import { type AnyNode } from 'domhandler'; +import type { Cheerio } from '../cheerio.js'; +/** + * Encode a set of form elements as a string for submission. + * + * @category Forms + * @example + * + * ```js + * $('
    ').serialize(); + * //=> 'foo=bar' + * ``` + * + * @returns The serialized form. + * @see {@link https://api.jquery.com/serialize/} + */ +export declare function serialize(this: Cheerio): string; +/** + * Encode a set of form elements as an array of names and values. + * + * @category Forms + * @example + * + * ```js + * $('
    ').serializeArray(); + * //=> [ { name: 'foo', value: 'bar' } ] + * ``` + * + * @returns The serialized form. + * @see {@link https://api.jquery.com/serializeArray/} + */ +export declare function serializeArray(this: Cheerio): { + name: string; + value: string; +}[]; +//# sourceMappingURL=forms.d.ts.map \ No newline at end of file diff --git a/node_modules/cheerio/dist/browser/api/forms.d.ts.map b/node_modules/cheerio/dist/browser/api/forms.d.ts.map new file mode 100644 index 0000000..2ea55e4 --- /dev/null +++ b/node_modules/cheerio/dist/browser/api/forms.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"forms.d.ts","sourceRoot":"","sources":["../../../src/api/forms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,OAAO,EAAE,MAAM,YAAY,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAU7C;;;;;;;;;;;;;GAaG;AACH,wBAAgB,SAAS,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAYrE;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,OAAO,EAC9C,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,GACf;IACD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACf,EAAE,CA4CF"} \ No newline at end of file diff --git a/node_modules/cheerio/dist/browser/api/forms.js b/node_modules/cheerio/dist/browser/api/forms.js new file mode 100644 index 0000000..30853e1 --- /dev/null +++ b/node_modules/cheerio/dist/browser/api/forms.js @@ -0,0 +1,81 @@ +import { isTag } from 'domhandler'; +/* + * https://github.com/jquery/jquery/blob/2.1.3/src/manipulation/var/rcheckableType.js + * https://github.com/jquery/jquery/blob/2.1.3/src/serialize.js + */ +const submittableSelector = 'input,select,textarea,keygen'; +const r20 = /%20/g; +const rCRLF = /\r?\n/g; +/** + * Encode a set of form elements as a string for submission. + * + * @category Forms + * @example + * + * ```js + * $('
    ').serialize(); + * //=> 'foo=bar' + * ``` + * + * @returns The serialized form. + * @see {@link https://api.jquery.com/serialize/} + */ +export function serialize() { + // Convert form elements into name/value objects + const arr = this.serializeArray(); + // Serialize each element into a key/value string + const retArr = arr.map((data) => `${encodeURIComponent(data.name)}=${encodeURIComponent(data.value)}`); + // Return the resulting serialization + return retArr.join('&').replace(r20, '+'); +} +/** + * Encode a set of form elements as an array of names and values. + * + * @category Forms + * @example + * + * ```js + * $('
    ').serializeArray(); + * //=> [ { name: 'foo', value: 'bar' } ] + * ``` + * + * @returns The serialized form. + * @see {@link https://api.jquery.com/serializeArray/} + */ +export function serializeArray() { + // Resolve all form elements from either forms or collections of form elements + return this.map((_, elem) => { + const $elem = this._make(elem); + if (isTag(elem) && elem.name === 'form') { + return $elem.find(submittableSelector).toArray(); + } + return $elem.filter(submittableSelector).toArray(); + }) + .filter( + // Verify elements have a name (`attr.name`) and are not disabled (`:enabled`) + '[name!=""]:enabled' + + // And cannot be clicked (`[type=submit]`) or are used in `x-www-form-urlencoded` (`[type=file]`) + ':not(:submit, :button, :image, :reset, :file)' + + // And are either checked/don't have a checkable state + ':matches([checked], :not(:checkbox, :radio))') + .map((_, elem) => { + var _a; + const $elem = this._make(elem); + const name = $elem.attr('name'); // We have filtered for elements with a name before. + // If there is no value set (e.g. `undefined`, `null`), then default value to empty + const value = (_a = $elem.val()) !== null && _a !== void 0 ? _a : ''; + // If we have an array of values (e.g. `', + '
    ', +].join(''); + +export const noscript: string = [ + '', + '', + '

    Rocks!

    ', + '', +].join(''); + +export const script: string = [ + '
    ', + 'A', + '', + 'B', + '
    ', +].join(''); + +export const mixedText = '1TEXT2'; diff --git a/node_modules/cheerio/src/__tests__/deprecated.spec.ts b/node_modules/cheerio/src/__tests__/deprecated.spec.ts new file mode 100644 index 0000000..493b8c7 --- /dev/null +++ b/node_modules/cheerio/src/__tests__/deprecated.spec.ts @@ -0,0 +1,266 @@ +/** + * This file includes tests for deprecated APIs. The methods are expected to be + * removed in the next major release of Cheerio, but their stability should be + * maintained until that time. + */ +import { describe, it, expect, beforeEach } from 'vitest'; +import { cheerio, food, fruits } from '../__fixtures__/fixtures.js'; + +describe('deprecated APIs', () => { + describe('cheerio module', () => { + describe('.parseHTML', () => { + it('(html) : should preserve content', () => { + const html = '
    test div
    '; + expect(cheerio(cheerio.parseHTML(html)[0]).html()).toBe('test div'); + }); + }); + + describe('.merge', () => { + it('should be a function', () => { + expect(typeof cheerio.merge).toBe('function'); + }); + + // #1674 - merge, wont accept Cheerio object + it('should be a able merge array and cheerio object', () => { + const ret = cheerio.merge(cheerio(), ['elem1', 'elem2']); + expect(typeof ret).toBe('object'); + expect(ret).toHaveLength(2); + }); + + it('(arraylike, arraylike) : should modify the first array, but not the second', () => { + const arr1 = [1, 2, 3]; + const arr2 = [4, 5, 6]; + const ret = cheerio.merge(arr1, arr2); + + expect(typeof ret).toBe('object'); + expect(Array.isArray(ret)).toBe(true); + expect(ret).toBe(arr1); + expect(arr1).toHaveLength(6); + expect(arr2).toHaveLength(3); + }); + + it('(arraylike, arraylike) : should handle objects that arent arrays, but are arraylike', () => { + const arr1: ArrayLike = { + length: 3, + 0: 'a', + 1: 'b', + 2: 'c', + }; + const arr2 = { + length: 3, + 0: 'd', + 1: 'e', + 2: 'f', + }; + + cheerio.merge(arr1, arr2); + expect(arr1).toHaveLength(6); + expect(arr1[3]).toBe('d'); + expect(arr1[4]).toBe('e'); + expect(arr1[5]).toBe('f'); + expect(arr2).toHaveLength(3); + }); + + it('(?, ?) : should gracefully reject invalid inputs', () => { + expect(cheerio.merge([4], 3 as never)).toBeUndefined(); + expect(cheerio.merge({} as never, {} as never)).toBeUndefined(); + expect(cheerio.merge([], {} as never)).toBeUndefined(); + expect(cheerio.merge({} as never, [])).toBeUndefined(); + + const fakeArray = { length: 3, 0: 'a', 1: 'b', 3: 'd' }; + expect(cheerio.merge(fakeArray, [])).toBeUndefined(); + expect(cheerio.merge([], fakeArray)).toBeUndefined(); + + expect(cheerio.merge({ length: '7' } as never, [])).toBeUndefined(); + expect(cheerio.merge({ length: -1 }, [])).toBeUndefined(); + }); + + it('(?, ?) : should no-op on invalid inputs', () => { + const fakeArray1 = { length: 3, 0: 'a', 1: 'b', 3: 'd' }; + cheerio.merge(fakeArray1, []); + expect(fakeArray1).toHaveLength(3); + expect(fakeArray1[0]).toBe('a'); + expect(fakeArray1[1]).toBe('b'); + expect(fakeArray1[3]).toBe('d'); + cheerio.merge([], fakeArray1); + expect(fakeArray1).toHaveLength(3); + expect(fakeArray1[0]).toBe('a'); + expect(fakeArray1[1]).toBe('b'); + expect(fakeArray1[3]).toBe('d'); + }); + }); + + describe('.contains', () => { + let $: typeof cheerio; + + beforeEach(() => { + $ = cheerio.load(food); + }); + + it('(container, contained) : should correctly detect the provided element', () => { + const $food = $('#food'); + const $fruits = $('#fruits'); + const $apple = $('.apple'); + + expect(cheerio.contains($food[0], $fruits[0])).toBe(true); + expect(cheerio.contains($food[0], $apple[0])).toBe(true); + }); + + it('(container, other) : should not detect elements that are not contained', () => { + const $fruits = $('#fruits'); + const $vegetables = $('#vegetables'); + const $apple = $('.apple'); + + expect(cheerio.contains($vegetables[0], $apple[0])).toBe(false); + expect(cheerio.contains($fruits[0], $vegetables[0])).toBe(false); + expect(cheerio.contains($vegetables[0], $fruits[0])).toBe(false); + expect(cheerio.contains($fruits[0], $fruits[0])).toBe(false); + expect(cheerio.contains($vegetables[0], $vegetables[0])).toBe(false); + }); + }); + + describe('.root', () => { + it('returns an empty selection', () => { + const $empty = cheerio.root(); + expect($empty).toHaveLength(1); + expect($empty[0].children).toHaveLength(0); + }); + }); + }); + + describe('Cheerio function', () => { + it('.load', () => { + const $1 = cheerio.load(fruits); + const $2 = $1.load('

    Some text.

    '); + + expect($2('a')).toHaveLength(1); + }); + + /** + * The `.html` static method defined on the "loaded" Cheerio factory + * function is deprecated. + * + * In order to promote consistency with the jQuery library, users are + * encouraged to instead use the instance method of the same name. + * + * @example + * + * ```js + * const $ = cheerio.load('

    Hello, world.

    '); + * + * $('h1').html(); + * //=> '

    Hello, world.' + * ``` + * + * @example To render the markup of an entire document, invoke the + * `html` function exported by the Cheerio module with a "root" + * selection. + * + * ```js + * cheerio.html($.root()); + * //=> '

    Hello, world.

    ' + * ``` + */ + describe('.html - deprecated API', () => { + it('() : of empty cheerio object should return null', () => { + /* + * Note: the direct invocation of the Cheerio constructor function is + * also deprecated. + */ + const $ = cheerio(); + expect($.html()).toBe(null); + }); + + it('(selector) : should return the outerHTML of the selected element', () => { + const $ = cheerio.load(fruits); + expect($.html('.pear')).toBe('
  • Pear
  • '); + }); + }); + + /** + * The `.xml` static method defined on the "loaded" Cheerio factory function + * is deprecated. Users are encouraged to instead use the `xml` function + * exported by the Cheerio module. + * + * @example + * + * ```js + * cheerio.xml($.root()); + * ``` + */ + describe('.xml - deprecated API', () => { + it('() : renders XML', () => { + const $ = cheerio.load('', { xmlMode: true }); + expect($.xml()).toBe(''); + }); + }); + + /** + * The `.text` static method defined on the "loaded" Cheerio factory + * function is deprecated. + * + * In order to promote consistency with the jQuery library, users are + * encouraged to instead use the instance method of the same name. + * + * @example + * + * ```js + * const $ = cheerio.load('

    Hello, world.

    '); + * $('h1').text(); + * //=> 'Hello, world.' + * ``` + * + * @example To render the text content of an entire document, + * invoke the `text` function exported by the Cheerio module with a "root" + * selection. + * + * ```js + * cheerio.text($.root()); + * //=> 'Hello, world.' + * ``` + */ + describe('.text - deprecated API', () => { + it('(cheerio object) : should return the text contents of the specified elements', () => { + const $ = cheerio.load('This is content.'); + expect($.text($('a'))).toBe('This is content.'); + }); + + it('(cheerio object) : should omit comment nodes', () => { + const $ = cheerio.load( + 'This is not a comment.', + ); + expect($.text($('a'))).toBe('This is not a comment.'); + }); + + it('(cheerio object) : should include text contents of children recursively', () => { + const $ = cheerio.load( + 'This is
    a child with another child and not a comment followed by one last child and some final
    text.
    ', + ); + expect($.text($('a'))).toBe( + 'This is a child with another child and not a comment followed by one last child and some final text.', + ); + }); + + it('() : should return the rendered text content of the root', () => { + const $ = cheerio.load( + 'This is
    a child with another child and not a comment followed by one last child and some final
    text.
    ', + ); + expect($.text()).toBe( + 'This is a child with another child and not a comment followed by one last child and some final text.', + ); + }); + + it('(cheerio object) : should not omit script tags', () => { + const $ = cheerio.load(''); + expect($.text()).toBe('console.log("test")'); + }); + + it('(cheerio object) : should omit style tags', () => { + const $ = cheerio.load( + '', + ); + expect($.text()).toBe('.cf-hidden { display: none; }'); + }); + }); + }); +}); diff --git a/node_modules/cheerio/src/__tests__/xml.spec.ts b/node_modules/cheerio/src/__tests__/xml.spec.ts new file mode 100644 index 0000000..22d32fe --- /dev/null +++ b/node_modules/cheerio/src/__tests__/xml.spec.ts @@ -0,0 +1,66 @@ +import { describe, it, expect } from 'vitest'; +import { load } from '../index.js'; +import type { CheerioOptions } from '../options.js'; + +function xml(str: string, options?: CheerioOptions) { + options = { xml: true, ...options }; + const $ = load(str, options); + return $.xml(); +} + +function dom(str: string, options?: CheerioOptions) { + const $ = load('', options); + return $(str).html(); +} + +describe('render', () => { + describe('(xml)', () => { + it('should render tags correctly', () => { + const str = + ''; + expect(xml(str)).toBe( + '', + ); + }); + + it('should render tags (RSS) correctly', () => { + const str = 'http://www.github.com/'; + expect(xml(str)).toBe('http://www.github.com/'); + }); + + it('should escape entities', () => { + const str = ''; + expect(xml(str)).toBe(str); + }); + + it('should render HTML as XML', () => { + const $ = load('', null, false); + expect($.xml()).toBe(''); + }); + }); + + describe('(dom)', () => { + it('should not keep camelCase for new nodes', () => { + const str = 'hello'; + expect(dom(str, { xml: false })).toBe( + 'hello', + ); + }); + + it('should keep camelCase for new nodes', () => { + const str = 'hello'; + expect(dom(str, { xml: true })).toBe( + 'hello', + ); + }); + + it('should maintain the parsing options of distinct contexts independently', () => { + const str = 'hello'; + const $ = load('', { xml: false }); + + expect($(str).html()).toBe( + 'hello', + ); + }); + }); +}); diff --git a/node_modules/cheerio/src/api/attributes.spec.ts b/node_modules/cheerio/src/api/attributes.spec.ts new file mode 100644 index 0000000..9b1c64c --- /dev/null +++ b/node_modules/cheerio/src/api/attributes.spec.ts @@ -0,0 +1,1165 @@ +import { describe, it, expect, beforeEach } from 'vitest'; +import { load, type CheerioAPI, type Cheerio } from '../index.js'; +import type { Element } from 'domhandler'; +import { + cheerio, + script, + fruits, + vegetables, + food, + chocolates, + inputs, + mixedText, +} from '../__fixtures__/fixtures.js'; + +function withClass(attr: string) { + return cheerio(`
    `); +} + +describe('$(...)', () => { + describe('.attr', () => { + let $: CheerioAPI; + + beforeEach(() => { + $ = load(fruits); + }); + + it('() : should get all the attributes', () => { + const attrs = $('ul').attr(); + expect(attrs).toHaveProperty('id', 'fruits'); + }); + + it('(invalid key) : invalid attr should get undefined', () => { + const attr = $('.apple').attr('lol'); + expect(attr).toBeUndefined(); + }); + + it('(valid key) : valid attr should get value', () => { + const cls = $('.apple').attr('class'); + expect(cls).toBe('apple'); + }); + + it('(valid key) : valid attr should get name when boolean', () => { + const attr = $('').attr('autofocus'); + expect(attr).toBe('autofocus'); + }); + + it('(key, value) : should set one attr', () => { + const $pear = $('.pear').attr('id', 'pear'); + expect($('#pear')).toHaveLength(1); + expect($pear).toBeInstanceOf($); + }); + + it('(key, value) : should set multiple attr', () => { + const $el = cheerio('
    ').attr( + 'class', + 'pear', + ) as Cheerio; + + expect($el[0].attribs).toHaveProperty('class', 'pear'); + expect($el[1].attribs).toBeUndefined(); + expect($el[2].attribs).toHaveProperty('class', 'pear'); + }); + + it('(key, value) : should return an empty object for an empty object', () => { + const $src = $().attr('key', 'value'); + expect($src.length).toBe(0); + expect($src[0]).toBeUndefined(); + }); + + it('(map) : object map should set multiple attributes', () => { + $('.apple').attr({ + id: 'apple', + style: 'color:red;', + 'data-url': 'http://apple.com', + }); + const attrs = $('.apple').attr(); + expect(attrs).toHaveProperty('id', 'apple'); + expect(attrs).toHaveProperty('style', 'color:red;'); + expect(attrs).toHaveProperty('data-url', 'http://apple.com'); + }); + + it('(map, val) : should throw with wrong combination of arguments', () => { + expect(() => + $('.apple').attr( + { + id: 'apple', + style: 'color:red;', + 'data-url': 'http://apple.com', + } as never, + () => '', + ), + ).toThrow('Bad combination of arguments.'); + }); + + it('(key, function) : should call the function and update the attribute with the return value', () => { + const $fruits = $('#fruits'); + $fruits.attr('id', (index, value) => { + expect(index).toBe(0); + expect(value).toBe('fruits'); + return 'ninja'; + }); + const attrs = $fruits.attr(); + expect(attrs).toHaveProperty('id', 'ninja'); + }); + + it('(key, function) : should ignore text nodes', () => { + const $text = $(mixedText); + $text.attr('class', () => 'ninja'); + const className = $text.attr('class'); + expect(className).toBe('ninja'); + }); + + it('(key, value) : should correctly encode then decode unsafe values', () => { + const $apple = $('.apple'); + $apple.attr( + 'href', + 'http://github.com/">alert("XSS!")'); + }); + + it('(key, value) : should coerce values to a string', () => { + const $apple = $('.apple'); + $apple.attr('data-test', 1 as never); + expect($apple[0].attribs['data-test']).toBe('1'); + expect($apple.attr('data-test')).toBe('1'); + }); + + it('(key, value) : handle removed boolean attributes', () => { + const $apple = $('.apple'); + $apple.attr('autofocus', 'autofocus'); + expect($apple.attr('autofocus')).toBe('autofocus'); + $apple.removeAttr('autofocus'); + expect($apple.attr('autofocus')).toBeUndefined(); + }); + + it('(key, value) : should remove non-boolean attributes with names or values similar to boolean ones', () => { + const $apple = $('.apple'); + $apple.attr('data-autofocus', 'autofocus'); + expect($apple.attr('data-autofocus')).toBe('autofocus'); + $apple.removeAttr('data-autofocus'); + expect($apple.attr('data-autofocus')).toBeUndefined(); + }); + + it('(key, value) : should remove attributes when called with null value', () => { + const $pear = $('.pear').attr('autofocus', 'autofocus'); + expect($pear.attr('autofocus')).toBe('autofocus'); + $pear.attr('autofocus', null); + expect($pear.attr('autofocus')).toBeUndefined(); + }); + + it('(map) : should remove attributes with null values', () => { + const $pear = $('.pear').attr({ + autofocus: 'autofocus', + style: 'color:red', + }); + expect($pear.attr('autofocus')).toBe('autofocus'); + expect($pear.attr('style')).toBe('color:red'); + $pear.attr({ autofocus: null, style: 'color:blue' }); + expect($pear.attr('autofocus')).toBeUndefined(); + expect($pear.attr('style')).toBe('color:blue'); + }); + + it('(chaining) setting value and calling attr returns result', () => { + const pearAttr = $('.pear').attr('foo', 'bar').attr('foo'); + expect(pearAttr).toBe('bar'); + }); + + it('(chaining) setting attr to null returns a $', () => { + const $pear = $('.pear').attr('foo', null); + expect($pear).toBeInstanceOf($); + }); + + it('(chaining) setting attr to undefined returns a $', () => { + const $pear = $('.pear').attr('foo', undefined); + expect($('.pear')).toHaveLength(1); + expect($('.pear').attr('foo')).toBeUndefined(); + expect($pear).toBeInstanceOf($); + }); + + it("(bool) shouldn't treat boolean attributes differently in XML mode", () => { + const $xml = $.load(``, { + xml: true, + })('input'); + + expect($xml.attr('checked')).toBe('checked'); + expect($xml.attr('disabled')).toBe('yes'); + }); + }); + + describe('.prop', () => { + let $: CheerioAPI; + let checkbox: Cheerio; + + beforeEach(() => { + $ = load(inputs); + checkbox = $('input[name=checkbox_on]'); + }); + + it('(valid key) : valid prop should get value', () => { + expect(checkbox.prop('checked')).toBe(true); + checkbox.css('display', 'none'); + expect(checkbox.prop('style')).toHaveProperty('display', 'none'); + expect(checkbox.prop('style')).toHaveLength(1); + expect(checkbox.prop('style')).toContain('display'); + expect(checkbox.prop('tagName')).toBe('INPUT'); + expect(checkbox.prop('nodeName')).toBe('INPUT'); + }); + + it('(valid key) : should return on empty collection', () => { + expect($(undefined).prop('checked')).toBeUndefined(); + expect($(undefined).prop('style')).toBeUndefined(); + expect($(undefined).prop('tagName')).toBeUndefined(); + expect($(undefined).prop('nodeName')).toBeUndefined(); + }); + + it('(invalid key) : invalid prop should get undefined', () => { + expect(checkbox.prop('lol')).toBeUndefined(); + expect(checkbox.prop(4 as never)).toBeUndefined(); + expect(checkbox.prop(true as never)).toBeUndefined(); + }); + + it('(key, value) : should set prop', () => { + expect(checkbox.prop('checked')).toBe(true); + checkbox.prop('checked', false); + expect(checkbox.prop('checked')).toBe(false); + checkbox.prop('checked', true); + expect(checkbox.prop('checked')).toBe(true); + }); + + it('(key, value) : should update attribute', () => { + expect(checkbox.prop('checked')).toBe(true); + expect(checkbox.attr('checked')).toBe('checked'); + checkbox.prop('checked', false); + expect(checkbox.prop('checked')).toBe(false); + expect(checkbox.attr('checked')).toBeUndefined(); + checkbox.prop('checked', true); + expect(checkbox.prop('checked')).toBe(true); + expect(checkbox.attr('checked')).toBe('checked'); + }); + + it('(key, value) : should update namespace', () => { + const imgs = $('\n\n\n\n'); + const nsHtml = 'http://www.w3.org/1999/xhtml'; + imgs.prop('src', '#').prop('namespace', nsHtml); + expect(imgs.prop('namespace')).toBe(nsHtml); + imgs.prop('attribs', null); + expect(imgs.prop('src')).toBeUndefined(); + expect(imgs.prop('data-foo')).toBeUndefined(); + }); + + it('(key, value) : should ignore empty collection', () => { + expect($(undefined).prop('checked')).toBeUndefined(); + $(undefined).prop('checked', true); + expect($(undefined).prop('checked')).toBeUndefined(); + }); + + it('(map) : object map should set multiple props', () => { + checkbox.prop({ + id: 'check', + checked: false, + }); + expect(checkbox.prop('id')).toBe('check'); + expect(checkbox.prop('checked')).toBe(false); + }); + + it('(map, val) : should throw with wrong combination of arguments', () => { + expect(() => + $('.apple').prop( + { + id: 'check', + checked: false, + } as never, + () => '', + ), + ).toThrow('Bad combination of arguments.'); + }); + + it('(key, function) : should call the function and update the prop with the return value', () => { + checkbox.prop('checked', (index, value) => { + expect(index).toBe(0); + expect(value).toBe(true); + return false; + }); + expect(checkbox.prop('checked')).toBe(false); + }); + + it('(key, value) : should support chaining after setting props', () => { + expect(checkbox.prop('checked', false)).toBe(checkbox); + }); + + it('(invalid element/tag) : prop should return undefined', () => { + expect($(undefined).prop('prop')).toBeUndefined(); + expect($(null as never).prop('prop')).toBeUndefined(); + }); + + it('("href") : should resolve links with `baseURI`', () => { + const $ = load( + ` + example1 + example2 + example3 + example4 + `, + { baseURI: 'http://example.com/page/1' }, + ); + + expect($('#1').prop('href')).toBe('http://example.org/'); + expect($('#2').prop('href')).toBe('http://example.org/'); + expect($('#3').prop('href')).toBe('http://example.com/example.org'); + expect($('#4').prop('href')).toBe('http://example.com/page/example.org'); + + expect($(undefined).prop('href')).toBeUndefined(); + }); + + it('("src") : should resolve links with `baseURI`', () => { + const $ = load( + ` + + + + + `, + { baseURI: 'http://example.com/page/1' }, + ); + + expect($('#1').prop('src')).toBe('http://example.org/image.png'); + expect($('#2').prop('src')).toBe('http://example.org/page.html'); + expect($('#3').prop('src')).toBe( + 'http://example.com/example.org/song.mp3', + ); + expect($('#4').prop('src')).toBe( + 'http://example.com/page/example.org/image.png', + ); + + expect($(undefined).prop('src')).toBeUndefined(); + }); + + it('("outerHTML") : should render properly', () => { + const outerHtml = '
    '; + const $a = $(outerHtml); + + expect($a.prop('outerHTML')).toBe(outerHtml); + + expect($(undefined).prop('outerHTML')).toBeUndefined(); + }); + + it('("innerHTML") : should render properly', () => { + const $a = $('
    '); + + expect($a.prop('innerHTML')).toBe(''); + + expect($(undefined).prop('innerHTML')).toBeUndefined(); + }); + + it('("textContent") : should render properly', () => { + expect($('select').children().prop('textContent')).toBe( + 'Option not selected', + ); + + expect($(script).prop('textContent')).toBe('A var foo = "bar";B'); + + expect($(undefined).prop('textContent')).toBeUndefined(); + }); + + it('("textContent") : should include style and script tags', () => { + const $ = load( + 'Welcome
    Hello, testing text function,
    End of message', + ); + expect($('body').prop('textContent')).toBe( + 'Welcome Hello, testing text function,console.log("hello").cf-hidden { display: none; }End of message', + ); + expect($('style').prop('textContent')).toBe( + '.cf-hidden { display: none; }', + ); + expect($('script').prop('textContent')).toBe('console.log("hello")'); + }); + + it('("innerText") : should render properly', () => { + expect($('select').children().prop('innerText')).toBe( + 'Option not selected', + ); + + expect($(script).prop('innerText')).toBe('AB'); + + expect($(undefined).prop('innerText')).toBeUndefined(); + }); + + it('("innerText") : should omit style and script tags', () => { + const $ = load( + 'Welcome
    Hello, testing text function,
    End of message', + ); + expect($('body').prop('innerText')).toBe( + 'Welcome Hello, testing text function,End of message', + ); + expect($('style').prop('innerText')).toBe(''); + expect($('script').prop('innerText')).toBe(''); + }); + + it('(inherited properties) : prop should support inherited properties', () => { + expect($('select').prop('childNodes')).toBe($('select')[0].childNodes); + }); + + it('(key) : should skip text nodes', () => { + const $text = load(mixedText); + const $body = $text($text('body')[0].children); + + expect($text($body[1]).prop('tagName')).toBeUndefined(); + + $body.prop('test-name', () => 'tester'); + expect($text('body').html()).toBe( + '1TEXT2', + ); + }); + + it("(bool) shouldn't treat boolean attributes differently in XML mode", () => { + const $xml = $.load(``, { + xml: true, + })('input'); + + expect($xml.prop('checked')).toBe('checked'); + expect($xml.prop('disabled')).toBe('yes'); + }); + }); + + describe('.data', () => { + let $: CheerioAPI; + + beforeEach(() => { + $ = load(chocolates); + }); + + it('() : should get all data attributes initially declared in the markup', () => { + const data = $('.linth').data(); + expect(data).toStrictEqual({ + highlight: 'Lindor', + origin: 'swiss', + }); + }); + + it('() : should get all data set via `data`', () => { + const $el = cheerio('
    '); + $el.data('a', 1); + $el.data('b', 2); + + expect($el.data()).toStrictEqual({ + a: 1, + b: 2, + }); + }); + + it('() : should get all data attributes initially declared in the markup merged with all data additionally set via `data`', () => { + const $el = cheerio('
    '); + $el.data('b', 'b-modified'); + $el.data('c', 'c'); + + expect($el.data()).toStrictEqual({ + a: 'a', + b: 'b-modified', + c: 'c', + }); + }); + + it('() : no data attribute should return an empty object', () => { + const data = $('.cailler').data(); + expect(Object.keys(data)).toHaveLength(0); + expect($('.free').data()).toBeUndefined(); + }); + + it('(invalid key) : invalid data attribute should return `undefined`', () => { + const data = $('.frey').data('lol'); + expect(data).toBeUndefined(); + }); + + it('(valid key) : valid data attribute should get value', () => { + const highlight = $('.linth').data('highlight'); + const origin = $('.linth').data('origin'); + + expect(highlight).toBe('Lindor'); + expect(origin).toBe('swiss'); + }); + + it('(key) : should translate camel-cased key values to hyphen-separated versions', () => { + const $el = cheerio( + '
    ', + ); + + expect($el.data('ThreeWordAttribute')).toBe('a'); + expect($el.data('fooBar_baz-')).toBe('b'); + }); + + it('(key) : should retrieve object values', () => { + const data = {}; + const $el = cheerio('
    '); + + $el.data('test', data); + + expect($el.data('test')).toBe(data); + }); + + it('(key) : should parse JSON data derived from the markup', () => { + const $el = cheerio('
    '); + + expect($el.data('json')).toStrictEqual([1, 2, 3]); + }); + + it('(key) : should not parse JSON data set via the `data` API', () => { + const $el = cheerio('
    '); + $el.data('json', '[1, 2, 3]'); + + expect($el.data('json')).toBe('[1, 2, 3]'); + }); + + // See https://api.jquery.com/data/ and https://bugs.jquery.com/ticket/14523 + it('(key) : should ignore the markup value after the first access', () => { + const $el = cheerio('
    '); + + expect($el.data('test')).toBe('a'); + + $el.attr('data-test', 'b'); + + expect($el.data('test')).toBe('a'); + }); + + it('(key) : should recover from malformed JSON', () => { + const $el = cheerio('
    '); + + expect($el.data('custom')).toBe('{{templatevar}}'); + }); + + it('("") : should accept the empty string as a name', () => { + const $el = cheerio('
    '); + + expect($el.data('')).toBe('a'); + }); + + it('(hyphen key) : data addribute with hyphen should be camelized ;-)', () => { + const data = $('.frey').data(); + expect(data).toStrictEqual({ + taste: 'sweet', + bestCollection: 'Mahony', + }); + }); + + it('(key, value) : should set data attribute', () => { + // Adding as object. + const a = $('.frey').data({ + balls: 'giandor', + }); + // Adding as string. + const b = $('.linth').data('snack', 'chocoletti'); + + expect(() => { + a.data(4 as never, 'throw'); + }).not.toThrow(); + expect(a.data('balls')).toStrictEqual('giandor'); + expect(b.data('snack')).toStrictEqual('chocoletti'); + }); + + it('(key, value) : should set data for all elements in the selection', () => { + $('li').data('foo', 'bar'); + + expect($('li').eq(0).data('foo')).toStrictEqual('bar'); + expect($('li').eq(1).data('foo')).toStrictEqual('bar'); + expect($('li').eq(2).data('foo')).toStrictEqual('bar'); + }); + + it('(map) : object map should set multiple data attributes', () => { + const { data } = $('.linth').data({ + id: 'Cailler', + flop: 'Pippilotti Rist', + top: 'Frigor', + url: 'http://www.cailler.ch/', + })[0] as never; + + expect(data).toHaveProperty('id', 'Cailler'); + expect(data).toHaveProperty('flop', 'Pippilotti Rist'); + expect(data).toHaveProperty('top', 'Frigor'); + expect(data).toHaveProperty('url', 'http://www.cailler.ch/'); + }); + + describe('(attr) : data-* attribute type coercion :', () => { + it('boolean', () => { + const $el = cheerio('
    '); + expect($el.data('bool')).toBe(true); + }); + + it('number', () => { + const $el = cheerio('
    '); + expect($el.data('number')).toBe(23); + }); + + it('number (scientific notation is not coerced)', () => { + const $el = cheerio('
    '); + expect($el.data('sci')).toBe('1E10'); + }); + + it('null', () => { + const $el = cheerio('
    '); + expect($el.data('null')).toBe(null); + }); + + it('object', () => { + const $el = cheerio('
    '); + expect($el.data('obj')).toStrictEqual({ a: 45 }); + }); + + it('array', () => { + const $el = cheerio('
    '); + expect($el.data('array')).toStrictEqual([1, 2, 3]); + }); + }); + + it('(key, value) : should skip text nodes', () => { + const $text = load(mixedText); + const $body = $text($text('body')[0].children); + + $body.data('snack', 'chocoletti'); + + expect($text('b').data('snack')).toBe('chocoletti'); + }); + }); + + describe('.val', () => { + let $: CheerioAPI; + + beforeEach(() => { + $ = load(inputs); + }); + + it('(): on div should get undefined', () => { + expect($('
    ').val()).toBeUndefined(); + }); + + it('(): on select should get value', () => { + const val = $('select#one').val(); + expect(val).toBe('option_selected'); + }); + it('(): on select with no value should get text', () => { + const val = $('select#one-valueless').val(); + expect(val).toBe('Option selected'); + }); + it('(): on select with no value should get converted HTML', () => { + const val = $('select#one-html-entity').val(); + expect(val).toBe('Option '); + }); + it('(): on select with no value should get text content', () => { + const val = $('select#one-nested').val(); + expect(val).toBe('Option selected'); + }); + it('(): on option should get value', () => { + const val = $('select#one option').eq(0).val(); + expect(val).toBe('option_not_selected'); + }); + it('(): on text input should get value', () => { + const val = $('input[type="text"]').val(); + expect(val).toBe('input_text'); + }); + it('(): on checked checkbox should get value', () => { + const val = $('input[name="checkbox_on"]').val(); + expect(val).toBe('on'); + }); + it('(): on unchecked checkbox should get value', () => { + const val = $('input[name="checkbox_off"]').val(); + expect(val).toBe('off'); + }); + it('(): on valueless checkbox should get value', () => { + const val = $('input[name="checkbox_valueless"]').val(); + expect(val).toBe('on'); + }); + it('(): on radio should get value', () => { + const val = $('input[type="radio"]').val(); + expect(val).toBe('off'); + }); + it('(): on valueless radio should get value', () => { + const val = $('input[name="radio_valueless"]').val(); + expect(val).toBe('on'); + }); + it('(): on multiple select should get an array of values', () => { + const val = $('select#multi').val(); + expect(val).toStrictEqual(['2', '3']); + }); + it('(): on multiple select with no value attribute should get an array of text content', () => { + const val = $('select#multi-valueless').val(); + expect(val).toStrictEqual(['2', '3']); + }); + it('(): with no selector matches should return nothing', () => { + const val = $('.nasty').val(); + expect(val).toBeUndefined(); + }); + it('(invalid value): should only handle arrays when it has the attribute multiple', () => { + const val = $('select#one').val([]); + expect(val).not.toBeUndefined(); + }); + it('(value): on empty set should get `this`', () => { + const $empty = $([]); + expect($empty.val('test')).toBe($empty); + }); + it('(value): on input text should set value', () => { + const element = $('input[type="text"]').val('test'); + expect(element.val()).toBe('test'); + }); + it('(value): on select should set value', () => { + const element = $('select#one').val('option_not_selected'); + expect(element.val()).toBe('option_not_selected'); + }); + it('(value): on option should set value', () => { + const element = $('select#one option').eq(0).val('option_changed'); + expect(element.val()).toBe('option_changed'); + }); + it('(value): on radio should set value', () => { + const element = $('input[name="radio"]').val('off'); + expect(element.val()).toBe('off'); + }); + it('(value): on radio with special characters should set value', () => { + const element = $('input[name="radio[brackets]"]').val('off'); + expect(element.val()).toBe('off'); + }); + it('(values): on multiple select should set multiple values', () => { + const element = $('select#multi').val(['1', '3', '4']); + expect(element.val()).toHaveLength(3); + }); + }); + + describe('.removeAttr', () => { + let $: CheerioAPI; + + beforeEach(() => { + $ = load(fruits); + }); + + it('(key) : should remove a single attr', () => { + const $fruits = $('#fruits'); + expect($fruits.attr('id')).not.toBeUndefined(); + $fruits.removeAttr('id'); + expect($fruits.attr('id')).toBeUndefined(); + }); + + it('(key key) : should remove multiple attrs', () => { + const $apple = $('.apple'); + $apple.attr('id', 'favorite'); + $apple.attr('size', 'small'); + + expect($apple.attr('id')).toBe('favorite'); + expect($apple.attr('class')).toBe('apple'); + expect($apple.attr('size')).toBe('small'); + $apple.removeAttr('id class'); + expect($apple.attr('id')).toBeUndefined(); + expect($apple.attr('class')).toBeUndefined(); + expect($apple.attr('size')).toBe('small'); + }); + + it('(key) : should return cheerio object', () => { + const obj = $('ul').removeAttr('id'); + expect(obj).toBeInstanceOf($); + }); + + it('(key) : should skip text nodes', () => { + const $text = load(mixedText); + const $body = $text($text('body')[0].children); + + $body.addClass(() => 'test'); + + expect($text('body').html()).toBe( + '1TEXT2', + ); + + $body.removeAttr('class'); + + expect($text('body').html()).toBe(mixedText); + }); + }); + + describe('.hasClass', () => { + let $: CheerioAPI; + + beforeEach(() => { + $ = load(fruits); + }); + + it('(valid class) : should return true', () => { + const cls = $('.apple').hasClass('apple'); + expect(cls).toBe(true); + + expect(withClass('foo').hasClass('foo')).toBe(true); + expect(withClass('foo bar').hasClass('foo')).toBe(true); + expect(withClass('bar foo').hasClass('foo')).toBe(true); + expect(withClass('bar foo bar').hasClass('foo')).toBe(true); + }); + + it('(invalid class) : should return false', () => { + const cls = $('#fruits').hasClass('fruits'); + expect(cls).toBe(false); + expect(withClass('foo-bar').hasClass('foo')).toBe(false); + expect(withClass('foo-bar').hasClass('foo')).toBe(false); + expect(withClass('foo-bar').hasClass('foo-ba')).toBe(false); + }); + + it('should check multiple classes', () => { + // Add a class + $('.apple').addClass('red'); + expect($('.apple').hasClass('apple')).toBe(true); + expect($('.apple').hasClass('red')).toBe(true); + + // Remove one and test again + $('.apple').removeClass('apple'); + expect($('li').eq(0).hasClass('apple')).toBe(false); + }); + + it('(empty string argument) : should return false', () => { + expect(withClass('foo').hasClass('')).toBe(false); + expect(withClass('foo bar').hasClass('')).toBe(false); + expect(withClass('foo bar').removeClass('foo').hasClass('')).toBe(false); + }); + }); + + describe('.addClass', () => { + let $: CheerioAPI; + + beforeEach(() => { + $ = load(fruits); + }); + + it('(first class) : should add the class to the element', () => { + const $fruits = $('#fruits'); + $fruits.addClass('fruits'); + const cls = $fruits.hasClass('fruits'); + expect(cls).toBe(true); + }); + + it('(single class) : should add the class to the element', () => { + $('.apple').addClass('fruit'); + const cls = $('.apple').hasClass('fruit'); + expect(cls).toBe(true); + }); + + it('(class): adds classes to many selected items', () => { + $('li').addClass('fruit'); + expect($('.apple').hasClass('fruit')).toBe(true); + expect($('.orange').hasClass('fruit')).toBe(true); + expect($('.pear').hasClass('fruit')).toBe(true); + + // Mixed with text nodes + const $red = $('\n
      \n
    \t').addClass('red'); + expect($red).toHaveLength(3); + expect($red[0].type).toBe('text'); + expect($red[1].type).toBe('tag'); + expect($red[2].type).toBe('text'); + expect($red.hasClass('red')).toBe(true); + }); + + it('(class class class) : should add multiple classes to the element', () => { + $('.apple').addClass('fruit red tasty'); + expect($('.apple').hasClass('apple')).toBe(true); + expect($('.apple').hasClass('fruit')).toBe(true); + expect($('.apple').hasClass('red')).toBe(true); + expect($('.apple').hasClass('tasty')).toBe(true); + }); + + it('(fn) : should add classes returned from the function', () => { + const $fruits = $('#fruits').children().add($('#fruits')); + const args: [i: number, className: string][] = []; + const thisVals: Element[] = []; + const toAdd = ['main', 'apple red', '', undefined]; + + $fruits.addClass(function (...myArgs) { + args.push(myArgs); + thisVals.push(this); + return toAdd[myArgs[0]]; + }); + + expect(args).toStrictEqual([ + [0, ''], + [1, 'apple'], + [2, 'orange'], + [3, 'pear'], + ]); + expect(thisVals).toStrictEqual([ + $fruits[0], + $fruits[1], + $fruits[2], + $fruits[3], + ]); + expect($fruits.eq(0).hasClass('main')).toBe(true); + expect($fruits.eq(0).hasClass('apple')).toBe(false); + expect($fruits.eq(1).hasClass('apple')).toBe(true); + expect($fruits.eq(1).hasClass('red')).toBe(true); + expect($fruits.eq(2).hasClass('orange')).toBe(true); + expect($fruits.eq(3).hasClass('pear')).toBe(true); + }); + }); + + describe('.removeClass', () => { + let $: CheerioAPI; + + beforeEach(() => { + $ = load(fruits); + }); + + it('() : should remove all the classes', () => { + $('.pear').addClass('fruit'); + $('.pear').removeClass(); + expect($('.pear').attr('class')).toBeUndefined(); + }); + + it('("") : should not modify class list', () => { + const $fruits = $('#fruits'); + $fruits.children().removeClass(''); + expect($('.apple')).toHaveLength(1); + }); + + it('(invalid class) : should not remove anything', () => { + $('.pear').removeClass('fruit'); + expect($('.pear').hasClass('pear')).toBe(true); + }); + + it('(no class attribute) : should not throw an exception', () => { + const $vegetables = cheerio(vegetables); + + expect(() => { + $('li', $vegetables).removeClass('vegetable'); + }).not.toThrow(); + }); + + it('(single class) : should remove a single class from the element', () => { + $('.pear').addClass('fruit'); + expect($('.pear').hasClass('fruit')).toBe(true); + $('.pear').removeClass('fruit'); + expect($('.pear').hasClass('fruit')).toBe(false); + expect($('.pear').hasClass('pear')).toBe(true); + + // Remove one class from set + const $li = $('li').removeClass('orange'); + expect($li.eq(0).attr('class')).toBe('apple'); + expect($li.eq(1).attr('class')).toBe(''); + expect($li.eq(2).attr('class')).toBe('pear'); + + // Mixed with text nodes + const $red = $('\n
      \n
    \t').removeClass( + 'one', + ); + expect($red).toHaveLength(3); + expect($red[0].type).toBe('text'); + expect($red[1].type).toBe('tag'); + expect($red[2].type).toBe('text'); + expect($red.eq(1).attr('class')).toBe(''); + expect($red.eq(1).prop('tagName')).toBe('UL'); + }); + + it('(single class) : should remove a single class from multiple classes on the element', () => { + $('.pear').addClass('fruit green tasty'); + expect($('.pear').hasClass('fruit')).toBe(true); + expect($('.pear').hasClass('green')).toBe(true); + expect($('.pear').hasClass('tasty')).toBe(true); + + $('.pear').removeClass('green'); + expect($('.pear').hasClass('fruit')).toBe(true); + expect($('.pear').hasClass('green')).toBe(false); + expect($('.pear').hasClass('tasty')).toBe(true); + }); + + it('(class class class) : should remove multiple classes from the element', () => { + $('.apple').addClass('fruit red tasty'); + expect($('.apple').hasClass('apple')).toBe(true); + expect($('.apple').hasClass('fruit')).toBe(true); + expect($('.apple').hasClass('red')).toBe(true); + expect($('.apple').hasClass('tasty')).toBe(true); + + $('.apple').removeClass('apple red tasty'); + expect($('.fruit').hasClass('apple')).toBe(false); + expect($('.fruit').hasClass('red')).toBe(false); + expect($('.fruit').hasClass('tasty')).toBe(false); + expect($('.fruit').hasClass('fruit')).toBe(true); + }); + + it('(class) : should remove all occurrences of a class name', () => { + const $div = cheerio('
    '); + expect($div.removeClass('x').hasClass('x')).toBe(false); + }); + + it('(fn) : should remove classes returned from the function', () => { + const $fruits = $('#fruits').children(); + const args: [number, string][] = []; + const thisVals: Element[] = []; + const toAdd = ['apple red', '', undefined]; + + $fruits.removeClass(function (...myArgs) { + args.push(myArgs); + thisVals.push(this); + return toAdd[myArgs[0]]; + }); + + expect(args).toStrictEqual([ + [0, 'apple'], + [1, 'orange'], + [2, 'pear'], + ]); + expect(thisVals).toStrictEqual([$fruits[0], $fruits[1], $fruits[2]]); + expect($fruits.eq(0).hasClass('apple')).toBe(false); + expect($fruits.eq(0).hasClass('red')).toBe(false); + expect($fruits.eq(1).hasClass('orange')).toBe(true); + expect($fruits.eq(2).hasClass('pear')).toBe(true); + }); + + it('(fn) : should no op elements without attributes', () => { + const $inputs = $(inputs); + const val = $inputs.removeClass(() => 'tasty'); + expect(val).toHaveLength(15); + }); + + it('(fn) : should skip text nodes', () => { + const $text = load(mixedText); + const $body = $text($text('body')[0].children); + + $body.addClass(() => 'test'); + + expect($text('body').html()).toBe( + '1TEXT2', + ); + + $body.removeClass(() => 'test'); + + expect($text('body').html()).toBe( + '1TEXT2', + ); + }); + }); + + describe('.toggleClass', () => { + let $: CheerioAPI; + + beforeEach(() => { + $ = load(fruits); + }); + + it('(class class) : should toggle multiple classes from the element', () => { + $('.apple').addClass('fruit'); + expect($('.apple').hasClass('apple')).toBe(true); + expect($('.apple').hasClass('fruit')).toBe(true); + expect($('.apple').hasClass('red')).toBe(false); + + $('.apple').toggleClass('apple red'); + expect($('.fruit').hasClass('apple')).toBe(false); + expect($('.fruit').hasClass('red')).toBe(true); + expect($('.fruit').hasClass('fruit')).toBe(true); + + // Mixed with text nodes + const $red = $('\n
      \n
    \t').toggleClass( + 'red', + ); + expect($red).toHaveLength(3); + expect($red.hasClass('red')).toBe(true); + expect($red.hasClass('one')).toBe(true); + $red.toggleClass('one'); + expect($red.hasClass('red')).toBe(true); + expect($red.hasClass('one')).toBe(false); + }); + + it('(class class, true) : should add multiple classes to the element', () => { + $('.apple').addClass('fruit'); + expect($('.apple').hasClass('apple')).toBe(true); + expect($('.apple').hasClass('fruit')).toBe(true); + expect($('.apple').hasClass('red')).toBe(false); + + $('.apple').toggleClass('apple red', true); + expect($('.fruit').hasClass('apple')).toBe(true); + expect($('.fruit').hasClass('red')).toBe(true); + expect($('.fruit').hasClass('fruit')).toBe(true); + }); + + it('(class true) : should add only one instance of class', () => { + $('.apple').toggleClass('tasty', true); + $('.apple').toggleClass('tasty', true); + expect($('.apple').attr('class')).toMatch(/tasty/g); + }); + + it('(class class, false) : should remove multiple classes from the element', () => { + $('.apple').addClass('fruit'); + expect($('.apple').hasClass('apple')).toBe(true); + expect($('.apple').hasClass('fruit')).toBe(true); + expect($('.apple').hasClass('red')).toBe(false); + + $('.apple').toggleClass('apple red', false); + expect($('.fruit').hasClass('apple')).toBe(false); + expect($('.fruit').hasClass('red')).toBe(false); + expect($('.fruit').hasClass('fruit')).toBe(true); + }); + + it('(fn) : should toggle classes returned from the function', () => { + const $ = load(food); + + $('.apple').addClass('fruit'); + $('.carrot').addClass('vegetable'); + expect($('.apple').hasClass('fruit')).toBe(true); + expect($('.apple').hasClass('vegetable')).toBe(false); + expect($('.orange').hasClass('fruit')).toBe(false); + expect($('.orange').hasClass('vegetable')).toBe(false); + expect($('.carrot').hasClass('fruit')).toBe(false); + expect($('.carrot').hasClass('vegetable')).toBe(true); + expect($('.sweetcorn').hasClass('fruit')).toBe(false); + expect($('.sweetcorn').hasClass('vegetable')).toBe(false); + + $('li').toggleClass(function () { + return $(this).parent().is('#fruits') ? 'fruit' : 'vegetable'; + }); + expect($('.apple').hasClass('fruit')).toBe(false); + expect($('.apple').hasClass('vegetable')).toBe(false); + expect($('.orange').hasClass('fruit')).toBe(true); + expect($('.orange').hasClass('vegetable')).toBe(false); + expect($('.carrot').hasClass('fruit')).toBe(false); + expect($('.carrot').hasClass('vegetable')).toBe(false); + expect($('.sweetcorn').hasClass('fruit')).toBe(false); + expect($('.sweetcorn').hasClass('vegetable')).toBe(true); + }); + + it('(fn) : should work with no initial class attribute', () => { + const $inputs = load(inputs); + $inputs('input, select').toggleClass(function () { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion -- `get` should never return undefined here. + return $inputs(this).get(0)!.tagName === 'select' + ? 'selectable' + : 'inputable'; + }); + expect($inputs('.selectable')).toHaveLength(6); + expect($inputs('.inputable')).toHaveLength(9); + }); + + it('(fn) : should skip text nodes', () => { + const $text = load(mixedText); + const $body = $text($text('body')[0].children); + + $body.toggleClass(() => 'test'); + + expect($text('body').html()).toBe( + '1TEXT2', + ); + + $body.toggleClass(() => 'test'); + + expect($text('body').html()).toBe( + '1TEXT2', + ); + }); + + it('(invalid) : should be a no-op for invalid inputs', () => { + const original = $('.apple'); + const testAgainst = original.attr('class'); + expect(original.toggleClass().attr('class')).toStrictEqual(testAgainst); + + for (const value of [undefined, true, false, null, 0, 1, {}]) { + expect( + original.toggleClass(value as never).attr('class'), + ).toStrictEqual(testAgainst); + } + }); + }); +}); diff --git a/node_modules/cheerio/src/api/attributes.ts b/node_modules/cheerio/src/api/attributes.ts new file mode 100644 index 0000000..db246e6 --- /dev/null +++ b/node_modules/cheerio/src/api/attributes.ts @@ -0,0 +1,1130 @@ +/** + * Methods for getting and modifying attributes. + * + * @module cheerio/attributes + */ + +import { text } from '../static.js'; +import { domEach, camelCase, cssCase } from '../utils.js'; +import { isTag, type AnyNode, type Element } from 'domhandler'; +import type { Cheerio } from '../cheerio.js'; +import { innerText, textContent } from 'domutils'; +const hasOwn = Object.prototype.hasOwnProperty; +const rspace = /\s+/; +const dataAttrPrefix = 'data-'; + +// Attributes that are booleans +const rboolean = + /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i; +// Matches strings that look like JSON objects or arrays +const rbrace = /^{[^]*}$|^\[[^]*]$/; + +/** + * Gets a node's attribute. For boolean attributes, it will return the value's + * name should it be set. + * + * Also supports getting the `value` of several form elements. + * + * @private + * @category Attributes + * @param elem - Element to get the attribute of. + * @param name - Name of the attribute. + * @param xmlMode - Disable handling of special HTML attributes. + * @returns The attribute's value. + */ +function getAttr( + elem: AnyNode, + name: undefined, + xmlMode?: boolean, +): Record | undefined; +function getAttr( + elem: AnyNode, + name: string, + xmlMode?: boolean, +): string | undefined; +function getAttr( + elem: AnyNode, + name: string | undefined, + xmlMode?: boolean, +): Record | string | undefined { + if (!elem || !isTag(elem)) return undefined; + + elem.attribs ??= {}; + + // Return the entire attribs object if no attribute specified + if (!name) { + return elem.attribs; + } + + if (hasOwn.call(elem.attribs, name)) { + // Get the (decoded) attribute + return !xmlMode && rboolean.test(name) ? name : elem.attribs[name]; + } + + // Mimic the DOM and return text content as value for `option's` + if (elem.name === 'option' && name === 'value') { + return text(elem.children); + } + + // Mimic DOM with default value for radios/checkboxes + if ( + elem.name === 'input' && + (elem.attribs['type'] === 'radio' || elem.attribs['type'] === 'checkbox') && + name === 'value' + ) { + return 'on'; + } + + return undefined; +} + +/** + * Sets the value of an attribute. The attribute will be deleted if the value is + * `null`. + * + * @private + * @param el - The element to set the attribute on. + * @param name - The attribute's name. + * @param value - The attribute's value. + */ +function setAttr(el: Element, name: string, value: string | null) { + if (value === null) { + removeAttribute(el, name); + } else { + el.attribs[name] = `${value}`; + } +} + +/** + * Method for getting attributes. Gets the attribute value for only the first + * element in the matched set. + * + * @category Attributes + * @example + * + * ```js + * $('ul').attr('id'); + * //=> fruits + * ``` + * + * @param name - Name of the attribute. + * @returns The attribute's value. + * @see {@link https://api.jquery.com/attr/} + */ +export function attr( + this: Cheerio, + name: string, +): string | undefined; +/** + * Method for getting all attributes and their values of the first element in + * the matched set. + * + * @category Attributes + * @example + * + * ```js + * $('ul').attr(); + * //=> { id: 'fruits' } + * ``` + * + * @returns The attribute's values. + * @see {@link https://api.jquery.com/attr/} + */ +export function attr( + this: Cheerio, +): Record | undefined; +/** + * Method for setting attributes. Sets the attribute value for only the first + * element in the matched set. If you set an attribute's value to `null`, you + * remove that attribute. You may also pass a `map` and `function`. + * + * @category Attributes + * @example + * + * ```js + * $('.apple').attr('id', 'favorite').html(); + * //=>
  • Apple
  • + * ``` + * + * @param name - Name of the attribute. + * @param value - The new value of the attribute. + * @returns The instance itself. + * @see {@link https://api.jquery.com/attr/} + */ +export function attr( + this: Cheerio, + name: string, + value?: + | string + | null + | ((this: Element, i: number, attrib: string) => string | null), +): Cheerio; +/** + * Method for setting multiple attributes at once. Sets the attribute value for + * only the first element in the matched set. If you set an attribute's value to + * `null`, you remove that attribute. + * + * @category Attributes + * @example + * + * ```js + * $('.apple').attr({ id: 'favorite' }).html(); + * //=>
  • Apple
  • + * ``` + * + * @param values - Map of attribute names and values. + * @returns The instance itself. + * @see {@link https://api.jquery.com/attr/} + */ +export function attr( + this: Cheerio, + values: Record, +): Cheerio; +export function attr( + this: Cheerio, + name?: string | Record, + value?: + | string + | null + | ((this: Element, i: number, attrib: string) => string | null), +): string | Cheerio | undefined | Record { + // Set the value (with attr map support) + if (typeof name === 'object' || value !== undefined) { + if (typeof value === 'function') { + if (typeof name !== 'string') { + { + throw new Error('Bad combination of arguments.'); + } + } + return domEach(this, (el, i) => { + if (isTag(el)) setAttr(el, name, value.call(el, i, el.attribs[name])); + }); + } + return domEach(this, (el) => { + if (!isTag(el)) return; + + if (typeof name === 'object') { + for (const objName of Object.keys(name)) { + const objValue = name[objName]; + setAttr(el, objName, objValue); + } + } else { + setAttr(el, name as string, value as string); + } + }); + } + + return arguments.length > 1 + ? this + : getAttr(this[0], name as string, this.options.xmlMode); +} + +/** + * Gets a node's prop. + * + * @private + * @category Attributes + * @param el - Element to get the prop of. + * @param name - Name of the prop. + * @param xmlMode - Disable handling of special HTML attributes. + * @returns The prop's value. + */ +function getProp( + el: Element, + name: string, + xmlMode?: boolean, +): string | undefined | Element[keyof Element] { + return name in el + ? // @ts-expect-error TS doesn't like us accessing the value directly here. + el[name] + : !xmlMode && rboolean.test(name) + ? getAttr(el, name, false) !== undefined + : getAttr(el, name, xmlMode); +} + +/** + * Sets the value of a prop. + * + * @private + * @param el - The element to set the prop on. + * @param name - The prop's name. + * @param value - The prop's value. + * @param xmlMode - Disable handling of special HTML attributes. + */ +function setProp(el: Element, name: string, value: unknown, xmlMode?: boolean) { + if (name in el) { + // @ts-expect-error Overriding value + el[name] = value; + } else { + setAttr( + el, + name, + !xmlMode && rboolean.test(name) ? (value ? '' : null) : `${value}`, + ); + } +} + +interface StyleProp { + length: number; + [key: string]: string | number; + [index: number]: string; +} + +/** + * Method for getting and setting properties. Gets the property value for only + * the first element in the matched set. + * + * @category Attributes + * @example + * + * ```js + * $('input[type="checkbox"]').prop('checked'); + * //=> false + * + * $('input[type="checkbox"]').prop('checked', true).val(); + * //=> ok + * ``` + * + * @param name - Name of the property. + * @returns If `value` is specified the instance itself, otherwise the prop's + * value. + * @see {@link https://api.jquery.com/prop/} + */ +export function prop( + this: Cheerio, + name: 'tagName' | 'nodeName', +): string | undefined; +export function prop( + this: Cheerio, + name: 'innerHTML' | 'outerHTML' | 'innerText' | 'textContent', +): string | null; +/** + * Get a parsed CSS style object. + * + * @param name - Name of the property. + * @returns The style object, or `undefined` if the element has no `style` + * attribute. + */ +export function prop( + this: Cheerio, + name: 'style', +): StyleProp | undefined; +/** + * Resolve `href` or `src` of supported elements. Requires the `baseURI` option + * to be set, and a global `URL` object to be part of the environment. + * + * @example With `baseURI` set to `'https://example.com'`: + * + * ```js + * $('').prop('src'); + * //=> 'https://example.com/image.png' + * ``` + * + * @param name - Name of the property. + * @returns The resolved URL, or `undefined` if the element is not supported. + */ +export function prop( + this: Cheerio, + name: 'href' | 'src', +): string | undefined; +/** + * Get a property of an element. + * + * @param name - Name of the property. + * @returns The property's value. + */ +export function prop( + this: Cheerio, + name: K, +): Element[K]; +/** + * Set a property of an element. + * + * @param name - Name of the property. + * @param value - Value to set the property to. + * @returns The instance itself. + */ +export function prop( + this: Cheerio, + name: K, + value: + | Element[K] + | ((this: Element, i: number, prop: K) => Element[keyof Element]), +): Cheerio; +/** + * Set multiple properties of an element. + * + * @example + * + * ```js + * $('input[type="checkbox"]').prop({ + * checked: true, + * disabled: false, + * }); + * ``` + * + * @param map - Object of properties to set. + * @returns The instance itself. + */ +export function prop( + this: Cheerio, + map: Record, +): Cheerio; +/** + * Set a property of an element. + * + * @param name - Name of the property. + * @param value - Value to set the property to. + * @returns The instance itself. + */ +export function prop( + this: Cheerio, + name: string, + value: + | string + | boolean + | null + | ((this: Element, i: number, prop: string) => string | boolean), +): Cheerio; +/** + * Get a property of an element. + * + * @param name - The property's name. + * @returns The property's value. + */ +export function prop(this: Cheerio, name: string): string; +export function prop( + this: Cheerio, + name: string | Record, + value?: + | (( + this: Element, + i: number, + prop: string | undefined, + ) => string | Element[keyof Element] | boolean) + | unknown, +): Cheerio | string | undefined | null | Element[keyof Element] | StyleProp { + if (typeof name === 'string' && value === undefined) { + const el = this[0]; + + if (!el || !isTag(el)) return undefined; + + switch (name) { + case 'style': { + const property = this.css() as StyleProp; + const keys = Object.keys(property); + for (let i = 0; i < keys.length; i++) { + property[i] = keys[i]; + } + + property.length = keys.length; + + return property; + } + case 'tagName': + case 'nodeName': { + return el.name.toUpperCase(); + } + + case 'href': + case 'src': { + const prop = el.attribs?.[name]; + + if ( + typeof URL !== 'undefined' && + ((name === 'href' && (el.tagName === 'a' || el.tagName === 'link')) || + (name === 'src' && + (el.tagName === 'img' || + el.tagName === 'iframe' || + el.tagName === 'audio' || + el.tagName === 'video' || + el.tagName === 'source'))) && + prop !== undefined && + this.options.baseURI + ) { + return new URL(prop, this.options.baseURI).href; + } + + return prop; + } + + case 'innerText': { + return innerText(el); + } + + case 'textContent': { + return textContent(el); + } + + case 'outerHTML': { + return this.clone().wrap('').parent().html(); + } + + case 'innerHTML': { + return this.html(); + } + + default: { + return getProp(el, name, this.options.xmlMode); + } + } + } + + if (typeof name === 'object' || value !== undefined) { + if (typeof value === 'function') { + if (typeof name === 'object') { + throw new TypeError('Bad combination of arguments.'); + } + return domEach(this, (el, i) => { + if (isTag(el)) { + setProp( + el, + name, + value.call(el, i, getProp(el, name, this.options.xmlMode)), + this.options.xmlMode, + ); + } + }); + } + + return domEach(this, (el) => { + if (!isTag(el)) return; + + if (typeof name === 'object') { + for (const key of Object.keys(name)) { + const val = name[key]; + setProp(el, key, val, this.options.xmlMode); + } + } else { + setProp(el, name, value, this.options.xmlMode); + } + }); + } + + return undefined; +} + +/** + * An element with a data attribute. + * + * @private + */ +interface DataElement extends Element { + /** The data attribute. */ + data?: Record; +} + +/** + * Sets the value of a data attribute. + * + * @private + * @param elem - The element to set the data attribute on. + * @param name - The data attribute's name. + * @param value - The data attribute's value. + */ +function setData( + elem: DataElement, + name: string | Record, + value?: unknown, +) { + elem.data ??= {}; + + if (typeof name === 'object') Object.assign(elem.data, name); + else if (typeof name === 'string' && value !== undefined) { + elem.data[name] = value; + } +} + +/** + * Read _all_ HTML5 `data-*` attributes from the equivalent HTML5 `data-*` + * attribute, and cache the value in the node's internal data store. + * + * @private + * @category Attributes + * @param el - Element to get the data attribute of. + * @returns A map with all of the data attributes. + */ +function readAllData(el: DataElement): unknown { + for (const domName of Object.keys(el.attribs)) { + if (!domName.startsWith(dataAttrPrefix)) { + continue; + } + + const jsName = camelCase(domName.slice(dataAttrPrefix.length)); + + if (!hasOwn.call(el.data, jsName)) { + el.data![jsName] = parseDataValue(el.attribs[domName]); + } + } + + return el.data; +} + +/** + * Read the specified attribute from the equivalent HTML5 `data-*` attribute, + * and (if present) cache the value in the node's internal data store. + * + * @private + * @category Attributes + * @param el - Element to get the data attribute of. + * @param name - Name of the data attribute. + * @returns The data attribute's value. + */ +function readData(el: DataElement, name: string): unknown { + const domName = dataAttrPrefix + cssCase(name); + const data = el.data!; + + if (hasOwn.call(data, name)) { + return data[name]; + } + + if (hasOwn.call(el.attribs, domName)) { + return (data[name] = parseDataValue(el.attribs[domName])); + } + + return undefined; +} + +/** + * Coerce string data-* attributes to their corresponding JavaScript primitives. + * + * @private + * @category Attributes + * @param value - The value to parse. + * @returns The parsed value. + */ +function parseDataValue(value: string): unknown { + if (value === 'null') return null; + if (value === 'true') return true; + if (value === 'false') return false; + const num = Number(value); + if (value === String(num)) return num; + if (rbrace.test(value)) { + try { + return JSON.parse(value); + } catch { + /* Ignore */ + } + } + return value; +} + +/** + * Method for getting data attributes, for only the first element in the matched + * set. + * + * @category Attributes + * @example + * + * ```js + * $('
    ').data('apple-color'); + * //=> 'red' + * ``` + * + * @param name - Name of the data attribute. + * @returns The data attribute's value, or `undefined` if the attribute does not + * exist. + * @see {@link https://api.jquery.com/data/} + */ +export function data( + this: Cheerio, + name: string, +): unknown | undefined; +/** + * Method for getting all of an element's data attributes, for only the first + * element in the matched set. + * + * @category Attributes + * @example + * + * ```js + * $('
    ').data(); + * //=> { appleColor: 'red' } + * ``` + * + * @returns A map with all of the data attributes. + * @see {@link https://api.jquery.com/data/} + */ +export function data( + this: Cheerio, +): Record; +/** + * Method for setting data attributes, for only the first element in the matched + * set. + * + * @category Attributes + * @example + * + * ```js + * const apple = $('.apple').data('kind', 'mac'); + * + * apple.data('kind'); + * //=> 'mac' + * ``` + * + * @param name - Name of the data attribute. + * @param value - The new value. + * @returns The instance itself. + * @see {@link https://api.jquery.com/data/} + */ +export function data( + this: Cheerio, + name: string, + value: unknown, +): Cheerio; +/** + * Method for setting multiple data attributes at once, for only the first + * element in the matched set. + * + * @category Attributes + * @example + * + * ```js + * const apple = $('.apple').data({ kind: 'mac' }); + * + * apple.data('kind'); + * //=> 'mac' + * ``` + * + * @param values - Map of names to values. + * @returns The instance itself. + * @see {@link https://api.jquery.com/data/} + */ +export function data( + this: Cheerio, + values: Record, +): Cheerio; +export function data( + this: Cheerio, + name?: string | Record, + value?: unknown, +): unknown | Cheerio | undefined | Record { + const elem = this[0]; + + if (!elem || !isTag(elem)) return; + + const dataEl: DataElement = elem; + dataEl.data ??= {}; + + // Return the entire data object if no data specified + if (name == null) { + return readAllData(dataEl); + } + + // Set the value (with attr map support) + if (typeof name === 'object' || value !== undefined) { + domEach(this, (el) => { + if (isTag(el)) { + if (typeof name === 'object') setData(el, name); + else setData(el, name, value as unknown); + } + }); + return this; + } + + return readData(dataEl, name); +} + +/** + * Method for getting the value of input, select, and textarea. Note: Support + * for `map`, and `function` has not been added yet. + * + * @category Attributes + * @example + * + * ```js + * $('input[type="text"]').val(); + * //=> input_text + * ``` + * + * @returns The value. + * @see {@link https://api.jquery.com/val/} + */ +export function val( + this: Cheerio, +): string | undefined | string[]; +/** + * Method for setting the value of input, select, and textarea. Note: Support + * for `map`, and `function` has not been added yet. + * + * @category Attributes + * @example + * + * ```js + * $('input[type="text"]').val('test').html(); + * //=> + * ``` + * + * @param value - The new value. + * @returns The instance itself. + * @see {@link https://api.jquery.com/val/} + */ +export function val( + this: Cheerio, + value: string | string[], +): Cheerio; +export function val( + this: Cheerio, + value?: string | string[], +): string | string[] | Cheerio | undefined { + const querying = arguments.length === 0; + const element = this[0]; + + if (!element || !isTag(element)) return querying ? undefined : this; + + switch (element.name) { + case 'textarea': { + return this.text(value as string); + } + case 'select': { + const option = this.find('option:selected'); + if (!querying) { + if (this.attr('multiple') == null && typeof value === 'object') { + return this; + } + + this.find('option').removeAttr('selected'); + + const values = typeof value === 'object' ? value : [value]; + for (const val of values) { + this.find(`option[value="${val}"]`).attr('selected', ''); + } + + return this; + } + + return this.attr('multiple') + ? option.toArray().map((el) => text(el.children)) + : option.attr('value'); + } + case 'input': + case 'option': { + return querying + ? this.attr('value') + : this.attr('value', value as string); + } + } + + return undefined; +} + +/** + * Remove an attribute. + * + * @private + * @param elem - Node to remove attribute from. + * @param name - Name of the attribute to remove. + */ +function removeAttribute(elem: Element, name: string) { + if (!elem.attribs || !hasOwn.call(elem.attribs, name)) return; + + delete elem.attribs[name]; +} + +/** + * Splits a space-separated list of names to individual names. + * + * @category Attributes + * @param names - Names to split. + * @returns - Split names. + */ +function splitNames(names?: string): string[] { + return names ? names.trim().split(rspace) : []; +} + +/** + * Method for removing attributes by `name`. + * + * @category Attributes + * @example + * + * ```js + * $('.pear').removeAttr('class').html(); + * //=>
  • Pear
  • + * + * $('.apple').attr('id', 'favorite'); + * $('.apple').removeAttr('id class').html(); + * //=>
  • Apple
  • + * ``` + * + * @param name - Name of the attribute. + * @returns The instance itself. + * @see {@link https://api.jquery.com/removeAttr/} + */ +export function removeAttr( + this: Cheerio, + name: string, +): Cheerio { + const attrNames = splitNames(name); + + for (const attrName of attrNames) { + domEach(this, (elem) => { + if (isTag(elem)) removeAttribute(elem, attrName); + }); + } + + return this; +} + +/** + * Check to see if _any_ of the matched elements have the given `className`. + * + * @category Attributes + * @example + * + * ```js + * $('.pear').hasClass('pear'); + * //=> true + * + * $('apple').hasClass('fruit'); + * //=> false + * + * $('li').hasClass('pear'); + * //=> true + * ``` + * + * @param className - Name of the class. + * @returns Indicates if an element has the given `className`. + * @see {@link https://api.jquery.com/hasClass/} + */ +export function hasClass( + this: Cheerio, + className: string, +): boolean { + return this.toArray().some((elem) => { + const clazz = isTag(elem) && elem.attribs['class']; + let idx = -1; + + if (clazz && className.length > 0) { + while ((idx = clazz.indexOf(className, idx + 1)) > -1) { + const end = idx + className.length; + + if ( + (idx === 0 || rspace.test(clazz[idx - 1])) && + (end === clazz.length || rspace.test(clazz[end])) + ) { + return true; + } + } + } + + return false; + }); +} + +/** + * Adds class(es) to all of the matched elements. Also accepts a `function`. + * + * @category Attributes + * @example + * + * ```js + * $('.pear').addClass('fruit').html(); + * //=>
  • Pear
  • + * + * $('.apple').addClass('fruit red').html(); + * //=>
  • Apple
  • + * ``` + * + * @param value - Name of new class. + * @returns The instance itself. + * @see {@link https://api.jquery.com/addClass/} + */ +export function addClass>( + this: R, + value?: + | string + | ((this: Element, i: number, className: string) => string | undefined), +): R { + // Support functions + if (typeof value === 'function') { + return domEach(this, (el, i) => { + if (isTag(el)) { + const className = el.attribs['class'] || ''; + addClass.call([el], value.call(el, i, className)); + } + }); + } + + // Return if no value or not a string or function + if (!value || typeof value !== 'string') return this; + + const classNames = value.split(rspace); + const numElements = this.length; + + for (let i = 0; i < numElements; i++) { + const el = this[i]; + // If selected element isn't a tag, move on + if (!isTag(el)) continue; + + // If we don't already have classes โ€” always set xmlMode to false here, as it doesn't matter for classes + const className = getAttr(el, 'class', false); + + if (className) { + let setClass = ` ${className} `; + + // Check if class already exists + for (const cn of classNames) { + const appendClass = `${cn} `; + if (!setClass.includes(` ${appendClass}`)) setClass += appendClass; + } + + setAttr(el, 'class', setClass.trim()); + } else { + setAttr(el, 'class', classNames.join(' ').trim()); + } + } + + return this; +} + +/** + * Removes one or more space-separated classes from the selected elements. If no + * `className` is defined, all classes will be removed. Also accepts a + * `function`. + * + * @category Attributes + * @example + * + * ```js + * $('.pear').removeClass('pear').html(); + * //=>
  • Pear
  • + * + * $('.apple').addClass('red').removeClass().html(); + * //=>
  • Apple
  • + * ``` + * + * @param name - Name of the class. If not specified, removes all elements. + * @returns The instance itself. + * @see {@link https://api.jquery.com/removeClass/} + */ +export function removeClass>( + this: R, + name?: + | string + | ((this: Element, i: number, className: string) => string | undefined), +): R { + // Handle if value is a function + if (typeof name === 'function') { + return domEach(this, (el, i) => { + if (isTag(el)) { + removeClass.call([el], name.call(el, i, el.attribs['class'] || '')); + } + }); + } + + const classes = splitNames(name); + const numClasses = classes.length; + const removeAll = arguments.length === 0; + + return domEach(this, (el) => { + if (!isTag(el)) return; + + if (removeAll) { + // Short circuit the remove all case as this is the nice one + el.attribs['class'] = ''; + } else { + const elClasses = splitNames(el.attribs['class']); + let changed = false; + + for (let j = 0; j < numClasses; j++) { + const index = elClasses.indexOf(classes[j]); + + if (index >= 0) { + elClasses.splice(index, 1); + changed = true; + + /* + * We have to do another pass to ensure that there are not duplicate + * classes listed + */ + j--; + } + } + if (changed) { + el.attribs['class'] = elClasses.join(' '); + } + } + }); +} + +/** + * Add or remove class(es) from the matched elements, depending on either the + * class's presence or the value of the switch argument. Also accepts a + * `function`. + * + * @category Attributes + * @example + * + * ```js + * $('.apple.green').toggleClass('fruit green red').html(); + * //=>
  • Apple
  • + * + * $('.apple.green').toggleClass('fruit green red', true).html(); + * //=>
  • Apple
  • + * ``` + * + * @param value - Name of the class. Can also be a function. + * @param stateVal - If specified the state of the class. + * @returns The instance itself. + * @see {@link https://api.jquery.com/toggleClass/} + */ +export function toggleClass>( + this: R, + value?: + | string + | (( + this: Element, + i: number, + className: string, + stateVal?: boolean, + ) => string), + stateVal?: boolean, +): R { + // Support functions + if (typeof value === 'function') { + return domEach(this, (el, i) => { + if (isTag(el)) { + toggleClass.call( + [el], + value.call(el, i, el.attribs['class'] || '', stateVal), + stateVal, + ); + } + }); + } + + // Return if no value or not a string or function + if (!value || typeof value !== 'string') return this; + + const classNames = value.split(rspace); + const numClasses = classNames.length; + const state = typeof stateVal === 'boolean' ? (stateVal ? 1 : -1) : 0; + const numElements = this.length; + + for (let i = 0; i < numElements; i++) { + const el = this[i]; + // If selected element isn't a tag, move on + if (!isTag(el)) continue; + + const elementClasses = splitNames(el.attribs['class']); + + // Check if class already exists + for (let j = 0; j < numClasses; j++) { + // Check if the class name is currently defined + const index = elementClasses.indexOf(classNames[j]); + + // Add if stateValue === true or we are toggling and there is no value + if (state >= 0 && index < 0) { + elementClasses.push(classNames[j]); + } else if (state <= 0 && index >= 0) { + // Otherwise remove but only if the item exists + elementClasses.splice(index, 1); + } + } + + el.attribs['class'] = elementClasses.join(' '); + } + + return this; +} diff --git a/node_modules/cheerio/src/api/css.spec.ts b/node_modules/cheerio/src/api/css.spec.ts new file mode 100644 index 0000000..f6455c2 --- /dev/null +++ b/node_modules/cheerio/src/api/css.spec.ts @@ -0,0 +1,138 @@ +import { describe, it, expect, beforeEach } from 'vitest'; +import { load, type Cheerio } from '../index.js'; +import type { Element } from 'domhandler'; +import { cheerio, mixedText } from '../__fixtures__/fixtures.js'; + +describe('$(...)', () => { + describe('.css', () => { + it('(prop): should return a css property value', () => { + const el = cheerio('
  • '); + expect(el.css('hai')).toBe('there'); + }); + + it('([prop1, prop2]): should return the specified property values as an object', () => { + const el = cheerio( + '
  • ', + ); + expect(el.css(['margin', 'color'])).toStrictEqual({ + margin: '1px', + color: 'blue', + }); + }); + + it('(prop, val): should set a css property', () => { + const el = cheerio('
  • '); + el.css('color', 'red'); + expect(el.attr('style')).toBe('margin: 0; color: red;'); + expect(el.eq(1).attr('style')).toBe('color: red;'); + }); + + it('(prop, val) : should skip text nodes', () => { + const $text = load(mixedText); + const $body = $text($text('body')[0].children); + + $body.css('test', 'value'); + + expect($text('body').html()).toBe( + '1TEXT2', + ); + }); + + it('(prop, ""): should unset a css property', () => { + const el = cheerio('
  • '); + el.css('padding', ''); + expect(el.attr('style')).toBe('margin: 0;'); + }); + + it('(any, val): should ignore unsupported prop types', () => { + const el = cheerio('
  • '); + el.css(123 as never, 'test'); + expect(el.attr('style')).toBe('padding: 1px;'); + }); + + it('(prop): should not mangle embedded urls', () => { + const el = cheerio( + '
  • ', + ); + expect(el.css('background-image')).toBe( + 'url(http://example.com/img.png)', + ); + }); + + it('(prop): should ignore blank properties', () => { + const el = cheerio('
  • '); + expect(el.css()).toStrictEqual({ color: '#aaa' }); + }); + + it('(prop): should ignore blank values', () => { + const el = cheerio('
  • '); + expect(el.css()).toStrictEqual({ position: 'absolute' }); + }); + + it('(prop): should return undefined for unmatched elements', () => { + const $ = load('
  • '); + expect($('ul').css('background-image')).toBeUndefined(); + }); + + it('(prop): should return undefined for unmatched styles', () => { + const el = cheerio('
  • '); + expect(el.css('margin')).toBeUndefined(); + }); + + describe('(prop, function):', () => { + let $el: Cheerio; + beforeEach(() => { + const $ = load( + '
    ', + ); + $el = $('div'); + }); + + it('should iterate over the selection', () => { + let count = 0; + $el.css('margin', function (idx, value) { + expect(idx).toBe(count); + expect(value).toBe(`${count}px`); + expect(this).toBe($el[count]); + count++; + return undefined; + }); + expect(count).toBe(3); + }); + + it('should set each attribute independently', () => { + const values = ['4px', '', undefined]; + $el.css('margin', (idx) => values[idx]); + expect($el.eq(0).attr('style')).toBe('margin: 4px;'); + expect($el.eq(1).attr('style')).toBe(''); + expect($el.eq(2).attr('style')).toBe('margin: 2px;'); + }); + }); + + it('(obj): should set each key and val', () => { + const el = cheerio('
  • '); + el.css({ foo: 0 } as never); + expect(el.eq(0).attr('style')).toBe('padding: 0; foo: 0;'); + expect(el.eq(1).attr('style')).toBe('foo: 0;'); + }); + + describe('parser', () => { + it('should allow any whitespace between declarations', () => { + const el = cheerio('
  • '); + expect(el.css(['one', 'two', 'five'])).toStrictEqual({ + one: '0', + two: '1', + }); + }); + + it('should add malformed values to previous field (#1134)', () => { + const el = cheerio( + '', + ); + expect(el.css('background-image')).toStrictEqual( + 'url(data:image/png;base64,iVBORw0KGgo)', + ); + }); + }); + }); +}); diff --git a/node_modules/cheerio/src/api/css.ts b/node_modules/cheerio/src/api/css.ts new file mode 100644 index 0000000..9a1564a --- /dev/null +++ b/node_modules/cheerio/src/api/css.ts @@ -0,0 +1,224 @@ +import { domEach } from '../utils.js'; +import { isTag, type Element, type AnyNode } from 'domhandler'; +import type { Cheerio } from '../cheerio.js'; + +/** + * Get the value of a style property for the first element in the set of matched + * elements. + * + * @category CSS + * @param names - Optionally the names of the properties of interest. + * @returns A map of all of the style properties. + * @see {@link https://api.jquery.com/css/} + */ +export function css( + this: Cheerio, + names?: string[], +): Record | undefined; +/** + * Get the value of a style property for the first element in the set of matched + * elements. + * + * @category CSS + * @param name - The name of the property. + * @returns The property value for the given name. + * @see {@link https://api.jquery.com/css/} + */ +export function css( + this: Cheerio, + name: string, +): string | undefined; +/** + * Set one CSS property for every matched element. + * + * @category CSS + * @param prop - The name of the property. + * @param val - The new value. + * @returns The instance itself. + * @see {@link https://api.jquery.com/css/} + */ +export function css( + this: Cheerio, + prop: string, + val: + | string + | ((this: Element, i: number, style: string) => string | undefined), +): Cheerio; +/** + * Set multiple CSS properties for every matched element. + * + * @category CSS + * @param map - A map of property names and values. + * @returns The instance itself. + * @see {@link https://api.jquery.com/css/} + */ +export function css( + this: Cheerio, + map: Record, +): Cheerio; +/** + * Set multiple CSS properties for every matched element. + * + * @category CSS + * @param prop - The names of the properties. + * @param val - The new values. + * @returns The instance itself. + * @see {@link https://api.jquery.com/css/} + */ +export function css( + this: Cheerio, + prop?: string | string[] | Record, + val?: + | string + | ((this: Element, i: number, style: string) => string | undefined), +): Cheerio | Record | string | undefined { + if ( + (prop != null && val != null) || + // When `prop` is a "plain" object + (typeof prop === 'object' && !Array.isArray(prop)) + ) { + return domEach(this, (el, i) => { + if (isTag(el)) { + // `prop` can't be an array here anymore. + setCss(el, prop as string, val, i); + } + }); + } + + if (this.length === 0) { + return undefined; + } + + return getCss(this[0], prop as string); +} + +/** + * Set styles of all elements. + * + * @private + * @param el - Element to set style of. + * @param prop - Name of property. + * @param value - Value to set property to. + * @param idx - Optional index within the selection. + */ +function setCss( + el: Element, + prop: string | Record, + value: + | string + | ((this: Element, i: number, style: string) => string | undefined) + | undefined, + idx: number, +) { + if (typeof prop === 'string') { + const styles = getCss(el); + + const val = + typeof value === 'function' ? value.call(el, idx, styles[prop]) : value; + + if (val === '') { + delete styles[prop]; + } else if (val != null) { + styles[prop] = val; + } + + el.attribs['style'] = stringify(styles); + } else if (typeof prop === 'object') { + const keys = Object.keys(prop); + for (let i = 0; i < keys.length; i++) { + const k = keys[i]; + setCss(el, k, prop[k], i); + } + } +} + +/** + * Get the parsed styles of the first element. + * + * @private + * @category CSS + * @param el - Element to get styles from. + * @param props - Optionally the names of the properties of interest. + * @returns The parsed styles. + */ +function getCss(el: AnyNode, props?: string[]): Record; +/** + * Get a property from the parsed styles of the first element. + * + * @private + * @category CSS + * @param el - Element to get styles from. + * @param prop - Name of the prop. + * @returns The value of the property. + */ +function getCss(el: AnyNode, prop: string): string | undefined; +function getCss( + el: AnyNode, + prop?: string | string[], +): Record | string | undefined { + if (!el || !isTag(el)) return; + + const styles = parse(el.attribs['style']); + if (typeof prop === 'string') { + return styles[prop]; + } + if (Array.isArray(prop)) { + const newStyles: Record = {}; + for (const item of prop) { + if (styles[item] != null) { + newStyles[item] = styles[item]; + } + } + return newStyles; + } + return styles; +} + +/** + * Stringify `obj` to styles. + * + * @private + * @category CSS + * @param obj - Object to stringify. + * @returns The serialized styles. + */ +function stringify(obj: Record): string { + return Object.keys(obj).reduce( + (str, prop) => `${str}${str ? ' ' : ''}${prop}: ${obj[prop]};`, + '', + ); +} + +/** + * Parse `styles`. + * + * @private + * @category CSS + * @param styles - Styles to be parsed. + * @returns The parsed styles. + */ +function parse(styles: string): Record { + styles = (styles || '').trim(); + + if (!styles) return {}; + + const obj: Record = {}; + + let key: string | undefined; + + for (const str of styles.split(';')) { + const n = str.indexOf(':'); + // If there is no :, or if it is the first/last character, add to the previous item's value + if (n < 1 || n === str.length - 1) { + const trimmed = str.trimEnd(); + if (trimmed.length > 0 && key !== undefined) { + obj[key] += `;${trimmed}`; + } + } else { + key = str.slice(0, n).trim(); + obj[key] = str.slice(n + 1).trim(); + } + } + + return obj; +} diff --git a/node_modules/cheerio/src/api/extract.spec.ts b/node_modules/cheerio/src/api/extract.spec.ts new file mode 100644 index 0000000..b243212 --- /dev/null +++ b/node_modules/cheerio/src/api/extract.spec.ts @@ -0,0 +1,121 @@ +import { describe, it, expect } from 'vitest'; +import * as fixtures from '../__fixtures__/fixtures.js'; +import { load } from '../load-parse.js'; + +interface RedSelObject { + red: string | undefined; + sel: string | undefined; +} + +interface RedSelMultipleObject { + red: string[]; + sel: string[]; +} + +describe('$.extract', () => { + it('() : should extract values for selectors', () => { + const $ = load(fixtures.eleven); + const $root = load(fixtures.eleven).root(); + // An empty object should lead to an empty extraction. + + // $ExpectType ExtractedMap<{}> + const emptyExtract = $root.extract({}); + expect(emptyExtract).toStrictEqual({}); + // Non-existent values should be undefined. + + // $ExpectType ExtractedMap<{ foo: string; }> + const simpleExtract = $root.extract({ foo: 'bar' }); + expect(simpleExtract).toStrictEqual({ foo: undefined }); + + // Existing values should be extracted. + expect<{ red: string | undefined }>( + $root.extract({ red: '.red' }), + ).toStrictEqual({ + red: 'Four', + }); + expect( + $root.extract({ red: '.red', sel: '.sel' }), + ).toStrictEqual({ + red: 'Four', + sel: 'Three', + }); + // Descriptors for extractions should be supported + expect( + $root.extract({ + red: { selector: '.red' }, + sel: { selector: '.sel' }, + }), + ).toStrictEqual({ red: 'Four', sel: 'Three' }); + // Should support extraction of multiple values. + + // $ExpectType ExtractedMap<{ red: [string]; sel: [string]; }> + const multipleExtract = $root.extract({ + red: ['.red'], + sel: ['.sel'], + }); + expect(multipleExtract).toStrictEqual({ + red: ['Four', 'Five', 'Nine'], + sel: ['Three', 'Nine', 'Eleven'], + }); + // Should support custom `prop`s. + expect( + $root.extract({ + red: { selector: '.red', value: 'outerHTML' }, + sel: { selector: '.sel', value: 'tagName' }, + }), + ).toStrictEqual({ red: '
  • Four
  • ', sel: 'LI' }); + // Should support custom `prop`s for multiple values. + expect<{ red: string[] }>( + $root.extract({ + red: [{ selector: '.red', value: 'outerHTML' }], + }), + ).toStrictEqual({ + red: [ + '
  • Four
  • ', + '
  • Five
  • ', + '
  • Nine
  • ', + ], + }); + // Should support custom extraction functions. + expect<{ red: string | undefined }>( + $root.extract({ + red: { + selector: '.red', + value: (el, key) => `${key}=${$(el).text()}`, + }, + }), + ).toStrictEqual({ red: 'red=Four' }); + // Should support custom extraction functions for multiple values. + expect<{ red: string[] }>( + $root.extract({ + red: [ + { + selector: '.red', + value: (el, key) => `${key}=${$(el).text()}`, + }, + ], + }), + ).toStrictEqual({ red: ['red=Four', 'red=Five', 'red=Nine'] }); + // Should support extraction objects + + // $ExpectType ExtractedMap<{ section: { selector: string; value: { red: string; sel: string; }; }; }> + const subExtractObject = $root.extract({ + section: { + selector: 'ul:nth(1)', + value: { + red: '.red', + sel: '.blue', + }, + }, + }); + + expect<{ section: RedSelObject | undefined }>( + subExtractObject, + ).toStrictEqual({ + section: { + red: 'Five', + sel: 'Seven', + }, + }); + }); +}); diff --git a/node_modules/cheerio/src/api/extract.ts b/node_modules/cheerio/src/api/extract.ts new file mode 100644 index 0000000..10bd529 --- /dev/null +++ b/node_modules/cheerio/src/api/extract.ts @@ -0,0 +1,92 @@ +import type { AnyNode, Element } from 'domhandler'; +import type { Cheerio } from '../cheerio.js'; +import type { prop } from './attributes.js'; + +type ExtractDescriptorFn = ( + el: Element, + key: string, + // TODO: This could be typed with ExtractedMap + obj: Record, +) => unknown; + +interface ExtractDescriptor { + selector: string; + value?: string | ExtractDescriptorFn | ExtractMap; +} + +type ExtractValue = string | ExtractDescriptor | [string | ExtractDescriptor]; + +export interface ExtractMap { + [key: string]: ExtractValue; +} + +type ExtractedValue = V extends [ + string | ExtractDescriptor, +] + ? NonNullable>[] + : V extends string + ? string | undefined + : V extends ExtractDescriptor + ? V['value'] extends ExtractMap + ? ExtractedMap | undefined + : V['value'] extends ExtractDescriptorFn + ? ReturnType | undefined + : ReturnType | undefined + : never; + +export type ExtractedMap = { + [key in keyof M]: ExtractedValue; +}; + +function getExtractDescr( + descr: string | ExtractDescriptor, +): Required { + if (typeof descr === 'string') { + return { selector: descr, value: 'textContent' }; + } + + return { + selector: descr.selector, + value: descr.value ?? 'textContent', + }; +} + +/** + * Extract multiple values from a document, and store them in an object. + * + * @param map - An object containing key-value pairs. The keys are the names of + * the properties to be created on the object, and the values are the + * selectors to be used to extract the values. + * @returns An object containing the extracted values. + */ +export function extract( + this: Cheerio, + map: M, +): ExtractedMap { + const ret: Record = {}; + + for (const key in map) { + const descr = map[key]; + const isArray = Array.isArray(descr); + + const { selector, value } = getExtractDescr(isArray ? descr[0] : descr); + + const fn: ExtractDescriptorFn = + typeof value === 'function' + ? value + : typeof value === 'string' + ? (el: Element) => this._make(el).prop(value) + : (el: Element) => this._make(el).extract(value); + + if (isArray) { + ret[key] = this._findBySelector(selector, Number.POSITIVE_INFINITY) + .map((_, el) => fn(el, key, ret)) + .get(); + } else { + const $ = this._findBySelector(selector, 1); + ret[key] = $.length > 0 ? fn($[0], key, ret) : undefined; + } + } + + return ret as ExtractedMap; +} diff --git a/node_modules/cheerio/src/api/forms.spec.ts b/node_modules/cheerio/src/api/forms.spec.ts new file mode 100644 index 0000000..ddd3d75 --- /dev/null +++ b/node_modules/cheerio/src/api/forms.spec.ts @@ -0,0 +1,155 @@ +import { describe, it, expect, beforeEach } from 'vitest'; +import { type CheerioAPI } from '../index.js'; +import { cheerio, forms } from '../__fixtures__/fixtures.js'; + +describe('$(...)', () => { + let $: CheerioAPI; + + beforeEach(() => { + $ = cheerio.load(forms); + }); + + describe('.serializeArray', () => { + it('() : should get form controls', () => { + expect($('form#simple').serializeArray()).toStrictEqual([ + { + name: 'fruit', + value: 'Apple', + }, + ]); + }); + + it('() : should get nested form controls', () => { + expect($('form#nested').serializeArray()).toHaveLength(2); + const data = $('form#nested').serializeArray(); + data.sort((a, b) => (a.value > b.value ? 1 : -1)); + expect(data).toStrictEqual([ + { + name: 'fruit', + value: 'Apple', + }, + { + name: 'vegetable', + value: 'Carrot', + }, + ]); + }); + + it('() : should not get disabled form controls', () => { + expect($('form#disabled').serializeArray()).toStrictEqual([]); + }); + + it('() : should not get form controls with the wrong type', () => { + expect($('form#submit').serializeArray()).toStrictEqual([ + { + name: 'fruit', + value: 'Apple', + }, + ]); + }); + + it('() : should get selected options', () => { + expect($('form#select').serializeArray()).toStrictEqual([ + { + name: 'fruit', + value: 'Orange', + }, + ]); + }); + + it('() : should not get unnamed form controls', () => { + expect($('form#unnamed').serializeArray()).toStrictEqual([ + { + name: 'fruit', + value: 'Apple', + }, + ]); + }); + + it('() : should get multiple selected options', () => { + expect($('form#multiple').serializeArray()).toHaveLength(2); + const data = $('form#multiple').serializeArray(); + data.sort((a, b) => (a.value > b.value ? 1 : -1)); + expect(data).toStrictEqual([ + { + name: 'fruit', + value: 'Apple', + }, + { + name: 'fruit', + value: 'Orange', + }, + ]); + }); + + it('() : should get individually selected elements', () => { + const data = $('form#nested input').serializeArray(); + data.sort((a, b) => (a.value > b.value ? 1 : -1)); + expect(data).toStrictEqual([ + { + name: 'fruit', + value: 'Apple', + }, + { + name: 'vegetable', + value: 'Carrot', + }, + ]); + }); + + it('() : should standardize line breaks', () => { + expect($('form#textarea').serializeArray()).toStrictEqual([ + { + name: 'fruits', + value: 'Apple\r\nOrange', + }, + ]); + }); + + it("() : shouldn't serialize the empty string", () => { + expect($('').serializeArray()).toStrictEqual([]); + expect( + $('').serializeArray(), + ).toStrictEqual([]); + expect( + $('').serializeArray(), + ).toStrictEqual([ + { + name: 'fruit', + value: 'pineapple', + }, + ]); + }); + + it('() : should serialize inputs without value attributes', () => { + expect($('').serializeArray()).toStrictEqual([ + { + name: 'fruit', + value: '', + }, + ]); + }); + }); + + describe('.serialize', () => { + it('() : should get form controls', () => { + expect($('form#simple').serialize()).toBe('fruit=Apple'); + }); + + it('() : should get nested form controls', () => { + expect($('form#nested').serialize()).toBe('fruit=Apple&vegetable=Carrot'); + }); + + it('() : should not get disabled form controls', () => { + expect($('form#disabled').serialize()).toBe(''); + }); + + it('() : should get multiple selected options', () => { + expect($('form#multiple').serialize()).toBe('fruit=Apple&fruit=Orange'); + }); + + it("() : should encode spaces as +'s", () => { + expect($('form#spaces').serialize()).toBe('fruit=Blood+orange'); + }); + }); +}); diff --git a/node_modules/cheerio/src/api/forms.ts b/node_modules/cheerio/src/api/forms.ts new file mode 100644 index 0000000..902f919 --- /dev/null +++ b/node_modules/cheerio/src/api/forms.ts @@ -0,0 +1,103 @@ +import { isTag, type AnyNode } from 'domhandler'; +import type { Cheerio } from '../cheerio.js'; + +/* + * https://github.com/jquery/jquery/blob/2.1.3/src/manipulation/var/rcheckableType.js + * https://github.com/jquery/jquery/blob/2.1.3/src/serialize.js + */ +const submittableSelector = 'input,select,textarea,keygen'; +const r20 = /%20/g; +const rCRLF = /\r?\n/g; + +/** + * Encode a set of form elements as a string for submission. + * + * @category Forms + * @example + * + * ```js + * $('
    ').serialize(); + * //=> 'foo=bar' + * ``` + * + * @returns The serialized form. + * @see {@link https://api.jquery.com/serialize/} + */ +export function serialize(this: Cheerio): string { + // Convert form elements into name/value objects + const arr = this.serializeArray(); + + // Serialize each element into a key/value string + const retArr = arr.map( + (data) => + `${encodeURIComponent(data.name)}=${encodeURIComponent(data.value)}`, + ); + + // Return the resulting serialization + return retArr.join('&').replace(r20, '+'); +} + +/** + * Encode a set of form elements as an array of names and values. + * + * @category Forms + * @example + * + * ```js + * $('
    ').serializeArray(); + * //=> [ { name: 'foo', value: 'bar' } ] + * ``` + * + * @returns The serialized form. + * @see {@link https://api.jquery.com/serializeArray/} + */ +export function serializeArray( + this: Cheerio, +): { + name: string; + value: string; +}[] { + // Resolve all form elements from either forms or collections of form elements + return this.map((_, elem) => { + const $elem = this._make(elem); + if (isTag(elem) && elem.name === 'form') { + return $elem.find(submittableSelector).toArray(); + } + return $elem.filter(submittableSelector).toArray(); + }) + .filter( + // Verify elements have a name (`attr.name`) and are not disabled (`:enabled`) + '[name!=""]:enabled' + + // And cannot be clicked (`[type=submit]`) or are used in `x-www-form-urlencoded` (`[type=file]`) + ':not(:submit, :button, :image, :reset, :file)' + + // And are either checked/don't have a checkable state + ':matches([checked], :not(:checkbox, :radio))', + // Convert each of the elements to its value(s) + ) + .map< + AnyNode, + { + name: string; + value: string; + } + >((_, elem) => { + const $elem = this._make(elem); + const name = $elem.attr('name') as string; // We have filtered for elements with a name before. + // If there is no value set (e.g. `undefined`, `null`), then default value to empty + const value = $elem.val() ?? ''; + + // If we have an array of values (e.g. `'; + +// Comments +const comment = ''; +const conditional = + ''; + +// Text +const text = 'lorem ipsum'; + +// Script +const script = ''; +const scriptEmpty = ''; + +// Style +const style = ''; +const styleEmpty = ''; + +// Directives +const directive = ''; + +function rootTest(root: Document) { + expect(root).toHaveProperty('type', 'root'); + + expect(root.nextSibling).toBe(null); + expect(root.previousSibling).toBe(null); + expect(root.parentNode).toBe(null); + + const child = root.childNodes[0]; + expect(child.parentNode).toBe(root); +} + +describe('parse', () => { + describe('evaluate', () => { + it(`should parse basic empty tags: ${basic}`, () => { + const [tag] = parse(basic, defaultOpts, true, null).children as Element[]; + expect(tag.type).toBe('tag'); + expect(tag.tagName).toBe('html'); + expect(tag.childNodes).toHaveLength(2); + }); + + it(`should handle sibling tags: ${siblings}`, () => { + const dom = parse(siblings, defaultOpts, false, null) + .children as Element[]; + const [h2, p] = dom; + + expect(dom).toHaveLength(2); + expect(h2.tagName).toBe('h2'); + expect(p.tagName).toBe('p'); + }); + + it(`should handle single tags: ${single}`, () => { + const [tag] = parse(single, defaultOpts, false, null) + .children as Element[]; + expect(tag.type).toBe('tag'); + expect(tag.tagName).toBe('br'); + expect(tag.childNodes).toHaveLength(0); + }); + + it(`should handle malformatted single tags: ${singleWrong}`, () => { + const [tag] = parse(singleWrong, defaultOpts, false, null) + .children as Element[]; + expect(tag.type).toBe('tag'); + expect(tag.tagName).toBe('br'); + expect(tag.childNodes).toHaveLength(0); + }); + + it(`should handle tags with children: ${children}`, () => { + const [tag] = parse(children, defaultOpts, true, null) + .children as Element[]; + expect(tag.type).toBe('tag'); + expect(tag.tagName).toBe('html'); + expect(tag.childNodes).toBeTruthy(); + expect(tag.childNodes[1]).toHaveProperty('tagName', 'body'); + expect((tag.childNodes[1] as Element).childNodes).toHaveLength(1); + }); + + it(`should handle tags with children: ${li}`, () => { + const [tag] = parse(li, defaultOpts, false, null).children as Element[]; + expect(tag.childNodes).toHaveLength(1); + expect(tag.childNodes[0]).toHaveProperty('data', 'Durian'); + }); + + it(`should handle tags with attributes: ${attributes}`, () => { + const attrs = parse(attributes, defaultOpts, false, null) + .children[0] as Element; + expect(attrs.attribs).toBeTruthy(); + expect(attrs.attribs).toHaveProperty('src', 'hello.png'); + expect(attrs.attribs).toHaveProperty('alt', 'man waving'); + }); + + it(`should handle value-less attributes: ${noValueAttribute}`, () => { + const attrs = parse(noValueAttribute, defaultOpts, false, null) + .children[0] as Element; + expect(attrs.attribs).toBeTruthy(); + expect(attrs.attribs).toHaveProperty('disabled', ''); + }); + + it(`should handle comments: ${comment}`, () => { + const elem = parse(comment, defaultOpts, false, null).children[0]; + expect(elem.type).toBe('comment'); + expect(elem).toHaveProperty('data', ' sexy '); + }); + + it(`should handle conditional comments: ${conditional}`, () => { + const elem = parse(conditional, defaultOpts, false, null).children[0]; + expect(elem.type).toBe('comment'); + expect(elem).toHaveProperty( + 'data', + conditional.replace('', ''), + ); + }); + + it(`should handle text: ${text}`, () => { + const text_ = parse(text, defaultOpts, false, null).children[0]; + expect(text_.type).toBe('text'); + expect(text_).toHaveProperty('data', 'lorem ipsum'); + }); + + it(`should handle script tags: ${script}`, () => { + const script_ = parse(script, defaultOpts, false, null) + .children[0] as Element; + expect(script_.type).toBe('script'); + expect(script_.tagName).toBe('script'); + expect(script_.attribs).toHaveProperty('type', 'text/javascript'); + expect(script_.childNodes).toHaveLength(1); + expect(script_.childNodes[0].type).toBe('text'); + expect(script_.childNodes[0]).toHaveProperty( + 'data', + 'alert("hi world!");', + ); + }); + + it(`should handle style tags: ${style}`, () => { + const style_ = parse(style, defaultOpts, false, null) + .children[0] as Element; + expect(style_.type).toBe('style'); + expect(style_.tagName).toBe('style'); + expect(style_.attribs).toHaveProperty('type', 'text/css'); + expect(style_.childNodes).toHaveLength(1); + expect(style_.childNodes[0].type).toBe('text'); + expect(style_.childNodes[0]).toHaveProperty( + 'data', + ' h2 { color:blue; } ', + ); + }); + + it(`should handle directives: ${directive}`, () => { + const elem = parse(directive, defaultOpts, true, null).children[0]; + expect(elem.type).toBe('directive'); + expect(elem).toHaveProperty('data', '!DOCTYPE html'); + expect(elem).toHaveProperty('name', '!doctype'); + }); + }); + + describe('.parse', () => { + // Root test utility + + it(`should add root to: ${basic}`, () => { + const root = parse(basic, defaultOpts, true, null); + rootTest(root); + expect(root.childNodes).toHaveLength(1); + expect(root.childNodes[0]).toHaveProperty('tagName', 'html'); + }); + + it(`should add root to: ${siblings}`, () => { + const root = parse(siblings, defaultOpts, false, null); + rootTest(root); + expect(root.childNodes).toHaveLength(2); + expect(root.childNodes[0]).toHaveProperty('tagName', 'h2'); + expect(root.childNodes[1]).toHaveProperty('tagName', 'p'); + expect(root.childNodes[1].parent).toBe(root); + }); + + it(`should add root to: ${comment}`, () => { + const root = parse(comment, defaultOpts, false, null); + rootTest(root); + expect(root.childNodes).toHaveLength(1); + expect(root.childNodes[0].type).toBe('comment'); + }); + + it(`should add root to: ${text}`, () => { + const root = parse(text, defaultOpts, false, null); + rootTest(root); + expect(root.childNodes).toHaveLength(1); + expect(root.childNodes[0].type).toBe('text'); + }); + + it(`should add root to: ${scriptEmpty}`, () => { + const root = parse(scriptEmpty, defaultOpts, false, null); + rootTest(root); + expect(root.childNodes).toHaveLength(1); + expect(root.childNodes[0].type).toBe('script'); + }); + + it(`should add root to: ${styleEmpty}`, () => { + const root = parse(styleEmpty, defaultOpts, false, null); + rootTest(root); + expect(root.childNodes).toHaveLength(1); + expect(root.childNodes[0].type).toBe('style'); + }); + + it(`should add root to: ${directive}`, () => { + const root = parse(directive, defaultOpts, true, null); + rootTest(root); + expect(root.childNodes).toHaveLength(2); + expect(root.childNodes[0].type).toBe('directive'); + }); + + it('should simply return root', () => { + const oldroot = parse(basic, defaultOpts, true, null); + const root = parse(oldroot, defaultOpts, true, null); + expect(root).toBe(oldroot); + rootTest(root); + expect(root.childNodes).toHaveLength(1); + expect(root.childNodes[0]).toHaveProperty('tagName', 'html'); + }); + + it('should expose the DOM level 1 API', () => { + const root = parse( + '

    ', + defaultOpts, + false, + null, + ).childNodes[0] as Element; + const childNodes = root.childNodes as Element[]; + + expect(childNodes).toHaveLength(3); + + expect(root.tagName).toBe('div'); + expect(root.firstChild).toBe(childNodes[0]); + expect(root.lastChild).toBe(childNodes[2]); + + expect(childNodes[0].tagName).toBe('a'); + expect(childNodes[0].previousSibling).toBe(null); + expect(childNodes[0].nextSibling).toBe(childNodes[1]); + expect(childNodes[0].parentNode).toBe(root); + expect((childNodes[0] as Element).childNodes).toHaveLength(0); + expect(childNodes[0].firstChild).toBe(null); + expect(childNodes[0].lastChild).toBe(null); + + expect(childNodes[1].tagName).toBe('span'); + expect(childNodes[1].previousSibling).toBe(childNodes[0]); + expect(childNodes[1].nextSibling).toBe(childNodes[2]); + expect(childNodes[1].parentNode).toBe(root); + expect(childNodes[1].childNodes).toHaveLength(0); + expect(childNodes[1].firstChild).toBe(null); + expect(childNodes[1].lastChild).toBe(null); + + expect(childNodes[2].tagName).toBe('p'); + expect(childNodes[2].previousSibling).toBe(childNodes[1]); + expect(childNodes[2].nextSibling).toBe(null); + expect(childNodes[2].parentNode).toBe(root); + expect(childNodes[2].childNodes).toHaveLength(0); + expect(childNodes[2].firstChild).toBe(null); + expect(childNodes[2].lastChild).toBe(null); + }); + + it('Should parse less than or equal sign sign', () => { + const root = parse('A<=B', defaultOpts, false, null); + const { childNodes } = root; + + expect(childNodes[0]).toHaveProperty('tagName', 'i'); + expect((childNodes[0] as Element).childNodes[0]).toHaveProperty( + 'data', + 'A', + ); + expect(childNodes[1]).toHaveProperty('data', '<='); + expect(childNodes[2]).toHaveProperty('tagName', 'i'); + expect((childNodes[2] as Element).childNodes[0]).toHaveProperty( + 'data', + 'B', + ); + }); + + it('Should ignore unclosed CDATA', () => { + const root = parse( + '', + defaultOpts, + false, + null, + ); + const childNodes = root.childNodes as Element[]; + + expect(childNodes[0].tagName).toBe('a'); + expect(childNodes[1].tagName).toBe('script'); + expect(childNodes[1].childNodes[0]).toHaveProperty( + 'data', + 'foo // to documents', () => { + const root = parse('', defaultOpts, true, null); + const childNodes = root.childNodes as Element[]; + + expect(childNodes[0].tagName).toBe('html'); + expect(childNodes[0].childNodes[0]).toHaveProperty('tagName', 'head'); + }); + + it('Should implicitly create around ', () => { + const root = parse( + '
    bar
    ', + defaultOpts, + false, + null, + ); + const childNodes = root.childNodes as Element[]; + + expect(childNodes[0].tagName).toBe('table'); + expect(childNodes[0].childNodes.length).toBe(1); + expect(childNodes[0].childNodes[0]).toHaveProperty('tagName', 'tbody'); + expect((childNodes[0] as any).childNodes[0].childNodes[0]).toHaveProperty( + 'tagName', + 'tr', + ); + expect( + (childNodes[0] as any).childNodes[0].childNodes[0].childNodes[0] + .tagName, + ).toBe('td'); + expect( + (childNodes[0] as any).childNodes[0].childNodes[0].childNodes[0] + .childNodes[0].data, + ).toBe('bar'); + }); + + it('Should parse custom tag ', () => { + const root = parse('test', defaultOpts, false, null); + const childNodes = root.childNodes as Element[]; + + expect(childNodes.length).toBe(1); + expect(childNodes[0].tagName).toBe('line'); + expect(childNodes[0].childNodes[0]).toHaveProperty('data', 'test'); + }); + + it('Should properly parse misnested table tags', () => { + const root = parse( + 'i1i2i3', + defaultOpts, + false, + null, + ); + const childNodes = root.childNodes as Element[]; + + expect(childNodes.length).toBe(3); + + for (let i = 0; i < childNodes.length; i++) { + const child = childNodes[i]; + expect(child.tagName).toBe('tr'); + expect(child.childNodes[0]).toHaveProperty('tagName', 'td'); + expect((child.childNodes[0] as Element).childNodes[0]).toHaveProperty( + 'data', + `i${i + 1}`, + ); + } + }); + + it('Should correctly parse data url attributes', () => { + const html = + '
    '; + const expectedAttr = + 'font-family:"butcherman-caps"; src:url(data:font/opentype;base64,AAEA...);'; + const root = parse(html, defaultOpts, false, null); + const childNodes = root.childNodes as Element[]; + + expect(childNodes[0].attribs).toHaveProperty('style', expectedAttr); + }); + + it('Should treat tag content as text', () => { + const root = parse('<xmp><h2>', defaultOpts, false, null); + const childNodes = root.childNodes as Element[]; + + expect(childNodes[0].childNodes[0]).toHaveProperty('data', '

    '); + }); + + it('Should correctly parse malformed numbered entities', () => { + const root = parse('

    z&#

    ', defaultOpts, false, null); + const childNodes = root.childNodes as Element[]; + + expect(childNodes[0].childNodes[0]).toHaveProperty('data', 'z&#'); + }); + + it('Should correctly parse mismatched headings', () => { + const root = parse('

    Test

    ', defaultOpts, false, null); + const { childNodes } = root; + + expect(childNodes.length).toBe(2); + expect(childNodes[0]).toHaveProperty('tagName', 'h2'); + expect(childNodes[1]).toHaveProperty('tagName', 'div'); + }); + + it('Should correctly parse tricky
     content', () => {
    +      const root = parse(
    +        '
    \nA <- factor(A, levels = c("c","a","b"))\n
    ', + defaultOpts, + false, + null, + ); + const childNodes = root.childNodes as Element[]; + + expect(childNodes.length).toBe(1); + expect(childNodes[0].tagName).toBe('pre'); + expect(childNodes[0].childNodes[0]).toHaveProperty( + 'data', + 'A <- factor(A, levels = c("c","a","b"))\n', + ); + }); + + it('should pass the options for including the location info to parse5', () => { + const root = parse( + '

    Hello

    ', + { ...defaultOpts, sourceCodeLocationInfo: true }, + false, + null, + ); + const location = root.children[0].sourceCodeLocation; + + expect(typeof location).toBe('object'); + expect(location?.endOffset).toBe(12); + }); + }); +}); diff --git a/node_modules/cheerio/src/parse.ts b/node_modules/cheerio/src/parse.ts new file mode 100644 index 0000000..5706f14 --- /dev/null +++ b/node_modules/cheerio/src/parse.ts @@ -0,0 +1,105 @@ +import { removeElement } from 'domutils'; +import { + type AnyNode, + Document, + type ParentNode, + isDocument as checkIsDocument, +} from 'domhandler'; +import type { InternalOptions } from './options.js'; + +/** + * Get the parse function with options. + * + * @param parser - The parser function. + * @returns The parse function with options. + */ +export function getParse( + parser: ( + content: string, + options: InternalOptions, + isDocument: boolean, + context: ParentNode | null, + ) => Document, +) { + /** + * Parse a HTML string or a node. + * + * @param content - The HTML string or node. + * @param options - The parser options. + * @param isDocument - If `content` is a document. + * @param context - The context node in the DOM tree. + * @returns The parsed document node. + */ + return function parse( + content: string | Document | AnyNode | AnyNode[] | Buffer, + options: InternalOptions, + isDocument: boolean, + context: ParentNode | null, + ): Document { + if (typeof Buffer !== 'undefined' && Buffer.isBuffer(content)) { + content = content.toString(); + } + + if (typeof content === 'string') { + return parser(content, options, isDocument, context); + } + + const doc = content as AnyNode | AnyNode[] | Document; + + if (!Array.isArray(doc) && checkIsDocument(doc)) { + // If `doc` is already a root, just return it + return doc; + } + + // Add conent to new root element + const root = new Document([]); + + // Update the DOM using the root + update(doc, root); + + return root; + }; +} + +/** + * Update the dom structure, for one changed layer. + * + * @param newChilds - The new children. + * @param parent - The new parent. + * @returns The parent node. + */ +export function update( + newChilds: AnyNode[] | AnyNode, + parent: ParentNode | null, +): ParentNode | null { + // Normalize + const arr = Array.isArray(newChilds) ? newChilds : [newChilds]; + + // Update parent + if (parent) { + parent.children = arr; + } else { + parent = null; + } + + // Update neighbors + for (let i = 0; i < arr.length; i++) { + const node = arr[i]; + + // Cleanly remove existing nodes from their previous structures. + if (node.parent && node.parent.children !== arr) { + removeElement(node); + } + + if (parent) { + node.prev = arr[i - 1] || null; + node.next = arr[i + 1] || null; + } else { + node.prev = node.next = null; + } + + node.parent = parent; + } + + return parent; +} diff --git a/node_modules/cheerio/src/parsers/parse5-adapter.ts b/node_modules/cheerio/src/parsers/parse5-adapter.ts new file mode 100644 index 0000000..ca0d861 --- /dev/null +++ b/node_modules/cheerio/src/parsers/parse5-adapter.ts @@ -0,0 +1,66 @@ +import { + type AnyNode, + type Document, + type ParentNode, + isDocument, +} from 'domhandler'; +import { parse as parseDocument, parseFragment, serializeOuter } from 'parse5'; +import { adapter as htmlparser2Adapter } from 'parse5-htmlparser2-tree-adapter'; +import type { InternalOptions } from '../options.js'; + +/** + * Parse the content with `parse5` in the context of the given `ParentNode`. + * + * @param content - The content to parse. + * @param options - A set of options to use to parse. + * @param isDocument - Whether to parse the content as a full HTML document. + * @param context - The context in which to parse the content. + * @returns The parsed content. + */ +export function parseWithParse5( + content: string, + options: InternalOptions, + isDocument: boolean, + context: ParentNode | null, +): Document { + options.treeAdapter ??= htmlparser2Adapter; + + if (options.scriptingEnabled !== false) { + options.scriptingEnabled = true; + } + + return isDocument + ? parseDocument(content, options) + : parseFragment(context, content, options); +} + +const renderOpts = { treeAdapter: htmlparser2Adapter }; + +/** + * Renders the given DOM tree with `parse5` and returns the result as a string. + * + * @param dom - The DOM tree to render. + * @returns The rendered document. + */ +export function renderWithParse5(dom: AnyNode | ArrayLike): string { + /* + * `dom-serializer` passes over the special "root" node and renders the + * node's children in its place. To mimic this behavior with `parse5`, an + * equivalent operation must be applied to the input array. + */ + const nodes = 'length' in dom ? dom : [dom]; + for (let index = 0; index < nodes.length; index += 1) { + const node = nodes[index]; + if (isDocument(node)) { + Array.prototype.splice.call(nodes, index, 1, ...node.children); + } + } + + let result = ''; + for (let index = 0; index < nodes.length; index += 1) { + const node = nodes[index]; + result += serializeOuter(node, renderOpts); + } + + return result; +} diff --git a/node_modules/cheerio/src/slim.ts b/node_modules/cheerio/src/slim.ts new file mode 100644 index 0000000..440d0a6 --- /dev/null +++ b/node_modules/cheerio/src/slim.ts @@ -0,0 +1,33 @@ +/** + * @file Alternative entry point for Cheerio that always uses htmlparser2. This + * way, parse5 won't be loaded, saving some memory. + */ +import { type CheerioAPI, getLoad } from './load.js'; +import { type CheerioOptions } from './options.js'; +import { getParse } from './parse.js'; +import type { AnyNode } from 'domhandler'; +import render from 'dom-serializer'; +import { parseDocument } from 'htmlparser2'; + +export { contains, merge } from './static.js'; +export type * from './types.js'; +export type { Cheerio } from './cheerio.js'; +export type { CheerioOptions, HTMLParser2Options } from './options.js'; +export type { CheerioAPI } from './load.js'; + +/** + * Create a querying function, bound to a document created from the provided + * markup. + * + * @param content - Markup to be loaded. + * @param options - Options for the created instance. + * @param isDocument - Always `false` here, as we are always using + * `htmlparser2`. + * @returns The loaded document. + * @see {@link https://cheerio.js.org#loading} for additional usage information. + */ +export const load: ( + content: string | AnyNode | AnyNode[] | Buffer, + options?: CheerioOptions | null, + isDocument?: boolean, +) => CheerioAPI = getLoad(getParse(parseDocument), render); diff --git a/node_modules/cheerio/src/static.spec.ts b/node_modules/cheerio/src/static.spec.ts new file mode 100644 index 0000000..3f27234 --- /dev/null +++ b/node_modules/cheerio/src/static.spec.ts @@ -0,0 +1,325 @@ +import { describe, it, expect, beforeEach } from 'vitest'; +import { cheerio, food, eleven } from './__fixtures__/fixtures.js'; +import { type CheerioAPI } from './index.js'; + +describe('cheerio', () => { + describe('.html', () => { + it('() : should return innerHTML; $.html(obj) should return outerHTML', () => { + const $div = cheerio( + 'div', + '
    foobar
    ', + ); + const span = $div.children()[1]; + expect(cheerio(span).html()).toBe('bar'); + expect(cheerio.html(span)).toBe('bar'); + }); + + it('() : should accept an object, an array, or a cheerio object', () => { + const $span = cheerio('foo'); + expect(cheerio.html($span[0])).toBe('foo'); + expect(cheerio.html($span)).toBe('foo'); + }); + + it('() : should be able to set to an empty string', () => { + const $elem = cheerio('foo').html(''); + expect(cheerio.html($elem)).toBe(''); + }); + + it('() : does not render the root element', () => { + const $ = cheerio.load(''); + expect(cheerio.html($.root())).toBe( + '', + ); + }); + + it('(, , ) : does not render the root element', () => { + const $ = cheerio.load('
    a div
    a span'); + const $collection = $('div').add($.root()).add('span'); + const expected = + '
    a div
    a span
    a div
    a span'; + expect(cheerio.html($collection)).toBe(expected); + }); + + it('() : does not crash with `null` as `this` value', () => { + const { html } = cheerio; + expect(html.call(null as never)).toBe(''); + expect(html.call(null as never, '#nothing')).toBe(''); + }); + }); + + describe('.text', () => { + it('(cheerio object) : should return the text contents of the specified elements', () => { + const $ = cheerio.load('This is content.'); + expect(cheerio.text($('a'))).toBe('This is content.'); + }); + + it('(cheerio object) : should omit comment nodes', () => { + const $ = cheerio.load( + 'This is not a comment.', + ); + expect(cheerio.text($('a'))).toBe('This is not a comment.'); + }); + + it('(cheerio object) : should include text contents of children recursively', () => { + const $ = cheerio.load( + 'This is
    a child with another child and not a comment followed by one last child and some final
    text.
    ', + ); + expect(cheerio.text($('a'))).toBe( + 'This is a child with another child and not a comment followed by one last child and some final text.', + ); + }); + + it('() : should return the rendered text content of the root', () => { + const $ = cheerio.load( + 'This is
    a child with another child and not a comment followed by one last child and some final
    text.
    ', + ); + expect(cheerio.text($.root())).toBe( + 'This is a child with another child and not a comment followed by one last child and some final text.', + ); + }); + + it('(cheerio object) : should not omit script tags', () => { + const $ = cheerio.load(''); + expect(cheerio.text($.root())).toBe('console.log("test")'); + }); + + it('(cheerio object) : should omit style tags', () => { + const $ = cheerio.load( + '', + ); + expect($.text()).toBe('.cf-hidden { display: none; }'); + }); + + it('() : does not crash with `null` as `this` value', () => { + const { text } = cheerio; + expect(text.call(null as never)).toBe(''); + }); + }); + + describe('.parseHTML', () => { + const $ = cheerio.load(''); + + it('() : returns null', () => { + expect($.parseHTML()).toBe(null); + }); + + it('(null) : returns null', () => { + expect($.parseHTML(null)).toBe(null); + }); + + it('("") : returns null', () => { + expect($.parseHTML('')).toBe(null); + }); + + it('(largeHtmlString) : parses large HTML strings', () => { + const html = '
    '.repeat(10); + const nodes = $.parseHTML(html); + + expect(nodes.length).toBe(10); + expect(nodes).toBeInstanceOf(Array); + }); + + it('("'; + expect($.parseHTML(html)).toHaveLength(0); + }); + + it('("'; + expect($.parseHTML(html, true)[0]).toHaveProperty('tagName', 'script'); + }); + + it('("scriptAndNonScript) : preserves non-script nodes', () => { + const html = '
    '; + expect($.parseHTML(html)[0]).toHaveProperty('tagName', 'div'); + }); + + it('(scriptAndNonScript, true) : Preserves script position', () => { + const html = '
    '; + expect($.parseHTML(html, true)[0]).toHaveProperty('tagName', 'script'); + }); + + it('(text) : returns a text node', () => { + expect($.parseHTML('text')[0].type).toBe('text'); + }); + + it('(>text) : preserves leading whitespace', () => { + expect($.parseHTML('\t
    ')[0]).toHaveProperty('data', '\t'); + }); + + it('( text) : Leading spaces are treated as text nodes', () => { + expect($.parseHTML('
    ')[0].type).toBe('text'); + }); + + it('(html) : should preserve content', () => { + const html = '
    test div
    '; + expect(cheerio($.parseHTML(html)[0]).html()).toBe('test div'); + }); + + it('(malformedHtml) : should not break', () => { + expect($.parseHTML('')).toHaveLength(1); + }); + + it('(garbageInput) : should not cause an error', () => { + expect( + $.parseHTML('<#if>

    This is a test.

    <#/if>'), + ).toBeTruthy(); + }); + + it('(text) : should return an array that is not effected by DOM manipulation methods', () => { + const $div = cheerio.load('
    '); + const elems = $div.parseHTML(''); + + $div('div').append(elems); + + expect(elems).toHaveLength(2); + }); + + it('(html, context) : should ignore context argument', () => { + const $div = cheerio.load('
    '); + const elems = $div.parseHTML('', { foo: 123 }); + + $div('div').append(elems); + + expect(elems).toHaveLength(1); + }); + + it('(html, context, keepScripts) : should ignore context argument', () => { + const $div = cheerio.load('
    '); + const elems = $div.parseHTML( + '', + { foo: 123 }, + true, + ); + + $div('div').append(elems); + + expect(elems).toHaveLength(2); + }); + }); + + describe('.merge', () => { + const $ = cheerio.load(''); + + it('should be a function', () => { + expect(typeof $.merge).toBe('function'); + }); + + it('(arraylike, arraylike) : should modify the first array, but not the second', () => { + const arr1 = [1, 2, 3]; + const arr2 = [4, 5, 6]; + + const ret = $.merge(arr1, arr2); + expect(typeof ret).toBe('object'); + expect(Array.isArray(ret)).toBe(true); + expect(ret).toBe(arr1); + expect(arr1).toHaveLength(6); + expect(arr2).toHaveLength(3); + }); + + it('(arraylike, arraylike) : should handle objects that arent arrays, but are arraylike', () => { + const arr1: ArrayLike = { + length: 3, + 0: 'a', + 1: 'b', + 2: 'c', + }; + const arr2 = { + length: 3, + 0: 'd', + 1: 'e', + 2: 'f', + }; + + $.merge(arr1, arr2); + expect(arr1).toHaveLength(6); + expect(arr1[3]).toBe('d'); + expect(arr1[4]).toBe('e'); + expect(arr1[5]).toBe('f'); + expect(arr2).toHaveLength(3); + }); + + it('(?, ?) : should gracefully reject invalid inputs', () => { + expect($.merge([4], 3 as never)).toBeFalsy(); + expect($.merge({} as never, {} as never)).toBeFalsy(); + expect($.merge([], {} as never)).toBeFalsy(); + expect($.merge({} as never, [])).toBeFalsy(); + const fakeArray1 = { length: 3, 0: 'a', 1: 'b', 3: 'd' }; + expect($.merge(fakeArray1, [])).toBeFalsy(); + expect($.merge([], fakeArray1)).toBeFalsy(); + expect($.merge({ length: '7' } as never, [])).toBeFalsy(); + expect($.merge({ length: -1 }, [])).toBeFalsy(); + }); + + it('(?, ?) : should no-op on invalid inputs', () => { + const fakeArray1 = { length: 3, 0: 'a', 1: 'b', 3: 'd' }; + $.merge(fakeArray1, []); + expect(fakeArray1).toHaveLength(3); + expect(fakeArray1[0]).toBe('a'); + expect(fakeArray1[1]).toBe('b'); + expect(fakeArray1[3]).toBe('d'); + $.merge([], fakeArray1); + expect(fakeArray1).toHaveLength(3); + expect(fakeArray1[0]).toBe('a'); + expect(fakeArray1[1]).toBe('b'); + expect(fakeArray1[3]).toBe('d'); + }); + }); + + describe('.contains', () => { + let $: CheerioAPI; + + beforeEach(() => { + $ = cheerio.load(food); + }); + + it('(container, contained) : should correctly detect the provided element', () => { + const $food = $('#food'); + const $fruits = $('#fruits'); + const $apple = $('.apple'); + + expect($.contains($food[0], $fruits[0])).toBe(true); + expect($.contains($food[0], $apple[0])).toBe(true); + }); + + it('(container, other) : should not detect elements that are not contained', () => { + const $fruits = $('#fruits'); + const $vegetables = $('#vegetables'); + const $apple = $('.apple'); + + expect($.contains($vegetables[0], $apple[0])).toBe(false); + expect($.contains($fruits[0], $vegetables[0])).toBe(false); + expect($.contains($vegetables[0], $fruits[0])).toBe(false); + expect($.contains($fruits[0], $fruits[0])).toBe(false); + expect($.contains($vegetables[0], $vegetables[0])).toBe(false); + }); + }); + + describe('.root', () => { + it('() : should return a cheerio-wrapped root object', () => { + const $ = cheerio.load('foo'); + $.root().append('
    '); + expect($.html()).toBe( + 'foo
    ', + ); + }); + }); + + describe('.extract', () => { + it('() : should extract values for selectors', () => { + const $ = cheerio.load(eleven); + + expect( + $.extract({ + red: [{ selector: '.red', value: 'outerHTML' }], + }), + ).toStrictEqual({ + red: [ + '
  • Four
  • ', + '
  • Five
  • ', + '
  • Nine
  • ', + ], + }); + }); + }); +}); diff --git a/node_modules/cheerio/src/static.ts b/node_modules/cheerio/src/static.ts new file mode 100644 index 0000000..b26f213 --- /dev/null +++ b/node_modules/cheerio/src/static.ts @@ -0,0 +1,312 @@ +import type { BasicAcceptedElems } from './types.js'; +import type { CheerioAPI } from './load.js'; +import type { Cheerio } from './cheerio.js'; +import type { AnyNode, Document } from 'domhandler'; +import { textContent } from 'domutils'; +import { + type InternalOptions, + type CheerioOptions, + flattenOptions as flattenOptions, +} from './options.js'; +import type { ExtractedMap, ExtractMap } from './api/extract.js'; + +/** + * Helper function to render a DOM. + * + * @param that - Cheerio instance to render. + * @param dom - The DOM to render. Defaults to `that`'s root. + * @param options - Options for rendering. + * @returns The rendered document. + */ +function render( + that: CheerioAPI, + dom: BasicAcceptedElems | undefined, + options: InternalOptions, +): string { + if (!that) return ''; + + return that(dom ?? that._root.children, null, undefined, options).toString(); +} + +/** + * Checks if a passed object is an options object. + * + * @param dom - Object to check if it is an options object. + * @param options - Options object. + * @returns Whether the object is an options object. + */ +function isOptions( + dom?: BasicAcceptedElems | CheerioOptions | null, + options?: CheerioOptions, +): dom is CheerioOptions { + return ( + !options && + typeof dom === 'object' && + dom != null && + !('length' in dom) && + !('type' in dom) + ); +} + +/** + * Renders the document. + * + * @category Static + * @param options - Options for the renderer. + * @returns The rendered document. + */ +export function html(this: CheerioAPI, options?: CheerioOptions): string; +/** + * Renders the document. + * + * @category Static + * @param dom - Element to render. + * @param options - Options for the renderer. + * @returns The rendered document. + */ +export function html( + this: CheerioAPI, + dom?: BasicAcceptedElems, + options?: CheerioOptions, +): string; +export function html( + this: CheerioAPI, + dom?: BasicAcceptedElems | CheerioOptions, + options?: CheerioOptions, +): string { + /* + * Be flexible about parameters, sometimes we call html(), + * with options as only parameter + * check dom argument for dom element specific properties + * assume there is no 'length' or 'type' properties in the options object + */ + const toRender = isOptions(dom) ? ((options = dom), undefined) : dom; + + /* + * Sometimes `$.html()` is used without preloading html, + * so fallback non-existing options to the default ones. + */ + const opts = { + ...this?._options, + ...flattenOptions(options), + }; + + return render(this, toRender, opts); +} + +/** + * Render the document as XML. + * + * @category Static + * @param dom - Element to render. + * @returns THe rendered document. + */ +export function xml( + this: CheerioAPI, + dom?: BasicAcceptedElems, +): string { + const options = { ...this._options, xmlMode: true }; + + return render(this, dom, options); +} + +/** + * Render the document as text. + * + * This returns the `textContent` of the passed elements. The result will + * include the contents of `"; +const handler = new DomHandler((error, dom) => { + if (error) { + // Handle error + } else { + // Parsing completed, do something + console.log(dom); + } +}); +const parser = new Parser(handler); +parser.write(rawHtml); +parser.end(); +``` + +Output: + +```javascript +[ + { + data: "Xyz ", + type: "text", + }, + { + type: "script", + name: "script", + attribs: { + language: "javascript", + }, + children: [ + { + data: "var foo = '';<", + type: "text", + }, + ], + }, + { + data: ""), +}; +function isAsciiAlpha(c) { + return ((c >= Chars.UpperA && c <= Chars.UpperZ) || + (c >= Chars.LowerA && c <= Chars.LowerZ)); +} +function isQuote(c) { + return c === Chars.DQUOTE || c === Chars.SQUOTE; +} +var Sniffer = /** @class */ (function () { + function Sniffer(_a) { + var _b = _a === void 0 ? {} : _a, _c = _b.maxBytes, maxBytes = _c === void 0 ? 1024 : _c, userEncoding = _b.userEncoding, transportLayerEncodingLabel = _b.transportLayerEncodingLabel, defaultEncoding = _b.defaultEncoding; + /** The offset of the previous buffers. */ + this.offset = 0; + this.state = State.Begin; + this.sectionIndex = 0; + this.attribType = AttribType.None; + /** + * Indicates if the `http-equiv` is `content-type`. + * + * Initially `null`, a boolean when a value is found. + */ + this.gotPragma = null; + this.needsPragma = null; + this.inMetaTag = false; + this.encoding = "windows-1252"; + this.resultType = ResultType.DEFAULT; + this.quoteCharacter = 0; + this.attributeValue = []; + this.maxBytes = maxBytes; + if (userEncoding) { + this.setResult(userEncoding, ResultType.PASSED); + } + if (transportLayerEncodingLabel) { + this.setResult(transportLayerEncodingLabel, ResultType.PASSED); + } + if (defaultEncoding) { + this.setResult(defaultEncoding, ResultType.DEFAULT); + } + } + Sniffer.prototype.setResult = function (label, type) { + if (this.resultType === ResultType.DEFAULT || this.resultType > type) { + var encoding = (0, whatwg_encoding_1.labelToName)(label); + if (encoding) { + this.encoding = + // Check if we are in a meta tag and the encoding is `x-user-defined` + type === ResultType.META_TAG && + encoding === "x-user-defined" + ? "windows-1252" + : // Check if we are in a meta tag or xml declaration, and the encoding is UTF-16 + (type === ResultType.META_TAG || + type === ResultType.XML_ENCODING) && + (encoding === "UTF-16LE" || encoding === "UTF-16BE") + ? "UTF-8" + : encoding; + this.resultType = type; + } + } + }; + Sniffer.prototype.stateBegin = function (c) { + switch (c) { + case exports.STRINGS.UTF16BE_BOM[0]: { + this.state = State.BOM16BE; + break; + } + case exports.STRINGS.UTF16LE_BOM[0]: { + this.state = State.BOM16LE; + break; + } + case exports.STRINGS.UTF8_BOM[0]: { + this.sectionIndex = 1; + this.state = State.BOM8; + break; + } + case Chars.NIL: { + this.state = State.UTF16BE_XML_PREFIX; + this.sectionIndex = 1; + break; + } + case Chars.LT: { + this.state = State.BeginLT; + break; + } + default: { + this.state = State.BeforeTag; + } + } + }; + Sniffer.prototype.stateBeginLT = function (c) { + if (c === Chars.NIL) { + this.state = State.UTF16LE_XML_PREFIX; + this.sectionIndex = 2; + } + else if (c === Chars.QUESTION) { + this.state = State.XMLDeclaration; + this.sectionIndex = 2; + } + else { + this.state = State.BeforeTagName; + this.stateBeforeTagName(c); + } + }; + Sniffer.prototype.stateUTF16BE_XML_PREFIX = function (c) { + // Advance position in the section + if (this.advanceSection(exports.STRINGS.UTF16BE_XML_PREFIX, c)) { + if (this.sectionIndex === exports.STRINGS.UTF16BE_XML_PREFIX.length) { + // We have the whole prefix + this.setResult("utf-16be", ResultType.XML_PREFIX); + } + } + else { + this.state = State.BeforeTag; + this.stateBeforeTag(c); + } + }; + Sniffer.prototype.stateUTF16LE_XML_PREFIX = function (c) { + // Advance position in the section + if (this.advanceSection(exports.STRINGS.UTF16LE_XML_PREFIX, c)) { + if (this.sectionIndex === exports.STRINGS.UTF16LE_XML_PREFIX.length) { + // We have the whole prefix + this.setResult("utf-16le", ResultType.XML_PREFIX); + } + } + else { + this.state = State.BeforeTag; + this.stateBeforeTag(c); + } + }; + Sniffer.prototype.stateBOM16LE = function (c) { + if (c === exports.STRINGS.UTF16LE_BOM[1]) { + this.setResult("utf-16le", ResultType.BOM); + } + else { + this.state = State.BeforeTag; + this.stateBeforeTag(c); + } + }; + Sniffer.prototype.stateBOM16BE = function (c) { + if (c === exports.STRINGS.UTF16BE_BOM[1]) { + this.setResult("utf-16be", ResultType.BOM); + } + else { + this.state = State.BeforeTag; + this.stateBeforeTag(c); + } + }; + Sniffer.prototype.stateBOM8 = function (c) { + if (this.advanceSection(exports.STRINGS.UTF8_BOM, c) && + this.sectionIndex === exports.STRINGS.UTF8_BOM.length) { + this.setResult("utf-8", ResultType.BOM); + } + }; + Sniffer.prototype.stateBeforeTag = function (c) { + if (c === Chars.LT) { + this.state = State.BeforeTagName; + this.inMetaTag = false; + } + }; + /** + * We have seen a `<`, and now have to figure out what to do. + * + * Options: + * - `` above. + * Set this to 2, to support many dashes before the closing `>`. + */ + this.sectionIndex = 2; + } + }; + /** + * Any section starting with ``. + this.stateTagNameOther(c); + }; + Sniffer.prototype.stateTagNameOther = function (c) { + if (SPACE_CHARACTERS.has(c)) { + this.state = State.BeforeAttribute; + } + else if (c === Chars.GT) { + this.state = State.BeforeTag; + } + }; + Sniffer.prototype.stateBeforeAttribute = function (c) { + if (SPACE_CHARACTERS.has(c)) + return; + if (this.inMetaTag) { + var lower = c | 0x20; + if (lower === exports.STRINGS.HTTP_EQUIV[0]) { + this.sectionIndex = 1; + this.state = State.MetaAttribHttpEquiv; + return; + } + else if (lower === exports.STRINGS.CHARSET[0]) { + this.sectionIndex = 1; + this.state = State.MetaAttribC; + return; + } + } + this.state = + c === Chars.SLASH || c === Chars.GT + ? State.BeforeTag + : State.AnyAttribName; + }; + Sniffer.prototype.handleMetaAttrib = function (c, section, type) { + if (this.advanceSectionIC(section, c)) { + if (this.sectionIndex === section.length) { + this.attribType = type; + this.state = State.MetaAttribAfterName; + } + } + else { + this.state = State.AnyAttribName; + this.stateAnyAttribName(c); + } + }; + Sniffer.prototype.stateMetaAttribHttpEquiv = function (c) { + this.handleMetaAttrib(c, exports.STRINGS.HTTP_EQUIV, AttribType.HttpEquiv); + }; + Sniffer.prototype.stateMetaAttribC = function (c) { + var lower = c | 0x20; + if (lower === exports.STRINGS.CHARSET[1]) { + this.sectionIndex = 2; + this.state = State.MetaAttribCharset; + } + else if (lower === exports.STRINGS.CONTENT[1]) { + this.sectionIndex = 2; + this.state = State.MetaAttribContent; + } + else { + this.state = State.AnyAttribName; + this.stateAnyAttribName(c); + } + }; + Sniffer.prototype.stateMetaAttribCharset = function (c) { + this.handleMetaAttrib(c, exports.STRINGS.CHARSET, AttribType.Charset); + }; + Sniffer.prototype.stateMetaAttribContent = function (c) { + this.handleMetaAttrib(c, exports.STRINGS.CONTENT, AttribType.Content); + }; + Sniffer.prototype.stateMetaAttribAfterName = function (c) { + if (SPACE_CHARACTERS.has(c) || c === Chars.EQUALS) { + this.state = State.AfterAttributeName; + this.stateAfterAttributeName(c); + } + else { + this.state = State.AnyAttribName; + this.stateAnyAttribName(c); + } + }; + Sniffer.prototype.stateAnyAttribName = function (c) { + if (SPACE_CHARACTERS.has(c)) { + this.attribType = AttribType.None; + this.state = State.AfterAttributeName; + } + else if (c === Chars.SLASH || c === Chars.GT) { + this.state = State.BeforeTag; + } + else if (c === Chars.EQUALS) { + this.state = State.BeforeAttributeValue; + } + }; + Sniffer.prototype.stateAfterAttributeName = function (c) { + if (SPACE_CHARACTERS.has(c)) + return; + if (c === Chars.EQUALS) { + this.state = State.BeforeAttributeValue; + } + else { + this.state = State.BeforeAttribute; + this.stateBeforeAttribute(c); + } + }; + Sniffer.prototype.stateBeforeAttributeValue = function (c) { + if (SPACE_CHARACTERS.has(c)) + return; + this.attributeValue.length = 0; + this.sectionIndex = 0; + if (isQuote(c)) { + this.quoteCharacter = c; + this.state = + this.attribType === AttribType.Content + ? State.MetaContentValueQuotedBeforeEncoding + : this.attribType === AttribType.HttpEquiv + ? State.MetaAttribHttpEquivValue + : State.AttributeValueQuoted; + } + else if (this.attribType === AttribType.Content) { + this.state = State.MetaContentValueUnquotedBeforeEncoding; + this.stateMetaContentValueUnquotedBeforeEncoding(c); + } + else if (this.attribType === AttribType.HttpEquiv) { + // We use `quoteCharacter = 0` to signify that the value is unquoted. + this.quoteCharacter = 0; + this.sectionIndex = 0; + this.state = State.MetaAttribHttpEquivValue; + this.stateMetaAttribHttpEquivValue(c); + } + else { + this.state = State.AttributeValueUnquoted; + this.stateAttributeValueUnquoted(c); + } + }; + // The value has to be `content-type` + Sniffer.prototype.stateMetaAttribHttpEquivValue = function (c) { + if (this.sectionIndex === exports.STRINGS.CONTENT_TYPE.length) { + if (this.quoteCharacter === 0 + ? END_OF_UNQUOTED_ATTRIBUTE_VALUE.has(c) + : c === this.quoteCharacter) { + if (this.needsPragma !== null) { + this.setResult(this.needsPragma, ResultType.META_TAG); + } + else if (this.gotPragma === null) { + this.gotPragma = true; + } + this.state = State.BeforeAttribute; + return; + } + } + else if (this.advanceSectionIC(exports.STRINGS.CONTENT_TYPE, c)) { + return; + } + this.gotPragma = false; + if (this.quoteCharacter === 0) { + this.state = State.AttributeValueUnquoted; + this.stateAttributeValueUnquoted(c); + } + else { + this.state = State.AttributeValueQuoted; + this.stateAttributeValueQuoted(c); + } + }; + Sniffer.prototype.handleMetaContentValue = function () { + if (this.attributeValue.length === 0) + return; + var encoding = String.fromCharCode.apply(String, this.attributeValue); + if (this.gotPragma) { + this.setResult(encoding, ResultType.META_TAG); + } + else if (this.needsPragma === null) { + // Don't override a previous result. + this.needsPragma = encoding; + } + this.attributeValue.length = 0; + }; + Sniffer.prototype.handleAttributeValue = function () { + if (this.attribType === AttribType.Charset) { + this.setResult(String.fromCharCode.apply(String, this.attributeValue), ResultType.META_TAG); + } + }; + Sniffer.prototype.stateAttributeValueUnquoted = function (c) { + if (SPACE_CHARACTERS.has(c)) { + this.handleAttributeValue(); + this.state = State.BeforeAttribute; + } + else if (c === Chars.SLASH || c === Chars.GT) { + this.handleAttributeValue(); + this.state = State.BeforeTag; + } + else if (this.attribType === AttribType.Charset) { + this.attributeValue.push(c | 0x20); + } + }; + Sniffer.prototype.findMetaContentEncoding = function (c) { + if (this.advanceSectionIC(exports.STRINGS.CHARSET, c)) { + if (this.sectionIndex === exports.STRINGS.CHARSET.length) { + return true; + } + } + else { + // If we encountered another `c`, assume we started over. + this.sectionIndex = Number(c === exports.STRINGS.CHARSET[0]); + } + return false; + }; + Sniffer.prototype.stateMetaContentValueUnquotedBeforeEncoding = function (c) { + if (END_OF_UNQUOTED_ATTRIBUTE_VALUE.has(c)) { + this.stateAttributeValueUnquoted(c); + } + else if (this.sectionIndex === exports.STRINGS.CHARSET.length) { + if (c === Chars.EQUALS) { + this.state = State.MetaContentValueUnquotedBeforeValue; + } + } + else { + this.findMetaContentEncoding(c); + } + }; + Sniffer.prototype.stateMetaContentValueUnquotedBeforeValue = function (c) { + if (isQuote(c)) { + this.quoteCharacter = c; + this.state = State.MetaContentValueUnquotedValueQuoted; + } + else if (END_OF_UNQUOTED_ATTRIBUTE_VALUE.has(c)) { + // Can't have spaces here, as it would no longer be part of the attribute value. + this.stateAttributeValueUnquoted(c); + } + else { + this.state = State.MetaContentValueUnquotedValueUnquoted; + this.stateMetaContentValueUnquotedValueUnquoted(c); + } + }; + Sniffer.prototype.stateMetaContentValueUnquotedValueQuoted = function (c) { + if (END_OF_UNQUOTED_ATTRIBUTE_VALUE.has(c)) { + // Quotes weren't matched, so we're done. + this.stateAttributeValueUnquoted(c); + } + else if (c === this.quoteCharacter) { + this.handleMetaContentValue(); + this.state = State.AttributeValueUnquoted; + } + else { + this.attributeValue.push(c | 0x20); + } + }; + Sniffer.prototype.stateMetaContentValueUnquotedValueUnquoted = function (c) { + if (END_OF_UNQUOTED_ATTRIBUTE_VALUE.has(c) || c === Chars.SEMICOLON) { + this.handleMetaContentValue(); + this.state = State.AttributeValueUnquoted; + this.stateAttributeValueUnquoted(c); + } + else { + this.attributeValue.push(c | 0x20); + } + }; + Sniffer.prototype.stateMetaContentValueQuotedValueUnquoted = function (c) { + if (isQuote(c) || SPACE_CHARACTERS.has(c) || c === Chars.SEMICOLON) { + this.handleMetaContentValue(); + // We are done with the value, but might not be at the end of the attribute + this.state = State.AttributeValueQuoted; + this.stateAttributeValueQuoted(c); + } + else { + this.attributeValue.push(c | 0x20); + } + }; + Sniffer.prototype.stateMetaContentValueQuotedValueQuoted = function (c) { + if (isQuote(c)) { + // We have reached the end of our value. + if (c !== this.quoteCharacter) { + // Only handle the value if inner quotes were matched. + this.handleMetaContentValue(); + } + this.state = State.AttributeValueQuoted; + this.stateAttributeValueQuoted(c); + } + else { + this.attributeValue.push(c | 0x20); + } + }; + Sniffer.prototype.stateMetaContentValueQuotedBeforeEncoding = function (c) { + if (c === this.quoteCharacter) { + this.stateAttributeValueQuoted(c); + } + else if (this.findMetaContentEncoding(c)) { + this.state = State.MetaContentValueQuotedAfterEncoding; + } + }; + Sniffer.prototype.stateMetaContentValueQuotedAfterEncoding = function (c) { + if (c === Chars.EQUALS) { + this.state = State.MetaContentValueQuotedBeforeValue; + } + else if (!SPACE_CHARACTERS.has(c)) { + // Look for the next encoding + this.state = State.MetaContentValueQuotedBeforeEncoding; + this.stateMetaContentValueQuotedBeforeEncoding(c); + } + }; + Sniffer.prototype.stateMetaContentValueQuotedBeforeValue = function (c) { + if (c === this.quoteCharacter) { + this.stateAttributeValueQuoted(c); + } + else if (isQuote(c)) { + this.state = State.MetaContentValueQuotedValueQuoted; + } + else if (!SPACE_CHARACTERS.has(c)) { + this.state = State.MetaContentValueQuotedValueUnquoted; + this.stateMetaContentValueQuotedValueUnquoted(c); + } + }; + Sniffer.prototype.stateAttributeValueQuoted = function (c) { + if (c === this.quoteCharacter) { + this.handleAttributeValue(); + this.state = State.BeforeAttribute; + } + else if (this.attribType === AttribType.Charset) { + this.attributeValue.push(c | 0x20); + } + }; + // Read STRINGS.XML_DECLARATION + Sniffer.prototype.stateXMLDeclaration = function (c) { + if (this.advanceSection(exports.STRINGS.XML_DECLARATION, c)) { + if (this.sectionIndex === exports.STRINGS.XML_DECLARATION.length) { + this.sectionIndex = 0; + this.state = State.XMLDeclarationBeforeEncoding; + } + } + else { + this.state = State.WeirdTag; + } + }; + Sniffer.prototype.stateXMLDeclarationBeforeEncoding = function (c) { + if (this.advanceSection(exports.STRINGS.ENCODING, c)) { + if (this.sectionIndex === exports.STRINGS.ENCODING.length) { + this.state = State.XMLDeclarationAfterEncoding; + } + } + else if (c === Chars.GT) { + this.state = State.BeforeTag; + } + else { + // If we encountered another `c`, assume we started over. + this.sectionIndex = Number(c === exports.STRINGS.ENCODING[0]); + } + }; + Sniffer.prototype.stateXMLDeclarationAfterEncoding = function (c) { + if (c === Chars.EQUALS) { + this.state = State.XMLDeclarationBeforeValue; + } + else if (c > Chars.SPACE) { + this.state = State.WeirdTag; + this.stateWeirdTag(c); + } + }; + Sniffer.prototype.stateXMLDeclarationBeforeValue = function (c) { + if (isQuote(c)) { + this.attributeValue.length = 0; + this.state = State.XMLDeclarationValue; + } + else if (c > Chars.SPACE) { + this.state = State.WeirdTag; + this.stateWeirdTag(c); + } + }; + Sniffer.prototype.stateXMLDeclarationValue = function (c) { + if (isQuote(c)) { + this.setResult(String.fromCharCode.apply(String, this.attributeValue), ResultType.XML_ENCODING); + this.state = State.WeirdTag; + } + else if (c === Chars.GT) { + this.state = State.BeforeTag; + } + else if (c <= Chars.SPACE) { + this.state = State.WeirdTag; + } + else { + this.attributeValue.push(c | 0x20); + } + }; + Sniffer.prototype.write = function (buffer) { + var index = 0; + for (; index < buffer.length && this.offset + index < this.maxBytes; index++) { + var c = buffer[index]; + switch (this.state) { + case State.Begin: { + this.stateBegin(c); + break; + } + case State.BOM16BE: { + this.stateBOM16BE(c); + break; + } + case State.BOM16LE: { + this.stateBOM16LE(c); + break; + } + case State.BOM8: { + this.stateBOM8(c); + break; + } + case State.UTF16LE_XML_PREFIX: { + this.stateUTF16LE_XML_PREFIX(c); + break; + } + case State.BeginLT: { + this.stateBeginLT(c); + break; + } + case State.UTF16BE_XML_PREFIX: { + this.stateUTF16BE_XML_PREFIX(c); + break; + } + case State.BeforeTag: { + // Optimization: Skip all characters until we find a `<` + var idx = buffer.indexOf(Chars.LT, index); + if (idx < 0) { + // We are done with this buffer. Stay in the state and try on the next one. + index = buffer.length; + } + else { + index = idx; + this.stateBeforeTag(Chars.LT); + } + break; + } + case State.BeforeTagName: { + this.stateBeforeTagName(c); + break; + } + case State.BeforeCloseTagName: { + this.stateBeforeCloseTagName(c); + break; + } + case State.CommentStart: { + this.stateCommentStart(c); + break; + } + case State.CommentEnd: { + this.stateCommentEnd(c); + break; + } + case State.TagNameMeta: { + this.stateTagNameMeta(c); + break; + } + case State.TagNameOther: { + this.stateTagNameOther(c); + break; + } + case State.XMLDeclaration: { + this.stateXMLDeclaration(c); + break; + } + case State.XMLDeclarationBeforeEncoding: { + this.stateXMLDeclarationBeforeEncoding(c); + break; + } + case State.XMLDeclarationAfterEncoding: { + this.stateXMLDeclarationAfterEncoding(c); + break; + } + case State.XMLDeclarationBeforeValue: { + this.stateXMLDeclarationBeforeValue(c); + break; + } + case State.XMLDeclarationValue: { + this.stateXMLDeclarationValue(c); + break; + } + case State.WeirdTag: { + this.stateWeirdTag(c); + break; + } + case State.BeforeAttribute: { + this.stateBeforeAttribute(c); + break; + } + case State.MetaAttribHttpEquiv: { + this.stateMetaAttribHttpEquiv(c); + break; + } + case State.MetaAttribHttpEquivValue: { + this.stateMetaAttribHttpEquivValue(c); + break; + } + case State.MetaAttribC: { + this.stateMetaAttribC(c); + break; + } + case State.MetaAttribContent: { + this.stateMetaAttribContent(c); + break; + } + case State.MetaAttribCharset: { + this.stateMetaAttribCharset(c); + break; + } + case State.MetaAttribAfterName: { + this.stateMetaAttribAfterName(c); + break; + } + case State.MetaContentValueQuotedBeforeEncoding: { + this.stateMetaContentValueQuotedBeforeEncoding(c); + break; + } + case State.MetaContentValueQuotedAfterEncoding: { + this.stateMetaContentValueQuotedAfterEncoding(c); + break; + } + case State.MetaContentValueQuotedBeforeValue: { + this.stateMetaContentValueQuotedBeforeValue(c); + break; + } + case State.MetaContentValueQuotedValueQuoted: { + this.stateMetaContentValueQuotedValueQuoted(c); + break; + } + case State.MetaContentValueQuotedValueUnquoted: { + this.stateMetaContentValueQuotedValueUnquoted(c); + break; + } + case State.MetaContentValueUnquotedBeforeEncoding: { + this.stateMetaContentValueUnquotedBeforeEncoding(c); + break; + } + case State.MetaContentValueUnquotedBeforeValue: { + this.stateMetaContentValueUnquotedBeforeValue(c); + break; + } + case State.MetaContentValueUnquotedValueQuoted: { + this.stateMetaContentValueUnquotedValueQuoted(c); + break; + } + case State.MetaContentValueUnquotedValueUnquoted: { + this.stateMetaContentValueUnquotedValueUnquoted(c); + break; + } + case State.AnyAttribName: { + this.stateAnyAttribName(c); + break; + } + case State.AfterAttributeName: { + this.stateAfterAttributeName(c); + break; + } + case State.BeforeAttributeValue: { + this.stateBeforeAttributeValue(c); + break; + } + case State.AttributeValueQuoted: { + this.stateAttributeValueQuoted(c); + break; + } + default: { + // (State.AttributeValueUnquoted) + this.stateAttributeValueUnquoted(c); + } + } + } + this.offset += index; + }; + return Sniffer; +}()); +exports.Sniffer = Sniffer; +/** Get the encoding for the passed buffer. */ +function getEncoding(buffer, options) { + var sniffer = new Sniffer(options); + sniffer.write(buffer); + return sniffer.encoding; +} +exports.getEncoding = getEncoding; +//# sourceMappingURL=sniffer.js.map \ No newline at end of file diff --git a/node_modules/encoding-sniffer/dist/commonjs/sniffer.js.map b/node_modules/encoding-sniffer/dist/commonjs/sniffer.js.map new file mode 100644 index 0000000..77403f3 --- /dev/null +++ b/node_modules/encoding-sniffer/dist/commonjs/sniffer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sniffer.js","sourceRoot":"","sources":["../../src/sniffer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/encoding-sniffer/dist/esm/index.d.ts b/node_modules/encoding-sniffer/dist/esm/index.d.ts new file mode 100644 index 0000000..6215371 --- /dev/null +++ b/node_modules/encoding-sniffer/dist/esm/index.d.ts @@ -0,0 +1,33 @@ +/// +/// +import { Transform, type TransformCallback } from "node:stream"; +import type { SnifferOptions } from "./sniffer.js"; +/** + * Sniff the encoding of a buffer, then decode it. + * + * @param buffer Buffer to be decoded + * @param options Options for the sniffer + * @returns The decoded buffer + */ +export declare function decodeBuffer(buffer: Buffer, options?: SnifferOptions): string; +/** + * Decodes a stream of buffers into a stream of strings. + * + * Reads the first 1024 bytes and passes them to the sniffer. Once an encoding + * has been determined, it passes all data to iconv-lite's stream and outputs + * the results. + */ +export declare class DecodeStream extends Transform { + private readonly sniffer; + private readonly buffers; + /** The iconv decode stream. If it is set, we have read more than `options.maxBytes` bytes. */ + private iconv; + private readonly maxBytes; + private readBytes; + constructor(options?: SnifferOptions); + _transform(chunk: Uint8Array, _encoding: string, callback: TransformCallback): void; + private getIconvStream; + _flush(callback: TransformCallback): void; +} +export { type SnifferOptions, getEncoding } from "./sniffer.js"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/encoding-sniffer/dist/esm/index.d.ts.map b/node_modules/encoding-sniffer/dist/esm/index.d.ts.map new file mode 100644 index 0000000..10647e9 --- /dev/null +++ b/node_modules/encoding-sniffer/dist/esm/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEhE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAGnD;;;;;;GAMG;AACH,wBAAgB,YAAY,CACxB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,cAAmB,GAC7B,MAAM,CAER;AAED;;;;;;GAMG;AACH,qBAAa,YAAa,SAAQ,SAAS;IACvC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,8FAA8F;IAC9F,OAAO,CAAC,KAAK,CAAuC;IACpD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;IAC1B,OAAO,CAAC,SAAS,CAAK;gBAEV,OAAO,CAAC,EAAE,cAAc;IAM3B,UAAU,CACf,KAAK,EAAE,UAAU,EACjB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,iBAAiB,GAC5B,IAAI;IAeP,OAAO,CAAC,cAAc;IAmBb,MAAM,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;CAGrD;AAED,OAAO,EAAE,KAAK,cAAc,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC"} \ No newline at end of file diff --git a/node_modules/encoding-sniffer/dist/esm/index.js b/node_modules/encoding-sniffer/dist/esm/index.js new file mode 100644 index 0000000..df69edc --- /dev/null +++ b/node_modules/encoding-sniffer/dist/esm/index.js @@ -0,0 +1,85 @@ +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +import { Transform } from "node:stream"; +import iconv from "iconv-lite"; +import { Sniffer, getEncoding } from "./sniffer.js"; +/** + * Sniff the encoding of a buffer, then decode it. + * + * @param buffer Buffer to be decoded + * @param options Options for the sniffer + * @returns The decoded buffer + */ +export function decodeBuffer(buffer, options) { + if (options === void 0) { options = {}; } + return iconv.decode(buffer, getEncoding(buffer, options)); +} +/** + * Decodes a stream of buffers into a stream of strings. + * + * Reads the first 1024 bytes and passes them to the sniffer. Once an encoding + * has been determined, it passes all data to iconv-lite's stream and outputs + * the results. + */ +var DecodeStream = /** @class */ (function (_super) { + __extends(DecodeStream, _super); + function DecodeStream(options) { + var _a; + var _this = _super.call(this, { decodeStrings: false, encoding: "utf-8" }) || this; + _this.buffers = []; + /** The iconv decode stream. If it is set, we have read more than `options.maxBytes` bytes. */ + _this.iconv = null; + _this.readBytes = 0; + _this.sniffer = new Sniffer(options); + _this.maxBytes = (_a = options === null || options === void 0 ? void 0 : options.maxBytes) !== null && _a !== void 0 ? _a : 1024; + return _this; + } + DecodeStream.prototype._transform = function (chunk, _encoding, callback) { + if (this.readBytes < this.maxBytes) { + this.sniffer.write(chunk); + this.readBytes += chunk.length; + if (this.readBytes < this.maxBytes) { + this.buffers.push(chunk); + callback(); + return; + } + } + this.getIconvStream().write(chunk, callback); + }; + DecodeStream.prototype.getIconvStream = function () { + var _this = this; + if (this.iconv) { + return this.iconv; + } + var stream = iconv.decodeStream(this.sniffer.encoding); + stream.on("data", function (chunk) { return _this.push(chunk, "utf-8"); }); + stream.on("end", function () { return _this.push(null); }); + this.iconv = stream; + for (var _i = 0, _a = this.buffers; _i < _a.length; _i++) { + var buffer = _a[_i]; + stream.write(buffer); + } + this.buffers.length = 0; + return stream; + }; + DecodeStream.prototype._flush = function (callback) { + this.getIconvStream().end(callback); + }; + return DecodeStream; +}(Transform)); +export { DecodeStream }; +export { getEncoding } from "./sniffer.js"; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/encoding-sniffer/dist/esm/index.js.map b/node_modules/encoding-sniffer/dist/esm/index.js.map new file mode 100644 index 0000000..be76b8d --- /dev/null +++ b/node_modules/encoding-sniffer/dist/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,OAAO,EAAE,SAAS,EAA0B,MAAM,aAAa,CAAC;AAChE,OAAO,KAAK,MAAM,YAAY,CAAC;AAE/B,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CACxB,MAAc,EACd,OAA4B;IAA5B,wBAAA,EAAA,YAA4B;IAE5B,OAAO,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;GAMG;AACH;IAAkC,gCAAS;IAQvC,sBAAY,OAAwB;;QAChC,YAAA,MAAK,YAAC,EAAE,aAAa,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,SAAC;QAPtC,aAAO,GAAiB,EAAE,CAAC;QAC5C,8FAA8F;QACtF,WAAK,GAAkC,IAAI,CAAC;QAE5C,eAAS,GAAG,CAAC,CAAC;QAIlB,KAAI,CAAC,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;QACpC,KAAI,CAAC,QAAQ,GAAG,MAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,QAAQ,mCAAI,IAAI,CAAC;;IAC9C,CAAC;IAEQ,iCAAU,GAAnB,UACI,KAAiB,EACjB,SAAiB,EACjB,QAA2B;QAE3B,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YAC1B,IAAI,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC;YAE/B,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACjC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzB,QAAQ,EAAE,CAAC;gBACX,OAAO;YACX,CAAC;QACL,CAAC;QAED,IAAI,CAAC,cAAc,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC;IAEO,qCAAc,GAAtB;QAAA,iBAiBC;QAhBG,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,OAAO,IAAI,CAAC,KAAK,CAAC;QACtB,CAAC;QAED,IAAM,MAAM,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzD,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,UAAC,KAAa,IAAK,OAAA,KAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,EAAzB,CAAyB,CAAC,CAAC;QAChE,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,cAAM,OAAA,KAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAf,CAAe,CAAC,CAAC;QAExC,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QAEpB,KAAqB,UAAY,EAAZ,KAAA,IAAI,CAAC,OAAO,EAAZ,cAAY,EAAZ,IAAY,EAAE,CAAC;YAA/B,IAAM,MAAM,SAAA;YACb,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC;QAExB,OAAO,MAAM,CAAC;IAClB,CAAC;IAEQ,6BAAM,GAAf,UAAgB,QAA2B;QACvC,IAAI,CAAC,cAAc,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACxC,CAAC;IACL,mBAAC;AAAD,CAAC,AAvDD,CAAkC,SAAS,GAuD1C;;AAED,OAAO,EAAuB,WAAW,EAAE,MAAM,cAAc,CAAC"} \ No newline at end of file diff --git a/node_modules/encoding-sniffer/dist/esm/package.json b/node_modules/encoding-sniffer/dist/esm/package.json new file mode 100644 index 0000000..3dbc1ca --- /dev/null +++ b/node_modules/encoding-sniffer/dist/esm/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/node_modules/encoding-sniffer/dist/esm/sniffer.d.ts b/node_modules/encoding-sniffer/dist/esm/sniffer.d.ts new file mode 100644 index 0000000..e36d703 --- /dev/null +++ b/node_modules/encoding-sniffer/dist/esm/sniffer.d.ts @@ -0,0 +1,148 @@ +export declare enum ResultType { + BOM = 0, + PASSED = 1, + XML_PREFIX = 2, + META_TAG = 3, + XML_ENCODING = 4, + DEFAULT = 5 +} +export declare const STRINGS: { + UTF8_BOM: Uint8Array; + UTF16LE_BOM: Uint8Array; + UTF16BE_BOM: Uint8Array; + UTF16LE_XML_PREFIX: Uint8Array; + UTF16BE_XML_PREFIX: Uint8Array; + XML_DECLARATION: Uint8Array; + ENCODING: Uint8Array; + META: Uint8Array; + HTTP_EQUIV: Uint8Array; + CONTENT: Uint8Array; + CONTENT_TYPE: Uint8Array; + CHARSET: Uint8Array; + COMMENT_START: Uint8Array; + COMMENT_END: Uint8Array; +}; +export interface SnifferOptions { + /** + * The maximum number of bytes to sniff. + * + * @default 1024 + */ + maxBytes?: number; + /** + * The encoding specified by the user. + */ + userEncoding?: string; + /** + * The encoding specified by the transport layer. + */ + transportLayerEncodingLabel?: string; + /** + * The default encoding to use. + * + * @default "windows-1252" + */ + defaultEncoding?: string; +} +export declare class Sniffer { + /** The maximum number of bytes to sniff. */ + private readonly maxBytes; + /** The offset of the previous buffers. */ + private offset; + private state; + private sectionIndex; + private attribType; + /** + * Indicates if the `http-equiv` is `content-type`. + * + * Initially `null`, a boolean when a value is found. + */ + private gotPragma; + private needsPragma; + private inMetaTag; + encoding: string; + resultType: ResultType; + private setResult; + constructor({ maxBytes, userEncoding, transportLayerEncodingLabel, defaultEncoding, }?: SnifferOptions); + private stateBegin; + private stateBeginLT; + private stateUTF16BE_XML_PREFIX; + private stateUTF16LE_XML_PREFIX; + private stateBOM16LE; + private stateBOM16BE; + private stateBOM8; + private stateBeforeTag; + /** + * We have seen a `<`, and now have to figure out what to do. + * + * Options: + * - `"), +}; +function isAsciiAlpha(c) { + return ((c >= Chars.UpperA && c <= Chars.UpperZ) || + (c >= Chars.LowerA && c <= Chars.LowerZ)); +} +function isQuote(c) { + return c === Chars.DQUOTE || c === Chars.SQUOTE; +} +var Sniffer = /** @class */ (function () { + function Sniffer(_a) { + var _b = _a === void 0 ? {} : _a, _c = _b.maxBytes, maxBytes = _c === void 0 ? 1024 : _c, userEncoding = _b.userEncoding, transportLayerEncodingLabel = _b.transportLayerEncodingLabel, defaultEncoding = _b.defaultEncoding; + /** The offset of the previous buffers. */ + this.offset = 0; + this.state = State.Begin; + this.sectionIndex = 0; + this.attribType = AttribType.None; + /** + * Indicates if the `http-equiv` is `content-type`. + * + * Initially `null`, a boolean when a value is found. + */ + this.gotPragma = null; + this.needsPragma = null; + this.inMetaTag = false; + this.encoding = "windows-1252"; + this.resultType = ResultType.DEFAULT; + this.quoteCharacter = 0; + this.attributeValue = []; + this.maxBytes = maxBytes; + if (userEncoding) { + this.setResult(userEncoding, ResultType.PASSED); + } + if (transportLayerEncodingLabel) { + this.setResult(transportLayerEncodingLabel, ResultType.PASSED); + } + if (defaultEncoding) { + this.setResult(defaultEncoding, ResultType.DEFAULT); + } + } + Sniffer.prototype.setResult = function (label, type) { + if (this.resultType === ResultType.DEFAULT || this.resultType > type) { + var encoding = labelToName(label); + if (encoding) { + this.encoding = + // Check if we are in a meta tag and the encoding is `x-user-defined` + type === ResultType.META_TAG && + encoding === "x-user-defined" + ? "windows-1252" + : // Check if we are in a meta tag or xml declaration, and the encoding is UTF-16 + (type === ResultType.META_TAG || + type === ResultType.XML_ENCODING) && + (encoding === "UTF-16LE" || encoding === "UTF-16BE") + ? "UTF-8" + : encoding; + this.resultType = type; + } + } + }; + Sniffer.prototype.stateBegin = function (c) { + switch (c) { + case STRINGS.UTF16BE_BOM[0]: { + this.state = State.BOM16BE; + break; + } + case STRINGS.UTF16LE_BOM[0]: { + this.state = State.BOM16LE; + break; + } + case STRINGS.UTF8_BOM[0]: { + this.sectionIndex = 1; + this.state = State.BOM8; + break; + } + case Chars.NIL: { + this.state = State.UTF16BE_XML_PREFIX; + this.sectionIndex = 1; + break; + } + case Chars.LT: { + this.state = State.BeginLT; + break; + } + default: { + this.state = State.BeforeTag; + } + } + }; + Sniffer.prototype.stateBeginLT = function (c) { + if (c === Chars.NIL) { + this.state = State.UTF16LE_XML_PREFIX; + this.sectionIndex = 2; + } + else if (c === Chars.QUESTION) { + this.state = State.XMLDeclaration; + this.sectionIndex = 2; + } + else { + this.state = State.BeforeTagName; + this.stateBeforeTagName(c); + } + }; + Sniffer.prototype.stateUTF16BE_XML_PREFIX = function (c) { + // Advance position in the section + if (this.advanceSection(STRINGS.UTF16BE_XML_PREFIX, c)) { + if (this.sectionIndex === STRINGS.UTF16BE_XML_PREFIX.length) { + // We have the whole prefix + this.setResult("utf-16be", ResultType.XML_PREFIX); + } + } + else { + this.state = State.BeforeTag; + this.stateBeforeTag(c); + } + }; + Sniffer.prototype.stateUTF16LE_XML_PREFIX = function (c) { + // Advance position in the section + if (this.advanceSection(STRINGS.UTF16LE_XML_PREFIX, c)) { + if (this.sectionIndex === STRINGS.UTF16LE_XML_PREFIX.length) { + // We have the whole prefix + this.setResult("utf-16le", ResultType.XML_PREFIX); + } + } + else { + this.state = State.BeforeTag; + this.stateBeforeTag(c); + } + }; + Sniffer.prototype.stateBOM16LE = function (c) { + if (c === STRINGS.UTF16LE_BOM[1]) { + this.setResult("utf-16le", ResultType.BOM); + } + else { + this.state = State.BeforeTag; + this.stateBeforeTag(c); + } + }; + Sniffer.prototype.stateBOM16BE = function (c) { + if (c === STRINGS.UTF16BE_BOM[1]) { + this.setResult("utf-16be", ResultType.BOM); + } + else { + this.state = State.BeforeTag; + this.stateBeforeTag(c); + } + }; + Sniffer.prototype.stateBOM8 = function (c) { + if (this.advanceSection(STRINGS.UTF8_BOM, c) && + this.sectionIndex === STRINGS.UTF8_BOM.length) { + this.setResult("utf-8", ResultType.BOM); + } + }; + Sniffer.prototype.stateBeforeTag = function (c) { + if (c === Chars.LT) { + this.state = State.BeforeTagName; + this.inMetaTag = false; + } + }; + /** + * We have seen a `<`, and now have to figure out what to do. + * + * Options: + * - `` above. + * Set this to 2, to support many dashes before the closing `>`. + */ + this.sectionIndex = 2; + } + }; + /** + * Any section starting with ``. + this.stateTagNameOther(c); + }; + Sniffer.prototype.stateTagNameOther = function (c) { + if (SPACE_CHARACTERS.has(c)) { + this.state = State.BeforeAttribute; + } + else if (c === Chars.GT) { + this.state = State.BeforeTag; + } + }; + Sniffer.prototype.stateBeforeAttribute = function (c) { + if (SPACE_CHARACTERS.has(c)) + return; + if (this.inMetaTag) { + var lower = c | 0x20; + if (lower === STRINGS.HTTP_EQUIV[0]) { + this.sectionIndex = 1; + this.state = State.MetaAttribHttpEquiv; + return; + } + else if (lower === STRINGS.CHARSET[0]) { + this.sectionIndex = 1; + this.state = State.MetaAttribC; + return; + } + } + this.state = + c === Chars.SLASH || c === Chars.GT + ? State.BeforeTag + : State.AnyAttribName; + }; + Sniffer.prototype.handleMetaAttrib = function (c, section, type) { + if (this.advanceSectionIC(section, c)) { + if (this.sectionIndex === section.length) { + this.attribType = type; + this.state = State.MetaAttribAfterName; + } + } + else { + this.state = State.AnyAttribName; + this.stateAnyAttribName(c); + } + }; + Sniffer.prototype.stateMetaAttribHttpEquiv = function (c) { + this.handleMetaAttrib(c, STRINGS.HTTP_EQUIV, AttribType.HttpEquiv); + }; + Sniffer.prototype.stateMetaAttribC = function (c) { + var lower = c | 0x20; + if (lower === STRINGS.CHARSET[1]) { + this.sectionIndex = 2; + this.state = State.MetaAttribCharset; + } + else if (lower === STRINGS.CONTENT[1]) { + this.sectionIndex = 2; + this.state = State.MetaAttribContent; + } + else { + this.state = State.AnyAttribName; + this.stateAnyAttribName(c); + } + }; + Sniffer.prototype.stateMetaAttribCharset = function (c) { + this.handleMetaAttrib(c, STRINGS.CHARSET, AttribType.Charset); + }; + Sniffer.prototype.stateMetaAttribContent = function (c) { + this.handleMetaAttrib(c, STRINGS.CONTENT, AttribType.Content); + }; + Sniffer.prototype.stateMetaAttribAfterName = function (c) { + if (SPACE_CHARACTERS.has(c) || c === Chars.EQUALS) { + this.state = State.AfterAttributeName; + this.stateAfterAttributeName(c); + } + else { + this.state = State.AnyAttribName; + this.stateAnyAttribName(c); + } + }; + Sniffer.prototype.stateAnyAttribName = function (c) { + if (SPACE_CHARACTERS.has(c)) { + this.attribType = AttribType.None; + this.state = State.AfterAttributeName; + } + else if (c === Chars.SLASH || c === Chars.GT) { + this.state = State.BeforeTag; + } + else if (c === Chars.EQUALS) { + this.state = State.BeforeAttributeValue; + } + }; + Sniffer.prototype.stateAfterAttributeName = function (c) { + if (SPACE_CHARACTERS.has(c)) + return; + if (c === Chars.EQUALS) { + this.state = State.BeforeAttributeValue; + } + else { + this.state = State.BeforeAttribute; + this.stateBeforeAttribute(c); + } + }; + Sniffer.prototype.stateBeforeAttributeValue = function (c) { + if (SPACE_CHARACTERS.has(c)) + return; + this.attributeValue.length = 0; + this.sectionIndex = 0; + if (isQuote(c)) { + this.quoteCharacter = c; + this.state = + this.attribType === AttribType.Content + ? State.MetaContentValueQuotedBeforeEncoding + : this.attribType === AttribType.HttpEquiv + ? State.MetaAttribHttpEquivValue + : State.AttributeValueQuoted; + } + else if (this.attribType === AttribType.Content) { + this.state = State.MetaContentValueUnquotedBeforeEncoding; + this.stateMetaContentValueUnquotedBeforeEncoding(c); + } + else if (this.attribType === AttribType.HttpEquiv) { + // We use `quoteCharacter = 0` to signify that the value is unquoted. + this.quoteCharacter = 0; + this.sectionIndex = 0; + this.state = State.MetaAttribHttpEquivValue; + this.stateMetaAttribHttpEquivValue(c); + } + else { + this.state = State.AttributeValueUnquoted; + this.stateAttributeValueUnquoted(c); + } + }; + // The value has to be `content-type` + Sniffer.prototype.stateMetaAttribHttpEquivValue = function (c) { + if (this.sectionIndex === STRINGS.CONTENT_TYPE.length) { + if (this.quoteCharacter === 0 + ? END_OF_UNQUOTED_ATTRIBUTE_VALUE.has(c) + : c === this.quoteCharacter) { + if (this.needsPragma !== null) { + this.setResult(this.needsPragma, ResultType.META_TAG); + } + else if (this.gotPragma === null) { + this.gotPragma = true; + } + this.state = State.BeforeAttribute; + return; + } + } + else if (this.advanceSectionIC(STRINGS.CONTENT_TYPE, c)) { + return; + } + this.gotPragma = false; + if (this.quoteCharacter === 0) { + this.state = State.AttributeValueUnquoted; + this.stateAttributeValueUnquoted(c); + } + else { + this.state = State.AttributeValueQuoted; + this.stateAttributeValueQuoted(c); + } + }; + Sniffer.prototype.handleMetaContentValue = function () { + if (this.attributeValue.length === 0) + return; + var encoding = String.fromCharCode.apply(String, this.attributeValue); + if (this.gotPragma) { + this.setResult(encoding, ResultType.META_TAG); + } + else if (this.needsPragma === null) { + // Don't override a previous result. + this.needsPragma = encoding; + } + this.attributeValue.length = 0; + }; + Sniffer.prototype.handleAttributeValue = function () { + if (this.attribType === AttribType.Charset) { + this.setResult(String.fromCharCode.apply(String, this.attributeValue), ResultType.META_TAG); + } + }; + Sniffer.prototype.stateAttributeValueUnquoted = function (c) { + if (SPACE_CHARACTERS.has(c)) { + this.handleAttributeValue(); + this.state = State.BeforeAttribute; + } + else if (c === Chars.SLASH || c === Chars.GT) { + this.handleAttributeValue(); + this.state = State.BeforeTag; + } + else if (this.attribType === AttribType.Charset) { + this.attributeValue.push(c | 0x20); + } + }; + Sniffer.prototype.findMetaContentEncoding = function (c) { + if (this.advanceSectionIC(STRINGS.CHARSET, c)) { + if (this.sectionIndex === STRINGS.CHARSET.length) { + return true; + } + } + else { + // If we encountered another `c`, assume we started over. + this.sectionIndex = Number(c === STRINGS.CHARSET[0]); + } + return false; + }; + Sniffer.prototype.stateMetaContentValueUnquotedBeforeEncoding = function (c) { + if (END_OF_UNQUOTED_ATTRIBUTE_VALUE.has(c)) { + this.stateAttributeValueUnquoted(c); + } + else if (this.sectionIndex === STRINGS.CHARSET.length) { + if (c === Chars.EQUALS) { + this.state = State.MetaContentValueUnquotedBeforeValue; + } + } + else { + this.findMetaContentEncoding(c); + } + }; + Sniffer.prototype.stateMetaContentValueUnquotedBeforeValue = function (c) { + if (isQuote(c)) { + this.quoteCharacter = c; + this.state = State.MetaContentValueUnquotedValueQuoted; + } + else if (END_OF_UNQUOTED_ATTRIBUTE_VALUE.has(c)) { + // Can't have spaces here, as it would no longer be part of the attribute value. + this.stateAttributeValueUnquoted(c); + } + else { + this.state = State.MetaContentValueUnquotedValueUnquoted; + this.stateMetaContentValueUnquotedValueUnquoted(c); + } + }; + Sniffer.prototype.stateMetaContentValueUnquotedValueQuoted = function (c) { + if (END_OF_UNQUOTED_ATTRIBUTE_VALUE.has(c)) { + // Quotes weren't matched, so we're done. + this.stateAttributeValueUnquoted(c); + } + else if (c === this.quoteCharacter) { + this.handleMetaContentValue(); + this.state = State.AttributeValueUnquoted; + } + else { + this.attributeValue.push(c | 0x20); + } + }; + Sniffer.prototype.stateMetaContentValueUnquotedValueUnquoted = function (c) { + if (END_OF_UNQUOTED_ATTRIBUTE_VALUE.has(c) || c === Chars.SEMICOLON) { + this.handleMetaContentValue(); + this.state = State.AttributeValueUnquoted; + this.stateAttributeValueUnquoted(c); + } + else { + this.attributeValue.push(c | 0x20); + } + }; + Sniffer.prototype.stateMetaContentValueQuotedValueUnquoted = function (c) { + if (isQuote(c) || SPACE_CHARACTERS.has(c) || c === Chars.SEMICOLON) { + this.handleMetaContentValue(); + // We are done with the value, but might not be at the end of the attribute + this.state = State.AttributeValueQuoted; + this.stateAttributeValueQuoted(c); + } + else { + this.attributeValue.push(c | 0x20); + } + }; + Sniffer.prototype.stateMetaContentValueQuotedValueQuoted = function (c) { + if (isQuote(c)) { + // We have reached the end of our value. + if (c !== this.quoteCharacter) { + // Only handle the value if inner quotes were matched. + this.handleMetaContentValue(); + } + this.state = State.AttributeValueQuoted; + this.stateAttributeValueQuoted(c); + } + else { + this.attributeValue.push(c | 0x20); + } + }; + Sniffer.prototype.stateMetaContentValueQuotedBeforeEncoding = function (c) { + if (c === this.quoteCharacter) { + this.stateAttributeValueQuoted(c); + } + else if (this.findMetaContentEncoding(c)) { + this.state = State.MetaContentValueQuotedAfterEncoding; + } + }; + Sniffer.prototype.stateMetaContentValueQuotedAfterEncoding = function (c) { + if (c === Chars.EQUALS) { + this.state = State.MetaContentValueQuotedBeforeValue; + } + else if (!SPACE_CHARACTERS.has(c)) { + // Look for the next encoding + this.state = State.MetaContentValueQuotedBeforeEncoding; + this.stateMetaContentValueQuotedBeforeEncoding(c); + } + }; + Sniffer.prototype.stateMetaContentValueQuotedBeforeValue = function (c) { + if (c === this.quoteCharacter) { + this.stateAttributeValueQuoted(c); + } + else if (isQuote(c)) { + this.state = State.MetaContentValueQuotedValueQuoted; + } + else if (!SPACE_CHARACTERS.has(c)) { + this.state = State.MetaContentValueQuotedValueUnquoted; + this.stateMetaContentValueQuotedValueUnquoted(c); + } + }; + Sniffer.prototype.stateAttributeValueQuoted = function (c) { + if (c === this.quoteCharacter) { + this.handleAttributeValue(); + this.state = State.BeforeAttribute; + } + else if (this.attribType === AttribType.Charset) { + this.attributeValue.push(c | 0x20); + } + }; + // Read STRINGS.XML_DECLARATION + Sniffer.prototype.stateXMLDeclaration = function (c) { + if (this.advanceSection(STRINGS.XML_DECLARATION, c)) { + if (this.sectionIndex === STRINGS.XML_DECLARATION.length) { + this.sectionIndex = 0; + this.state = State.XMLDeclarationBeforeEncoding; + } + } + else { + this.state = State.WeirdTag; + } + }; + Sniffer.prototype.stateXMLDeclarationBeforeEncoding = function (c) { + if (this.advanceSection(STRINGS.ENCODING, c)) { + if (this.sectionIndex === STRINGS.ENCODING.length) { + this.state = State.XMLDeclarationAfterEncoding; + } + } + else if (c === Chars.GT) { + this.state = State.BeforeTag; + } + else { + // If we encountered another `c`, assume we started over. + this.sectionIndex = Number(c === STRINGS.ENCODING[0]); + } + }; + Sniffer.prototype.stateXMLDeclarationAfterEncoding = function (c) { + if (c === Chars.EQUALS) { + this.state = State.XMLDeclarationBeforeValue; + } + else if (c > Chars.SPACE) { + this.state = State.WeirdTag; + this.stateWeirdTag(c); + } + }; + Sniffer.prototype.stateXMLDeclarationBeforeValue = function (c) { + if (isQuote(c)) { + this.attributeValue.length = 0; + this.state = State.XMLDeclarationValue; + } + else if (c > Chars.SPACE) { + this.state = State.WeirdTag; + this.stateWeirdTag(c); + } + }; + Sniffer.prototype.stateXMLDeclarationValue = function (c) { + if (isQuote(c)) { + this.setResult(String.fromCharCode.apply(String, this.attributeValue), ResultType.XML_ENCODING); + this.state = State.WeirdTag; + } + else if (c === Chars.GT) { + this.state = State.BeforeTag; + } + else if (c <= Chars.SPACE) { + this.state = State.WeirdTag; + } + else { + this.attributeValue.push(c | 0x20); + } + }; + Sniffer.prototype.write = function (buffer) { + var index = 0; + for (; index < buffer.length && this.offset + index < this.maxBytes; index++) { + var c = buffer[index]; + switch (this.state) { + case State.Begin: { + this.stateBegin(c); + break; + } + case State.BOM16BE: { + this.stateBOM16BE(c); + break; + } + case State.BOM16LE: { + this.stateBOM16LE(c); + break; + } + case State.BOM8: { + this.stateBOM8(c); + break; + } + case State.UTF16LE_XML_PREFIX: { + this.stateUTF16LE_XML_PREFIX(c); + break; + } + case State.BeginLT: { + this.stateBeginLT(c); + break; + } + case State.UTF16BE_XML_PREFIX: { + this.stateUTF16BE_XML_PREFIX(c); + break; + } + case State.BeforeTag: { + // Optimization: Skip all characters until we find a `<` + var idx = buffer.indexOf(Chars.LT, index); + if (idx < 0) { + // We are done with this buffer. Stay in the state and try on the next one. + index = buffer.length; + } + else { + index = idx; + this.stateBeforeTag(Chars.LT); + } + break; + } + case State.BeforeTagName: { + this.stateBeforeTagName(c); + break; + } + case State.BeforeCloseTagName: { + this.stateBeforeCloseTagName(c); + break; + } + case State.CommentStart: { + this.stateCommentStart(c); + break; + } + case State.CommentEnd: { + this.stateCommentEnd(c); + break; + } + case State.TagNameMeta: { + this.stateTagNameMeta(c); + break; + } + case State.TagNameOther: { + this.stateTagNameOther(c); + break; + } + case State.XMLDeclaration: { + this.stateXMLDeclaration(c); + break; + } + case State.XMLDeclarationBeforeEncoding: { + this.stateXMLDeclarationBeforeEncoding(c); + break; + } + case State.XMLDeclarationAfterEncoding: { + this.stateXMLDeclarationAfterEncoding(c); + break; + } + case State.XMLDeclarationBeforeValue: { + this.stateXMLDeclarationBeforeValue(c); + break; + } + case State.XMLDeclarationValue: { + this.stateXMLDeclarationValue(c); + break; + } + case State.WeirdTag: { + this.stateWeirdTag(c); + break; + } + case State.BeforeAttribute: { + this.stateBeforeAttribute(c); + break; + } + case State.MetaAttribHttpEquiv: { + this.stateMetaAttribHttpEquiv(c); + break; + } + case State.MetaAttribHttpEquivValue: { + this.stateMetaAttribHttpEquivValue(c); + break; + } + case State.MetaAttribC: { + this.stateMetaAttribC(c); + break; + } + case State.MetaAttribContent: { + this.stateMetaAttribContent(c); + break; + } + case State.MetaAttribCharset: { + this.stateMetaAttribCharset(c); + break; + } + case State.MetaAttribAfterName: { + this.stateMetaAttribAfterName(c); + break; + } + case State.MetaContentValueQuotedBeforeEncoding: { + this.stateMetaContentValueQuotedBeforeEncoding(c); + break; + } + case State.MetaContentValueQuotedAfterEncoding: { + this.stateMetaContentValueQuotedAfterEncoding(c); + break; + } + case State.MetaContentValueQuotedBeforeValue: { + this.stateMetaContentValueQuotedBeforeValue(c); + break; + } + case State.MetaContentValueQuotedValueQuoted: { + this.stateMetaContentValueQuotedValueQuoted(c); + break; + } + case State.MetaContentValueQuotedValueUnquoted: { + this.stateMetaContentValueQuotedValueUnquoted(c); + break; + } + case State.MetaContentValueUnquotedBeforeEncoding: { + this.stateMetaContentValueUnquotedBeforeEncoding(c); + break; + } + case State.MetaContentValueUnquotedBeforeValue: { + this.stateMetaContentValueUnquotedBeforeValue(c); + break; + } + case State.MetaContentValueUnquotedValueQuoted: { + this.stateMetaContentValueUnquotedValueQuoted(c); + break; + } + case State.MetaContentValueUnquotedValueUnquoted: { + this.stateMetaContentValueUnquotedValueUnquoted(c); + break; + } + case State.AnyAttribName: { + this.stateAnyAttribName(c); + break; + } + case State.AfterAttributeName: { + this.stateAfterAttributeName(c); + break; + } + case State.BeforeAttributeValue: { + this.stateBeforeAttributeValue(c); + break; + } + case State.AttributeValueQuoted: { + this.stateAttributeValueQuoted(c); + break; + } + default: { + // (State.AttributeValueUnquoted) + this.stateAttributeValueUnquoted(c); + } + } + } + this.offset += index; + }; + return Sniffer; +}()); +export { Sniffer }; +/** Get the encoding for the passed buffer. */ +export function getEncoding(buffer, options) { + var sniffer = new Sniffer(options); + sniffer.write(buffer); + return sniffer.encoding; +} +//# sourceMappingURL=sniffer.js.map \ No newline at end of file diff --git a/node_modules/encoding-sniffer/dist/esm/sniffer.js.map b/node_modules/encoding-sniffer/dist/esm/sniffer.js.map new file mode 100644 index 0000000..128c39c --- /dev/null +++ b/node_modules/encoding-sniffer/dist/esm/sniffer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"sniffer.js","sourceRoot":"","sources":["../../src/sniffer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/encoding-sniffer/package.json b/node_modules/encoding-sniffer/package.json new file mode 100644 index 0000000..ce9cbe5 --- /dev/null +++ b/node_modules/encoding-sniffer/package.json @@ -0,0 +1,108 @@ +{ + "name": "encoding-sniffer", + "version": "0.2.0", + "description": "Implementation of the HTML encoding sniffer algo, with stream support", + "bugs": { + "url": "https://github.com/fb55/encoding-sniffer/issues" + }, + "repository": { + "type": "git", + "url": "git://github.com/fb55/encoding-sniffer.git" + }, + "funding": "https://github.com/fb55/encoding-sniffer?sponsor=1", + "license": "MIT", + "author": "Felix Boehm ", + "type": "module", + "exports": { + ".": { + "import": { + "source": "./src/index.ts", + "types": "./dist/esm/index.d.ts", + "default": "./dist/esm/index.js" + }, + "require": { + "source": "./src/index.ts", + "types": "./dist/commonjs/index.d.ts", + "default": "./dist/commonjs/index.js" + } + }, + "./sniffer": { + "import": { + "source": "./src/sniffer.ts", + "types": "./dist/esm/sniffer.d.ts", + "default": "./dist/esm/sniffer.js" + }, + "require": { + "source": "./src/sniffer.ts", + "types": "./dist/commonjs/sniffer.d.ts", + "default": "./dist/commonjs/sniffer.js" + } + } + }, + "main": "./dist/commonjs/index.js", + "types": "./dist/commonjs/index.d.ts", + "files": [ + "dist" + ], + "scripts": { + "build": "tshy", + "build:docs": "typedoc --hideGenerator src/index.ts", + "format": "npm run format:es && npm run format:prettier", + "format:es": "npm run lint:es -- --fix", + "format:prettier": "npm run prettier -- --write", + "lint": "npm run lint:es && npm run lint:prettier", + "lint:es": "eslint --ignore-path .gitignore .", + "lint:prettier": "npm run prettier -- --check", + "make-cjs": "sed -i '' 's/\"type\": \"module\"/\"type\": \"commonjs\"/g' package.json", + "make-esm": "sed -i '' 's/\"type\": \"commonjs\"/\"type\": \"module\"/g' package.json", + "prepublishOnly": "npm run build", + "prettier": "prettier '**/*.{ts,md,json,yml}'", + "test": "npm run test:jest && npm run lint", + "test:jest": "jest" + }, + "prettier": { + "proseWrap": "always", + "tabWidth": 4 + }, + "jest": { + "coverageProvider": "v8", + "moduleNameMapper": { + "^(.*)\\.js$": [ + "$1", + "$1.js" + ] + }, + "preset": "ts-jest", + "testEnvironment": "node" + }, + "dependencies": { + "iconv-lite": "^0.6.3", + "whatwg-encoding": "^3.1.1" + }, + "devDependencies": { + "@types/jest": "^29.5.12", + "@types/node": "^20.14.2", + "@types/whatwg-encoding": "^2.0.3", + "@typescript-eslint/eslint-plugin": "^7.13.0", + "@typescript-eslint/parser": "^7.13.0", + "eslint": "^8.57.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-n": "^17.9.0", + "eslint-plugin-unicorn": "^54.0.0", + "jest": "^29.7.0", + "prettier": "^3.3.2", + "ts-jest": "^29.1.4", + "tshy": "^1.15.1", + "typedoc": "^0.25.13", + "typescript": "^5.4.5" + }, + "tshy": { + "exports": { + ".": "./src/index.ts", + "./sniffer": "./src/sniffer.ts" + }, + "exclude": [ + "src/**/*.spec.ts" + ] + } +} diff --git a/node_modules/entities/LICENSE b/node_modules/entities/LICENSE new file mode 100644 index 0000000..c464f86 --- /dev/null +++ b/node_modules/entities/LICENSE @@ -0,0 +1,11 @@ +Copyright (c) Felix Bรถhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/entities/lib/decode.d.ts b/node_modules/entities/lib/decode.d.ts new file mode 100644 index 0000000..ccfd9fb --- /dev/null +++ b/node_modules/entities/lib/decode.d.ts @@ -0,0 +1,211 @@ +import htmlDecodeTree from "./generated/decode-data-html.js"; +import xmlDecodeTree from "./generated/decode-data-xml.js"; +import decodeCodePoint from "./decode_codepoint.js"; +export { htmlDecodeTree, xmlDecodeTree, decodeCodePoint }; +export { replaceCodePoint, fromCodePoint } from "./decode_codepoint.js"; +export declare enum BinTrieFlags { + VALUE_LENGTH = 49152, + BRANCH_LENGTH = 16256, + JUMP_TABLE = 127 +} +export declare enum DecodingMode { + /** Entities in text nodes that can end with any character. */ + Legacy = 0, + /** Only allow entities terminated with a semicolon. */ + Strict = 1, + /** Entities in attributes have limitations on ending characters. */ + Attribute = 2 +} +/** + * Producers for character reference errors as defined in the HTML spec. + */ +export interface EntityErrorProducer { + missingSemicolonAfterCharacterReference(): void; + absenceOfDigitsInNumericCharacterReference(consumedCharacters: number): void; + validateNumericCharacterReference(code: number): void; +} +/** + * Token decoder with support of writing partial entities. + */ +export declare class EntityDecoder { + /** The tree used to decode entities. */ + private readonly decodeTree; + /** + * The function that is called when a codepoint is decoded. + * + * For multi-byte named entities, this will be called multiple times, + * with the second codepoint, and the same `consumed` value. + * + * @param codepoint The decoded codepoint. + * @param consumed The number of bytes consumed by the decoder. + */ + private readonly emitCodePoint; + /** An object that is used to produce errors. */ + private readonly errors?; + constructor( + /** The tree used to decode entities. */ + decodeTree: Uint16Array, + /** + * The function that is called when a codepoint is decoded. + * + * For multi-byte named entities, this will be called multiple times, + * with the second codepoint, and the same `consumed` value. + * + * @param codepoint The decoded codepoint. + * @param consumed The number of bytes consumed by the decoder. + */ + emitCodePoint: (cp: number, consumed: number) => void, + /** An object that is used to produce errors. */ + errors?: EntityErrorProducer | undefined); + /** The current state of the decoder. */ + private state; + /** Characters that were consumed while parsing an entity. */ + private consumed; + /** + * The result of the entity. + * + * Either the result index of a numeric entity, or the codepoint of a + * numeric entity. + */ + private result; + /** The current index in the decode tree. */ + private treeIndex; + /** The number of characters that were consumed in excess. */ + private excess; + /** The mode in which the decoder is operating. */ + private decodeMode; + /** Resets the instance to make it reusable. */ + startEntity(decodeMode: DecodingMode): void; + /** + * Write an entity to the decoder. This can be called multiple times with partial entities. + * If the entity is incomplete, the decoder will return -1. + * + * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the + * entity is incomplete, and resume when the next string is written. + * + * @param string The string containing the entity (or a continuation of the entity). + * @param offset The offset at which the entity begins. Should be 0 if this is not the first call. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + write(str: string, offset: number): number; + /** + * Switches between the numeric decimal and hexadecimal states. + * + * Equivalent to the `Numeric character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + private stateNumericStart; + private addToNumericResult; + /** + * Parses a hexadecimal numeric entity. + * + * Equivalent to the `Hexademical character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + private stateNumericHex; + /** + * Parses a decimal numeric entity. + * + * Equivalent to the `Decimal character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + private stateNumericDecimal; + /** + * Validate and emit a numeric entity. + * + * Implements the logic from the `Hexademical character reference start + * state` and `Numeric character reference end state` in the HTML spec. + * + * @param lastCp The last code point of the entity. Used to see if the + * entity was terminated with a semicolon. + * @param expectedLength The minimum number of characters that should be + * consumed. Used to validate that at least one digit + * was consumed. + * @returns The number of characters that were consumed. + */ + private emitNumericEntity; + /** + * Parses a named entity. + * + * Equivalent to the `Named character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + private stateNamedEntity; + /** + * Emit a named entity that was not terminated with a semicolon. + * + * @returns The number of characters consumed. + */ + private emitNotTerminatedNamedEntity; + /** + * Emit a named entity. + * + * @param result The index of the entity in the decode tree. + * @param valueLength The number of bytes in the entity. + * @param consumed The number of characters consumed. + * + * @returns The number of characters consumed. + */ + private emitNamedEntityData; + /** + * Signal to the parser that the end of the input was reached. + * + * Remaining data will be emitted and relevant errors will be produced. + * + * @returns The number of characters consumed. + */ + end(): number; +} +/** + * Determines the branch of the current node that is taken given the current + * character. This function is used to traverse the trie. + * + * @param decodeTree The trie. + * @param current The current node. + * @param nodeIdx The index right after the current node and its value. + * @param char The current character. + * @returns The index of the next node, or -1 if no branch is taken. + */ +export declare function determineBranch(decodeTree: Uint16Array, current: number, nodeIdx: number, char: number): number; +/** + * Decodes an HTML string. + * + * @param str The string to decode. + * @param mode The decoding mode. + * @returns The decoded string. + */ +export declare function decodeHTML(str: string, mode?: DecodingMode): string; +/** + * Decodes an HTML string in an attribute. + * + * @param str The string to decode. + * @returns The decoded string. + */ +export declare function decodeHTMLAttribute(str: string): string; +/** + * Decodes an HTML string, requiring all entities to be terminated by a semicolon. + * + * @param str The string to decode. + * @returns The decoded string. + */ +export declare function decodeHTMLStrict(str: string): string; +/** + * Decodes an XML string, requiring all entities to be terminated by a semicolon. + * + * @param str The string to decode. + * @returns The decoded string. + */ +export declare function decodeXML(str: string): string; +//# sourceMappingURL=decode.d.ts.map \ No newline at end of file diff --git a/node_modules/entities/lib/decode.d.ts.map b/node_modules/entities/lib/decode.d.ts.map new file mode 100644 index 0000000..4c0b4b4 --- /dev/null +++ b/node_modules/entities/lib/decode.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"decode.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["decode.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/entities/lib/decode.js b/node_modules/entities/lib/decode.js new file mode 100644 index 0000000..aa4a42c --- /dev/null +++ b/node_modules/entities/lib/decode.js @@ -0,0 +1,536 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.decodeXML = exports.decodeHTMLStrict = exports.decodeHTMLAttribute = exports.decodeHTML = exports.determineBranch = exports.EntityDecoder = exports.DecodingMode = exports.BinTrieFlags = exports.fromCodePoint = exports.replaceCodePoint = exports.decodeCodePoint = exports.xmlDecodeTree = exports.htmlDecodeTree = void 0; +var decode_data_html_js_1 = __importDefault(require("./generated/decode-data-html.js")); +exports.htmlDecodeTree = decode_data_html_js_1.default; +var decode_data_xml_js_1 = __importDefault(require("./generated/decode-data-xml.js")); +exports.xmlDecodeTree = decode_data_xml_js_1.default; +var decode_codepoint_js_1 = __importStar(require("./decode_codepoint.js")); +exports.decodeCodePoint = decode_codepoint_js_1.default; +var decode_codepoint_js_2 = require("./decode_codepoint.js"); +Object.defineProperty(exports, "replaceCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.replaceCodePoint; } }); +Object.defineProperty(exports, "fromCodePoint", { enumerable: true, get: function () { return decode_codepoint_js_2.fromCodePoint; } }); +var CharCodes; +(function (CharCodes) { + CharCodes[CharCodes["NUM"] = 35] = "NUM"; + CharCodes[CharCodes["SEMI"] = 59] = "SEMI"; + CharCodes[CharCodes["EQUALS"] = 61] = "EQUALS"; + CharCodes[CharCodes["ZERO"] = 48] = "ZERO"; + CharCodes[CharCodes["NINE"] = 57] = "NINE"; + CharCodes[CharCodes["LOWER_A"] = 97] = "LOWER_A"; + CharCodes[CharCodes["LOWER_F"] = 102] = "LOWER_F"; + CharCodes[CharCodes["LOWER_X"] = 120] = "LOWER_X"; + CharCodes[CharCodes["LOWER_Z"] = 122] = "LOWER_Z"; + CharCodes[CharCodes["UPPER_A"] = 65] = "UPPER_A"; + CharCodes[CharCodes["UPPER_F"] = 70] = "UPPER_F"; + CharCodes[CharCodes["UPPER_Z"] = 90] = "UPPER_Z"; +})(CharCodes || (CharCodes = {})); +/** Bit that needs to be set to convert an upper case ASCII character to lower case */ +var TO_LOWER_BIT = 32; +var BinTrieFlags; +(function (BinTrieFlags) { + BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH"; + BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH"; + BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE"; +})(BinTrieFlags = exports.BinTrieFlags || (exports.BinTrieFlags = {})); +function isNumber(code) { + return code >= CharCodes.ZERO && code <= CharCodes.NINE; +} +function isHexadecimalCharacter(code) { + return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) || + (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F)); +} +function isAsciiAlphaNumeric(code) { + return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) || + (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) || + isNumber(code)); +} +/** + * Checks if the given character is a valid end character for an entity in an attribute. + * + * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error. + * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state + */ +function isEntityInAttributeInvalidEnd(code) { + return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code); +} +var EntityDecoderState; +(function (EntityDecoderState) { + EntityDecoderState[EntityDecoderState["EntityStart"] = 0] = "EntityStart"; + EntityDecoderState[EntityDecoderState["NumericStart"] = 1] = "NumericStart"; + EntityDecoderState[EntityDecoderState["NumericDecimal"] = 2] = "NumericDecimal"; + EntityDecoderState[EntityDecoderState["NumericHex"] = 3] = "NumericHex"; + EntityDecoderState[EntityDecoderState["NamedEntity"] = 4] = "NamedEntity"; +})(EntityDecoderState || (EntityDecoderState = {})); +var DecodingMode; +(function (DecodingMode) { + /** Entities in text nodes that can end with any character. */ + DecodingMode[DecodingMode["Legacy"] = 0] = "Legacy"; + /** Only allow entities terminated with a semicolon. */ + DecodingMode[DecodingMode["Strict"] = 1] = "Strict"; + /** Entities in attributes have limitations on ending characters. */ + DecodingMode[DecodingMode["Attribute"] = 2] = "Attribute"; +})(DecodingMode = exports.DecodingMode || (exports.DecodingMode = {})); +/** + * Token decoder with support of writing partial entities. + */ +var EntityDecoder = /** @class */ (function () { + function EntityDecoder( + /** The tree used to decode entities. */ + decodeTree, + /** + * The function that is called when a codepoint is decoded. + * + * For multi-byte named entities, this will be called multiple times, + * with the second codepoint, and the same `consumed` value. + * + * @param codepoint The decoded codepoint. + * @param consumed The number of bytes consumed by the decoder. + */ + emitCodePoint, + /** An object that is used to produce errors. */ + errors) { + this.decodeTree = decodeTree; + this.emitCodePoint = emitCodePoint; + this.errors = errors; + /** The current state of the decoder. */ + this.state = EntityDecoderState.EntityStart; + /** Characters that were consumed while parsing an entity. */ + this.consumed = 1; + /** + * The result of the entity. + * + * Either the result index of a numeric entity, or the codepoint of a + * numeric entity. + */ + this.result = 0; + /** The current index in the decode tree. */ + this.treeIndex = 0; + /** The number of characters that were consumed in excess. */ + this.excess = 1; + /** The mode in which the decoder is operating. */ + this.decodeMode = DecodingMode.Strict; + } + /** Resets the instance to make it reusable. */ + EntityDecoder.prototype.startEntity = function (decodeMode) { + this.decodeMode = decodeMode; + this.state = EntityDecoderState.EntityStart; + this.result = 0; + this.treeIndex = 0; + this.excess = 1; + this.consumed = 1; + }; + /** + * Write an entity to the decoder. This can be called multiple times with partial entities. + * If the entity is incomplete, the decoder will return -1. + * + * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the + * entity is incomplete, and resume when the next string is written. + * + * @param string The string containing the entity (or a continuation of the entity). + * @param offset The offset at which the entity begins. Should be 0 if this is not the first call. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + EntityDecoder.prototype.write = function (str, offset) { + switch (this.state) { + case EntityDecoderState.EntityStart: { + if (str.charCodeAt(offset) === CharCodes.NUM) { + this.state = EntityDecoderState.NumericStart; + this.consumed += 1; + return this.stateNumericStart(str, offset + 1); + } + this.state = EntityDecoderState.NamedEntity; + return this.stateNamedEntity(str, offset); + } + case EntityDecoderState.NumericStart: { + return this.stateNumericStart(str, offset); + } + case EntityDecoderState.NumericDecimal: { + return this.stateNumericDecimal(str, offset); + } + case EntityDecoderState.NumericHex: { + return this.stateNumericHex(str, offset); + } + case EntityDecoderState.NamedEntity: { + return this.stateNamedEntity(str, offset); + } + } + }; + /** + * Switches between the numeric decimal and hexadecimal states. + * + * Equivalent to the `Numeric character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + EntityDecoder.prototype.stateNumericStart = function (str, offset) { + if (offset >= str.length) { + return -1; + } + if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) { + this.state = EntityDecoderState.NumericHex; + this.consumed += 1; + return this.stateNumericHex(str, offset + 1); + } + this.state = EntityDecoderState.NumericDecimal; + return this.stateNumericDecimal(str, offset); + }; + EntityDecoder.prototype.addToNumericResult = function (str, start, end, base) { + if (start !== end) { + var digitCount = end - start; + this.result = + this.result * Math.pow(base, digitCount) + + parseInt(str.substr(start, digitCount), base); + this.consumed += digitCount; + } + }; + /** + * Parses a hexadecimal numeric entity. + * + * Equivalent to the `Hexademical character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + EntityDecoder.prototype.stateNumericHex = function (str, offset) { + var startIdx = offset; + while (offset < str.length) { + var char = str.charCodeAt(offset); + if (isNumber(char) || isHexadecimalCharacter(char)) { + offset += 1; + } + else { + this.addToNumericResult(str, startIdx, offset, 16); + return this.emitNumericEntity(char, 3); + } + } + this.addToNumericResult(str, startIdx, offset, 16); + return -1; + }; + /** + * Parses a decimal numeric entity. + * + * Equivalent to the `Decimal character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + EntityDecoder.prototype.stateNumericDecimal = function (str, offset) { + var startIdx = offset; + while (offset < str.length) { + var char = str.charCodeAt(offset); + if (isNumber(char)) { + offset += 1; + } + else { + this.addToNumericResult(str, startIdx, offset, 10); + return this.emitNumericEntity(char, 2); + } + } + this.addToNumericResult(str, startIdx, offset, 10); + return -1; + }; + /** + * Validate and emit a numeric entity. + * + * Implements the logic from the `Hexademical character reference start + * state` and `Numeric character reference end state` in the HTML spec. + * + * @param lastCp The last code point of the entity. Used to see if the + * entity was terminated with a semicolon. + * @param expectedLength The minimum number of characters that should be + * consumed. Used to validate that at least one digit + * was consumed. + * @returns The number of characters that were consumed. + */ + EntityDecoder.prototype.emitNumericEntity = function (lastCp, expectedLength) { + var _a; + // Ensure we consumed at least one digit. + if (this.consumed <= expectedLength) { + (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed); + return 0; + } + // Figure out if this is a legit end of the entity + if (lastCp === CharCodes.SEMI) { + this.consumed += 1; + } + else if (this.decodeMode === DecodingMode.Strict) { + return 0; + } + this.emitCodePoint((0, decode_codepoint_js_1.replaceCodePoint)(this.result), this.consumed); + if (this.errors) { + if (lastCp !== CharCodes.SEMI) { + this.errors.missingSemicolonAfterCharacterReference(); + } + this.errors.validateNumericCharacterReference(this.result); + } + return this.consumed; + }; + /** + * Parses a named entity. + * + * Equivalent to the `Named character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + EntityDecoder.prototype.stateNamedEntity = function (str, offset) { + var decodeTree = this.decodeTree; + var current = decodeTree[this.treeIndex]; + // The mask is the number of bytes of the value, including the current byte. + var valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14; + for (; offset < str.length; offset++, this.excess++) { + var char = str.charCodeAt(offset); + this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char); + if (this.treeIndex < 0) { + return this.result === 0 || + // If we are parsing an attribute + (this.decodeMode === DecodingMode.Attribute && + // We shouldn't have consumed any characters after the entity, + (valueLength === 0 || + // And there should be no invalid characters. + isEntityInAttributeInvalidEnd(char))) + ? 0 + : this.emitNotTerminatedNamedEntity(); + } + current = decodeTree[this.treeIndex]; + valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14; + // If the branch is a value, store it and continue + if (valueLength !== 0) { + // If the entity is terminated by a semicolon, we are done. + if (char === CharCodes.SEMI) { + return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess); + } + // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it. + if (this.decodeMode !== DecodingMode.Strict) { + this.result = this.treeIndex; + this.consumed += this.excess; + this.excess = 0; + } + } + } + return -1; + }; + /** + * Emit a named entity that was not terminated with a semicolon. + * + * @returns The number of characters consumed. + */ + EntityDecoder.prototype.emitNotTerminatedNamedEntity = function () { + var _a; + var _b = this, result = _b.result, decodeTree = _b.decodeTree; + var valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14; + this.emitNamedEntityData(result, valueLength, this.consumed); + (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference(); + return this.consumed; + }; + /** + * Emit a named entity. + * + * @param result The index of the entity in the decode tree. + * @param valueLength The number of bytes in the entity. + * @param consumed The number of characters consumed. + * + * @returns The number of characters consumed. + */ + EntityDecoder.prototype.emitNamedEntityData = function (result, valueLength, consumed) { + var decodeTree = this.decodeTree; + this.emitCodePoint(valueLength === 1 + ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH + : decodeTree[result + 1], consumed); + if (valueLength === 3) { + // For multi-byte values, we need to emit the second byte. + this.emitCodePoint(decodeTree[result + 2], consumed); + } + return consumed; + }; + /** + * Signal to the parser that the end of the input was reached. + * + * Remaining data will be emitted and relevant errors will be produced. + * + * @returns The number of characters consumed. + */ + EntityDecoder.prototype.end = function () { + var _a; + switch (this.state) { + case EntityDecoderState.NamedEntity: { + // Emit a named entity if we have one. + return this.result !== 0 && + (this.decodeMode !== DecodingMode.Attribute || + this.result === this.treeIndex) + ? this.emitNotTerminatedNamedEntity() + : 0; + } + // Otherwise, emit a numeric entity if we have one. + case EntityDecoderState.NumericDecimal: { + return this.emitNumericEntity(0, 2); + } + case EntityDecoderState.NumericHex: { + return this.emitNumericEntity(0, 3); + } + case EntityDecoderState.NumericStart: { + (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed); + return 0; + } + case EntityDecoderState.EntityStart: { + // Return 0 if we have no entity. + return 0; + } + } + }; + return EntityDecoder; +}()); +exports.EntityDecoder = EntityDecoder; +/** + * Creates a function that decodes entities in a string. + * + * @param decodeTree The decode tree. + * @returns A function that decodes entities in a string. + */ +function getDecoder(decodeTree) { + var ret = ""; + var decoder = new EntityDecoder(decodeTree, function (str) { return (ret += (0, decode_codepoint_js_1.fromCodePoint)(str)); }); + return function decodeWithTrie(str, decodeMode) { + var lastIndex = 0; + var offset = 0; + while ((offset = str.indexOf("&", offset)) >= 0) { + ret += str.slice(lastIndex, offset); + decoder.startEntity(decodeMode); + var len = decoder.write(str, + // Skip the "&" + offset + 1); + if (len < 0) { + lastIndex = offset + decoder.end(); + break; + } + lastIndex = offset + len; + // If `len` is 0, skip the current `&` and continue. + offset = len === 0 ? lastIndex + 1 : lastIndex; + } + var result = ret + str.slice(lastIndex); + // Make sure we don't keep a reference to the final string. + ret = ""; + return result; + }; +} +/** + * Determines the branch of the current node that is taken given the current + * character. This function is used to traverse the trie. + * + * @param decodeTree The trie. + * @param current The current node. + * @param nodeIdx The index right after the current node and its value. + * @param char The current character. + * @returns The index of the next node, or -1 if no branch is taken. + */ +function determineBranch(decodeTree, current, nodeIdx, char) { + var branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7; + var jumpOffset = current & BinTrieFlags.JUMP_TABLE; + // Case 1: Single branch encoded in jump offset + if (branchCount === 0) { + return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1; + } + // Case 2: Multiple branches encoded in jump table + if (jumpOffset) { + var value = char - jumpOffset; + return value < 0 || value >= branchCount + ? -1 + : decodeTree[nodeIdx + value] - 1; + } + // Case 3: Multiple branches encoded in dictionary + // Binary search for the character. + var lo = nodeIdx; + var hi = lo + branchCount - 1; + while (lo <= hi) { + var mid = (lo + hi) >>> 1; + var midVal = decodeTree[mid]; + if (midVal < char) { + lo = mid + 1; + } + else if (midVal > char) { + hi = mid - 1; + } + else { + return decodeTree[mid + branchCount]; + } + } + return -1; +} +exports.determineBranch = determineBranch; +var htmlDecoder = getDecoder(decode_data_html_js_1.default); +var xmlDecoder = getDecoder(decode_data_xml_js_1.default); +/** + * Decodes an HTML string. + * + * @param str The string to decode. + * @param mode The decoding mode. + * @returns The decoded string. + */ +function decodeHTML(str, mode) { + if (mode === void 0) { mode = DecodingMode.Legacy; } + return htmlDecoder(str, mode); +} +exports.decodeHTML = decodeHTML; +/** + * Decodes an HTML string in an attribute. + * + * @param str The string to decode. + * @returns The decoded string. + */ +function decodeHTMLAttribute(str) { + return htmlDecoder(str, DecodingMode.Attribute); +} +exports.decodeHTMLAttribute = decodeHTMLAttribute; +/** + * Decodes an HTML string, requiring all entities to be terminated by a semicolon. + * + * @param str The string to decode. + * @returns The decoded string. + */ +function decodeHTMLStrict(str) { + return htmlDecoder(str, DecodingMode.Strict); +} +exports.decodeHTMLStrict = decodeHTMLStrict; +/** + * Decodes an XML string, requiring all entities to be terminated by a semicolon. + * + * @param str The string to decode. + * @returns The decoded string. + */ +function decodeXML(str) { + return xmlDecoder(str, DecodingMode.Strict); +} +exports.decodeXML = decodeXML; +//# sourceMappingURL=decode.js.map \ No newline at end of file diff --git a/node_modules/entities/lib/decode.js.map b/node_modules/entities/lib/decode.js.map new file mode 100644 index 0000000..afcad7e --- /dev/null +++ b/node_modules/entities/lib/decode.js.map @@ -0,0 +1 @@ +{"version":3,"file":"decode.js","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["decode.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/entities/lib/decode_codepoint.d.ts b/node_modules/entities/lib/decode_codepoint.d.ts new file mode 100644 index 0000000..84ae206 --- /dev/null +++ b/node_modules/entities/lib/decode_codepoint.d.ts @@ -0,0 +1,19 @@ +/** + * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point. + */ +export declare const fromCodePoint: (...codePoints: number[]) => string; +/** + * Replace the given code point with a replacement character if it is a + * surrogate or is outside the valid range. Otherwise return the code + * point unchanged. + */ +export declare function replaceCodePoint(codePoint: number): number; +/** + * Replace the code point if relevant, then convert it to a string. + * + * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead. + * @param codePoint The code point to decode. + * @returns The decoded code point. + */ +export default function decodeCodePoint(codePoint: number): string; +//# sourceMappingURL=decode_codepoint.d.ts.map \ No newline at end of file diff --git a/node_modules/entities/lib/decode_codepoint.d.ts.map b/node_modules/entities/lib/decode_codepoint.d.ts.map new file mode 100644 index 0000000..38a8dea --- /dev/null +++ b/node_modules/entities/lib/decode_codepoint.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"decode_codepoint.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["decode_codepoint.ts"],"names":[],"mappings":"AAkCA;;GAEG;AACH,eAAO,MAAM,aAAa,qCAgBrB,CAAC;AAEN;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,UAMjD;AAED;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE"} \ No newline at end of file diff --git a/node_modules/entities/lib/decode_codepoint.js b/node_modules/entities/lib/decode_codepoint.js new file mode 100644 index 0000000..1205346 --- /dev/null +++ b/node_modules/entities/lib/decode_codepoint.js @@ -0,0 +1,76 @@ +"use strict"; +// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134 +var _a; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.replaceCodePoint = exports.fromCodePoint = void 0; +var decodeMap = new Map([ + [0, 65533], + // C1 Unicode control character reference replacements + [128, 8364], + [130, 8218], + [131, 402], + [132, 8222], + [133, 8230], + [134, 8224], + [135, 8225], + [136, 710], + [137, 8240], + [138, 352], + [139, 8249], + [140, 338], + [142, 381], + [145, 8216], + [146, 8217], + [147, 8220], + [148, 8221], + [149, 8226], + [150, 8211], + [151, 8212], + [152, 732], + [153, 8482], + [154, 353], + [155, 8250], + [156, 339], + [158, 382], + [159, 376], +]); +/** + * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point. + */ +exports.fromCodePoint = +// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins +(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) { + var output = ""; + if (codePoint > 0xffff) { + codePoint -= 0x10000; + output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800); + codePoint = 0xdc00 | (codePoint & 0x3ff); + } + output += String.fromCharCode(codePoint); + return output; +}; +/** + * Replace the given code point with a replacement character if it is a + * surrogate or is outside the valid range. Otherwise return the code + * point unchanged. + */ +function replaceCodePoint(codePoint) { + var _a; + if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) { + return 0xfffd; + } + return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint; +} +exports.replaceCodePoint = replaceCodePoint; +/** + * Replace the code point if relevant, then convert it to a string. + * + * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead. + * @param codePoint The code point to decode. + * @returns The decoded code point. + */ +function decodeCodePoint(codePoint) { + return (0, exports.fromCodePoint)(replaceCodePoint(codePoint)); +} +exports.default = decodeCodePoint; +//# sourceMappingURL=decode_codepoint.js.map \ No newline at end of file diff --git a/node_modules/entities/lib/decode_codepoint.js.map b/node_modules/entities/lib/decode_codepoint.js.map new file mode 100644 index 0000000..2747865 --- /dev/null +++ b/node_modules/entities/lib/decode_codepoint.js.map @@ -0,0 +1 @@ +{"version":3,"file":"decode_codepoint.js","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["decode_codepoint.ts"],"names":[],"mappings":";AAAA,qHAAqH;;;;AAErH,IAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACtB,CAAC,CAAC,EAAE,KAAK,CAAC;IACV,sDAAsD;IACtD,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;CACb,CAAC,CAAC;AAEH;;GAEG;AACU,QAAA,aAAa;AACtB,iHAAiH;AACjH,MAAA,MAAM,CAAC,aAAa,mCACpB,UAAU,SAAiB;IACvB,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,IAAI,SAAS,GAAG,MAAM,EAAE;QACpB,SAAS,IAAI,OAAO,CAAC;QACrB,MAAM,IAAI,MAAM,CAAC,YAAY,CACzB,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,CACxC,CAAC;QACF,SAAS,GAAG,MAAM,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;KAC5C;IAED,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEN;;;;GAIG;AACH,SAAgB,gBAAgB,CAAC,SAAiB;;IAC9C,IAAI,CAAC,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI,SAAS,GAAG,QAAQ,EAAE;QACtE,OAAO,MAAM,CAAC;KACjB;IAED,OAAO,MAAA,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,mCAAI,SAAS,CAAC;AACjD,CAAC;AAND,4CAMC;AAED;;;;;;GAMG;AACH,SAAwB,eAAe,CAAC,SAAiB;IACrD,OAAO,IAAA,qBAAa,EAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;AACtD,CAAC;AAFD,kCAEC"} \ No newline at end of file diff --git a/node_modules/entities/lib/encode.d.ts b/node_modules/entities/lib/encode.d.ts new file mode 100644 index 0000000..f09c4ee --- /dev/null +++ b/node_modules/entities/lib/encode.d.ts @@ -0,0 +1,22 @@ +/** + * Encodes all characters in the input using HTML entities. This includes + * characters that are valid ASCII characters in HTML documents, such as `#`. + * + * To get a more compact output, consider using the `encodeNonAsciiHTML` + * function, which will only encode characters that are not valid in HTML + * documents, as well as non-ASCII characters. + * + * If a character has no equivalent entity, a numeric hexadecimal reference + * (eg. `ü`) will be used. + */ +export declare function encodeHTML(data: string): string; +/** + * Encodes all non-ASCII characters, as well as characters not valid in HTML + * documents using HTML entities. This function will not encode characters that + * are valid in HTML documents, such as `#`. + * + * If a character has no equivalent entity, a numeric hexadecimal reference + * (eg. `ü`) will be used. + */ +export declare function encodeNonAsciiHTML(data: string): string; +//# sourceMappingURL=encode.d.ts.map \ No newline at end of file diff --git a/node_modules/entities/lib/encode.d.ts.map b/node_modules/entities/lib/encode.d.ts.map new file mode 100644 index 0000000..e24c05b --- /dev/null +++ b/node_modules/entities/lib/encode.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"encode.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["encode.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AACD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD"} \ No newline at end of file diff --git a/node_modules/entities/lib/encode.js b/node_modules/entities/lib/encode.js new file mode 100644 index 0000000..4786a03 --- /dev/null +++ b/node_modules/entities/lib/encode.js @@ -0,0 +1,77 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.encodeNonAsciiHTML = exports.encodeHTML = void 0; +var encode_html_js_1 = __importDefault(require("./generated/encode-html.js")); +var escape_js_1 = require("./escape.js"); +var htmlReplacer = /[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g; +/** + * Encodes all characters in the input using HTML entities. This includes + * characters that are valid ASCII characters in HTML documents, such as `#`. + * + * To get a more compact output, consider using the `encodeNonAsciiHTML` + * function, which will only encode characters that are not valid in HTML + * documents, as well as non-ASCII characters. + * + * If a character has no equivalent entity, a numeric hexadecimal reference + * (eg. `ü`) will be used. + */ +function encodeHTML(data) { + return encodeHTMLTrieRe(htmlReplacer, data); +} +exports.encodeHTML = encodeHTML; +/** + * Encodes all non-ASCII characters, as well as characters not valid in HTML + * documents using HTML entities. This function will not encode characters that + * are valid in HTML documents, such as `#`. + * + * If a character has no equivalent entity, a numeric hexadecimal reference + * (eg. `ü`) will be used. + */ +function encodeNonAsciiHTML(data) { + return encodeHTMLTrieRe(escape_js_1.xmlReplacer, data); +} +exports.encodeNonAsciiHTML = encodeNonAsciiHTML; +function encodeHTMLTrieRe(regExp, str) { + var ret = ""; + var lastIdx = 0; + var match; + while ((match = regExp.exec(str)) !== null) { + var i = match.index; + ret += str.substring(lastIdx, i); + var char = str.charCodeAt(i); + var next = encode_html_js_1.default.get(char); + if (typeof next === "object") { + // We are in a branch. Try to match the next char. + if (i + 1 < str.length) { + var nextChar = str.charCodeAt(i + 1); + var value = typeof next.n === "number" + ? next.n === nextChar + ? next.o + : undefined + : next.n.get(nextChar); + if (value !== undefined) { + ret += value; + lastIdx = regExp.lastIndex += 1; + continue; + } + } + next = next.v; + } + // We might have a tree node without a value; skip and use a numeric entity. + if (next !== undefined) { + ret += next; + lastIdx = i + 1; + } + else { + var cp = (0, escape_js_1.getCodePoint)(str, i); + ret += "&#x".concat(cp.toString(16), ";"); + // Increase by 1 if we have a surrogate pair + lastIdx = regExp.lastIndex += Number(cp !== char); + } + } + return ret + str.substr(lastIdx); +} +//# sourceMappingURL=encode.js.map \ No newline at end of file diff --git a/node_modules/entities/lib/encode.js.map b/node_modules/entities/lib/encode.js.map new file mode 100644 index 0000000..9d47162 --- /dev/null +++ b/node_modules/entities/lib/encode.js.map @@ -0,0 +1 @@ +{"version":3,"file":"encode.js","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["encode.ts"],"names":[],"mappings":";;;;;;AAAA,8EAAkD;AAClD,yCAAwD;AAExD,IAAM,YAAY,GAAG,qCAAqC,CAAC;AAE3D;;;;;;;;;;GAUG;AACH,SAAgB,UAAU,CAAC,IAAY;IACnC,OAAO,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC;AAFD,gCAEC;AACD;;;;;;;GAOG;AACH,SAAgB,kBAAkB,CAAC,IAAY;IAC3C,OAAO,gBAAgB,CAAC,uBAAW,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC;AAFD,gDAEC;AAED,SAAS,gBAAgB,CAAC,MAAc,EAAE,GAAW;IACjD,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,KAAK,CAAC;IAEV,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;QACxC,IAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;QACtB,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACjC,IAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,IAAI,GAAG,wBAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC1B,kDAAkD;YAClD,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE;gBACpB,IAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvC,IAAM,KAAK,GACP,OAAO,IAAI,CAAC,CAAC,KAAK,QAAQ;oBACtB,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,QAAQ;wBACjB,CAAC,CAAC,IAAI,CAAC,CAAC;wBACR,CAAC,CAAC,SAAS;oBACf,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAE/B,IAAI,KAAK,KAAK,SAAS,EAAE;oBACrB,GAAG,IAAI,KAAK,CAAC;oBACb,OAAO,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;oBAChC,SAAS;iBACZ;aACJ;YAED,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;SACjB;QAED,4EAA4E;QAC5E,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,GAAG,IAAI,IAAI,CAAC;YACZ,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;SACnB;aAAM;YACH,IAAM,EAAE,GAAG,IAAA,wBAAY,EAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAChC,GAAG,IAAI,aAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAG,CAAC;YAChC,4CAA4C;YAC5C,OAAO,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;SACrD;KACJ;IAED,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC"} \ No newline at end of file diff --git a/node_modules/entities/lib/escape.d.ts b/node_modules/entities/lib/escape.d.ts new file mode 100644 index 0000000..c07ecdc --- /dev/null +++ b/node_modules/entities/lib/escape.d.ts @@ -0,0 +1,43 @@ +export declare const xmlReplacer: RegExp; +export declare const getCodePoint: (str: string, index: number) => number; +/** + * Encodes all non-ASCII characters, as well as characters not valid in XML + * documents using XML entities. + * + * If a character has no equivalent entity, a + * numeric hexadecimal reference (eg. `ü`) will be used. + */ +export declare function encodeXML(str: string): string; +/** + * Encodes all non-ASCII characters, as well as characters not valid in XML + * documents using numeric hexadecimal reference (eg. `ü`). + * + * Have a look at `escapeUTF8` if you want a more concise output at the expense + * of reduced transportability. + * + * @param data String to escape. + */ +export declare const escape: typeof encodeXML; +/** + * Encodes all characters not valid in XML documents using XML entities. + * + * Note that the output will be character-set dependent. + * + * @param data String to escape. + */ +export declare const escapeUTF8: (data: string) => string; +/** + * Encodes all characters that have to be escaped in HTML attributes, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + * + * @param data String to escape. + */ +export declare const escapeAttribute: (data: string) => string; +/** + * Encodes all characters that have to be escaped in HTML text, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + * + * @param data String to escape. + */ +export declare const escapeText: (data: string) => string; +//# sourceMappingURL=escape.d.ts.map \ No newline at end of file diff --git a/node_modules/entities/lib/escape.d.ts.map b/node_modules/entities/lib/escape.d.ts.map new file mode 100644 index 0000000..fa19825 --- /dev/null +++ b/node_modules/entities/lib/escape.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"escape.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["escape.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,QAAyB,CAAC;AAWlD,eAAO,MAAM,YAAY,QAGT,MAAM,SAAS,MAAM,KAAG,MAQD,CAAC;AAExC;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA0B7C;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,kBAAY,CAAC;AAqChC;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,SA7Bb,MAAM,KAAK,MA6BuC,CAAC;AAE7D;;;;;GAKG;AACH,eAAO,MAAM,eAAe,SArClB,MAAM,KAAK,MA4CpB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,SApDb,MAAM,KAAK,MA4DpB,CAAC"} \ No newline at end of file diff --git a/node_modules/entities/lib/escape.js b/node_modules/entities/lib/escape.js new file mode 100644 index 0000000..9f36272 --- /dev/null +++ b/node_modules/entities/lib/escape.js @@ -0,0 +1,122 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.getCodePoint = exports.xmlReplacer = void 0; +exports.xmlReplacer = /["&'<>$\x80-\uFFFF]/g; +var xmlCodeMap = new Map([ + [34, """], + [38, "&"], + [39, "'"], + [60, "<"], + [62, ">"], +]); +// For compatibility with node < 4, we wrap `codePointAt` +exports.getCodePoint = +// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition +String.prototype.codePointAt != null + ? function (str, index) { return str.codePointAt(index); } + : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + function (c, index) { + return (c.charCodeAt(index) & 0xfc00) === 0xd800 + ? (c.charCodeAt(index) - 0xd800) * 0x400 + + c.charCodeAt(index + 1) - + 0xdc00 + + 0x10000 + : c.charCodeAt(index); + }; +/** + * Encodes all non-ASCII characters, as well as characters not valid in XML + * documents using XML entities. + * + * If a character has no equivalent entity, a + * numeric hexadecimal reference (eg. `ü`) will be used. + */ +function encodeXML(str) { + var ret = ""; + var lastIdx = 0; + var match; + while ((match = exports.xmlReplacer.exec(str)) !== null) { + var i = match.index; + var char = str.charCodeAt(i); + var next = xmlCodeMap.get(char); + if (next !== undefined) { + ret += str.substring(lastIdx, i) + next; + lastIdx = i + 1; + } + else { + ret += "".concat(str.substring(lastIdx, i), "&#x").concat((0, exports.getCodePoint)(str, i).toString(16), ";"); + // Increase by 1 if we have a surrogate pair + lastIdx = exports.xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800); + } + } + return ret + str.substr(lastIdx); +} +exports.encodeXML = encodeXML; +/** + * Encodes all non-ASCII characters, as well as characters not valid in XML + * documents using numeric hexadecimal reference (eg. `ü`). + * + * Have a look at `escapeUTF8` if you want a more concise output at the expense + * of reduced transportability. + * + * @param data String to escape. + */ +exports.escape = encodeXML; +/** + * Creates a function that escapes all characters matched by the given regular + * expression using the given map of characters to escape to their entities. + * + * @param regex Regular expression to match characters to escape. + * @param map Map of characters to escape to their entities. + * + * @returns Function that escapes all characters matched by the given regular + * expression using the given map of characters to escape to their entities. + */ +function getEscaper(regex, map) { + return function escape(data) { + var match; + var lastIdx = 0; + var result = ""; + while ((match = regex.exec(data))) { + if (lastIdx !== match.index) { + result += data.substring(lastIdx, match.index); + } + // We know that this character will be in the map. + result += map.get(match[0].charCodeAt(0)); + // Every match will be of length 1 + lastIdx = match.index + 1; + } + return result + data.substring(lastIdx); + }; +} +/** + * Encodes all characters not valid in XML documents using XML entities. + * + * Note that the output will be character-set dependent. + * + * @param data String to escape. + */ +exports.escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap); +/** + * Encodes all characters that have to be escaped in HTML attributes, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + * + * @param data String to escape. + */ +exports.escapeAttribute = getEscaper(/["&\u00A0]/g, new Map([ + [34, """], + [38, "&"], + [160, " "], +])); +/** + * Encodes all characters that have to be escaped in HTML text, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + * + * @param data String to escape. + */ +exports.escapeText = getEscaper(/[&<>\u00A0]/g, new Map([ + [38, "&"], + [60, "<"], + [62, ">"], + [160, " "], +])); +//# sourceMappingURL=escape.js.map \ No newline at end of file diff --git a/node_modules/entities/lib/escape.js.map b/node_modules/entities/lib/escape.js.map new file mode 100644 index 0000000..f96d022 --- /dev/null +++ b/node_modules/entities/lib/escape.js.map @@ -0,0 +1 @@ +{"version":3,"file":"escape.js","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["escape.ts"],"names":[],"mappings":";;;AAAa,QAAA,WAAW,GAAG,sBAAsB,CAAC;AAElD,IAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IACvB,CAAC,EAAE,EAAE,QAAQ,CAAC;IACd,CAAC,EAAE,EAAE,OAAO,CAAC;IACb,CAAC,EAAE,EAAE,QAAQ,CAAC;IACd,CAAC,EAAE,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAEH,yDAAyD;AAC5C,QAAA,YAAY;AACrB,uEAAuE;AACvE,MAAM,CAAC,SAAS,CAAC,WAAW,IAAI,IAAI;IAChC,CAAC,CAAC,UAAC,GAAW,EAAE,KAAa,IAAa,OAAA,GAAG,CAAC,WAAW,CAAC,KAAK,CAAE,EAAvB,CAAuB;IACjE,CAAC,CAAC,uEAAuE;QACvE,UAAC,CAAS,EAAE,KAAa;YACrB,OAAA,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,MAAM;gBACrC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,KAAK;oBACtC,CAAC,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;oBACvB,MAAM;oBACN,OAAO;gBACT,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC;QALzB,CAKyB,CAAC;AAExC;;;;;;GAMG;AACH,SAAgB,SAAS,CAAC,GAAW;IACjC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,KAAK,CAAC;IAEV,OAAO,CAAC,KAAK,GAAG,mBAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;QAC7C,IAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;QACtB,IAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;YACxC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;SACnB;aAAM;YACH,GAAG,IAAI,UAAG,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,gBAAM,IAAA,oBAAY,EACjD,GAAG,EACH,CAAC,CACJ,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAG,CAAC;YAClB,4CAA4C;YAC5C,OAAO,GAAG,mBAAW,CAAC,SAAS,IAAI,MAAM,CACrC,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,MAAM,CAC7B,CAAC;SACL;KACJ;IAED,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AA1BD,8BA0BC;AAED;;;;;;;;GAQG;AACU,QAAA,MAAM,GAAG,SAAS,CAAC;AAEhC;;;;;;;;;GASG;AACH,SAAS,UAAU,CACf,KAAa,EACb,GAAwB;IAExB,OAAO,SAAS,MAAM,CAAC,IAAY;QAC/B,IAAI,KAAK,CAAC;QACV,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;YAC/B,IAAI,OAAO,KAAK,KAAK,CAAC,KAAK,EAAE;gBACzB,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;aAClD;YAED,kDAAkD;YAClD,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAE,CAAC;YAE3C,kCAAkC;YAClC,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;SAC7B;QAED,OAAO,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC;AACN,CAAC;AAED;;;;;;GAMG;AACU,QAAA,UAAU,GAAG,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAE7D;;;;;GAKG;AACU,QAAA,eAAe,GAAG,UAAU,CACrC,aAAa,EACb,IAAI,GAAG,CAAC;IACJ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACd,CAAC,EAAE,EAAE,OAAO,CAAC;IACb,CAAC,GAAG,EAAE,QAAQ,CAAC;CAClB,CAAC,CACL,CAAC;AAEF;;;;;GAKG;AACU,QAAA,UAAU,GAAG,UAAU,CAChC,cAAc,EACd,IAAI,GAAG,CAAC;IACJ,CAAC,EAAE,EAAE,OAAO,CAAC;IACb,CAAC,EAAE,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,QAAQ,CAAC;CAClB,CAAC,CACL,CAAC"} \ No newline at end of file diff --git a/node_modules/entities/lib/esm/decode.d.ts b/node_modules/entities/lib/esm/decode.d.ts new file mode 100644 index 0000000..ccfd9fb --- /dev/null +++ b/node_modules/entities/lib/esm/decode.d.ts @@ -0,0 +1,211 @@ +import htmlDecodeTree from "./generated/decode-data-html.js"; +import xmlDecodeTree from "./generated/decode-data-xml.js"; +import decodeCodePoint from "./decode_codepoint.js"; +export { htmlDecodeTree, xmlDecodeTree, decodeCodePoint }; +export { replaceCodePoint, fromCodePoint } from "./decode_codepoint.js"; +export declare enum BinTrieFlags { + VALUE_LENGTH = 49152, + BRANCH_LENGTH = 16256, + JUMP_TABLE = 127 +} +export declare enum DecodingMode { + /** Entities in text nodes that can end with any character. */ + Legacy = 0, + /** Only allow entities terminated with a semicolon. */ + Strict = 1, + /** Entities in attributes have limitations on ending characters. */ + Attribute = 2 +} +/** + * Producers for character reference errors as defined in the HTML spec. + */ +export interface EntityErrorProducer { + missingSemicolonAfterCharacterReference(): void; + absenceOfDigitsInNumericCharacterReference(consumedCharacters: number): void; + validateNumericCharacterReference(code: number): void; +} +/** + * Token decoder with support of writing partial entities. + */ +export declare class EntityDecoder { + /** The tree used to decode entities. */ + private readonly decodeTree; + /** + * The function that is called when a codepoint is decoded. + * + * For multi-byte named entities, this will be called multiple times, + * with the second codepoint, and the same `consumed` value. + * + * @param codepoint The decoded codepoint. + * @param consumed The number of bytes consumed by the decoder. + */ + private readonly emitCodePoint; + /** An object that is used to produce errors. */ + private readonly errors?; + constructor( + /** The tree used to decode entities. */ + decodeTree: Uint16Array, + /** + * The function that is called when a codepoint is decoded. + * + * For multi-byte named entities, this will be called multiple times, + * with the second codepoint, and the same `consumed` value. + * + * @param codepoint The decoded codepoint. + * @param consumed The number of bytes consumed by the decoder. + */ + emitCodePoint: (cp: number, consumed: number) => void, + /** An object that is used to produce errors. */ + errors?: EntityErrorProducer | undefined); + /** The current state of the decoder. */ + private state; + /** Characters that were consumed while parsing an entity. */ + private consumed; + /** + * The result of the entity. + * + * Either the result index of a numeric entity, or the codepoint of a + * numeric entity. + */ + private result; + /** The current index in the decode tree. */ + private treeIndex; + /** The number of characters that were consumed in excess. */ + private excess; + /** The mode in which the decoder is operating. */ + private decodeMode; + /** Resets the instance to make it reusable. */ + startEntity(decodeMode: DecodingMode): void; + /** + * Write an entity to the decoder. This can be called multiple times with partial entities. + * If the entity is incomplete, the decoder will return -1. + * + * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the + * entity is incomplete, and resume when the next string is written. + * + * @param string The string containing the entity (or a continuation of the entity). + * @param offset The offset at which the entity begins. Should be 0 if this is not the first call. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + write(str: string, offset: number): number; + /** + * Switches between the numeric decimal and hexadecimal states. + * + * Equivalent to the `Numeric character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + private stateNumericStart; + private addToNumericResult; + /** + * Parses a hexadecimal numeric entity. + * + * Equivalent to the `Hexademical character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + private stateNumericHex; + /** + * Parses a decimal numeric entity. + * + * Equivalent to the `Decimal character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + private stateNumericDecimal; + /** + * Validate and emit a numeric entity. + * + * Implements the logic from the `Hexademical character reference start + * state` and `Numeric character reference end state` in the HTML spec. + * + * @param lastCp The last code point of the entity. Used to see if the + * entity was terminated with a semicolon. + * @param expectedLength The minimum number of characters that should be + * consumed. Used to validate that at least one digit + * was consumed. + * @returns The number of characters that were consumed. + */ + private emitNumericEntity; + /** + * Parses a named entity. + * + * Equivalent to the `Named character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + private stateNamedEntity; + /** + * Emit a named entity that was not terminated with a semicolon. + * + * @returns The number of characters consumed. + */ + private emitNotTerminatedNamedEntity; + /** + * Emit a named entity. + * + * @param result The index of the entity in the decode tree. + * @param valueLength The number of bytes in the entity. + * @param consumed The number of characters consumed. + * + * @returns The number of characters consumed. + */ + private emitNamedEntityData; + /** + * Signal to the parser that the end of the input was reached. + * + * Remaining data will be emitted and relevant errors will be produced. + * + * @returns The number of characters consumed. + */ + end(): number; +} +/** + * Determines the branch of the current node that is taken given the current + * character. This function is used to traverse the trie. + * + * @param decodeTree The trie. + * @param current The current node. + * @param nodeIdx The index right after the current node and its value. + * @param char The current character. + * @returns The index of the next node, or -1 if no branch is taken. + */ +export declare function determineBranch(decodeTree: Uint16Array, current: number, nodeIdx: number, char: number): number; +/** + * Decodes an HTML string. + * + * @param str The string to decode. + * @param mode The decoding mode. + * @returns The decoded string. + */ +export declare function decodeHTML(str: string, mode?: DecodingMode): string; +/** + * Decodes an HTML string in an attribute. + * + * @param str The string to decode. + * @returns The decoded string. + */ +export declare function decodeHTMLAttribute(str: string): string; +/** + * Decodes an HTML string, requiring all entities to be terminated by a semicolon. + * + * @param str The string to decode. + * @returns The decoded string. + */ +export declare function decodeHTMLStrict(str: string): string; +/** + * Decodes an XML string, requiring all entities to be terminated by a semicolon. + * + * @param str The string to decode. + * @returns The decoded string. + */ +export declare function decodeXML(str: string): string; +//# sourceMappingURL=decode.d.ts.map \ No newline at end of file diff --git a/node_modules/entities/lib/esm/decode.d.ts.map b/node_modules/entities/lib/esm/decode.d.ts.map new file mode 100644 index 0000000..4c0b4b4 --- /dev/null +++ b/node_modules/entities/lib/esm/decode.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"decode.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["decode.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/entities/lib/esm/decode.js b/node_modules/entities/lib/esm/decode.js new file mode 100644 index 0000000..de225ec --- /dev/null +++ b/node_modules/entities/lib/esm/decode.js @@ -0,0 +1,496 @@ +import htmlDecodeTree from "./generated/decode-data-html.js"; +import xmlDecodeTree from "./generated/decode-data-xml.js"; +import decodeCodePoint, { replaceCodePoint, fromCodePoint, } from "./decode_codepoint.js"; +// Re-export for use by eg. htmlparser2 +export { htmlDecodeTree, xmlDecodeTree, decodeCodePoint }; +export { replaceCodePoint, fromCodePoint } from "./decode_codepoint.js"; +var CharCodes; +(function (CharCodes) { + CharCodes[CharCodes["NUM"] = 35] = "NUM"; + CharCodes[CharCodes["SEMI"] = 59] = "SEMI"; + CharCodes[CharCodes["EQUALS"] = 61] = "EQUALS"; + CharCodes[CharCodes["ZERO"] = 48] = "ZERO"; + CharCodes[CharCodes["NINE"] = 57] = "NINE"; + CharCodes[CharCodes["LOWER_A"] = 97] = "LOWER_A"; + CharCodes[CharCodes["LOWER_F"] = 102] = "LOWER_F"; + CharCodes[CharCodes["LOWER_X"] = 120] = "LOWER_X"; + CharCodes[CharCodes["LOWER_Z"] = 122] = "LOWER_Z"; + CharCodes[CharCodes["UPPER_A"] = 65] = "UPPER_A"; + CharCodes[CharCodes["UPPER_F"] = 70] = "UPPER_F"; + CharCodes[CharCodes["UPPER_Z"] = 90] = "UPPER_Z"; +})(CharCodes || (CharCodes = {})); +/** Bit that needs to be set to convert an upper case ASCII character to lower case */ +const TO_LOWER_BIT = 0b100000; +export var BinTrieFlags; +(function (BinTrieFlags) { + BinTrieFlags[BinTrieFlags["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH"; + BinTrieFlags[BinTrieFlags["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH"; + BinTrieFlags[BinTrieFlags["JUMP_TABLE"] = 127] = "JUMP_TABLE"; +})(BinTrieFlags || (BinTrieFlags = {})); +function isNumber(code) { + return code >= CharCodes.ZERO && code <= CharCodes.NINE; +} +function isHexadecimalCharacter(code) { + return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F) || + (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F)); +} +function isAsciiAlphaNumeric(code) { + return ((code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z) || + (code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z) || + isNumber(code)); +} +/** + * Checks if the given character is a valid end character for an entity in an attribute. + * + * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error. + * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state + */ +function isEntityInAttributeInvalidEnd(code) { + return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code); +} +var EntityDecoderState; +(function (EntityDecoderState) { + EntityDecoderState[EntityDecoderState["EntityStart"] = 0] = "EntityStart"; + EntityDecoderState[EntityDecoderState["NumericStart"] = 1] = "NumericStart"; + EntityDecoderState[EntityDecoderState["NumericDecimal"] = 2] = "NumericDecimal"; + EntityDecoderState[EntityDecoderState["NumericHex"] = 3] = "NumericHex"; + EntityDecoderState[EntityDecoderState["NamedEntity"] = 4] = "NamedEntity"; +})(EntityDecoderState || (EntityDecoderState = {})); +export var DecodingMode; +(function (DecodingMode) { + /** Entities in text nodes that can end with any character. */ + DecodingMode[DecodingMode["Legacy"] = 0] = "Legacy"; + /** Only allow entities terminated with a semicolon. */ + DecodingMode[DecodingMode["Strict"] = 1] = "Strict"; + /** Entities in attributes have limitations on ending characters. */ + DecodingMode[DecodingMode["Attribute"] = 2] = "Attribute"; +})(DecodingMode || (DecodingMode = {})); +/** + * Token decoder with support of writing partial entities. + */ +export class EntityDecoder { + constructor( + /** The tree used to decode entities. */ + decodeTree, + /** + * The function that is called when a codepoint is decoded. + * + * For multi-byte named entities, this will be called multiple times, + * with the second codepoint, and the same `consumed` value. + * + * @param codepoint The decoded codepoint. + * @param consumed The number of bytes consumed by the decoder. + */ + emitCodePoint, + /** An object that is used to produce errors. */ + errors) { + this.decodeTree = decodeTree; + this.emitCodePoint = emitCodePoint; + this.errors = errors; + /** The current state of the decoder. */ + this.state = EntityDecoderState.EntityStart; + /** Characters that were consumed while parsing an entity. */ + this.consumed = 1; + /** + * The result of the entity. + * + * Either the result index of a numeric entity, or the codepoint of a + * numeric entity. + */ + this.result = 0; + /** The current index in the decode tree. */ + this.treeIndex = 0; + /** The number of characters that were consumed in excess. */ + this.excess = 1; + /** The mode in which the decoder is operating. */ + this.decodeMode = DecodingMode.Strict; + } + /** Resets the instance to make it reusable. */ + startEntity(decodeMode) { + this.decodeMode = decodeMode; + this.state = EntityDecoderState.EntityStart; + this.result = 0; + this.treeIndex = 0; + this.excess = 1; + this.consumed = 1; + } + /** + * Write an entity to the decoder. This can be called multiple times with partial entities. + * If the entity is incomplete, the decoder will return -1. + * + * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the + * entity is incomplete, and resume when the next string is written. + * + * @param string The string containing the entity (or a continuation of the entity). + * @param offset The offset at which the entity begins. Should be 0 if this is not the first call. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + write(str, offset) { + switch (this.state) { + case EntityDecoderState.EntityStart: { + if (str.charCodeAt(offset) === CharCodes.NUM) { + this.state = EntityDecoderState.NumericStart; + this.consumed += 1; + return this.stateNumericStart(str, offset + 1); + } + this.state = EntityDecoderState.NamedEntity; + return this.stateNamedEntity(str, offset); + } + case EntityDecoderState.NumericStart: { + return this.stateNumericStart(str, offset); + } + case EntityDecoderState.NumericDecimal: { + return this.stateNumericDecimal(str, offset); + } + case EntityDecoderState.NumericHex: { + return this.stateNumericHex(str, offset); + } + case EntityDecoderState.NamedEntity: { + return this.stateNamedEntity(str, offset); + } + } + } + /** + * Switches between the numeric decimal and hexadecimal states. + * + * Equivalent to the `Numeric character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + stateNumericStart(str, offset) { + if (offset >= str.length) { + return -1; + } + if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) { + this.state = EntityDecoderState.NumericHex; + this.consumed += 1; + return this.stateNumericHex(str, offset + 1); + } + this.state = EntityDecoderState.NumericDecimal; + return this.stateNumericDecimal(str, offset); + } + addToNumericResult(str, start, end, base) { + if (start !== end) { + const digitCount = end - start; + this.result = + this.result * Math.pow(base, digitCount) + + parseInt(str.substr(start, digitCount), base); + this.consumed += digitCount; + } + } + /** + * Parses a hexadecimal numeric entity. + * + * Equivalent to the `Hexademical character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + stateNumericHex(str, offset) { + const startIdx = offset; + while (offset < str.length) { + const char = str.charCodeAt(offset); + if (isNumber(char) || isHexadecimalCharacter(char)) { + offset += 1; + } + else { + this.addToNumericResult(str, startIdx, offset, 16); + return this.emitNumericEntity(char, 3); + } + } + this.addToNumericResult(str, startIdx, offset, 16); + return -1; + } + /** + * Parses a decimal numeric entity. + * + * Equivalent to the `Decimal character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + stateNumericDecimal(str, offset) { + const startIdx = offset; + while (offset < str.length) { + const char = str.charCodeAt(offset); + if (isNumber(char)) { + offset += 1; + } + else { + this.addToNumericResult(str, startIdx, offset, 10); + return this.emitNumericEntity(char, 2); + } + } + this.addToNumericResult(str, startIdx, offset, 10); + return -1; + } + /** + * Validate and emit a numeric entity. + * + * Implements the logic from the `Hexademical character reference start + * state` and `Numeric character reference end state` in the HTML spec. + * + * @param lastCp The last code point of the entity. Used to see if the + * entity was terminated with a semicolon. + * @param expectedLength The minimum number of characters that should be + * consumed. Used to validate that at least one digit + * was consumed. + * @returns The number of characters that were consumed. + */ + emitNumericEntity(lastCp, expectedLength) { + var _a; + // Ensure we consumed at least one digit. + if (this.consumed <= expectedLength) { + (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed); + return 0; + } + // Figure out if this is a legit end of the entity + if (lastCp === CharCodes.SEMI) { + this.consumed += 1; + } + else if (this.decodeMode === DecodingMode.Strict) { + return 0; + } + this.emitCodePoint(replaceCodePoint(this.result), this.consumed); + if (this.errors) { + if (lastCp !== CharCodes.SEMI) { + this.errors.missingSemicolonAfterCharacterReference(); + } + this.errors.validateNumericCharacterReference(this.result); + } + return this.consumed; + } + /** + * Parses a named entity. + * + * Equivalent to the `Named character reference state` in the HTML spec. + * + * @param str The string containing the entity (or a continuation of the entity). + * @param offset The current offset. + * @returns The number of characters that were consumed, or -1 if the entity is incomplete. + */ + stateNamedEntity(str, offset) { + const { decodeTree } = this; + let current = decodeTree[this.treeIndex]; + // The mask is the number of bytes of the value, including the current byte. + let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14; + for (; offset < str.length; offset++, this.excess++) { + const char = str.charCodeAt(offset); + this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char); + if (this.treeIndex < 0) { + return this.result === 0 || + // If we are parsing an attribute + (this.decodeMode === DecodingMode.Attribute && + // We shouldn't have consumed any characters after the entity, + (valueLength === 0 || + // And there should be no invalid characters. + isEntityInAttributeInvalidEnd(char))) + ? 0 + : this.emitNotTerminatedNamedEntity(); + } + current = decodeTree[this.treeIndex]; + valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14; + // If the branch is a value, store it and continue + if (valueLength !== 0) { + // If the entity is terminated by a semicolon, we are done. + if (char === CharCodes.SEMI) { + return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess); + } + // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it. + if (this.decodeMode !== DecodingMode.Strict) { + this.result = this.treeIndex; + this.consumed += this.excess; + this.excess = 0; + } + } + } + return -1; + } + /** + * Emit a named entity that was not terminated with a semicolon. + * + * @returns The number of characters consumed. + */ + emitNotTerminatedNamedEntity() { + var _a; + const { result, decodeTree } = this; + const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14; + this.emitNamedEntityData(result, valueLength, this.consumed); + (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference(); + return this.consumed; + } + /** + * Emit a named entity. + * + * @param result The index of the entity in the decode tree. + * @param valueLength The number of bytes in the entity. + * @param consumed The number of characters consumed. + * + * @returns The number of characters consumed. + */ + emitNamedEntityData(result, valueLength, consumed) { + const { decodeTree } = this; + this.emitCodePoint(valueLength === 1 + ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH + : decodeTree[result + 1], consumed); + if (valueLength === 3) { + // For multi-byte values, we need to emit the second byte. + this.emitCodePoint(decodeTree[result + 2], consumed); + } + return consumed; + } + /** + * Signal to the parser that the end of the input was reached. + * + * Remaining data will be emitted and relevant errors will be produced. + * + * @returns The number of characters consumed. + */ + end() { + var _a; + switch (this.state) { + case EntityDecoderState.NamedEntity: { + // Emit a named entity if we have one. + return this.result !== 0 && + (this.decodeMode !== DecodingMode.Attribute || + this.result === this.treeIndex) + ? this.emitNotTerminatedNamedEntity() + : 0; + } + // Otherwise, emit a numeric entity if we have one. + case EntityDecoderState.NumericDecimal: { + return this.emitNumericEntity(0, 2); + } + case EntityDecoderState.NumericHex: { + return this.emitNumericEntity(0, 3); + } + case EntityDecoderState.NumericStart: { + (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed); + return 0; + } + case EntityDecoderState.EntityStart: { + // Return 0 if we have no entity. + return 0; + } + } + } +} +/** + * Creates a function that decodes entities in a string. + * + * @param decodeTree The decode tree. + * @returns A function that decodes entities in a string. + */ +function getDecoder(decodeTree) { + let ret = ""; + const decoder = new EntityDecoder(decodeTree, (str) => (ret += fromCodePoint(str))); + return function decodeWithTrie(str, decodeMode) { + let lastIndex = 0; + let offset = 0; + while ((offset = str.indexOf("&", offset)) >= 0) { + ret += str.slice(lastIndex, offset); + decoder.startEntity(decodeMode); + const len = decoder.write(str, + // Skip the "&" + offset + 1); + if (len < 0) { + lastIndex = offset + decoder.end(); + break; + } + lastIndex = offset + len; + // If `len` is 0, skip the current `&` and continue. + offset = len === 0 ? lastIndex + 1 : lastIndex; + } + const result = ret + str.slice(lastIndex); + // Make sure we don't keep a reference to the final string. + ret = ""; + return result; + }; +} +/** + * Determines the branch of the current node that is taken given the current + * character. This function is used to traverse the trie. + * + * @param decodeTree The trie. + * @param current The current node. + * @param nodeIdx The index right after the current node and its value. + * @param char The current character. + * @returns The index of the next node, or -1 if no branch is taken. + */ +export function determineBranch(decodeTree, current, nodeIdx, char) { + const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7; + const jumpOffset = current & BinTrieFlags.JUMP_TABLE; + // Case 1: Single branch encoded in jump offset + if (branchCount === 0) { + return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1; + } + // Case 2: Multiple branches encoded in jump table + if (jumpOffset) { + const value = char - jumpOffset; + return value < 0 || value >= branchCount + ? -1 + : decodeTree[nodeIdx + value] - 1; + } + // Case 3: Multiple branches encoded in dictionary + // Binary search for the character. + let lo = nodeIdx; + let hi = lo + branchCount - 1; + while (lo <= hi) { + const mid = (lo + hi) >>> 1; + const midVal = decodeTree[mid]; + if (midVal < char) { + lo = mid + 1; + } + else if (midVal > char) { + hi = mid - 1; + } + else { + return decodeTree[mid + branchCount]; + } + } + return -1; +} +const htmlDecoder = getDecoder(htmlDecodeTree); +const xmlDecoder = getDecoder(xmlDecodeTree); +/** + * Decodes an HTML string. + * + * @param str The string to decode. + * @param mode The decoding mode. + * @returns The decoded string. + */ +export function decodeHTML(str, mode = DecodingMode.Legacy) { + return htmlDecoder(str, mode); +} +/** + * Decodes an HTML string in an attribute. + * + * @param str The string to decode. + * @returns The decoded string. + */ +export function decodeHTMLAttribute(str) { + return htmlDecoder(str, DecodingMode.Attribute); +} +/** + * Decodes an HTML string, requiring all entities to be terminated by a semicolon. + * + * @param str The string to decode. + * @returns The decoded string. + */ +export function decodeHTMLStrict(str) { + return htmlDecoder(str, DecodingMode.Strict); +} +/** + * Decodes an XML string, requiring all entities to be terminated by a semicolon. + * + * @param str The string to decode. + * @returns The decoded string. + */ +export function decodeXML(str) { + return xmlDecoder(str, DecodingMode.Strict); +} +//# sourceMappingURL=decode.js.map \ No newline at end of file diff --git a/node_modules/entities/lib/esm/decode.js.map b/node_modules/entities/lib/esm/decode.js.map new file mode 100644 index 0000000..2db1510 --- /dev/null +++ b/node_modules/entities/lib/esm/decode.js.map @@ -0,0 +1 @@ +{"version":3,"file":"decode.js","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["decode.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/entities/lib/esm/decode_codepoint.d.ts b/node_modules/entities/lib/esm/decode_codepoint.d.ts new file mode 100644 index 0000000..84ae206 --- /dev/null +++ b/node_modules/entities/lib/esm/decode_codepoint.d.ts @@ -0,0 +1,19 @@ +/** + * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point. + */ +export declare const fromCodePoint: (...codePoints: number[]) => string; +/** + * Replace the given code point with a replacement character if it is a + * surrogate or is outside the valid range. Otherwise return the code + * point unchanged. + */ +export declare function replaceCodePoint(codePoint: number): number; +/** + * Replace the code point if relevant, then convert it to a string. + * + * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead. + * @param codePoint The code point to decode. + * @returns The decoded code point. + */ +export default function decodeCodePoint(codePoint: number): string; +//# sourceMappingURL=decode_codepoint.d.ts.map \ No newline at end of file diff --git a/node_modules/entities/lib/esm/decode_codepoint.d.ts.map b/node_modules/entities/lib/esm/decode_codepoint.d.ts.map new file mode 100644 index 0000000..38a8dea --- /dev/null +++ b/node_modules/entities/lib/esm/decode_codepoint.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"decode_codepoint.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["decode_codepoint.ts"],"names":[],"mappings":"AAkCA;;GAEG;AACH,eAAO,MAAM,aAAa,qCAgBrB,CAAC;AAEN;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,UAMjD;AAED;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE"} \ No newline at end of file diff --git a/node_modules/entities/lib/esm/decode_codepoint.js b/node_modules/entities/lib/esm/decode_codepoint.js new file mode 100644 index 0000000..4d8281e --- /dev/null +++ b/node_modules/entities/lib/esm/decode_codepoint.js @@ -0,0 +1,71 @@ +// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134 +var _a; +const decodeMap = new Map([ + [0, 65533], + // C1 Unicode control character reference replacements + [128, 8364], + [130, 8218], + [131, 402], + [132, 8222], + [133, 8230], + [134, 8224], + [135, 8225], + [136, 710], + [137, 8240], + [138, 352], + [139, 8249], + [140, 338], + [142, 381], + [145, 8216], + [146, 8217], + [147, 8220], + [148, 8221], + [149, 8226], + [150, 8211], + [151, 8212], + [152, 732], + [153, 8482], + [154, 353], + [155, 8250], + [156, 339], + [158, 382], + [159, 376], +]); +/** + * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point. + */ +export const fromCodePoint = +// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins +(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) { + let output = ""; + if (codePoint > 0xffff) { + codePoint -= 0x10000; + output += String.fromCharCode(((codePoint >>> 10) & 0x3ff) | 0xd800); + codePoint = 0xdc00 | (codePoint & 0x3ff); + } + output += String.fromCharCode(codePoint); + return output; +}; +/** + * Replace the given code point with a replacement character if it is a + * surrogate or is outside the valid range. Otherwise return the code + * point unchanged. + */ +export function replaceCodePoint(codePoint) { + var _a; + if ((codePoint >= 0xd800 && codePoint <= 0xdfff) || codePoint > 0x10ffff) { + return 0xfffd; + } + return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint; +} +/** + * Replace the code point if relevant, then convert it to a string. + * + * @deprecated Use `fromCodePoint(replaceCodePoint(codePoint))` instead. + * @param codePoint The code point to decode. + * @returns The decoded code point. + */ +export default function decodeCodePoint(codePoint) { + return fromCodePoint(replaceCodePoint(codePoint)); +} +//# sourceMappingURL=decode_codepoint.js.map \ No newline at end of file diff --git a/node_modules/entities/lib/esm/decode_codepoint.js.map b/node_modules/entities/lib/esm/decode_codepoint.js.map new file mode 100644 index 0000000..53a32b6 --- /dev/null +++ b/node_modules/entities/lib/esm/decode_codepoint.js.map @@ -0,0 +1 @@ +{"version":3,"file":"decode_codepoint.js","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["decode_codepoint.ts"],"names":[],"mappings":"AAAA,qHAAqH;;AAErH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC;IACtB,CAAC,CAAC,EAAE,KAAK,CAAC;IACV,sDAAsD;IACtD,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,IAAI,CAAC;IACX,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;IACV,CAAC,GAAG,EAAE,GAAG,CAAC;CACb,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa;AACtB,iHAAiH;AACjH,MAAA,MAAM,CAAC,aAAa,mCACpB,UAAU,SAAiB;IACvB,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,IAAI,SAAS,GAAG,MAAM,EAAE;QACpB,SAAS,IAAI,OAAO,CAAC;QACrB,MAAM,IAAI,MAAM,CAAC,YAAY,CACzB,CAAC,CAAC,SAAS,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,GAAG,MAAM,CACxC,CAAC;QACF,SAAS,GAAG,MAAM,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;KAC5C;IAED,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IACzC,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEN;;;;GAIG;AACH,MAAM,UAAU,gBAAgB,CAAC,SAAiB;;IAC9C,IAAI,CAAC,SAAS,IAAI,MAAM,IAAI,SAAS,IAAI,MAAM,CAAC,IAAI,SAAS,GAAG,QAAQ,EAAE;QACtE,OAAO,MAAM,CAAC;KACjB;IAED,OAAO,MAAA,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,mCAAI,SAAS,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,OAAO,UAAU,eAAe,CAAC,SAAiB;IACrD,OAAO,aAAa,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;AACtD,CAAC"} \ No newline at end of file diff --git a/node_modules/entities/lib/esm/encode.d.ts b/node_modules/entities/lib/esm/encode.d.ts new file mode 100644 index 0000000..f09c4ee --- /dev/null +++ b/node_modules/entities/lib/esm/encode.d.ts @@ -0,0 +1,22 @@ +/** + * Encodes all characters in the input using HTML entities. This includes + * characters that are valid ASCII characters in HTML documents, such as `#`. + * + * To get a more compact output, consider using the `encodeNonAsciiHTML` + * function, which will only encode characters that are not valid in HTML + * documents, as well as non-ASCII characters. + * + * If a character has no equivalent entity, a numeric hexadecimal reference + * (eg. `ü`) will be used. + */ +export declare function encodeHTML(data: string): string; +/** + * Encodes all non-ASCII characters, as well as characters not valid in HTML + * documents using HTML entities. This function will not encode characters that + * are valid in HTML documents, such as `#`. + * + * If a character has no equivalent entity, a numeric hexadecimal reference + * (eg. `ü`) will be used. + */ +export declare function encodeNonAsciiHTML(data: string): string; +//# sourceMappingURL=encode.d.ts.map \ No newline at end of file diff --git a/node_modules/entities/lib/esm/encode.d.ts.map b/node_modules/entities/lib/esm/encode.d.ts.map new file mode 100644 index 0000000..e24c05b --- /dev/null +++ b/node_modules/entities/lib/esm/encode.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"encode.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["encode.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;GAUG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAE/C;AACD;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD"} \ No newline at end of file diff --git a/node_modules/entities/lib/esm/encode.js b/node_modules/entities/lib/esm/encode.js new file mode 100644 index 0000000..9c2364f --- /dev/null +++ b/node_modules/entities/lib/esm/encode.js @@ -0,0 +1,69 @@ +import htmlTrie from "./generated/encode-html.js"; +import { xmlReplacer, getCodePoint } from "./escape.js"; +const htmlReplacer = /[\t\n!-,./:-@[-`\f{-}$\x80-\uFFFF]/g; +/** + * Encodes all characters in the input using HTML entities. This includes + * characters that are valid ASCII characters in HTML documents, such as `#`. + * + * To get a more compact output, consider using the `encodeNonAsciiHTML` + * function, which will only encode characters that are not valid in HTML + * documents, as well as non-ASCII characters. + * + * If a character has no equivalent entity, a numeric hexadecimal reference + * (eg. `ü`) will be used. + */ +export function encodeHTML(data) { + return encodeHTMLTrieRe(htmlReplacer, data); +} +/** + * Encodes all non-ASCII characters, as well as characters not valid in HTML + * documents using HTML entities. This function will not encode characters that + * are valid in HTML documents, such as `#`. + * + * If a character has no equivalent entity, a numeric hexadecimal reference + * (eg. `ü`) will be used. + */ +export function encodeNonAsciiHTML(data) { + return encodeHTMLTrieRe(xmlReplacer, data); +} +function encodeHTMLTrieRe(regExp, str) { + let ret = ""; + let lastIdx = 0; + let match; + while ((match = regExp.exec(str)) !== null) { + const i = match.index; + ret += str.substring(lastIdx, i); + const char = str.charCodeAt(i); + let next = htmlTrie.get(char); + if (typeof next === "object") { + // We are in a branch. Try to match the next char. + if (i + 1 < str.length) { + const nextChar = str.charCodeAt(i + 1); + const value = typeof next.n === "number" + ? next.n === nextChar + ? next.o + : undefined + : next.n.get(nextChar); + if (value !== undefined) { + ret += value; + lastIdx = regExp.lastIndex += 1; + continue; + } + } + next = next.v; + } + // We might have a tree node without a value; skip and use a numeric entity. + if (next !== undefined) { + ret += next; + lastIdx = i + 1; + } + else { + const cp = getCodePoint(str, i); + ret += `&#x${cp.toString(16)};`; + // Increase by 1 if we have a surrogate pair + lastIdx = regExp.lastIndex += Number(cp !== char); + } + } + return ret + str.substr(lastIdx); +} +//# sourceMappingURL=encode.js.map \ No newline at end of file diff --git a/node_modules/entities/lib/esm/encode.js.map b/node_modules/entities/lib/esm/encode.js.map new file mode 100644 index 0000000..14ac068 --- /dev/null +++ b/node_modules/entities/lib/esm/encode.js.map @@ -0,0 +1 @@ +{"version":3,"file":"encode.js","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["encode.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,4BAA4B,CAAC;AAClD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD,MAAM,YAAY,GAAG,qCAAqC,CAAC;AAE3D;;;;;;;;;;GAUG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY;IACnC,OAAO,gBAAgB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC;AACD;;;;;;;GAOG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC3C,OAAO,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc,EAAE,GAAW;IACjD,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,KAAK,CAAC;IAEV,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;QACxC,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;QACtB,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAE9B,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;YAC1B,kDAAkD;YAClD,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE;gBACpB,MAAM,QAAQ,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvC,MAAM,KAAK,GACP,OAAO,IAAI,CAAC,CAAC,KAAK,QAAQ;oBACtB,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,QAAQ;wBACjB,CAAC,CAAC,IAAI,CAAC,CAAC;wBACR,CAAC,CAAC,SAAS;oBACf,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;gBAE/B,IAAI,KAAK,KAAK,SAAS,EAAE;oBACrB,GAAG,IAAI,KAAK,CAAC;oBACb,OAAO,GAAG,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC;oBAChC,SAAS;iBACZ;aACJ;YAED,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC;SACjB;QAED,4EAA4E;QAC5E,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,GAAG,IAAI,IAAI,CAAC;YACZ,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;SACnB;aAAM;YACH,MAAM,EAAE,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAChC,GAAG,IAAI,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC;YAChC,4CAA4C;YAC5C,OAAO,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;SACrD;KACJ;IAED,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC"} \ No newline at end of file diff --git a/node_modules/entities/lib/esm/escape.d.ts b/node_modules/entities/lib/esm/escape.d.ts new file mode 100644 index 0000000..c07ecdc --- /dev/null +++ b/node_modules/entities/lib/esm/escape.d.ts @@ -0,0 +1,43 @@ +export declare const xmlReplacer: RegExp; +export declare const getCodePoint: (str: string, index: number) => number; +/** + * Encodes all non-ASCII characters, as well as characters not valid in XML + * documents using XML entities. + * + * If a character has no equivalent entity, a + * numeric hexadecimal reference (eg. `ü`) will be used. + */ +export declare function encodeXML(str: string): string; +/** + * Encodes all non-ASCII characters, as well as characters not valid in XML + * documents using numeric hexadecimal reference (eg. `ü`). + * + * Have a look at `escapeUTF8` if you want a more concise output at the expense + * of reduced transportability. + * + * @param data String to escape. + */ +export declare const escape: typeof encodeXML; +/** + * Encodes all characters not valid in XML documents using XML entities. + * + * Note that the output will be character-set dependent. + * + * @param data String to escape. + */ +export declare const escapeUTF8: (data: string) => string; +/** + * Encodes all characters that have to be escaped in HTML attributes, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + * + * @param data String to escape. + */ +export declare const escapeAttribute: (data: string) => string; +/** + * Encodes all characters that have to be escaped in HTML text, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + * + * @param data String to escape. + */ +export declare const escapeText: (data: string) => string; +//# sourceMappingURL=escape.d.ts.map \ No newline at end of file diff --git a/node_modules/entities/lib/esm/escape.d.ts.map b/node_modules/entities/lib/esm/escape.d.ts.map new file mode 100644 index 0000000..fa19825 --- /dev/null +++ b/node_modules/entities/lib/esm/escape.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"escape.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["escape.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW,QAAyB,CAAC;AAWlD,eAAO,MAAM,YAAY,QAGT,MAAM,SAAS,MAAM,KAAG,MAQD,CAAC;AAExC;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CA0B7C;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,MAAM,kBAAY,CAAC;AAqChC;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,SA7Bb,MAAM,KAAK,MA6BuC,CAAC;AAE7D;;;;;GAKG;AACH,eAAO,MAAM,eAAe,SArClB,MAAM,KAAK,MA4CpB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,UAAU,SApDb,MAAM,KAAK,MA4DpB,CAAC"} \ No newline at end of file diff --git a/node_modules/entities/lib/esm/escape.js b/node_modules/entities/lib/esm/escape.js new file mode 100644 index 0000000..c64da6e --- /dev/null +++ b/node_modules/entities/lib/esm/escape.js @@ -0,0 +1,116 @@ +export const xmlReplacer = /["&'<>$\x80-\uFFFF]/g; +const xmlCodeMap = new Map([ + [34, """], + [38, "&"], + [39, "'"], + [60, "<"], + [62, ">"], +]); +// For compatibility with node < 4, we wrap `codePointAt` +export const getCodePoint = +// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition +String.prototype.codePointAt != null + ? (str, index) => str.codePointAt(index) + : // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae + (c, index) => (c.charCodeAt(index) & 0xfc00) === 0xd800 + ? (c.charCodeAt(index) - 0xd800) * 0x400 + + c.charCodeAt(index + 1) - + 0xdc00 + + 0x10000 + : c.charCodeAt(index); +/** + * Encodes all non-ASCII characters, as well as characters not valid in XML + * documents using XML entities. + * + * If a character has no equivalent entity, a + * numeric hexadecimal reference (eg. `ü`) will be used. + */ +export function encodeXML(str) { + let ret = ""; + let lastIdx = 0; + let match; + while ((match = xmlReplacer.exec(str)) !== null) { + const i = match.index; + const char = str.charCodeAt(i); + const next = xmlCodeMap.get(char); + if (next !== undefined) { + ret += str.substring(lastIdx, i) + next; + lastIdx = i + 1; + } + else { + ret += `${str.substring(lastIdx, i)}&#x${getCodePoint(str, i).toString(16)};`; + // Increase by 1 if we have a surrogate pair + lastIdx = xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800); + } + } + return ret + str.substr(lastIdx); +} +/** + * Encodes all non-ASCII characters, as well as characters not valid in XML + * documents using numeric hexadecimal reference (eg. `ü`). + * + * Have a look at `escapeUTF8` if you want a more concise output at the expense + * of reduced transportability. + * + * @param data String to escape. + */ +export const escape = encodeXML; +/** + * Creates a function that escapes all characters matched by the given regular + * expression using the given map of characters to escape to their entities. + * + * @param regex Regular expression to match characters to escape. + * @param map Map of characters to escape to their entities. + * + * @returns Function that escapes all characters matched by the given regular + * expression using the given map of characters to escape to their entities. + */ +function getEscaper(regex, map) { + return function escape(data) { + let match; + let lastIdx = 0; + let result = ""; + while ((match = regex.exec(data))) { + if (lastIdx !== match.index) { + result += data.substring(lastIdx, match.index); + } + // We know that this character will be in the map. + result += map.get(match[0].charCodeAt(0)); + // Every match will be of length 1 + lastIdx = match.index + 1; + } + return result + data.substring(lastIdx); + }; +} +/** + * Encodes all characters not valid in XML documents using XML entities. + * + * Note that the output will be character-set dependent. + * + * @param data String to escape. + */ +export const escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap); +/** + * Encodes all characters that have to be escaped in HTML attributes, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + * + * @param data String to escape. + */ +export const escapeAttribute = getEscaper(/["&\u00A0]/g, new Map([ + [34, """], + [38, "&"], + [160, " "], +])); +/** + * Encodes all characters that have to be escaped in HTML text, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + * + * @param data String to escape. + */ +export const escapeText = getEscaper(/[&<>\u00A0]/g, new Map([ + [38, "&"], + [60, "<"], + [62, ">"], + [160, " "], +])); +//# sourceMappingURL=escape.js.map \ No newline at end of file diff --git a/node_modules/entities/lib/esm/escape.js.map b/node_modules/entities/lib/esm/escape.js.map new file mode 100644 index 0000000..164301c --- /dev/null +++ b/node_modules/entities/lib/esm/escape.js.map @@ -0,0 +1 @@ +{"version":3,"file":"escape.js","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["escape.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG,sBAAsB,CAAC;AAElD,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;IACvB,CAAC,EAAE,EAAE,QAAQ,CAAC;IACd,CAAC,EAAE,EAAE,OAAO,CAAC;IACb,CAAC,EAAE,EAAE,QAAQ,CAAC;IACd,CAAC,EAAE,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,EAAE,MAAM,CAAC;CACf,CAAC,CAAC;AAEH,yDAAyD;AACzD,MAAM,CAAC,MAAM,YAAY;AACrB,uEAAuE;AACvE,MAAM,CAAC,SAAS,CAAC,WAAW,IAAI,IAAI;IAChC,CAAC,CAAC,CAAC,GAAW,EAAE,KAAa,EAAU,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC,KAAK,CAAE;IACjE,CAAC,CAAC,uEAAuE;QACvE,CAAC,CAAS,EAAE,KAAa,EAAU,EAAE,CACjC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,KAAK,MAAM;YACrC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,GAAG,KAAK;gBACtC,CAAC,CAAC,UAAU,CAAC,KAAK,GAAG,CAAC,CAAC;gBACvB,MAAM;gBACN,OAAO;YACT,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,GAAW;IACjC,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,KAAK,CAAC;IAEV,OAAO,CAAC,KAAK,GAAG,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;QAC7C,MAAM,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC;QACtB,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAElC,IAAI,IAAI,KAAK,SAAS,EAAE;YACpB,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;YACxC,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;SACnB;aAAM;YACH,GAAG,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,YAAY,CACjD,GAAG,EACH,CAAC,CACJ,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,CAAC;YAClB,4CAA4C;YAC5C,OAAO,GAAG,WAAW,CAAC,SAAS,IAAI,MAAM,CACrC,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,MAAM,CAC7B,CAAC;SACL;KACJ;IAED,OAAO,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,SAAS,CAAC;AAEhC;;;;;;;;;GASG;AACH,SAAS,UAAU,CACf,KAAa,EACb,GAAwB;IAExB,OAAO,SAAS,MAAM,CAAC,IAAY;QAC/B,IAAI,KAAK,CAAC;QACV,IAAI,OAAO,GAAG,CAAC,CAAC;QAChB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,EAAE;YAC/B,IAAI,OAAO,KAAK,KAAK,CAAC,KAAK,EAAE;gBACzB,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;aAClD;YAED,kDAAkD;YAClD,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAE,CAAC;YAE3C,kCAAkC;YAClC,OAAO,GAAG,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;SAC7B;QAED,OAAO,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC,CAAC;AACN,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,UAAU,CACrC,aAAa,EACb,IAAI,GAAG,CAAC;IACJ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACd,CAAC,EAAE,EAAE,OAAO,CAAC;IACb,CAAC,GAAG,EAAE,QAAQ,CAAC;CAClB,CAAC,CACL,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,CAChC,cAAc,EACd,IAAI,GAAG,CAAC;IACJ,CAAC,EAAE,EAAE,OAAO,CAAC;IACb,CAAC,EAAE,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,QAAQ,CAAC;CAClB,CAAC,CACL,CAAC"} \ No newline at end of file diff --git a/node_modules/entities/lib/esm/generated/decode-data-html.d.ts b/node_modules/entities/lib/esm/generated/decode-data-html.d.ts new file mode 100644 index 0000000..9cfc4f4 --- /dev/null +++ b/node_modules/entities/lib/esm/generated/decode-data-html.d.ts @@ -0,0 +1,3 @@ +declare const _default: Uint16Array; +export default _default; +//# sourceMappingURL=decode-data-html.d.ts.map \ No newline at end of file diff --git a/node_modules/entities/lib/esm/generated/decode-data-html.d.ts.map b/node_modules/entities/lib/esm/generated/decode-data-html.d.ts.map new file mode 100644 index 0000000..6d4d64b --- /dev/null +++ b/node_modules/entities/lib/esm/generated/decode-data-html.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"decode-data-html.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["generated/decode-data-html.ts"],"names":[],"mappings":";AAEA,wBAKE"} \ No newline at end of file diff --git a/node_modules/entities/lib/esm/generated/decode-data-html.js b/node_modules/entities/lib/esm/generated/decode-data-html.js new file mode 100644 index 0000000..0791b55 --- /dev/null +++ b/node_modules/entities/lib/esm/generated/decode-data-html.js @@ -0,0 +1,7 @@ +// Generated using scripts/write-decode-map.ts +export default new Uint16Array( +// prettier-ignore +"\u1d41<\xd5\u0131\u028a\u049d\u057b\u05d0\u0675\u06de\u07a2\u07d6\u080f\u0a4a\u0a91\u0da1\u0e6d\u0f09\u0f26\u10ca\u1228\u12e1\u1415\u149d\u14c3\u14df\u1525\0\0\0\0\0\0\u156b\u16cd\u198d\u1c12\u1ddd\u1f7e\u2060\u21b0\u228d\u23c0\u23fb\u2442\u2824\u2912\u2d08\u2e48\u2fce\u3016\u32ba\u3639\u37ac\u38fe\u3a28\u3a71\u3ae0\u3b2e\u0800EMabcfglmnoprstu\\bfms\x7f\x84\x8b\x90\x95\x98\xa6\xb3\xb9\xc8\xcflig\u803b\xc6\u40c6P\u803b&\u4026cute\u803b\xc1\u40c1reve;\u4102\u0100iyx}rc\u803b\xc2\u40c2;\u4410r;\uc000\ud835\udd04rave\u803b\xc0\u40c0pha;\u4391acr;\u4100d;\u6a53\u0100gp\x9d\xa1on;\u4104f;\uc000\ud835\udd38plyFunction;\u6061ing\u803b\xc5\u40c5\u0100cs\xbe\xc3r;\uc000\ud835\udc9cign;\u6254ilde\u803b\xc3\u40c3ml\u803b\xc4\u40c4\u0400aceforsu\xe5\xfb\xfe\u0117\u011c\u0122\u0127\u012a\u0100cr\xea\xf2kslash;\u6216\u0176\xf6\xf8;\u6ae7ed;\u6306y;\u4411\u0180crt\u0105\u010b\u0114ause;\u6235noullis;\u612ca;\u4392r;\uc000\ud835\udd05pf;\uc000\ud835\udd39eve;\u42d8c\xf2\u0113mpeq;\u624e\u0700HOacdefhilorsu\u014d\u0151\u0156\u0180\u019e\u01a2\u01b5\u01b7\u01ba\u01dc\u0215\u0273\u0278\u027ecy;\u4427PY\u803b\xa9\u40a9\u0180cpy\u015d\u0162\u017aute;\u4106\u0100;i\u0167\u0168\u62d2talDifferentialD;\u6145leys;\u612d\u0200aeio\u0189\u018e\u0194\u0198ron;\u410cdil\u803b\xc7\u40c7rc;\u4108nint;\u6230ot;\u410a\u0100dn\u01a7\u01adilla;\u40b8terDot;\u40b7\xf2\u017fi;\u43a7rcle\u0200DMPT\u01c7\u01cb\u01d1\u01d6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01e2\u01f8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020foubleQuote;\u601duote;\u6019\u0200lnpu\u021e\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6a74\u0180git\u022f\u0236\u023aruent;\u6261nt;\u622fourIntegral;\u622e\u0100fr\u024c\u024e;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6a2fcr;\uc000\ud835\udc9ep\u0100;C\u0284\u0285\u62d3ap;\u624d\u0580DJSZacefios\u02a0\u02ac\u02b0\u02b4\u02b8\u02cb\u02d7\u02e1\u02e6\u0333\u048d\u0100;o\u0179\u02a5trahd;\u6911cy;\u4402cy;\u4405cy;\u440f\u0180grs\u02bf\u02c4\u02c7ger;\u6021r;\u61a1hv;\u6ae4\u0100ay\u02d0\u02d5ron;\u410e;\u4414l\u0100;t\u02dd\u02de\u6207a;\u4394r;\uc000\ud835\udd07\u0100af\u02eb\u0327\u0100cm\u02f0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031ccute;\u40b4o\u0174\u030b\u030d;\u42d9bleAcute;\u42ddrave;\u4060ilde;\u42dcond;\u62c4ferentialD;\u6146\u0470\u033d\0\0\0\u0342\u0354\0\u0405f;\uc000\ud835\udd3b\u0180;DE\u0348\u0349\u034d\u40a8ot;\u60dcqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03cf\u03e2\u03f8ontourIntegra\xec\u0239o\u0274\u0379\0\0\u037b\xbb\u0349nArrow;\u61d3\u0100eo\u0387\u03a4ft\u0180ART\u0390\u0396\u03a1rrow;\u61d0ightArrow;\u61d4e\xe5\u02cang\u0100LR\u03ab\u03c4eft\u0100AR\u03b3\u03b9rrow;\u67f8ightArrow;\u67faightArrow;\u67f9ight\u0100AT\u03d8\u03derrow;\u61d2ee;\u62a8p\u0241\u03e9\0\0\u03efrrow;\u61d1ownArrow;\u61d5erticalBar;\u6225n\u0300ABLRTa\u0412\u042a\u0430\u045e\u047f\u037crrow\u0180;BU\u041d\u041e\u0422\u6193ar;\u6913pArrow;\u61f5reve;\u4311eft\u02d2\u043a\0\u0446\0\u0450ightVector;\u6950eeVector;\u695eector\u0100;B\u0459\u045a\u61bdar;\u6956ight\u01d4\u0467\0\u0471eeVector;\u695fector\u0100;B\u047a\u047b\u61c1ar;\u6957ee\u0100;A\u0486\u0487\u62a4rrow;\u61a7\u0100ct\u0492\u0497r;\uc000\ud835\udc9frok;\u4110\u0800NTacdfglmopqstux\u04bd\u04c0\u04c4\u04cb\u04de\u04e2\u04e7\u04ee\u04f5\u0521\u052f\u0536\u0552\u055d\u0560\u0565G;\u414aH\u803b\xd0\u40d0cute\u803b\xc9\u40c9\u0180aiy\u04d2\u04d7\u04dcron;\u411arc\u803b\xca\u40ca;\u442dot;\u4116r;\uc000\ud835\udd08rave\u803b\xc8\u40c8ement;\u6208\u0100ap\u04fa\u04fecr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65fberySmallSquare;\u65ab\u0100gp\u0526\u052aon;\u4118f;\uc000\ud835\udd3csilon;\u4395u\u0100ai\u053c\u0549l\u0100;T\u0542\u0543\u6a75ilde;\u6242librium;\u61cc\u0100ci\u0557\u055ar;\u6130m;\u6a73a;\u4397ml\u803b\xcb\u40cb\u0100ip\u056a\u056fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058d\u05b2\u05ccy;\u4424r;\uc000\ud835\udd09lled\u0253\u0597\0\0\u05a3mallSquare;\u65fcerySmallSquare;\u65aa\u0370\u05ba\0\u05bf\0\0\u05c4f;\uc000\ud835\udd3dAll;\u6200riertrf;\u6131c\xf2\u05cb\u0600JTabcdfgorst\u05e8\u05ec\u05ef\u05fa\u0600\u0612\u0616\u061b\u061d\u0623\u066c\u0672cy;\u4403\u803b>\u403emma\u0100;d\u05f7\u05f8\u4393;\u43dcreve;\u411e\u0180eiy\u0607\u060c\u0610dil;\u4122rc;\u411c;\u4413ot;\u4120r;\uc000\ud835\udd0a;\u62d9pf;\uc000\ud835\udd3eeater\u0300EFGLST\u0635\u0644\u064e\u0656\u065b\u0666qual\u0100;L\u063e\u063f\u6265ess;\u62dbullEqual;\u6267reater;\u6aa2ess;\u6277lantEqual;\u6a7eilde;\u6273cr;\uc000\ud835\udca2;\u626b\u0400Aacfiosu\u0685\u068b\u0696\u069b\u069e\u06aa\u06be\u06caRDcy;\u442a\u0100ct\u0690\u0694ek;\u42c7;\u405eirc;\u4124r;\u610clbertSpace;\u610b\u01f0\u06af\0\u06b2f;\u610dizontalLine;\u6500\u0100ct\u06c3\u06c5\xf2\u06a9rok;\u4126mp\u0144\u06d0\u06d8ownHum\xf0\u012fqual;\u624f\u0700EJOacdfgmnostu\u06fa\u06fe\u0703\u0707\u070e\u071a\u071e\u0721\u0728\u0744\u0778\u078b\u078f\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803b\xcd\u40cd\u0100iy\u0713\u0718rc\u803b\xce\u40ce;\u4418ot;\u4130r;\u6111rave\u803b\xcc\u40cc\u0180;ap\u0720\u072f\u073f\u0100cg\u0734\u0737r;\u412ainaryI;\u6148lie\xf3\u03dd\u01f4\u0749\0\u0762\u0100;e\u074d\u074e\u622c\u0100gr\u0753\u0758ral;\u622bsection;\u62c2isible\u0100CT\u076c\u0772omma;\u6063imes;\u6062\u0180gpt\u077f\u0783\u0788on;\u412ef;\uc000\ud835\udd40a;\u4399cr;\u6110ilde;\u4128\u01eb\u079a\0\u079ecy;\u4406l\u803b\xcf\u40cf\u0280cfosu\u07ac\u07b7\u07bc\u07c2\u07d0\u0100iy\u07b1\u07b5rc;\u4134;\u4419r;\uc000\ud835\udd0dpf;\uc000\ud835\udd41\u01e3\u07c7\0\u07ccr;\uc000\ud835\udca5rcy;\u4408kcy;\u4404\u0380HJacfos\u07e4\u07e8\u07ec\u07f1\u07fd\u0802\u0808cy;\u4425cy;\u440cppa;\u439a\u0100ey\u07f6\u07fbdil;\u4136;\u441ar;\uc000\ud835\udd0epf;\uc000\ud835\udd42cr;\uc000\ud835\udca6\u0580JTaceflmost\u0825\u0829\u082c\u0850\u0863\u09b3\u09b8\u09c7\u09cd\u0a37\u0a47cy;\u4409\u803b<\u403c\u0280cmnpr\u0837\u083c\u0841\u0844\u084dute;\u4139bda;\u439bg;\u67ealacetrf;\u6112r;\u619e\u0180aey\u0857\u085c\u0861ron;\u413ddil;\u413b;\u441b\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087e\u08a9\u08b1\u08e0\u08e6\u08fc\u092f\u095b\u0390\u096a\u0100nr\u0883\u088fgleBracket;\u67e8row\u0180;BR\u0899\u089a\u089e\u6190ar;\u61e4ightArrow;\u61c6eiling;\u6308o\u01f5\u08b7\0\u08c3bleBracket;\u67e6n\u01d4\u08c8\0\u08d2eeVector;\u6961ector\u0100;B\u08db\u08dc\u61c3ar;\u6959loor;\u630aight\u0100AV\u08ef\u08f5rrow;\u6194ector;\u694e\u0100er\u0901\u0917e\u0180;AV\u0909\u090a\u0910\u62a3rrow;\u61a4ector;\u695aiangle\u0180;BE\u0924\u0925\u0929\u62b2ar;\u69cfqual;\u62b4p\u0180DTV\u0937\u0942\u094cownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61bfar;\u6958ector\u0100;B\u0965\u0966\u61bcar;\u6952ight\xe1\u039cs\u0300EFGLST\u097e\u098b\u0995\u099d\u09a2\u09adqualGreater;\u62daullEqual;\u6266reater;\u6276ess;\u6aa1lantEqual;\u6a7dilde;\u6272r;\uc000\ud835\udd0f\u0100;e\u09bd\u09be\u62d8ftarrow;\u61daidot;\u413f\u0180npw\u09d4\u0a16\u0a1bg\u0200LRlr\u09de\u09f7\u0a02\u0a10eft\u0100AR\u09e6\u09ecrrow;\u67f5ightArrow;\u67f7ightArrow;\u67f6eft\u0100ar\u03b3\u0a0aight\xe1\u03bfight\xe1\u03caf;\uc000\ud835\udd43er\u0100LR\u0a22\u0a2ceftArrow;\u6199ightArrow;\u6198\u0180cht\u0a3e\u0a40\u0a42\xf2\u084c;\u61b0rok;\u4141;\u626a\u0400acefiosu\u0a5a\u0a5d\u0a60\u0a77\u0a7c\u0a85\u0a8b\u0a8ep;\u6905y;\u441c\u0100dl\u0a65\u0a6fiumSpace;\u605flintrf;\u6133r;\uc000\ud835\udd10nusPlus;\u6213pf;\uc000\ud835\udd44c\xf2\u0a76;\u439c\u0480Jacefostu\u0aa3\u0aa7\u0aad\u0ac0\u0b14\u0b19\u0d91\u0d97\u0d9ecy;\u440acute;\u4143\u0180aey\u0ab4\u0ab9\u0aberon;\u4147dil;\u4145;\u441d\u0180gsw\u0ac7\u0af0\u0b0eative\u0180MTV\u0ad3\u0adf\u0ae8ediumSpace;\u600bhi\u0100cn\u0ae6\u0ad8\xeb\u0ad9eryThi\xee\u0ad9ted\u0100GL\u0af8\u0b06reaterGreate\xf2\u0673essLes\xf3\u0a48Line;\u400ar;\uc000\ud835\udd11\u0200Bnpt\u0b22\u0b28\u0b37\u0b3areak;\u6060BreakingSpace;\u40a0f;\u6115\u0680;CDEGHLNPRSTV\u0b55\u0b56\u0b6a\u0b7c\u0ba1\u0beb\u0c04\u0c5e\u0c84\u0ca6\u0cd8\u0d61\u0d85\u6aec\u0100ou\u0b5b\u0b64ngruent;\u6262pCap;\u626doubleVerticalBar;\u6226\u0180lqx\u0b83\u0b8a\u0b9bement;\u6209ual\u0100;T\u0b92\u0b93\u6260ilde;\uc000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0bb6\u0bb7\u0bbd\u0bc9\u0bd3\u0bd8\u0be5\u626fqual;\u6271ullEqual;\uc000\u2267\u0338reater;\uc000\u226b\u0338ess;\u6279lantEqual;\uc000\u2a7e\u0338ilde;\u6275ump\u0144\u0bf2\u0bfdownHump;\uc000\u224e\u0338qual;\uc000\u224f\u0338e\u0100fs\u0c0a\u0c27tTriangle\u0180;BE\u0c1a\u0c1b\u0c21\u62eaar;\uc000\u29cf\u0338qual;\u62ecs\u0300;EGLST\u0c35\u0c36\u0c3c\u0c44\u0c4b\u0c58\u626equal;\u6270reater;\u6278ess;\uc000\u226a\u0338lantEqual;\uc000\u2a7d\u0338ilde;\u6274ested\u0100GL\u0c68\u0c79reaterGreater;\uc000\u2aa2\u0338essLess;\uc000\u2aa1\u0338recedes\u0180;ES\u0c92\u0c93\u0c9b\u6280qual;\uc000\u2aaf\u0338lantEqual;\u62e0\u0100ei\u0cab\u0cb9verseElement;\u620cghtTriangle\u0180;BE\u0ccb\u0ccc\u0cd2\u62ebar;\uc000\u29d0\u0338qual;\u62ed\u0100qu\u0cdd\u0d0cuareSu\u0100bp\u0ce8\u0cf9set\u0100;E\u0cf0\u0cf3\uc000\u228f\u0338qual;\u62e2erset\u0100;E\u0d03\u0d06\uc000\u2290\u0338qual;\u62e3\u0180bcp\u0d13\u0d24\u0d4eset\u0100;E\u0d1b\u0d1e\uc000\u2282\u20d2qual;\u6288ceeds\u0200;EST\u0d32\u0d33\u0d3b\u0d46\u6281qual;\uc000\u2ab0\u0338lantEqual;\u62e1ilde;\uc000\u227f\u0338erset\u0100;E\u0d58\u0d5b\uc000\u2283\u20d2qual;\u6289ilde\u0200;EFT\u0d6e\u0d6f\u0d75\u0d7f\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uc000\ud835\udca9ilde\u803b\xd1\u40d1;\u439d\u0700Eacdfgmoprstuv\u0dbd\u0dc2\u0dc9\u0dd5\u0ddb\u0de0\u0de7\u0dfc\u0e02\u0e20\u0e22\u0e32\u0e3f\u0e44lig;\u4152cute\u803b\xd3\u40d3\u0100iy\u0dce\u0dd3rc\u803b\xd4\u40d4;\u441eblac;\u4150r;\uc000\ud835\udd12rave\u803b\xd2\u40d2\u0180aei\u0dee\u0df2\u0df6cr;\u414cga;\u43a9cron;\u439fpf;\uc000\ud835\udd46enCurly\u0100DQ\u0e0e\u0e1aoubleQuote;\u601cuote;\u6018;\u6a54\u0100cl\u0e27\u0e2cr;\uc000\ud835\udcaaash\u803b\xd8\u40d8i\u016c\u0e37\u0e3cde\u803b\xd5\u40d5es;\u6a37ml\u803b\xd6\u40d6er\u0100BP\u0e4b\u0e60\u0100ar\u0e50\u0e53r;\u603eac\u0100ek\u0e5a\u0e5c;\u63deet;\u63b4arenthesis;\u63dc\u0480acfhilors\u0e7f\u0e87\u0e8a\u0e8f\u0e92\u0e94\u0e9d\u0eb0\u0efcrtialD;\u6202y;\u441fr;\uc000\ud835\udd13i;\u43a6;\u43a0usMinus;\u40b1\u0100ip\u0ea2\u0eadncareplan\xe5\u069df;\u6119\u0200;eio\u0eb9\u0eba\u0ee0\u0ee4\u6abbcedes\u0200;EST\u0ec8\u0ec9\u0ecf\u0eda\u627aqual;\u6aaflantEqual;\u627cilde;\u627eme;\u6033\u0100dp\u0ee9\u0eeeuct;\u620fortion\u0100;a\u0225\u0ef9l;\u621d\u0100ci\u0f01\u0f06r;\uc000\ud835\udcab;\u43a8\u0200Ufos\u0f11\u0f16\u0f1b\u0f1fOT\u803b\"\u4022r;\uc000\ud835\udd14pf;\u611acr;\uc000\ud835\udcac\u0600BEacefhiorsu\u0f3e\u0f43\u0f47\u0f60\u0f73\u0fa7\u0faa\u0fad\u1096\u10a9\u10b4\u10bearr;\u6910G\u803b\xae\u40ae\u0180cnr\u0f4e\u0f53\u0f56ute;\u4154g;\u67ebr\u0100;t\u0f5c\u0f5d\u61a0l;\u6916\u0180aey\u0f67\u0f6c\u0f71ron;\u4158dil;\u4156;\u4420\u0100;v\u0f78\u0f79\u611cerse\u0100EU\u0f82\u0f99\u0100lq\u0f87\u0f8eement;\u620builibrium;\u61cbpEquilibrium;\u696fr\xbb\u0f79o;\u43a1ght\u0400ACDFTUVa\u0fc1\u0feb\u0ff3\u1022\u1028\u105b\u1087\u03d8\u0100nr\u0fc6\u0fd2gleBracket;\u67e9row\u0180;BL\u0fdc\u0fdd\u0fe1\u6192ar;\u61e5eftArrow;\u61c4eiling;\u6309o\u01f5\u0ff9\0\u1005bleBracket;\u67e7n\u01d4\u100a\0\u1014eeVector;\u695dector\u0100;B\u101d\u101e\u61c2ar;\u6955loor;\u630b\u0100er\u102d\u1043e\u0180;AV\u1035\u1036\u103c\u62a2rrow;\u61a6ector;\u695biangle\u0180;BE\u1050\u1051\u1055\u62b3ar;\u69d0qual;\u62b5p\u0180DTV\u1063\u106e\u1078ownVector;\u694feeVector;\u695cector\u0100;B\u1082\u1083\u61bear;\u6954ector\u0100;B\u1091\u1092\u61c0ar;\u6953\u0100pu\u109b\u109ef;\u611dndImplies;\u6970ightarrow;\u61db\u0100ch\u10b9\u10bcr;\u611b;\u61b1leDelayed;\u69f4\u0680HOacfhimoqstu\u10e4\u10f1\u10f7\u10fd\u1119\u111e\u1151\u1156\u1161\u1167\u11b5\u11bb\u11bf\u0100Cc\u10e9\u10eeHcy;\u4429y;\u4428FTcy;\u442ccute;\u415a\u0280;aeiy\u1108\u1109\u110e\u1113\u1117\u6abcron;\u4160dil;\u415erc;\u415c;\u4421r;\uc000\ud835\udd16ort\u0200DLRU\u112a\u1134\u113e\u1149ownArrow\xbb\u041eeftArrow\xbb\u089aightArrow\xbb\u0fddpArrow;\u6191gma;\u43a3allCircle;\u6218pf;\uc000\ud835\udd4a\u0272\u116d\0\0\u1170t;\u621aare\u0200;ISU\u117b\u117c\u1189\u11af\u65a1ntersection;\u6293u\u0100bp\u118f\u119eset\u0100;E\u1197\u1198\u628fqual;\u6291erset\u0100;E\u11a8\u11a9\u6290qual;\u6292nion;\u6294cr;\uc000\ud835\udcaear;\u62c6\u0200bcmp\u11c8\u11db\u1209\u120b\u0100;s\u11cd\u11ce\u62d0et\u0100;E\u11cd\u11d5qual;\u6286\u0100ch\u11e0\u1205eeds\u0200;EST\u11ed\u11ee\u11f4\u11ff\u627bqual;\u6ab0lantEqual;\u627dilde;\u627fTh\xe1\u0f8c;\u6211\u0180;es\u1212\u1213\u1223\u62d1rset\u0100;E\u121c\u121d\u6283qual;\u6287et\xbb\u1213\u0580HRSacfhiors\u123e\u1244\u1249\u1255\u125e\u1271\u1276\u129f\u12c2\u12c8\u12d1ORN\u803b\xde\u40deADE;\u6122\u0100Hc\u124e\u1252cy;\u440by;\u4426\u0100bu\u125a\u125c;\u4009;\u43a4\u0180aey\u1265\u126a\u126fron;\u4164dil;\u4162;\u4422r;\uc000\ud835\udd17\u0100ei\u127b\u1289\u01f2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128e\u1298kSpace;\uc000\u205f\u200aSpace;\u6009lde\u0200;EFT\u12ab\u12ac\u12b2\u12bc\u623cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uc000\ud835\udd4bipleDot;\u60db\u0100ct\u12d6\u12dbr;\uc000\ud835\udcafrok;\u4166\u0ae1\u12f7\u130e\u131a\u1326\0\u132c\u1331\0\0\0\0\0\u1338\u133d\u1377\u1385\0\u13ff\u1404\u140a\u1410\u0100cr\u12fb\u1301ute\u803b\xda\u40dar\u0100;o\u1307\u1308\u619fcir;\u6949r\u01e3\u1313\0\u1316y;\u440eve;\u416c\u0100iy\u131e\u1323rc\u803b\xdb\u40db;\u4423blac;\u4170r;\uc000\ud835\udd18rave\u803b\xd9\u40d9acr;\u416a\u0100di\u1341\u1369er\u0100BP\u1348\u135d\u0100ar\u134d\u1350r;\u405fac\u0100ek\u1357\u1359;\u63dfet;\u63b5arenthesis;\u63ddon\u0100;P\u1370\u1371\u62c3lus;\u628e\u0100gp\u137b\u137fon;\u4172f;\uc000\ud835\udd4c\u0400ADETadps\u1395\u13ae\u13b8\u13c4\u03e8\u13d2\u13d7\u13f3rrow\u0180;BD\u1150\u13a0\u13a4ar;\u6912ownArrow;\u61c5ownArrow;\u6195quilibrium;\u696eee\u0100;A\u13cb\u13cc\u62a5rrow;\u61a5own\xe1\u03f3er\u0100LR\u13de\u13e8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13f9\u13fa\u43d2on;\u43a5ing;\u416ecr;\uc000\ud835\udcb0ilde;\u4168ml\u803b\xdc\u40dc\u0480Dbcdefosv\u1427\u142c\u1430\u1433\u143e\u1485\u148a\u1490\u1496ash;\u62abar;\u6aeby;\u4412ash\u0100;l\u143b\u143c\u62a9;\u6ae6\u0100er\u1443\u1445;\u62c1\u0180bty\u144c\u1450\u147aar;\u6016\u0100;i\u144f\u1455cal\u0200BLST\u1461\u1465\u146a\u1474ar;\u6223ine;\u407ceparator;\u6758ilde;\u6240ThinSpace;\u600ar;\uc000\ud835\udd19pf;\uc000\ud835\udd4dcr;\uc000\ud835\udcb1dash;\u62aa\u0280cefos\u14a7\u14ac\u14b1\u14b6\u14bcirc;\u4174dge;\u62c0r;\uc000\ud835\udd1apf;\uc000\ud835\udd4ecr;\uc000\ud835\udcb2\u0200fios\u14cb\u14d0\u14d2\u14d8r;\uc000\ud835\udd1b;\u439epf;\uc000\ud835\udd4fcr;\uc000\ud835\udcb3\u0480AIUacfosu\u14f1\u14f5\u14f9\u14fd\u1504\u150f\u1514\u151a\u1520cy;\u442fcy;\u4407cy;\u442ecute\u803b\xdd\u40dd\u0100iy\u1509\u150drc;\u4176;\u442br;\uc000\ud835\udd1cpf;\uc000\ud835\udd50cr;\uc000\ud835\udcb4ml;\u4178\u0400Hacdefos\u1535\u1539\u153f\u154b\u154f\u155d\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417d;\u4417ot;\u417b\u01f2\u1554\0\u155boWidt\xe8\u0ad9a;\u4396r;\u6128pf;\u6124cr;\uc000\ud835\udcb5\u0be1\u1583\u158a\u1590\0\u15b0\u15b6\u15bf\0\0\0\0\u15c6\u15db\u15eb\u165f\u166d\0\u1695\u169b\u16b2\u16b9\0\u16becute\u803b\xe1\u40e1reve;\u4103\u0300;Ediuy\u159c\u159d\u15a1\u15a3\u15a8\u15ad\u623e;\uc000\u223e\u0333;\u623frc\u803b\xe2\u40e2te\u80bb\xb4\u0306;\u4430lig\u803b\xe6\u40e6\u0100;r\xb2\u15ba;\uc000\ud835\udd1erave\u803b\xe0\u40e0\u0100ep\u15ca\u15d6\u0100fp\u15cf\u15d4sym;\u6135\xe8\u15d3ha;\u43b1\u0100ap\u15dfc\u0100cl\u15e4\u15e7r;\u4101g;\u6a3f\u0264\u15f0\0\0\u160a\u0280;adsv\u15fa\u15fb\u15ff\u1601\u1607\u6227nd;\u6a55;\u6a5clope;\u6a58;\u6a5a\u0380;elmrsz\u1618\u1619\u161b\u161e\u163f\u164f\u1659\u6220;\u69a4e\xbb\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163a\u163c\u163e;\u69a8;\u69a9;\u69aa;\u69ab;\u69ac;\u69ad;\u69ae;\u69aft\u0100;v\u1645\u1646\u621fb\u0100;d\u164c\u164d\u62be;\u699d\u0100pt\u1654\u1657h;\u6222\xbb\xb9arr;\u637c\u0100gp\u1663\u1667on;\u4105f;\uc000\ud835\udd52\u0380;Eaeiop\u12c1\u167b\u167d\u1682\u1684\u1687\u168a;\u6a70cir;\u6a6f;\u624ad;\u624bs;\u4027rox\u0100;e\u12c1\u1692\xf1\u1683ing\u803b\xe5\u40e5\u0180cty\u16a1\u16a6\u16a8r;\uc000\ud835\udcb6;\u402amp\u0100;e\u12c1\u16af\xf1\u0288ilde\u803b\xe3\u40e3ml\u803b\xe4\u40e4\u0100ci\u16c2\u16c8onin\xf4\u0272nt;\u6a11\u0800Nabcdefiklnoprsu\u16ed\u16f1\u1730\u173c\u1743\u1748\u1778\u177d\u17e0\u17e6\u1839\u1850\u170d\u193d\u1948\u1970ot;\u6aed\u0100cr\u16f6\u171ek\u0200ceps\u1700\u1705\u170d\u1713ong;\u624cpsilon;\u43f6rime;\u6035im\u0100;e\u171a\u171b\u623dq;\u62cd\u0176\u1722\u1726ee;\u62bded\u0100;g\u172c\u172d\u6305e\xbb\u172drk\u0100;t\u135c\u1737brk;\u63b6\u0100oy\u1701\u1741;\u4431quo;\u601e\u0280cmprt\u1753\u175b\u1761\u1764\u1768aus\u0100;e\u010a\u0109ptyv;\u69b0s\xe9\u170cno\xf5\u0113\u0180ahw\u176f\u1771\u1773;\u43b2;\u6136een;\u626cr;\uc000\ud835\udd1fg\u0380costuvw\u178d\u179d\u17b3\u17c1\u17d5\u17db\u17de\u0180aiu\u1794\u1796\u179a\xf0\u0760rc;\u65efp\xbb\u1371\u0180dpt\u17a4\u17a8\u17adot;\u6a00lus;\u6a01imes;\u6a02\u0271\u17b9\0\0\u17becup;\u6a06ar;\u6605riangle\u0100du\u17cd\u17d2own;\u65bdp;\u65b3plus;\u6a04e\xe5\u1444\xe5\u14adarow;\u690d\u0180ako\u17ed\u1826\u1835\u0100cn\u17f2\u1823k\u0180lst\u17fa\u05ab\u1802ozenge;\u69ebriangle\u0200;dlr\u1812\u1813\u1818\u181d\u65b4own;\u65beeft;\u65c2ight;\u65b8k;\u6423\u01b1\u182b\0\u1833\u01b2\u182f\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183e\u184d\u0100;q\u1843\u1846\uc000=\u20e5uiv;\uc000\u2261\u20e5t;\u6310\u0200ptwx\u1859\u185e\u1867\u186cf;\uc000\ud835\udd53\u0100;t\u13cb\u1863om\xbb\u13cctie;\u62c8\u0600DHUVbdhmptuv\u1885\u1896\u18aa\u18bb\u18d7\u18db\u18ec\u18ff\u1905\u190a\u1910\u1921\u0200LRlr\u188e\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18a1\u18a2\u18a4\u18a6\u18a8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18b3\u18b5\u18b7\u18b9;\u655d;\u655a;\u655c;\u6559\u0380;HLRhlr\u18ca\u18cb\u18cd\u18cf\u18d1\u18d3\u18d5\u6551;\u656c;\u6563;\u6560;\u656b;\u6562;\u655fox;\u69c9\u0200LRlr\u18e4\u18e6\u18e8\u18ea;\u6555;\u6552;\u6510;\u650c\u0280;DUdu\u06bd\u18f7\u18f9\u18fb\u18fd;\u6565;\u6568;\u652c;\u6534inus;\u629flus;\u629eimes;\u62a0\u0200LRlr\u1919\u191b\u191d\u191f;\u655b;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193b\u6502;\u656a;\u6561;\u655e;\u653c;\u6524;\u651c\u0100ev\u0123\u1942bar\u803b\xa6\u40a6\u0200ceio\u1951\u1956\u195a\u1960r;\uc000\ud835\udcb7mi;\u604fm\u0100;e\u171a\u171cl\u0180;bh\u1968\u1969\u196b\u405c;\u69c5sub;\u67c8\u016c\u1974\u197el\u0100;e\u1979\u197a\u6022t\xbb\u197ap\u0180;Ee\u012f\u1985\u1987;\u6aae\u0100;q\u06dc\u06db\u0ce1\u19a7\0\u19e8\u1a11\u1a15\u1a32\0\u1a37\u1a50\0\0\u1ab4\0\0\u1ac1\0\0\u1b21\u1b2e\u1b4d\u1b52\0\u1bfd\0\u1c0c\u0180cpr\u19ad\u19b2\u19ddute;\u4107\u0300;abcds\u19bf\u19c0\u19c4\u19ca\u19d5\u19d9\u6229nd;\u6a44rcup;\u6a49\u0100au\u19cf\u19d2p;\u6a4bp;\u6a47ot;\u6a40;\uc000\u2229\ufe00\u0100eo\u19e2\u19e5t;\u6041\xee\u0693\u0200aeiu\u19f0\u19fb\u1a01\u1a05\u01f0\u19f5\0\u19f8s;\u6a4don;\u410ddil\u803b\xe7\u40e7rc;\u4109ps\u0100;s\u1a0c\u1a0d\u6a4cm;\u6a50ot;\u410b\u0180dmn\u1a1b\u1a20\u1a26il\u80bb\xb8\u01adptyv;\u69b2t\u8100\xa2;e\u1a2d\u1a2e\u40a2r\xe4\u01b2r;\uc000\ud835\udd20\u0180cei\u1a3d\u1a40\u1a4dy;\u4447ck\u0100;m\u1a47\u1a48\u6713ark\xbb\u1a48;\u43c7r\u0380;Ecefms\u1a5f\u1a60\u1a62\u1a6b\u1aa4\u1aaa\u1aae\u65cb;\u69c3\u0180;el\u1a69\u1a6a\u1a6d\u42c6q;\u6257e\u0261\u1a74\0\0\u1a88rrow\u0100lr\u1a7c\u1a81eft;\u61baight;\u61bb\u0280RSacd\u1a92\u1a94\u1a96\u1a9a\u1a9f\xbb\u0f47;\u64c8st;\u629birc;\u629aash;\u629dnint;\u6a10id;\u6aefcir;\u69c2ubs\u0100;u\u1abb\u1abc\u6663it\xbb\u1abc\u02ec\u1ac7\u1ad4\u1afa\0\u1b0aon\u0100;e\u1acd\u1ace\u403a\u0100;q\xc7\xc6\u026d\u1ad9\0\0\u1ae2a\u0100;t\u1ade\u1adf\u402c;\u4040\u0180;fl\u1ae8\u1ae9\u1aeb\u6201\xee\u1160e\u0100mx\u1af1\u1af6ent\xbb\u1ae9e\xf3\u024d\u01e7\u1afe\0\u1b07\u0100;d\u12bb\u1b02ot;\u6a6dn\xf4\u0246\u0180fry\u1b10\u1b14\u1b17;\uc000\ud835\udd54o\xe4\u0254\u8100\xa9;s\u0155\u1b1dr;\u6117\u0100ao\u1b25\u1b29rr;\u61b5ss;\u6717\u0100cu\u1b32\u1b37r;\uc000\ud835\udcb8\u0100bp\u1b3c\u1b44\u0100;e\u1b41\u1b42\u6acf;\u6ad1\u0100;e\u1b49\u1b4a\u6ad0;\u6ad2dot;\u62ef\u0380delprvw\u1b60\u1b6c\u1b77\u1b82\u1bac\u1bd4\u1bf9arr\u0100lr\u1b68\u1b6a;\u6938;\u6935\u0270\u1b72\0\0\u1b75r;\u62dec;\u62dfarr\u0100;p\u1b7f\u1b80\u61b6;\u693d\u0300;bcdos\u1b8f\u1b90\u1b96\u1ba1\u1ba5\u1ba8\u622arcap;\u6a48\u0100au\u1b9b\u1b9ep;\u6a46p;\u6a4aot;\u628dr;\u6a45;\uc000\u222a\ufe00\u0200alrv\u1bb5\u1bbf\u1bde\u1be3rr\u0100;m\u1bbc\u1bbd\u61b7;\u693cy\u0180evw\u1bc7\u1bd4\u1bd8q\u0270\u1bce\0\0\u1bd2re\xe3\u1b73u\xe3\u1b75ee;\u62ceedge;\u62cfen\u803b\xa4\u40a4earrow\u0100lr\u1bee\u1bf3eft\xbb\u1b80ight\xbb\u1bbde\xe4\u1bdd\u0100ci\u1c01\u1c07onin\xf4\u01f7nt;\u6231lcty;\u632d\u0980AHabcdefhijlorstuwz\u1c38\u1c3b\u1c3f\u1c5d\u1c69\u1c75\u1c8a\u1c9e\u1cac\u1cb7\u1cfb\u1cff\u1d0d\u1d7b\u1d91\u1dab\u1dbb\u1dc6\u1dcdr\xf2\u0381ar;\u6965\u0200glrs\u1c48\u1c4d\u1c52\u1c54ger;\u6020eth;\u6138\xf2\u1133h\u0100;v\u1c5a\u1c5b\u6010\xbb\u090a\u016b\u1c61\u1c67arow;\u690fa\xe3\u0315\u0100ay\u1c6e\u1c73ron;\u410f;\u4434\u0180;ao\u0332\u1c7c\u1c84\u0100gr\u02bf\u1c81r;\u61catseq;\u6a77\u0180glm\u1c91\u1c94\u1c98\u803b\xb0\u40b0ta;\u43b4ptyv;\u69b1\u0100ir\u1ca3\u1ca8sht;\u697f;\uc000\ud835\udd21ar\u0100lr\u1cb3\u1cb5\xbb\u08dc\xbb\u101e\u0280aegsv\u1cc2\u0378\u1cd6\u1cdc\u1ce0m\u0180;os\u0326\u1cca\u1cd4nd\u0100;s\u0326\u1cd1uit;\u6666amma;\u43ddin;\u62f2\u0180;io\u1ce7\u1ce8\u1cf8\u40f7de\u8100\xf7;o\u1ce7\u1cf0ntimes;\u62c7n\xf8\u1cf7cy;\u4452c\u026f\u1d06\0\0\u1d0arn;\u631eop;\u630d\u0280lptuw\u1d18\u1d1d\u1d22\u1d49\u1d55lar;\u4024f;\uc000\ud835\udd55\u0280;emps\u030b\u1d2d\u1d37\u1d3d\u1d42q\u0100;d\u0352\u1d33ot;\u6251inus;\u6238lus;\u6214quare;\u62a1blebarwedg\xe5\xfan\u0180adh\u112e\u1d5d\u1d67ownarrow\xf3\u1c83arpoon\u0100lr\u1d72\u1d76ef\xf4\u1cb4igh\xf4\u1cb6\u0162\u1d7f\u1d85karo\xf7\u0f42\u026f\u1d8a\0\0\u1d8ern;\u631fop;\u630c\u0180cot\u1d98\u1da3\u1da6\u0100ry\u1d9d\u1da1;\uc000\ud835\udcb9;\u4455l;\u69f6rok;\u4111\u0100dr\u1db0\u1db4ot;\u62f1i\u0100;f\u1dba\u1816\u65bf\u0100ah\u1dc0\u1dc3r\xf2\u0429a\xf2\u0fa6angle;\u69a6\u0100ci\u1dd2\u1dd5y;\u445fgrarr;\u67ff\u0900Dacdefglmnopqrstux\u1e01\u1e09\u1e19\u1e38\u0578\u1e3c\u1e49\u1e61\u1e7e\u1ea5\u1eaf\u1ebd\u1ee1\u1f2a\u1f37\u1f44\u1f4e\u1f5a\u0100Do\u1e06\u1d34o\xf4\u1c89\u0100cs\u1e0e\u1e14ute\u803b\xe9\u40e9ter;\u6a6e\u0200aioy\u1e22\u1e27\u1e31\u1e36ron;\u411br\u0100;c\u1e2d\u1e2e\u6256\u803b\xea\u40ealon;\u6255;\u444dot;\u4117\u0100Dr\u1e41\u1e45ot;\u6252;\uc000\ud835\udd22\u0180;rs\u1e50\u1e51\u1e57\u6a9aave\u803b\xe8\u40e8\u0100;d\u1e5c\u1e5d\u6a96ot;\u6a98\u0200;ils\u1e6a\u1e6b\u1e72\u1e74\u6a99nters;\u63e7;\u6113\u0100;d\u1e79\u1e7a\u6a95ot;\u6a97\u0180aps\u1e85\u1e89\u1e97cr;\u4113ty\u0180;sv\u1e92\u1e93\u1e95\u6205et\xbb\u1e93p\u01001;\u1e9d\u1ea4\u0133\u1ea1\u1ea3;\u6004;\u6005\u6003\u0100gs\u1eaa\u1eac;\u414bp;\u6002\u0100gp\u1eb4\u1eb8on;\u4119f;\uc000\ud835\udd56\u0180als\u1ec4\u1ece\u1ed2r\u0100;s\u1eca\u1ecb\u62d5l;\u69e3us;\u6a71i\u0180;lv\u1eda\u1edb\u1edf\u43b5on\xbb\u1edb;\u43f5\u0200csuv\u1eea\u1ef3\u1f0b\u1f23\u0100io\u1eef\u1e31rc\xbb\u1e2e\u0269\u1ef9\0\0\u1efb\xed\u0548ant\u0100gl\u1f02\u1f06tr\xbb\u1e5dess\xbb\u1e7a\u0180aei\u1f12\u1f16\u1f1als;\u403dst;\u625fv\u0100;D\u0235\u1f20D;\u6a78parsl;\u69e5\u0100Da\u1f2f\u1f33ot;\u6253rr;\u6971\u0180cdi\u1f3e\u1f41\u1ef8r;\u612fo\xf4\u0352\u0100ah\u1f49\u1f4b;\u43b7\u803b\xf0\u40f0\u0100mr\u1f53\u1f57l\u803b\xeb\u40ebo;\u60ac\u0180cip\u1f61\u1f64\u1f67l;\u4021s\xf4\u056e\u0100eo\u1f6c\u1f74ctatio\xee\u0559nential\xe5\u0579\u09e1\u1f92\0\u1f9e\0\u1fa1\u1fa7\0\0\u1fc6\u1fcc\0\u1fd3\0\u1fe6\u1fea\u2000\0\u2008\u205allingdotse\xf1\u1e44y;\u4444male;\u6640\u0180ilr\u1fad\u1fb3\u1fc1lig;\u8000\ufb03\u0269\u1fb9\0\0\u1fbdg;\u8000\ufb00ig;\u8000\ufb04;\uc000\ud835\udd23lig;\u8000\ufb01lig;\uc000fj\u0180alt\u1fd9\u1fdc\u1fe1t;\u666dig;\u8000\ufb02ns;\u65b1of;\u4192\u01f0\u1fee\0\u1ff3f;\uc000\ud835\udd57\u0100ak\u05bf\u1ff7\u0100;v\u1ffc\u1ffd\u62d4;\u6ad9artint;\u6a0d\u0100ao\u200c\u2055\u0100cs\u2011\u2052\u03b1\u201a\u2030\u2038\u2045\u2048\0\u2050\u03b2\u2022\u2025\u2027\u202a\u202c\0\u202e\u803b\xbd\u40bd;\u6153\u803b\xbc\u40bc;\u6155;\u6159;\u615b\u01b3\u2034\0\u2036;\u6154;\u6156\u02b4\u203e\u2041\0\0\u2043\u803b\xbe\u40be;\u6157;\u615c5;\u6158\u01b6\u204c\0\u204e;\u615a;\u615d8;\u615el;\u6044wn;\u6322cr;\uc000\ud835\udcbb\u0880Eabcdefgijlnorstv\u2082\u2089\u209f\u20a5\u20b0\u20b4\u20f0\u20f5\u20fa\u20ff\u2103\u2112\u2138\u0317\u213e\u2152\u219e\u0100;l\u064d\u2087;\u6a8c\u0180cmp\u2090\u2095\u209dute;\u41f5ma\u0100;d\u209c\u1cda\u43b3;\u6a86reve;\u411f\u0100iy\u20aa\u20aerc;\u411d;\u4433ot;\u4121\u0200;lqs\u063e\u0642\u20bd\u20c9\u0180;qs\u063e\u064c\u20c4lan\xf4\u0665\u0200;cdl\u0665\u20d2\u20d5\u20e5c;\u6aa9ot\u0100;o\u20dc\u20dd\u6a80\u0100;l\u20e2\u20e3\u6a82;\u6a84\u0100;e\u20ea\u20ed\uc000\u22db\ufe00s;\u6a94r;\uc000\ud835\udd24\u0100;g\u0673\u061bmel;\u6137cy;\u4453\u0200;Eaj\u065a\u210c\u210e\u2110;\u6a92;\u6aa5;\u6aa4\u0200Eaes\u211b\u211d\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6a8arox\xbb\u2124\u0100;q\u212e\u212f\u6a88\u0100;q\u212e\u211bim;\u62e7pf;\uc000\ud835\udd58\u0100ci\u2143\u2146r;\u610am\u0180;el\u066b\u214e\u2150;\u6a8e;\u6a90\u8300>;cdlqr\u05ee\u2160\u216a\u216e\u2173\u2179\u0100ci\u2165\u2167;\u6aa7r;\u6a7aot;\u62d7Par;\u6995uest;\u6a7c\u0280adels\u2184\u216a\u2190\u0656\u219b\u01f0\u2189\0\u218epro\xf8\u209er;\u6978q\u0100lq\u063f\u2196les\xf3\u2088i\xed\u066b\u0100en\u21a3\u21adrtneqq;\uc000\u2269\ufe00\xc5\u21aa\u0500Aabcefkosy\u21c4\u21c7\u21f1\u21f5\u21fa\u2218\u221d\u222f\u2268\u227dr\xf2\u03a0\u0200ilmr\u21d0\u21d4\u21d7\u21dbrs\xf0\u1484f\xbb\u2024il\xf4\u06a9\u0100dr\u21e0\u21e4cy;\u444a\u0180;cw\u08f4\u21eb\u21efir;\u6948;\u61adar;\u610firc;\u4125\u0180alr\u2201\u220e\u2213rts\u0100;u\u2209\u220a\u6665it\xbb\u220alip;\u6026con;\u62b9r;\uc000\ud835\udd25s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223a\u223e\u2243\u225e\u2263rr;\u61fftht;\u623bk\u0100lr\u2249\u2253eftarrow;\u61a9ightarrow;\u61aaf;\uc000\ud835\udd59bar;\u6015\u0180clt\u226f\u2274\u2278r;\uc000\ud835\udcbdas\xe8\u21f4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xbb\u1c5b\u0ae1\u22a3\0\u22aa\0\u22b8\u22c5\u22ce\0\u22d5\u22f3\0\0\u22f8\u2322\u2367\u2362\u237f\0\u2386\u23aa\u23b4cute\u803b\xed\u40ed\u0180;iy\u0771\u22b0\u22b5rc\u803b\xee\u40ee;\u4438\u0100cx\u22bc\u22bfy;\u4435cl\u803b\xa1\u40a1\u0100fr\u039f\u22c9;\uc000\ud835\udd26rave\u803b\xec\u40ec\u0200;ino\u073e\u22dd\u22e9\u22ee\u0100in\u22e2\u22e6nt;\u6a0ct;\u622dfin;\u69dcta;\u6129lig;\u4133\u0180aop\u22fe\u231a\u231d\u0180cgt\u2305\u2308\u2317r;\u412b\u0180elp\u071f\u230f\u2313in\xe5\u078ear\xf4\u0720h;\u4131f;\u62b7ed;\u41b5\u0280;cfot\u04f4\u232c\u2331\u233d\u2341are;\u6105in\u0100;t\u2338\u2339\u621eie;\u69dddo\xf4\u2319\u0280;celp\u0757\u234c\u2350\u235b\u2361al;\u62ba\u0100gr\u2355\u2359er\xf3\u1563\xe3\u234darhk;\u6a17rod;\u6a3c\u0200cgpt\u236f\u2372\u2376\u237by;\u4451on;\u412ff;\uc000\ud835\udd5aa;\u43b9uest\u803b\xbf\u40bf\u0100ci\u238a\u238fr;\uc000\ud835\udcben\u0280;Edsv\u04f4\u239b\u239d\u23a1\u04f3;\u62f9ot;\u62f5\u0100;v\u23a6\u23a7\u62f4;\u62f3\u0100;i\u0777\u23aelde;\u4129\u01eb\u23b8\0\u23bccy;\u4456l\u803b\xef\u40ef\u0300cfmosu\u23cc\u23d7\u23dc\u23e1\u23e7\u23f5\u0100iy\u23d1\u23d5rc;\u4135;\u4439r;\uc000\ud835\udd27ath;\u4237pf;\uc000\ud835\udd5b\u01e3\u23ec\0\u23f1r;\uc000\ud835\udcbfrcy;\u4458kcy;\u4454\u0400acfghjos\u240b\u2416\u2422\u2427\u242d\u2431\u2435\u243bppa\u0100;v\u2413\u2414\u43ba;\u43f0\u0100ey\u241b\u2420dil;\u4137;\u443ar;\uc000\ud835\udd28reen;\u4138cy;\u4445cy;\u445cpf;\uc000\ud835\udd5ccr;\uc000\ud835\udcc0\u0b80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248d\u2491\u250e\u253d\u255a\u2580\u264e\u265e\u2665\u2679\u267d\u269a\u26b2\u26d8\u275d\u2768\u278b\u27c0\u2801\u2812\u0180art\u2477\u247a\u247cr\xf2\u09c6\xf2\u0395ail;\u691barr;\u690e\u0100;g\u0994\u248b;\u6a8bar;\u6962\u0963\u24a5\0\u24aa\0\u24b1\0\0\0\0\0\u24b5\u24ba\0\u24c6\u24c8\u24cd\0\u24f9ute;\u413amptyv;\u69b4ra\xee\u084cbda;\u43bbg\u0180;dl\u088e\u24c1\u24c3;\u6991\xe5\u088e;\u6a85uo\u803b\xab\u40abr\u0400;bfhlpst\u0899\u24de\u24e6\u24e9\u24eb\u24ee\u24f1\u24f5\u0100;f\u089d\u24e3s;\u691fs;\u691d\xeb\u2252p;\u61abl;\u6939im;\u6973l;\u61a2\u0180;ae\u24ff\u2500\u2504\u6aabil;\u6919\u0100;s\u2509\u250a\u6aad;\uc000\u2aad\ufe00\u0180abr\u2515\u2519\u251drr;\u690crk;\u6772\u0100ak\u2522\u252cc\u0100ek\u2528\u252a;\u407b;\u405b\u0100es\u2531\u2533;\u698bl\u0100du\u2539\u253b;\u698f;\u698d\u0200aeuy\u2546\u254b\u2556\u2558ron;\u413e\u0100di\u2550\u2554il;\u413c\xec\u08b0\xe2\u2529;\u443b\u0200cqrs\u2563\u2566\u256d\u257da;\u6936uo\u0100;r\u0e19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694bh;\u61b2\u0280;fgqs\u258b\u258c\u0989\u25f3\u25ff\u6264t\u0280ahlrt\u2598\u25a4\u25b7\u25c2\u25e8rrow\u0100;t\u0899\u25a1a\xe9\u24f6arpoon\u0100du\u25af\u25b4own\xbb\u045ap\xbb\u0966eftarrows;\u61c7ight\u0180ahs\u25cd\u25d6\u25derrow\u0100;s\u08f4\u08a7arpoon\xf3\u0f98quigarro\xf7\u21f0hreetimes;\u62cb\u0180;qs\u258b\u0993\u25falan\xf4\u09ac\u0280;cdgs\u09ac\u260a\u260d\u261d\u2628c;\u6aa8ot\u0100;o\u2614\u2615\u6a7f\u0100;r\u261a\u261b\u6a81;\u6a83\u0100;e\u2622\u2625\uc000\u22da\ufe00s;\u6a93\u0280adegs\u2633\u2639\u263d\u2649\u264bppro\xf8\u24c6ot;\u62d6q\u0100gq\u2643\u2645\xf4\u0989gt\xf2\u248c\xf4\u099bi\xed\u09b2\u0180ilr\u2655\u08e1\u265asht;\u697c;\uc000\ud835\udd29\u0100;E\u099c\u2663;\u6a91\u0161\u2669\u2676r\u0100du\u25b2\u266e\u0100;l\u0965\u2673;\u696alk;\u6584cy;\u4459\u0280;acht\u0a48\u2688\u268b\u2691\u2696r\xf2\u25c1orne\xf2\u1d08ard;\u696bri;\u65fa\u0100io\u269f\u26a4dot;\u4140ust\u0100;a\u26ac\u26ad\u63b0che\xbb\u26ad\u0200Eaes\u26bb\u26bd\u26c9\u26d4;\u6268p\u0100;p\u26c3\u26c4\u6a89rox\xbb\u26c4\u0100;q\u26ce\u26cf\u6a87\u0100;q\u26ce\u26bbim;\u62e6\u0400abnoptwz\u26e9\u26f4\u26f7\u271a\u272f\u2741\u2747\u2750\u0100nr\u26ee\u26f1g;\u67ecr;\u61fdr\xeb\u08c1g\u0180lmr\u26ff\u270d\u2714eft\u0100ar\u09e6\u2707ight\xe1\u09f2apsto;\u67fcight\xe1\u09fdparrow\u0100lr\u2725\u2729ef\xf4\u24edight;\u61ac\u0180afl\u2736\u2739\u273dr;\u6985;\uc000\ud835\udd5dus;\u6a2dimes;\u6a34\u0161\u274b\u274fst;\u6217\xe1\u134e\u0180;ef\u2757\u2758\u1800\u65cange\xbb\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277c\u2785\u2787r\xf2\u08a8orne\xf2\u1d8car\u0100;d\u0f98\u2783;\u696d;\u600eri;\u62bf\u0300achiqt\u2798\u279d\u0a40\u27a2\u27ae\u27bbquo;\u6039r;\uc000\ud835\udcc1m\u0180;eg\u09b2\u27aa\u27ac;\u6a8d;\u6a8f\u0100bu\u252a\u27b3o\u0100;r\u0e1f\u27b9;\u601arok;\u4142\u8400<;cdhilqr\u082b\u27d2\u2639\u27dc\u27e0\u27e5\u27ea\u27f0\u0100ci\u27d7\u27d9;\u6aa6r;\u6a79re\xe5\u25f2mes;\u62c9arr;\u6976uest;\u6a7b\u0100Pi\u27f5\u27f9ar;\u6996\u0180;ef\u2800\u092d\u181b\u65c3r\u0100du\u2807\u280dshar;\u694ahar;\u6966\u0100en\u2817\u2821rtneqq;\uc000\u2268\ufe00\xc5\u281e\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288e\u2893\u28a0\u28a5\u28a8\u28da\u28e2\u28e4\u0a83\u28f3\u2902Dot;\u623a\u0200clpr\u284e\u2852\u2863\u287dr\u803b\xaf\u40af\u0100et\u2857\u2859;\u6642\u0100;e\u285e\u285f\u6720se\xbb\u285f\u0100;s\u103b\u2868to\u0200;dlu\u103b\u2873\u2877\u287bow\xee\u048cef\xf4\u090f\xf0\u13d1ker;\u65ae\u0100oy\u2887\u288cmma;\u6a29;\u443cash;\u6014asuredangle\xbb\u1626r;\uc000\ud835\udd2ao;\u6127\u0180cdn\u28af\u28b4\u28c9ro\u803b\xb5\u40b5\u0200;acd\u1464\u28bd\u28c0\u28c4s\xf4\u16a7ir;\u6af0ot\u80bb\xb7\u01b5us\u0180;bd\u28d2\u1903\u28d3\u6212\u0100;u\u1d3c\u28d8;\u6a2a\u0163\u28de\u28e1p;\u6adb\xf2\u2212\xf0\u0a81\u0100dp\u28e9\u28eeels;\u62a7f;\uc000\ud835\udd5e\u0100ct\u28f8\u28fdr;\uc000\ud835\udcc2pos\xbb\u159d\u0180;lm\u2909\u290a\u290d\u43bctimap;\u62b8\u0c00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297e\u2989\u2998\u29da\u29e9\u2a15\u2a1a\u2a58\u2a5d\u2a83\u2a95\u2aa4\u2aa8\u2b04\u2b07\u2b44\u2b7f\u2bae\u2c34\u2c67\u2c7c\u2ce9\u0100gt\u2947\u294b;\uc000\u22d9\u0338\u0100;v\u2950\u0bcf\uc000\u226b\u20d2\u0180elt\u295a\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61cdightarrow;\u61ce;\uc000\u22d8\u0338\u0100;v\u297b\u0c47\uc000\u226a\u20d2ightarrow;\u61cf\u0100Dd\u298e\u2993ash;\u62afash;\u62ae\u0280bcnpt\u29a3\u29a7\u29ac\u29b1\u29ccla\xbb\u02deute;\u4144g;\uc000\u2220\u20d2\u0280;Eiop\u0d84\u29bc\u29c0\u29c5\u29c8;\uc000\u2a70\u0338d;\uc000\u224b\u0338s;\u4149ro\xf8\u0d84ur\u0100;a\u29d3\u29d4\u666el\u0100;s\u29d3\u0b38\u01f3\u29df\0\u29e3p\u80bb\xa0\u0b37mp\u0100;e\u0bf9\u0c00\u0280aeouy\u29f4\u29fe\u2a03\u2a10\u2a13\u01f0\u29f9\0\u29fb;\u6a43on;\u4148dil;\u4146ng\u0100;d\u0d7e\u2a0aot;\uc000\u2a6d\u0338p;\u6a42;\u443dash;\u6013\u0380;Aadqsx\u0b92\u2a29\u2a2d\u2a3b\u2a41\u2a45\u2a50rr;\u61d7r\u0100hr\u2a33\u2a36k;\u6924\u0100;o\u13f2\u13f0ot;\uc000\u2250\u0338ui\xf6\u0b63\u0100ei\u2a4a\u2a4ear;\u6928\xed\u0b98ist\u0100;s\u0ba0\u0b9fr;\uc000\ud835\udd2b\u0200Eest\u0bc5\u2a66\u2a79\u2a7c\u0180;qs\u0bbc\u2a6d\u0be1\u0180;qs\u0bbc\u0bc5\u2a74lan\xf4\u0be2i\xed\u0bea\u0100;r\u0bb6\u2a81\xbb\u0bb7\u0180Aap\u2a8a\u2a8d\u2a91r\xf2\u2971rr;\u61aear;\u6af2\u0180;sv\u0f8d\u2a9c\u0f8c\u0100;d\u2aa1\u2aa2\u62fc;\u62facy;\u445a\u0380AEadest\u2ab7\u2aba\u2abe\u2ac2\u2ac5\u2af6\u2af9r\xf2\u2966;\uc000\u2266\u0338rr;\u619ar;\u6025\u0200;fqs\u0c3b\u2ace\u2ae3\u2aeft\u0100ar\u2ad4\u2ad9rro\xf7\u2ac1ightarro\xf7\u2a90\u0180;qs\u0c3b\u2aba\u2aealan\xf4\u0c55\u0100;s\u0c55\u2af4\xbb\u0c36i\xed\u0c5d\u0100;r\u0c35\u2afei\u0100;e\u0c1a\u0c25i\xe4\u0d90\u0100pt\u2b0c\u2b11f;\uc000\ud835\udd5f\u8180\xac;in\u2b19\u2b1a\u2b36\u40acn\u0200;Edv\u0b89\u2b24\u2b28\u2b2e;\uc000\u22f9\u0338ot;\uc000\u22f5\u0338\u01e1\u0b89\u2b33\u2b35;\u62f7;\u62f6i\u0100;v\u0cb8\u2b3c\u01e1\u0cb8\u2b41\u2b43;\u62fe;\u62fd\u0180aor\u2b4b\u2b63\u2b69r\u0200;ast\u0b7b\u2b55\u2b5a\u2b5flle\xec\u0b7bl;\uc000\u2afd\u20e5;\uc000\u2202\u0338lint;\u6a14\u0180;ce\u0c92\u2b70\u2b73u\xe5\u0ca5\u0100;c\u0c98\u2b78\u0100;e\u0c92\u2b7d\xf1\u0c98\u0200Aait\u2b88\u2b8b\u2b9d\u2ba7r\xf2\u2988rr\u0180;cw\u2b94\u2b95\u2b99\u619b;\uc000\u2933\u0338;\uc000\u219d\u0338ghtarrow\xbb\u2b95ri\u0100;e\u0ccb\u0cd6\u0380chimpqu\u2bbd\u2bcd\u2bd9\u2b04\u0b78\u2be4\u2bef\u0200;cer\u0d32\u2bc6\u0d37\u2bc9u\xe5\u0d45;\uc000\ud835\udcc3ort\u026d\u2b05\0\0\u2bd6ar\xe1\u2b56m\u0100;e\u0d6e\u2bdf\u0100;q\u0d74\u0d73su\u0100bp\u2beb\u2bed\xe5\u0cf8\xe5\u0d0b\u0180bcp\u2bf6\u2c11\u2c19\u0200;Ees\u2bff\u2c00\u0d22\u2c04\u6284;\uc000\u2ac5\u0338et\u0100;e\u0d1b\u2c0bq\u0100;q\u0d23\u2c00c\u0100;e\u0d32\u2c17\xf1\u0d38\u0200;Ees\u2c22\u2c23\u0d5f\u2c27\u6285;\uc000\u2ac6\u0338et\u0100;e\u0d58\u2c2eq\u0100;q\u0d60\u2c23\u0200gilr\u2c3d\u2c3f\u2c45\u2c47\xec\u0bd7lde\u803b\xf1\u40f1\xe7\u0c43iangle\u0100lr\u2c52\u2c5ceft\u0100;e\u0c1a\u2c5a\xf1\u0c26ight\u0100;e\u0ccb\u2c65\xf1\u0cd7\u0100;m\u2c6c\u2c6d\u43bd\u0180;es\u2c74\u2c75\u2c79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2c8f\u2c94\u2c99\u2c9e\u2ca3\u2cb0\u2cb6\u2cd3\u2ce3ash;\u62adarr;\u6904p;\uc000\u224d\u20d2ash;\u62ac\u0100et\u2ca8\u2cac;\uc000\u2265\u20d2;\uc000>\u20d2nfin;\u69de\u0180Aet\u2cbd\u2cc1\u2cc5rr;\u6902;\uc000\u2264\u20d2\u0100;r\u2cca\u2ccd\uc000<\u20d2ie;\uc000\u22b4\u20d2\u0100At\u2cd8\u2cdcrr;\u6903rie;\uc000\u22b5\u20d2im;\uc000\u223c\u20d2\u0180Aan\u2cf0\u2cf4\u2d02rr;\u61d6r\u0100hr\u2cfa\u2cfdk;\u6923\u0100;o\u13e7\u13e5ear;\u6927\u1253\u1a95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2d2d\0\u2d38\u2d48\u2d60\u2d65\u2d72\u2d84\u1b07\0\0\u2d8d\u2dab\0\u2dc8\u2dce\0\u2ddc\u2e19\u2e2b\u2e3e\u2e43\u0100cs\u2d31\u1a97ute\u803b\xf3\u40f3\u0100iy\u2d3c\u2d45r\u0100;c\u1a9e\u2d42\u803b\xf4\u40f4;\u443e\u0280abios\u1aa0\u2d52\u2d57\u01c8\u2d5alac;\u4151v;\u6a38old;\u69bclig;\u4153\u0100cr\u2d69\u2d6dir;\u69bf;\uc000\ud835\udd2c\u036f\u2d79\0\0\u2d7c\0\u2d82n;\u42dbave\u803b\xf2\u40f2;\u69c1\u0100bm\u2d88\u0df4ar;\u69b5\u0200acit\u2d95\u2d98\u2da5\u2da8r\xf2\u1a80\u0100ir\u2d9d\u2da0r;\u69beoss;\u69bbn\xe5\u0e52;\u69c0\u0180aei\u2db1\u2db5\u2db9cr;\u414dga;\u43c9\u0180cdn\u2dc0\u2dc5\u01cdron;\u43bf;\u69b6pf;\uc000\ud835\udd60\u0180ael\u2dd4\u2dd7\u01d2r;\u69b7rp;\u69b9\u0380;adiosv\u2dea\u2deb\u2dee\u2e08\u2e0d\u2e10\u2e16\u6228r\xf2\u1a86\u0200;efm\u2df7\u2df8\u2e02\u2e05\u6a5dr\u0100;o\u2dfe\u2dff\u6134f\xbb\u2dff\u803b\xaa\u40aa\u803b\xba\u40bagof;\u62b6r;\u6a56lope;\u6a57;\u6a5b\u0180clo\u2e1f\u2e21\u2e27\xf2\u2e01ash\u803b\xf8\u40f8l;\u6298i\u016c\u2e2f\u2e34de\u803b\xf5\u40f5es\u0100;a\u01db\u2e3as;\u6a36ml\u803b\xf6\u40f6bar;\u633d\u0ae1\u2e5e\0\u2e7d\0\u2e80\u2e9d\0\u2ea2\u2eb9\0\0\u2ecb\u0e9c\0\u2f13\0\0\u2f2b\u2fbc\0\u2fc8r\u0200;ast\u0403\u2e67\u2e72\u0e85\u8100\xb6;l\u2e6d\u2e6e\u40b6le\xec\u0403\u0269\u2e78\0\0\u2e7bm;\u6af3;\u6afdy;\u443fr\u0280cimpt\u2e8b\u2e8f\u2e93\u1865\u2e97nt;\u4025od;\u402eil;\u6030enk;\u6031r;\uc000\ud835\udd2d\u0180imo\u2ea8\u2eb0\u2eb4\u0100;v\u2ead\u2eae\u43c6;\u43d5ma\xf4\u0a76ne;\u660e\u0180;tv\u2ebf\u2ec0\u2ec8\u43c0chfork\xbb\u1ffd;\u43d6\u0100au\u2ecf\u2edfn\u0100ck\u2ed5\u2eddk\u0100;h\u21f4\u2edb;\u610e\xf6\u21f4s\u0480;abcdemst\u2ef3\u2ef4\u1908\u2ef9\u2efd\u2f04\u2f06\u2f0a\u2f0e\u402bcir;\u6a23ir;\u6a22\u0100ou\u1d40\u2f02;\u6a25;\u6a72n\u80bb\xb1\u0e9dim;\u6a26wo;\u6a27\u0180ipu\u2f19\u2f20\u2f25ntint;\u6a15f;\uc000\ud835\udd61nd\u803b\xa3\u40a3\u0500;Eaceinosu\u0ec8\u2f3f\u2f41\u2f44\u2f47\u2f81\u2f89\u2f92\u2f7e\u2fb6;\u6ab3p;\u6ab7u\xe5\u0ed9\u0100;c\u0ece\u2f4c\u0300;acens\u0ec8\u2f59\u2f5f\u2f66\u2f68\u2f7eppro\xf8\u2f43urlye\xf1\u0ed9\xf1\u0ece\u0180aes\u2f6f\u2f76\u2f7approx;\u6ab9qq;\u6ab5im;\u62e8i\xed\u0edfme\u0100;s\u2f88\u0eae\u6032\u0180Eas\u2f78\u2f90\u2f7a\xf0\u2f75\u0180dfp\u0eec\u2f99\u2faf\u0180als\u2fa0\u2fa5\u2faalar;\u632eine;\u6312urf;\u6313\u0100;t\u0efb\u2fb4\xef\u0efbrel;\u62b0\u0100ci\u2fc0\u2fc5r;\uc000\ud835\udcc5;\u43c8ncsp;\u6008\u0300fiopsu\u2fda\u22e2\u2fdf\u2fe5\u2feb\u2ff1r;\uc000\ud835\udd2epf;\uc000\ud835\udd62rime;\u6057cr;\uc000\ud835\udcc6\u0180aeo\u2ff8\u3009\u3013t\u0100ei\u2ffe\u3005rnion\xf3\u06b0nt;\u6a16st\u0100;e\u3010\u3011\u403f\xf1\u1f19\xf4\u0f14\u0a80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30e0\u310e\u312b\u3147\u3162\u3172\u318e\u3206\u3215\u3224\u3229\u3258\u326e\u3272\u3290\u32b0\u32b7\u0180art\u3047\u304a\u304cr\xf2\u10b3\xf2\u03ddail;\u691car\xf2\u1c65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307f\u308f\u3094\u30cc\u0100eu\u306d\u3071;\uc000\u223d\u0331te;\u4155i\xe3\u116emptyv;\u69b3g\u0200;del\u0fd1\u3089\u308b\u308d;\u6992;\u69a5\xe5\u0fd1uo\u803b\xbb\u40bbr\u0580;abcfhlpstw\u0fdc\u30ac\u30af\u30b7\u30b9\u30bc\u30be\u30c0\u30c3\u30c7\u30cap;\u6975\u0100;f\u0fe0\u30b4s;\u6920;\u6933s;\u691e\xeb\u225d\xf0\u272el;\u6945im;\u6974l;\u61a3;\u619d\u0100ai\u30d1\u30d5il;\u691ao\u0100;n\u30db\u30dc\u6236al\xf3\u0f1e\u0180abr\u30e7\u30ea\u30eer\xf2\u17e5rk;\u6773\u0100ak\u30f3\u30fdc\u0100ek\u30f9\u30fb;\u407d;\u405d\u0100es\u3102\u3104;\u698cl\u0100du\u310a\u310c;\u698e;\u6990\u0200aeuy\u3117\u311c\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xec\u0ff2\xe2\u30fa;\u4440\u0200clqs\u3134\u3137\u313d\u3144a;\u6937dhar;\u6969uo\u0100;r\u020e\u020dh;\u61b3\u0180acg\u314e\u315f\u0f44l\u0200;ips\u0f78\u3158\u315b\u109cn\xe5\u10bbar\xf4\u0fa9t;\u65ad\u0180ilr\u3169\u1023\u316esht;\u697d;\uc000\ud835\udd2f\u0100ao\u3177\u3186r\u0100du\u317d\u317f\xbb\u047b\u0100;l\u1091\u3184;\u696c\u0100;v\u318b\u318c\u43c1;\u43f1\u0180gns\u3195\u31f9\u31fcht\u0300ahlrst\u31a4\u31b0\u31c2\u31d8\u31e4\u31eerrow\u0100;t\u0fdc\u31ada\xe9\u30c8arpoon\u0100du\u31bb\u31bfow\xee\u317ep\xbb\u1092eft\u0100ah\u31ca\u31d0rrow\xf3\u0feaarpoon\xf3\u0551ightarrows;\u61c9quigarro\xf7\u30cbhreetimes;\u62ccg;\u42daingdotse\xf1\u1f32\u0180ahm\u320d\u3210\u3213r\xf2\u0feaa\xf2\u0551;\u600foust\u0100;a\u321e\u321f\u63b1che\xbb\u321fmid;\u6aee\u0200abpt\u3232\u323d\u3240\u3252\u0100nr\u3237\u323ag;\u67edr;\u61fer\xeb\u1003\u0180afl\u3247\u324a\u324er;\u6986;\uc000\ud835\udd63us;\u6a2eimes;\u6a35\u0100ap\u325d\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6a12ar\xf2\u31e3\u0200achq\u327b\u3280\u10bc\u3285quo;\u603ar;\uc000\ud835\udcc7\u0100bu\u30fb\u328ao\u0100;r\u0214\u0213\u0180hir\u3297\u329b\u32a0re\xe5\u31f8mes;\u62cai\u0200;efl\u32aa\u1059\u1821\u32ab\u65b9tri;\u69celuhar;\u6968;\u611e\u0d61\u32d5\u32db\u32df\u332c\u3338\u3371\0\u337a\u33a4\0\0\u33ec\u33f0\0\u3428\u3448\u345a\u34ad\u34b1\u34ca\u34f1\0\u3616\0\0\u3633cute;\u415bqu\xef\u27ba\u0500;Eaceinpsy\u11ed\u32f3\u32f5\u32ff\u3302\u330b\u330f\u331f\u3326\u3329;\u6ab4\u01f0\u32fa\0\u32fc;\u6ab8on;\u4161u\xe5\u11fe\u0100;d\u11f3\u3307il;\u415frc;\u415d\u0180Eas\u3316\u3318\u331b;\u6ab6p;\u6abaim;\u62e9olint;\u6a13i\xed\u1204;\u4441ot\u0180;be\u3334\u1d47\u3335\u62c5;\u6a66\u0380Aacmstx\u3346\u334a\u3357\u335b\u335e\u3363\u336drr;\u61d8r\u0100hr\u3350\u3352\xeb\u2228\u0100;o\u0a36\u0a34t\u803b\xa7\u40a7i;\u403bwar;\u6929m\u0100in\u3369\xf0nu\xf3\xf1t;\u6736r\u0100;o\u3376\u2055\uc000\ud835\udd30\u0200acoy\u3382\u3386\u3391\u33a0rp;\u666f\u0100hy\u338b\u338fcy;\u4449;\u4448rt\u026d\u3399\0\0\u339ci\xe4\u1464ara\xec\u2e6f\u803b\xad\u40ad\u0100gm\u33a8\u33b4ma\u0180;fv\u33b1\u33b2\u33b2\u43c3;\u43c2\u0400;deglnpr\u12ab\u33c5\u33c9\u33ce\u33d6\u33de\u33e1\u33e6ot;\u6a6a\u0100;q\u12b1\u12b0\u0100;E\u33d3\u33d4\u6a9e;\u6aa0\u0100;E\u33db\u33dc\u6a9d;\u6a9fe;\u6246lus;\u6a24arr;\u6972ar\xf2\u113d\u0200aeit\u33f8\u3408\u340f\u3417\u0100ls\u33fd\u3404lsetm\xe9\u336ahp;\u6a33parsl;\u69e4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341c\u341d\u6aaa\u0100;s\u3422\u3423\u6aac;\uc000\u2aac\ufe00\u0180flp\u342e\u3433\u3442tcy;\u444c\u0100;b\u3438\u3439\u402f\u0100;a\u343e\u343f\u69c4r;\u633ff;\uc000\ud835\udd64a\u0100dr\u344d\u0402es\u0100;u\u3454\u3455\u6660it\xbb\u3455\u0180csu\u3460\u3479\u349f\u0100au\u3465\u346fp\u0100;s\u1188\u346b;\uc000\u2293\ufe00p\u0100;s\u11b4\u3475;\uc000\u2294\ufe00u\u0100bp\u347f\u348f\u0180;es\u1197\u119c\u3486et\u0100;e\u1197\u348d\xf1\u119d\u0180;es\u11a8\u11ad\u3496et\u0100;e\u11a8\u349d\xf1\u11ae\u0180;af\u117b\u34a6\u05b0r\u0165\u34ab\u05b1\xbb\u117car\xf2\u1148\u0200cemt\u34b9\u34be\u34c2\u34c5r;\uc000\ud835\udcc8tm\xee\xf1i\xec\u3415ar\xe6\u11be\u0100ar\u34ce\u34d5r\u0100;f\u34d4\u17bf\u6606\u0100an\u34da\u34edight\u0100ep\u34e3\u34eapsilo\xee\u1ee0h\xe9\u2eafs\xbb\u2852\u0280bcmnp\u34fb\u355e\u1209\u358b\u358e\u0480;Edemnprs\u350e\u350f\u3511\u3515\u351e\u3523\u352c\u3531\u3536\u6282;\u6ac5ot;\u6abd\u0100;d\u11da\u351aot;\u6ac3ult;\u6ac1\u0100Ee\u3528\u352a;\u6acb;\u628alus;\u6abfarr;\u6979\u0180eiu\u353d\u3552\u3555t\u0180;en\u350e\u3545\u354bq\u0100;q\u11da\u350feq\u0100;q\u352b\u3528m;\u6ac7\u0100bp\u355a\u355c;\u6ad5;\u6ad3c\u0300;acens\u11ed\u356c\u3572\u3579\u357b\u3326ppro\xf8\u32faurlye\xf1\u11fe\xf1\u11f3\u0180aes\u3582\u3588\u331bppro\xf8\u331aq\xf1\u3317g;\u666a\u0680123;Edehlmnps\u35a9\u35ac\u35af\u121c\u35b2\u35b4\u35c0\u35c9\u35d5\u35da\u35df\u35e8\u35ed\u803b\xb9\u40b9\u803b\xb2\u40b2\u803b\xb3\u40b3;\u6ac6\u0100os\u35b9\u35bct;\u6abeub;\u6ad8\u0100;d\u1222\u35c5ot;\u6ac4s\u0100ou\u35cf\u35d2l;\u67c9b;\u6ad7arr;\u697bult;\u6ac2\u0100Ee\u35e4\u35e6;\u6acc;\u628blus;\u6ac0\u0180eiu\u35f4\u3609\u360ct\u0180;en\u121c\u35fc\u3602q\u0100;q\u1222\u35b2eq\u0100;q\u35e7\u35e4m;\u6ac8\u0100bp\u3611\u3613;\u6ad4;\u6ad6\u0180Aan\u361c\u3620\u362drr;\u61d9r\u0100hr\u3626\u3628\xeb\u222e\u0100;o\u0a2b\u0a29war;\u692alig\u803b\xdf\u40df\u0be1\u3651\u365d\u3660\u12ce\u3673\u3679\0\u367e\u36c2\0\0\0\0\0\u36db\u3703\0\u3709\u376c\0\0\0\u3787\u0272\u3656\0\0\u365bget;\u6316;\u43c4r\xeb\u0e5f\u0180aey\u3666\u366b\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uc000\ud835\udd31\u0200eiko\u3686\u369d\u36b5\u36bc\u01f2\u368b\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369b\u43b8ym;\u43d1\u0100cn\u36a2\u36b2k\u0100as\u36a8\u36aeppro\xf8\u12c1im\xbb\u12acs\xf0\u129e\u0100as\u36ba\u36ae\xf0\u12c1rn\u803b\xfe\u40fe\u01ec\u031f\u36c6\u22e7es\u8180\xd7;bd\u36cf\u36d0\u36d8\u40d7\u0100;a\u190f\u36d5r;\u6a31;\u6a30\u0180eps\u36e1\u36e3\u3700\xe1\u2a4d\u0200;bcf\u0486\u36ec\u36f0\u36f4ot;\u6336ir;\u6af1\u0100;o\u36f9\u36fc\uc000\ud835\udd65rk;\u6ada\xe1\u3362rime;\u6034\u0180aip\u370f\u3712\u3764d\xe5\u1248\u0380adempst\u3721\u374d\u3740\u3751\u3757\u375c\u375fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65b5own\xbb\u1dbbeft\u0100;e\u2800\u373e\xf1\u092e;\u625cight\u0100;e\u32aa\u374b\xf1\u105aot;\u65ecinus;\u6a3alus;\u6a39b;\u69cdime;\u6a3bezium;\u63e2\u0180cht\u3772\u377d\u3781\u0100ry\u3777\u377b;\uc000\ud835\udcc9;\u4446cy;\u445brok;\u4167\u0100io\u378b\u378ex\xf4\u1777head\u0100lr\u3797\u37a0eftarro\xf7\u084fightarrow\xbb\u0f5d\u0900AHabcdfghlmoprstuw\u37d0\u37d3\u37d7\u37e4\u37f0\u37fc\u380e\u381c\u3823\u3834\u3851\u385d\u386b\u38a9\u38cc\u38d2\u38ea\u38f6r\xf2\u03edar;\u6963\u0100cr\u37dc\u37e2ute\u803b\xfa\u40fa\xf2\u1150r\u01e3\u37ea\0\u37edy;\u445eve;\u416d\u0100iy\u37f5\u37farc\u803b\xfb\u40fb;\u4443\u0180abh\u3803\u3806\u380br\xf2\u13adlac;\u4171a\xf2\u13c3\u0100ir\u3813\u3818sht;\u697e;\uc000\ud835\udd32rave\u803b\xf9\u40f9\u0161\u3827\u3831r\u0100lr\u382c\u382e\xbb\u0957\xbb\u1083lk;\u6580\u0100ct\u3839\u384d\u026f\u383f\0\0\u384arn\u0100;e\u3845\u3846\u631cr\xbb\u3846op;\u630fri;\u65f8\u0100al\u3856\u385acr;\u416b\u80bb\xa8\u0349\u0100gp\u3862\u3866on;\u4173f;\uc000\ud835\udd66\u0300adhlsu\u114b\u3878\u387d\u1372\u3891\u38a0own\xe1\u13b3arpoon\u0100lr\u3888\u388cef\xf4\u382digh\xf4\u382fi\u0180;hl\u3899\u389a\u389c\u43c5\xbb\u13faon\xbb\u389aparrows;\u61c8\u0180cit\u38b0\u38c4\u38c8\u026f\u38b6\0\0\u38c1rn\u0100;e\u38bc\u38bd\u631dr\xbb\u38bdop;\u630eng;\u416fri;\u65f9cr;\uc000\ud835\udcca\u0180dir\u38d9\u38dd\u38e2ot;\u62f0lde;\u4169i\u0100;f\u3730\u38e8\xbb\u1813\u0100am\u38ef\u38f2r\xf2\u38a8l\u803b\xfc\u40fcangle;\u69a7\u0780ABDacdeflnoprsz\u391c\u391f\u3929\u392d\u39b5\u39b8\u39bd\u39df\u39e4\u39e8\u39f3\u39f9\u39fd\u3a01\u3a20r\xf2\u03f7ar\u0100;v\u3926\u3927\u6ae8;\u6ae9as\xe8\u03e1\u0100nr\u3932\u3937grt;\u699c\u0380eknprst\u34e3\u3946\u394b\u3952\u395d\u3964\u3996app\xe1\u2415othin\xe7\u1e96\u0180hir\u34eb\u2ec8\u3959op\xf4\u2fb5\u0100;h\u13b7\u3962\xef\u318d\u0100iu\u3969\u396dgm\xe1\u33b3\u0100bp\u3972\u3984setneq\u0100;q\u397d\u3980\uc000\u228a\ufe00;\uc000\u2acb\ufe00setneq\u0100;q\u398f\u3992\uc000\u228b\ufe00;\uc000\u2acc\ufe00\u0100hr\u399b\u399fet\xe1\u369ciangle\u0100lr\u39aa\u39afeft\xbb\u0925ight\xbb\u1051y;\u4432ash\xbb\u1036\u0180elr\u39c4\u39d2\u39d7\u0180;be\u2dea\u39cb\u39cfar;\u62bbq;\u625alip;\u62ee\u0100bt\u39dc\u1468a\xf2\u1469r;\uc000\ud835\udd33tr\xe9\u39aesu\u0100bp\u39ef\u39f1\xbb\u0d1c\xbb\u0d59pf;\uc000\ud835\udd67ro\xf0\u0efbtr\xe9\u39b4\u0100cu\u3a06\u3a0br;\uc000\ud835\udccb\u0100bp\u3a10\u3a18n\u0100Ee\u3980\u3a16\xbb\u397en\u0100Ee\u3992\u3a1e\xbb\u3990igzag;\u699a\u0380cefoprs\u3a36\u3a3b\u3a56\u3a5b\u3a54\u3a61\u3a6airc;\u4175\u0100di\u3a40\u3a51\u0100bg\u3a45\u3a49ar;\u6a5fe\u0100;q\u15fa\u3a4f;\u6259erp;\u6118r;\uc000\ud835\udd34pf;\uc000\ud835\udd68\u0100;e\u1479\u3a66at\xe8\u1479cr;\uc000\ud835\udccc\u0ae3\u178e\u3a87\0\u3a8b\0\u3a90\u3a9b\0\0\u3a9d\u3aa8\u3aab\u3aaf\0\0\u3ac3\u3ace\0\u3ad8\u17dc\u17dftr\xe9\u17d1r;\uc000\ud835\udd35\u0100Aa\u3a94\u3a97r\xf2\u03c3r\xf2\u09f6;\u43be\u0100Aa\u3aa1\u3aa4r\xf2\u03b8r\xf2\u09eba\xf0\u2713is;\u62fb\u0180dpt\u17a4\u3ab5\u3abe\u0100fl\u3aba\u17a9;\uc000\ud835\udd69im\xe5\u17b2\u0100Aa\u3ac7\u3acar\xf2\u03cer\xf2\u0a01\u0100cq\u3ad2\u17b8r;\uc000\ud835\udccd\u0100pt\u17d6\u3adcr\xe9\u17d4\u0400acefiosu\u3af0\u3afd\u3b08\u3b0c\u3b11\u3b15\u3b1b\u3b21c\u0100uy\u3af6\u3afbte\u803b\xfd\u40fd;\u444f\u0100iy\u3b02\u3b06rc;\u4177;\u444bn\u803b\xa5\u40a5r;\uc000\ud835\udd36cy;\u4457pf;\uc000\ud835\udd6acr;\uc000\ud835\udcce\u0100cm\u3b26\u3b29y;\u444el\u803b\xff\u40ff\u0500acdefhiosw\u3b42\u3b48\u3b54\u3b58\u3b64\u3b69\u3b6d\u3b74\u3b7a\u3b80cute;\u417a\u0100ay\u3b4d\u3b52ron;\u417e;\u4437ot;\u417c\u0100et\u3b5d\u3b61tr\xe6\u155fa;\u43b6r;\uc000\ud835\udd37cy;\u4436grarr;\u61ddpf;\uc000\ud835\udd6bcr;\uc000\ud835\udccf\u0100jn\u3b85\u3b87;\u600dj;\u600c" + .split("") + .map((c) => c.charCodeAt(0))); +//# sourceMappingURL=decode-data-html.js.map \ No newline at end of file diff --git a/node_modules/entities/lib/esm/generated/decode-data-html.js.map b/node_modules/entities/lib/esm/generated/decode-data-html.js.map new file mode 100644 index 0000000..c4b1e6b --- /dev/null +++ b/node_modules/entities/lib/esm/generated/decode-data-html.js.map @@ -0,0 +1 @@ +{"version":3,"file":"decode-data-html.js","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["generated/decode-data-html.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAE9C,eAAe,IAAI,WAAW;AAC1B,kBAAkB;AAClB,268CAA268C;KACt68C,KAAK,CAAC,EAAE,CAAC;KACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CACnC,CAAC"} \ No newline at end of file diff --git a/node_modules/entities/lib/esm/generated/decode-data-xml.d.ts b/node_modules/entities/lib/esm/generated/decode-data-xml.d.ts new file mode 100644 index 0000000..4a3f533 --- /dev/null +++ b/node_modules/entities/lib/esm/generated/decode-data-xml.d.ts @@ -0,0 +1,3 @@ +declare const _default: Uint16Array; +export default _default; +//# sourceMappingURL=decode-data-xml.d.ts.map \ No newline at end of file diff --git a/node_modules/entities/lib/esm/generated/decode-data-xml.d.ts.map b/node_modules/entities/lib/esm/generated/decode-data-xml.d.ts.map new file mode 100644 index 0000000..be2a9a2 --- /dev/null +++ b/node_modules/entities/lib/esm/generated/decode-data-xml.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"decode-data-xml.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["generated/decode-data-xml.ts"],"names":[],"mappings":";AAEA,wBAKE"} \ No newline at end of file diff --git a/node_modules/entities/lib/esm/generated/decode-data-xml.js b/node_modules/entities/lib/esm/generated/decode-data-xml.js new file mode 100644 index 0000000..b01dec7 --- /dev/null +++ b/node_modules/entities/lib/esm/generated/decode-data-xml.js @@ -0,0 +1,7 @@ +// Generated using scripts/write-decode-map.ts +export default new Uint16Array( +// prettier-ignore +"\u0200aglq\t\x15\x18\x1b\u026d\x0f\0\0\x12p;\u4026os;\u4027t;\u403et;\u403cuot;\u4022" + .split("") + .map((c) => c.charCodeAt(0))); +//# sourceMappingURL=decode-data-xml.js.map \ No newline at end of file diff --git a/node_modules/entities/lib/esm/generated/decode-data-xml.js.map b/node_modules/entities/lib/esm/generated/decode-data-xml.js.map new file mode 100644 index 0000000..86f7150 --- /dev/null +++ b/node_modules/entities/lib/esm/generated/decode-data-xml.js.map @@ -0,0 +1 @@ +{"version":3,"file":"decode-data-xml.js","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["generated/decode-data-xml.ts"],"names":[],"mappings":"AAAA,8CAA8C;AAE9C,eAAe,IAAI,WAAW;AAC1B,kBAAkB;AAClB,uFAAuF;KAClF,KAAK,CAAC,EAAE,CAAC;KACT,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CACnC,CAAC"} \ No newline at end of file diff --git a/node_modules/entities/lib/esm/generated/encode-html.d.ts b/node_modules/entities/lib/esm/generated/encode-html.d.ts new file mode 100644 index 0000000..0704827 --- /dev/null +++ b/node_modules/entities/lib/esm/generated/encode-html.d.ts @@ -0,0 +1,8 @@ +type EncodeTrieNode = string | { + v?: string; + n: number | Map; + o?: string; +}; +declare const _default: Map; +export default _default; +//# sourceMappingURL=encode-html.d.ts.map \ No newline at end of file diff --git a/node_modules/entities/lib/esm/generated/encode-html.d.ts.map b/node_modules/entities/lib/esm/generated/encode-html.d.ts.map new file mode 100644 index 0000000..e665a6e --- /dev/null +++ b/node_modules/entities/lib/esm/generated/encode-html.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"encode-html.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["generated/encode-html.ts"],"names":[],"mappings":"AAEA,KAAK,cAAc,GACb,MAAM,GACN;IAAE,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;;AAY1E,wBAAo+tB"} \ No newline at end of file diff --git a/node_modules/entities/lib/esm/generated/encode-html.js b/node_modules/entities/lib/esm/generated/encode-html.js new file mode 100644 index 0000000..9f1858b --- /dev/null +++ b/node_modules/entities/lib/esm/generated/encode-html.js @@ -0,0 +1,10 @@ +// Generated using scripts/write-encode-map.ts +function restoreDiff(arr) { + for (let i = 1; i < arr.length; i++) { + arr[i][0] += arr[i - 1][0] + 1; + } + return arr; +} +// prettier-ignore +export default new Map(/* #__PURE__ */ restoreDiff([[9, " "], [0, " "], [22, "!"], [0, """], [0, "#"], [0, "$"], [0, "%"], [0, "&"], [0, "'"], [0, "("], [0, ")"], [0, "*"], [0, "+"], [0, ","], [1, "."], [0, "/"], [10, ":"], [0, ";"], [0, { v: "<", n: 8402, o: "<⃒" }], [0, { v: "=", n: 8421, o: "=⃥" }], [0, { v: ">", n: 8402, o: ">⃒" }], [0, "?"], [0, "@"], [26, "["], [0, "\"], [0, "]"], [0, "^"], [0, "_"], [0, "`"], [5, { n: 106, o: "fj" }], [20, "{"], [0, "|"], [0, "}"], [34, " "], [0, "¡"], [0, "¢"], [0, "£"], [0, "¤"], [0, "¥"], [0, "¦"], [0, "§"], [0, "¨"], [0, "©"], [0, "ª"], [0, "«"], [0, "¬"], [0, "­"], [0, "®"], [0, "¯"], [0, "°"], [0, "±"], [0, "²"], [0, "³"], [0, "´"], [0, "µ"], [0, "¶"], [0, "·"], [0, "¸"], [0, "¹"], [0, "º"], [0, "»"], [0, "¼"], [0, "½"], [0, "¾"], [0, "¿"], [0, "À"], [0, "Á"], [0, "Â"], [0, "Ã"], [0, "Ä"], [0, "Å"], [0, "Æ"], [0, "Ç"], [0, "È"], [0, "É"], [0, "Ê"], [0, "Ë"], [0, "Ì"], [0, "Í"], [0, "Î"], [0, "Ï"], [0, "Ð"], [0, "Ñ"], [0, "Ò"], [0, "Ó"], [0, "Ô"], [0, "Õ"], [0, "Ö"], [0, "×"], [0, "Ø"], [0, "Ù"], [0, "Ú"], [0, "Û"], [0, "Ü"], [0, "Ý"], [0, "Þ"], [0, "ß"], [0, "à"], [0, "á"], [0, "â"], [0, "ã"], [0, "ä"], [0, "å"], [0, "æ"], [0, "ç"], [0, "è"], [0, "é"], [0, "ê"], [0, "ë"], [0, "ì"], [0, "í"], [0, "î"], [0, "ï"], [0, "ð"], [0, "ñ"], [0, "ò"], [0, "ó"], [0, "ô"], [0, "õ"], [0, "ö"], [0, "÷"], [0, "ø"], [0, "ù"], [0, "ú"], [0, "û"], [0, "ü"], [0, "ý"], [0, "þ"], [0, "ÿ"], [0, "Ā"], [0, "ā"], [0, "Ă"], [0, "ă"], [0, "Ą"], [0, "ą"], [0, "Ć"], [0, "ć"], [0, "Ĉ"], [0, "ĉ"], [0, "Ċ"], [0, "ċ"], [0, "Č"], [0, "č"], [0, "Ď"], [0, "ď"], [0, "Đ"], [0, "đ"], [0, "Ē"], [0, "ē"], [2, "Ė"], [0, "ė"], [0, "Ę"], [0, "ę"], [0, "Ě"], [0, "ě"], [0, "Ĝ"], [0, "ĝ"], [0, "Ğ"], [0, "ğ"], [0, "Ġ"], [0, "ġ"], [0, "Ģ"], [1, "Ĥ"], [0, "ĥ"], [0, "Ħ"], [0, "ħ"], [0, "Ĩ"], [0, "ĩ"], [0, "Ī"], [0, "ī"], [2, "Į"], [0, "į"], [0, "İ"], [0, "ı"], [0, "IJ"], [0, "ij"], [0, "Ĵ"], [0, "ĵ"], [0, "Ķ"], [0, "ķ"], [0, "ĸ"], [0, "Ĺ"], [0, "ĺ"], [0, "Ļ"], [0, "ļ"], [0, "Ľ"], [0, "ľ"], [0, "Ŀ"], [0, "ŀ"], [0, "Ł"], [0, "ł"], [0, "Ń"], [0, "ń"], [0, "Ņ"], [0, "ņ"], [0, "Ň"], [0, "ň"], [0, "ʼn"], [0, "Ŋ"], [0, "ŋ"], [0, "Ō"], [0, "ō"], [2, "Ő"], [0, "ő"], [0, "Œ"], [0, "œ"], [0, "Ŕ"], [0, "ŕ"], [0, "Ŗ"], [0, "ŗ"], [0, "Ř"], [0, "ř"], [0, "Ś"], [0, "ś"], [0, "Ŝ"], [0, "ŝ"], [0, "Ş"], [0, "ş"], [0, "Š"], [0, "š"], [0, "Ţ"], [0, "ţ"], [0, "Ť"], [0, "ť"], [0, "Ŧ"], [0, "ŧ"], [0, "Ũ"], [0, "ũ"], [0, "Ū"], [0, "ū"], [0, "Ŭ"], [0, "ŭ"], [0, "Ů"], [0, "ů"], [0, "Ű"], [0, "ű"], [0, "Ų"], [0, "ų"], [0, "Ŵ"], [0, "ŵ"], [0, "Ŷ"], [0, "ŷ"], [0, "Ÿ"], [0, "Ź"], [0, "ź"], [0, "Ż"], [0, "ż"], [0, "Ž"], [0, "ž"], [19, "ƒ"], [34, "Ƶ"], [63, "ǵ"], [65, "ȷ"], [142, "ˆ"], [0, "ˇ"], [16, "˘"], [0, "˙"], [0, "˚"], [0, "˛"], [0, "˜"], [0, "˝"], [51, "̑"], [127, "Α"], [0, "Β"], [0, "Γ"], [0, "Δ"], [0, "Ε"], [0, "Ζ"], [0, "Η"], [0, "Θ"], [0, "Ι"], [0, "Κ"], [0, "Λ"], [0, "Μ"], [0, "Ν"], [0, "Ξ"], [0, "Ο"], [0, "Π"], [0, "Ρ"], [1, "Σ"], [0, "Τ"], [0, "Υ"], [0, "Φ"], [0, "Χ"], [0, "Ψ"], [0, "Ω"], [7, "α"], [0, "β"], [0, "γ"], [0, "δ"], [0, "ε"], [0, "ζ"], [0, "η"], [0, "θ"], [0, "ι"], [0, "κ"], [0, "λ"], [0, "μ"], [0, "ν"], [0, "ξ"], [0, "ο"], [0, "π"], [0, "ρ"], [0, "ς"], [0, "σ"], [0, "τ"], [0, "υ"], [0, "φ"], [0, "χ"], [0, "ψ"], [0, "ω"], [7, "ϑ"], [0, "ϒ"], [2, "ϕ"], [0, "ϖ"], [5, "Ϝ"], [0, "ϝ"], [18, "ϰ"], [0, "ϱ"], [3, "ϵ"], [0, "϶"], [10, "Ё"], [0, "Ђ"], [0, "Ѓ"], [0, "Є"], [0, "Ѕ"], [0, "І"], [0, "Ї"], [0, "Ј"], [0, "Љ"], [0, "Њ"], [0, "Ћ"], [0, "Ќ"], [1, "Ў"], [0, "Џ"], [0, "А"], [0, "Б"], [0, "В"], [0, "Г"], [0, "Д"], [0, "Е"], [0, "Ж"], [0, "З"], [0, "И"], [0, "Й"], [0, "К"], [0, "Л"], [0, "М"], [0, "Н"], [0, "О"], [0, "П"], [0, "Р"], [0, "С"], [0, "Т"], [0, "У"], [0, "Ф"], [0, "Х"], [0, "Ц"], [0, "Ч"], [0, "Ш"], [0, "Щ"], [0, "Ъ"], [0, "Ы"], [0, "Ь"], [0, "Э"], [0, "Ю"], [0, "Я"], [0, "а"], [0, "б"], [0, "в"], [0, "г"], [0, "д"], [0, "е"], [0, "ж"], [0, "з"], [0, "и"], [0, "й"], [0, "к"], [0, "л"], [0, "м"], [0, "н"], [0, "о"], [0, "п"], [0, "р"], [0, "с"], [0, "т"], [0, "у"], [0, "ф"], [0, "х"], [0, "ц"], [0, "ч"], [0, "ш"], [0, "щ"], [0, "ъ"], [0, "ы"], [0, "ь"], [0, "э"], [0, "ю"], [0, "я"], [1, "ё"], [0, "ђ"], [0, "ѓ"], [0, "є"], [0, "ѕ"], [0, "і"], [0, "ї"], [0, "ј"], [0, "љ"], [0, "њ"], [0, "ћ"], [0, "ќ"], [1, "ў"], [0, "џ"], [7074, " "], [0, " "], [0, " "], [0, " "], [1, " "], [0, " "], [0, " "], [0, " "], [0, "​"], [0, "‌"], [0, "‍"], [0, "‎"], [0, "‏"], [0, "‐"], [2, "–"], [0, "—"], [0, "―"], [0, "‖"], [1, "‘"], [0, "’"], [0, "‚"], [1, "“"], [0, "”"], [0, "„"], [1, "†"], [0, "‡"], [0, "•"], [2, "‥"], [0, "…"], [9, "‰"], [0, "‱"], [0, "′"], [0, "″"], [0, "‴"], [0, "‵"], [3, "‹"], [0, "›"], [3, "‾"], [2, "⁁"], [1, "⁃"], [0, "⁄"], [10, "⁏"], [7, "⁗"], [7, { v: " ", n: 8202, o: "  " }], [0, "⁠"], [0, "⁡"], [0, "⁢"], [0, "⁣"], [72, "€"], [46, "⃛"], [0, "⃜"], [37, "ℂ"], [2, "℅"], [4, "ℊ"], [0, "ℋ"], [0, "ℌ"], [0, "ℍ"], [0, "ℎ"], [0, "ℏ"], [0, "ℐ"], [0, "ℑ"], [0, "ℒ"], [0, "ℓ"], [1, "ℕ"], [0, "№"], [0, "℗"], [0, "℘"], [0, "ℙ"], [0, "ℚ"], [0, "ℛ"], [0, "ℜ"], [0, "ℝ"], [0, "℞"], [3, "™"], [1, "ℤ"], [2, "℧"], [0, "ℨ"], [0, "℩"], [2, "ℬ"], [0, "ℭ"], [1, "ℯ"], [0, "ℰ"], [0, "ℱ"], [1, "ℳ"], [0, "ℴ"], [0, "ℵ"], [0, "ℶ"], [0, "ℷ"], [0, "ℸ"], [12, "ⅅ"], [0, "ⅆ"], [0, "ⅇ"], [0, "ⅈ"], [10, "⅓"], [0, "⅔"], [0, "⅕"], [0, "⅖"], [0, "⅗"], [0, "⅘"], [0, "⅙"], [0, "⅚"], [0, "⅛"], [0, "⅜"], [0, "⅝"], [0, "⅞"], [49, "←"], [0, "↑"], [0, "→"], [0, "↓"], [0, "↔"], [0, "↕"], [0, "↖"], [0, "↗"], [0, "↘"], [0, "↙"], [0, "↚"], [0, "↛"], [1, { v: "↝", n: 824, o: "↝̸" }], [0, "↞"], [0, "↟"], [0, "↠"], [0, "↡"], [0, "↢"], [0, "↣"], [0, "↤"], [0, "↥"], [0, "↦"], [0, "↧"], [1, "↩"], [0, "↪"], [0, "↫"], [0, "↬"], [0, "↭"], [0, "↮"], [1, "↰"], [0, "↱"], [0, "↲"], [0, "↳"], [1, "↵"], [0, "↶"], [0, "↷"], [2, "↺"], [0, "↻"], [0, "↼"], [0, "↽"], [0, "↾"], [0, "↿"], [0, "⇀"], [0, "⇁"], [0, "⇂"], [0, "⇃"], [0, "⇄"], [0, "⇅"], [0, "⇆"], [0, "⇇"], [0, "⇈"], [0, "⇉"], [0, "⇊"], [0, "⇋"], [0, "⇌"], [0, "⇍"], [0, "⇎"], [0, "⇏"], [0, "⇐"], [0, "⇑"], [0, "⇒"], [0, "⇓"], [0, "⇔"], [0, "⇕"], [0, "⇖"], [0, "⇗"], [0, "⇘"], [0, "⇙"], [0, "⇚"], [0, "⇛"], [1, "⇝"], [6, "⇤"], [0, "⇥"], [15, "⇵"], [7, "⇽"], [0, "⇾"], [0, "⇿"], [0, "∀"], [0, "∁"], [0, { v: "∂", n: 824, o: "∂̸" }], [0, "∃"], [0, "∄"], [0, "∅"], [1, "∇"], [0, "∈"], [0, "∉"], [1, "∋"], [0, "∌"], [2, "∏"], [0, "∐"], [0, "∑"], [0, "−"], [0, "∓"], [0, "∔"], [1, "∖"], [0, "∗"], [0, "∘"], [1, "√"], [2, "∝"], [0, "∞"], [0, "∟"], [0, { v: "∠", n: 8402, o: "∠⃒" }], [0, "∡"], [0, "∢"], [0, "∣"], [0, "∤"], [0, "∥"], [0, "∦"], [0, "∧"], [0, "∨"], [0, { v: "∩", n: 65024, o: "∩︀" }], [0, { v: "∪", n: 65024, o: "∪︀" }], [0, "∫"], [0, "∬"], [0, "∭"], [0, "∮"], [0, "∯"], [0, "∰"], [0, "∱"], [0, "∲"], [0, "∳"], [0, "∴"], [0, "∵"], [0, "∶"], [0, "∷"], [0, "∸"], [1, "∺"], [0, "∻"], [0, { v: "∼", n: 8402, o: "∼⃒" }], [0, { v: "∽", n: 817, o: "∽̱" }], [0, { v: "∾", n: 819, o: "∾̳" }], [0, "∿"], [0, "≀"], [0, "≁"], [0, { v: "≂", n: 824, o: "≂̸" }], [0, "≃"], [0, "≄"], [0, "≅"], [0, "≆"], [0, "≇"], [0, "≈"], [0, "≉"], [0, "≊"], [0, { v: "≋", n: 824, o: "≋̸" }], [0, "≌"], [0, { v: "≍", n: 8402, o: "≍⃒" }], [0, { v: "≎", n: 824, o: "≎̸" }], [0, { v: "≏", n: 824, o: "≏̸" }], [0, { v: "≐", n: 824, o: "≐̸" }], [0, "≑"], [0, "≒"], [0, "≓"], [0, "≔"], [0, "≕"], [0, "≖"], [0, "≗"], [1, "≙"], [0, "≚"], [1, "≜"], [2, "≟"], [0, "≠"], [0, { v: "≡", n: 8421, o: "≡⃥" }], [0, "≢"], [1, { v: "≤", n: 8402, o: "≤⃒" }], [0, { v: "≥", n: 8402, o: "≥⃒" }], [0, { v: "≦", n: 824, o: "≦̸" }], [0, { v: "≧", n: 824, o: "≧̸" }], [0, { v: "≨", n: 65024, o: "≨︀" }], [0, { v: "≩", n: 65024, o: "≩︀" }], [0, { v: "≪", n: new Map(/* #__PURE__ */ restoreDiff([[824, "≪̸"], [7577, "≪⃒"]])) }], [0, { v: "≫", n: new Map(/* #__PURE__ */ restoreDiff([[824, "≫̸"], [7577, "≫⃒"]])) }], [0, "≬"], [0, "≭"], [0, "≮"], [0, "≯"], [0, "≰"], [0, "≱"], [0, "≲"], [0, "≳"], [0, "≴"], [0, "≵"], [0, "≶"], [0, "≷"], [0, "≸"], [0, "≹"], [0, "≺"], [0, "≻"], [0, "≼"], [0, "≽"], [0, "≾"], [0, { v: "≿", n: 824, o: "≿̸" }], [0, "⊀"], [0, "⊁"], [0, { v: "⊂", n: 8402, o: "⊂⃒" }], [0, { v: "⊃", n: 8402, o: "⊃⃒" }], [0, "⊄"], [0, "⊅"], [0, "⊆"], [0, "⊇"], [0, "⊈"], [0, "⊉"], [0, { v: "⊊", n: 65024, o: "⊊︀" }], [0, { v: "⊋", n: 65024, o: "⊋︀" }], [1, "⊍"], [0, "⊎"], [0, { v: "⊏", n: 824, o: "⊏̸" }], [0, { v: "⊐", n: 824, o: "⊐̸" }], [0, "⊑"], [0, "⊒"], [0, { v: "⊓", n: 65024, o: "⊓︀" }], [0, { v: "⊔", n: 65024, o: "⊔︀" }], [0, "⊕"], [0, "⊖"], [0, "⊗"], [0, "⊘"], [0, "⊙"], [0, "⊚"], [0, "⊛"], [1, "⊝"], [0, "⊞"], [0, "⊟"], [0, "⊠"], [0, "⊡"], [0, "⊢"], [0, "⊣"], [0, "⊤"], [0, "⊥"], [1, "⊧"], [0, "⊨"], [0, "⊩"], [0, "⊪"], [0, "⊫"], [0, "⊬"], [0, "⊭"], [0, "⊮"], [0, "⊯"], [0, "⊰"], [1, "⊲"], [0, "⊳"], [0, { v: "⊴", n: 8402, o: "⊴⃒" }], [0, { v: "⊵", n: 8402, o: "⊵⃒" }], [0, "⊶"], [0, "⊷"], [0, "⊸"], [0, "⊹"], [0, "⊺"], [0, "⊻"], [1, "⊽"], [0, "⊾"], [0, "⊿"], [0, "⋀"], [0, "⋁"], [0, "⋂"], [0, "⋃"], [0, "⋄"], [0, "⋅"], [0, "⋆"], [0, "⋇"], [0, "⋈"], [0, "⋉"], [0, "⋊"], [0, "⋋"], [0, "⋌"], [0, "⋍"], [0, "⋎"], [0, "⋏"], [0, "⋐"], [0, "⋑"], [0, "⋒"], [0, "⋓"], [0, "⋔"], [0, "⋕"], [0, "⋖"], [0, "⋗"], [0, { v: "⋘", n: 824, o: "⋘̸" }], [0, { v: "⋙", n: 824, o: "⋙̸" }], [0, { v: "⋚", n: 65024, o: "⋚︀" }], [0, { v: "⋛", n: 65024, o: "⋛︀" }], [2, "⋞"], [0, "⋟"], [0, "⋠"], [0, "⋡"], [0, "⋢"], [0, "⋣"], [2, "⋦"], [0, "⋧"], [0, "⋨"], [0, "⋩"], [0, "⋪"], [0, "⋫"], [0, "⋬"], [0, "⋭"], [0, "⋮"], [0, "⋯"], [0, "⋰"], [0, "⋱"], [0, "⋲"], [0, "⋳"], [0, "⋴"], [0, { v: "⋵", n: 824, o: "⋵̸" }], [0, "⋶"], [0, "⋷"], [1, { v: "⋹", n: 824, o: "⋹̸" }], [0, "⋺"], [0, "⋻"], [0, "⋼"], [0, "⋽"], [0, "⋾"], [6, "⌅"], [0, "⌆"], [1, "⌈"], [0, "⌉"], [0, "⌊"], [0, "⌋"], [0, "⌌"], [0, "⌍"], [0, "⌎"], [0, "⌏"], [0, "⌐"], [1, "⌒"], [0, "⌓"], [1, "⌕"], [0, "⌖"], [5, "⌜"], [0, "⌝"], [0, "⌞"], [0, "⌟"], [2, "⌢"], [0, "⌣"], [9, "⌭"], [0, "⌮"], [7, "⌶"], [6, "⌽"], [1, "⌿"], [60, "⍼"], [51, "⎰"], [0, "⎱"], [2, "⎴"], [0, "⎵"], [0, "⎶"], [37, "⏜"], [0, "⏝"], [0, "⏞"], [0, "⏟"], [2, "⏢"], [4, "⏧"], [59, "␣"], [164, "Ⓢ"], [55, "─"], [1, "│"], [9, "┌"], [3, "┐"], [3, "└"], [3, "┘"], [3, "├"], [7, "┤"], [7, "┬"], [7, "┴"], [7, "┼"], [19, "═"], [0, "║"], [0, "╒"], [0, "╓"], [0, "╔"], [0, "╕"], [0, "╖"], [0, "╗"], [0, "╘"], [0, "╙"], [0, "╚"], [0, "╛"], [0, "╜"], [0, "╝"], [0, "╞"], [0, "╟"], [0, "╠"], [0, "╡"], [0, "╢"], [0, "╣"], [0, "╤"], [0, "╥"], [0, "╦"], [0, "╧"], [0, "╨"], [0, "╩"], [0, "╪"], [0, "╫"], [0, "╬"], [19, "▀"], [3, "▄"], [3, "█"], [8, "░"], [0, "▒"], [0, "▓"], [13, "□"], [8, "▪"], [0, "▫"], [1, "▭"], [0, "▮"], [2, "▱"], [1, "△"], [0, "▴"], [0, "▵"], [2, "▸"], [0, "▹"], [3, "▽"], [0, "▾"], [0, "▿"], [2, "◂"], [0, "◃"], [6, "◊"], [0, "○"], [32, "◬"], [2, "◯"], [8, "◸"], [0, "◹"], [0, "◺"], [0, "◻"], [0, "◼"], [8, "★"], [0, "☆"], [7, "☎"], [49, "♀"], [1, "♂"], [29, "♠"], [2, "♣"], [1, "♥"], [0, "♦"], [3, "♪"], [2, "♭"], [0, "♮"], [0, "♯"], [163, "✓"], [3, "✗"], [8, "✠"], [21, "✶"], [33, "❘"], [25, "❲"], [0, "❳"], [84, "⟈"], [0, "⟉"], [28, "⟦"], [0, "⟧"], [0, "⟨"], [0, "⟩"], [0, "⟪"], [0, "⟫"], [0, "⟬"], [0, "⟭"], [7, "⟵"], [0, "⟶"], [0, "⟷"], [0, "⟸"], [0, "⟹"], [0, "⟺"], [1, "⟼"], [2, "⟿"], [258, "⤂"], [0, "⤃"], [0, "⤄"], [0, "⤅"], [6, "⤌"], [0, "⤍"], [0, "⤎"], [0, "⤏"], [0, "⤐"], [0, "⤑"], [0, "⤒"], [0, "⤓"], [2, "⤖"], [2, "⤙"], [0, "⤚"], [0, "⤛"], [0, "⤜"], [0, "⤝"], [0, "⤞"], [0, "⤟"], [0, "⤠"], [2, "⤣"], [0, "⤤"], [0, "⤥"], [0, "⤦"], [0, "⤧"], [0, "⤨"], [0, "⤩"], [0, "⤪"], [8, { v: "⤳", n: 824, o: "⤳̸" }], [1, "⤵"], [0, "⤶"], [0, "⤷"], [0, "⤸"], [0, "⤹"], [2, "⤼"], [0, "⤽"], [7, "⥅"], [2, "⥈"], [0, "⥉"], [0, "⥊"], [0, "⥋"], [2, "⥎"], [0, "⥏"], [0, "⥐"], [0, "⥑"], [0, "⥒"], [0, "⥓"], [0, "⥔"], [0, "⥕"], [0, "⥖"], [0, "⥗"], [0, "⥘"], [0, "⥙"], [0, "⥚"], [0, "⥛"], [0, "⥜"], [0, "⥝"], [0, "⥞"], [0, "⥟"], [0, "⥠"], [0, "⥡"], [0, "⥢"], [0, "⥣"], [0, "⥤"], [0, "⥥"], [0, "⥦"], [0, "⥧"], [0, "⥨"], [0, "⥩"], [0, "⥪"], [0, "⥫"], [0, "⥬"], [0, "⥭"], [0, "⥮"], [0, "⥯"], [0, "⥰"], [0, "⥱"], [0, "⥲"], [0, "⥳"], [0, "⥴"], [0, "⥵"], [0, "⥶"], [1, "⥸"], [0, "⥹"], [1, "⥻"], [0, "⥼"], [0, "⥽"], [0, "⥾"], [0, "⥿"], [5, "⦅"], [0, "⦆"], [4, "⦋"], [0, "⦌"], [0, "⦍"], [0, "⦎"], [0, "⦏"], [0, "⦐"], [0, "⦑"], [0, "⦒"], [0, "⦓"], [0, "⦔"], [0, "⦕"], [0, "⦖"], [3, "⦚"], [1, "⦜"], [0, "⦝"], [6, "⦤"], [0, "⦥"], [0, "⦦"], [0, "⦧"], [0, "⦨"], [0, "⦩"], [0, "⦪"], [0, "⦫"], [0, "⦬"], [0, "⦭"], [0, "⦮"], [0, "⦯"], [0, "⦰"], [0, "⦱"], [0, "⦲"], [0, "⦳"], [0, "⦴"], [0, "⦵"], [0, "⦶"], [0, "⦷"], [1, "⦹"], [1, "⦻"], [0, "⦼"], [1, "⦾"], [0, "⦿"], [0, "⧀"], [0, "⧁"], [0, "⧂"], [0, "⧃"], [0, "⧄"], [0, "⧅"], [3, "⧉"], [3, "⧍"], [0, "⧎"], [0, { v: "⧏", n: 824, o: "⧏̸" }], [0, { v: "⧐", n: 824, o: "⧐̸" }], [11, "⧜"], [0, "⧝"], [0, "⧞"], [4, "⧣"], [0, "⧤"], [0, "⧥"], [5, "⧫"], [8, "⧴"], [1, "⧶"], [9, "⨀"], [0, "⨁"], [0, "⨂"], [1, "⨄"], [1, "⨆"], [5, "⨌"], [0, "⨍"], [2, "⨐"], [0, "⨑"], [0, "⨒"], [0, "⨓"], [0, "⨔"], [0, "⨕"], [0, "⨖"], [0, "⨗"], [10, "⨢"], [0, "⨣"], [0, "⨤"], [0, "⨥"], [0, "⨦"], [0, "⨧"], [1, "⨩"], [0, "⨪"], [2, "⨭"], [0, "⨮"], [0, "⨯"], [0, "⨰"], [0, "⨱"], [1, "⨳"], [0, "⨴"], [0, "⨵"], [0, "⨶"], [0, "⨷"], [0, "⨸"], [0, "⨹"], [0, "⨺"], [0, "⨻"], [0, "⨼"], [2, "⨿"], [0, "⩀"], [1, "⩂"], [0, "⩃"], [0, "⩄"], [0, "⩅"], [0, "⩆"], [0, "⩇"], [0, "⩈"], [0, "⩉"], [0, "⩊"], [0, "⩋"], [0, "⩌"], [0, "⩍"], [2, "⩐"], [2, "⩓"], [0, "⩔"], [0, "⩕"], [0, "⩖"], [0, "⩗"], [0, "⩘"], [1, "⩚"], [0, "⩛"], [0, "⩜"], [0, "⩝"], [1, "⩟"], [6, "⩦"], [3, "⩪"], [2, { v: "⩭", n: 824, o: "⩭̸" }], [0, "⩮"], [0, "⩯"], [0, { v: "⩰", n: 824, o: "⩰̸" }], [0, "⩱"], [0, "⩲"], [0, "⩳"], [0, "⩴"], [0, "⩵"], [1, "⩷"], [0, "⩸"], [0, "⩹"], [0, "⩺"], [0, "⩻"], [0, "⩼"], [0, { v: "⩽", n: 824, o: "⩽̸" }], [0, { v: "⩾", n: 824, o: "⩾̸" }], [0, "⩿"], [0, "⪀"], [0, "⪁"], [0, "⪂"], [0, "⪃"], [0, "⪄"], [0, "⪅"], [0, "⪆"], [0, "⪇"], [0, "⪈"], [0, "⪉"], [0, "⪊"], [0, "⪋"], [0, "⪌"], [0, "⪍"], [0, "⪎"], [0, "⪏"], [0, "⪐"], [0, "⪑"], [0, "⪒"], [0, "⪓"], [0, "⪔"], [0, "⪕"], [0, "⪖"], [0, "⪗"], [0, "⪘"], [0, "⪙"], [0, "⪚"], [2, "⪝"], [0, "⪞"], [0, "⪟"], [0, "⪠"], [0, { v: "⪡", n: 824, o: "⪡̸" }], [0, { v: "⪢", n: 824, o: "⪢̸" }], [1, "⪤"], [0, "⪥"], [0, "⪦"], [0, "⪧"], [0, "⪨"], [0, "⪩"], [0, "⪪"], [0, "⪫"], [0, { v: "⪬", n: 65024, o: "⪬︀" }], [0, { v: "⪭", n: 65024, o: "⪭︀" }], [0, "⪮"], [0, { v: "⪯", n: 824, o: "⪯̸" }], [0, { v: "⪰", n: 824, o: "⪰̸" }], [2, "⪳"], [0, "⪴"], [0, "⪵"], [0, "⪶"], [0, "⪷"], [0, "⪸"], [0, "⪹"], [0, "⪺"], [0, "⪻"], [0, "⪼"], [0, "⪽"], [0, "⪾"], [0, "⪿"], [0, "⫀"], [0, "⫁"], [0, "⫂"], [0, "⫃"], [0, "⫄"], [0, { v: "⫅", n: 824, o: "⫅̸" }], [0, { v: "⫆", n: 824, o: "⫆̸" }], [0, "⫇"], [0, "⫈"], [2, { v: "⫋", n: 65024, o: "⫋︀" }], [0, { v: "⫌", n: 65024, o: "⫌︀" }], [2, "⫏"], [0, "⫐"], [0, "⫑"], [0, "⫒"], [0, "⫓"], [0, "⫔"], [0, "⫕"], [0, "⫖"], [0, "⫗"], [0, "⫘"], [0, "⫙"], [0, "⫚"], [0, "⫛"], [8, "⫤"], [1, "⫦"], [0, "⫧"], [0, "⫨"], [0, "⫩"], [1, "⫫"], [0, "⫬"], [0, "⫭"], [0, "⫮"], [0, "⫯"], [0, "⫰"], [0, "⫱"], [0, "⫲"], [0, "⫳"], [9, { v: "⫽", n: 8421, o: "⫽⃥" }], [44343, { n: new Map(/* #__PURE__ */ restoreDiff([[56476, "𝒜"], [1, "𝒞"], [0, "𝒟"], [2, "𝒢"], [2, "𝒥"], [0, "𝒦"], [2, "𝒩"], [0, "𝒪"], [0, "𝒫"], [0, "𝒬"], [1, "𝒮"], [0, "𝒯"], [0, "𝒰"], [0, "𝒱"], [0, "𝒲"], [0, "𝒳"], [0, "𝒴"], [0, "𝒵"], [0, "𝒶"], [0, "𝒷"], [0, "𝒸"], [0, "𝒹"], [1, "𝒻"], [1, "𝒽"], [0, "𝒾"], [0, "𝒿"], [0, "𝓀"], [0, "𝓁"], [0, "𝓂"], [0, "𝓃"], [1, "𝓅"], [0, "𝓆"], [0, "𝓇"], [0, "𝓈"], [0, "𝓉"], [0, "𝓊"], [0, "𝓋"], [0, "𝓌"], [0, "𝓍"], [0, "𝓎"], [0, "𝓏"], [52, "𝔄"], [0, "𝔅"], [1, "𝔇"], [0, "𝔈"], [0, "𝔉"], [0, "𝔊"], [2, "𝔍"], [0, "𝔎"], [0, "𝔏"], [0, "𝔐"], [0, "𝔑"], [0, "𝔒"], [0, "𝔓"], [0, "𝔔"], [1, "𝔖"], [0, "𝔗"], [0, "𝔘"], [0, "𝔙"], [0, "𝔚"], [0, "𝔛"], [0, "𝔜"], [1, "𝔞"], [0, "𝔟"], [0, "𝔠"], [0, "𝔡"], [0, "𝔢"], [0, "𝔣"], [0, "𝔤"], [0, "𝔥"], [0, "𝔦"], [0, "𝔧"], [0, "𝔨"], [0, "𝔩"], [0, "𝔪"], [0, "𝔫"], [0, "𝔬"], [0, "𝔭"], [0, "𝔮"], [0, "𝔯"], [0, "𝔰"], [0, "𝔱"], [0, "𝔲"], [0, "𝔳"], [0, "𝔴"], [0, "𝔵"], [0, "𝔶"], [0, "𝔷"], [0, "𝔸"], [0, "𝔹"], [1, "𝔻"], [0, "𝔼"], [0, "𝔽"], [0, "𝔾"], [1, "𝕀"], [0, "𝕁"], [0, "𝕂"], [0, "𝕃"], [0, "𝕄"], [1, "𝕆"], [3, "𝕊"], [0, "𝕋"], [0, "𝕌"], [0, "𝕍"], [0, "𝕎"], [0, "𝕏"], [0, "𝕐"], [1, "𝕒"], [0, "𝕓"], [0, "𝕔"], [0, "𝕕"], [0, "𝕖"], [0, "𝕗"], [0, "𝕘"], [0, "𝕙"], [0, "𝕚"], [0, "𝕛"], [0, "𝕜"], [0, "𝕝"], [0, "𝕞"], [0, "𝕟"], [0, "𝕠"], [0, "𝕡"], [0, "𝕢"], [0, "𝕣"], [0, "𝕤"], [0, "𝕥"], [0, "𝕦"], [0, "𝕧"], [0, "𝕨"], [0, "𝕩"], [0, "𝕪"], [0, "𝕫"]])) }], [8906, "ff"], [0, "fi"], [0, "fl"], [0, "ffi"], [0, "ffl"]])); +//# sourceMappingURL=encode-html.js.map \ No newline at end of file diff --git a/node_modules/entities/lib/esm/generated/encode-html.js.map b/node_modules/entities/lib/esm/generated/encode-html.js.map new file mode 100644 index 0000000..8906ff8 --- /dev/null +++ b/node_modules/entities/lib/esm/generated/encode-html.js.map @@ -0,0 +1 @@ +{"version":3,"file":"encode-html.js","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["generated/encode-html.ts"],"names":[],"mappings":"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C,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,EAAE,EAAC,QAAQ,CAAC,EAAC,CAAC,EAAE,EAAC,SAAS,CAAC,EAAC,CAAC,EAAE,EAAC,UAAU,CAAC,EAAC,CAAC,EAAE,EAAC,SAAS,CAAC,EAAC,CAAC,GAAG,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,EAAE,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,kBAAkB,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,EAAE,EAAC,aAAa,CAAC,EAAC,CAAC,GAAG,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,EAAE,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,eAAe,CAAC,EAAC,CAAC,EAAE,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,IAAI,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,aAAa,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,uBAA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C,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,gBAAgB,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,C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,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,EAAE,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,IAAI,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/node_modules/entities/lib/esm/index.d.ts b/node_modules/entities/lib/esm/index.d.ts new file mode 100644 index 0000000..dd4eb11 --- /dev/null +++ b/node_modules/entities/lib/esm/index.d.ts @@ -0,0 +1,96 @@ +import { DecodingMode } from "./decode.js"; +/** The level of entities to support. */ +export declare enum EntityLevel { + /** Support only XML entities. */ + XML = 0, + /** Support HTML entities, which are a superset of XML entities. */ + HTML = 1 +} +export declare enum EncodingMode { + /** + * The output is UTF-8 encoded. Only characters that need escaping within + * XML will be escaped. + */ + UTF8 = 0, + /** + * The output consists only of ASCII characters. Characters that need + * escaping within HTML, and characters that aren't ASCII characters will + * be escaped. + */ + ASCII = 1, + /** + * Encode all characters that have an equivalent entity, as well as all + * characters that are not ASCII characters. + */ + Extensive = 2, + /** + * Encode all characters that have to be escaped in HTML attributes, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + */ + Attribute = 3, + /** + * Encode all characters that have to be escaped in HTML text, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + */ + Text = 4 +} +export interface DecodingOptions { + /** + * The level of entities to support. + * @default {@link EntityLevel.XML} + */ + level?: EntityLevel; + /** + * Decoding mode. If `Legacy`, will support legacy entities not terminated + * with a semicolon (`;`). + * + * Always `Strict` for XML. For HTML, set this to `true` if you are parsing + * an attribute value. + * + * The deprecated `decodeStrict` function defaults this to `Strict`. + * + * @default {@link DecodingMode.Legacy} + */ + mode?: DecodingMode | undefined; +} +/** + * Decodes a string with entities. + * + * @param data String to decode. + * @param options Decoding options. + */ +export declare function decode(data: string, options?: DecodingOptions | EntityLevel): string; +/** + * Decodes a string with entities. Does not allow missing trailing semicolons for entities. + * + * @param data String to decode. + * @param options Decoding options. + * @deprecated Use `decode` with the `mode` set to `Strict`. + */ +export declare function decodeStrict(data: string, options?: DecodingOptions | EntityLevel): string; +/** + * Options for `encode`. + */ +export interface EncodingOptions { + /** + * The level of entities to support. + * @default {@link EntityLevel.XML} + */ + level?: EntityLevel; + /** + * Output format. + * @default {@link EncodingMode.Extensive} + */ + mode?: EncodingMode; +} +/** + * Encodes a string with entities. + * + * @param data String to encode. + * @param options Encoding options. + */ +export declare function encode(data: string, options?: EncodingOptions | EntityLevel): string; +export { encodeXML, escape, escapeUTF8, escapeAttribute, escapeText, } from "./escape.js"; +export { encodeHTML, encodeNonAsciiHTML, encodeHTML as encodeHTML4, encodeHTML as encodeHTML5, } from "./encode.js"; +export { EntityDecoder, DecodingMode, decodeXML, decodeHTML, decodeHTMLStrict, decodeHTMLAttribute, decodeHTML as decodeHTML4, decodeHTML as decodeHTML5, decodeHTMLStrict as decodeHTML4Strict, decodeHTMLStrict as decodeHTML5Strict, decodeXML as decodeXMLStrict, } from "./decode.js"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/entities/lib/esm/index.d.ts.map b/node_modules/entities/lib/esm/index.d.ts.map new file mode 100644 index 0000000..cfeef9f --- /dev/null +++ b/node_modules/entities/lib/esm/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,YAAY,EAAE,MAAM,aAAa,CAAC;AASlE,wCAAwC;AACxC,oBAAY,WAAW;IACnB,iCAAiC;IACjC,GAAG,IAAI;IACP,mEAAmE;IACnE,IAAI,IAAI;CACX;AAED,oBAAY,YAAY;IACpB;;;OAGG;IACH,IAAI,IAAA;IACJ;;;;OAIG;IACH,KAAK,IAAA;IACL;;;OAGG;IACH,SAAS,IAAA;IACT;;;OAGG;IACH,SAAS,IAAA;IACT;;;OAGG;IACH,IAAI,IAAA;CACP;AAED,MAAM,WAAW,eAAe;IAC5B;;;OAGG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;;;;;;;;OAUG;IACH,IAAI,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CACnC;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAe,GAAG,WAA6B,GACzD,MAAM,CASR;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CACxB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAe,GAAG,WAA6B,GACzD,MAAM,CAKR;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B;;;OAGG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAe,GAAG,WAA6B,GACzD,MAAM,CAkBR;AAED,OAAO,EACH,SAAS,EACT,MAAM,EACN,UAAU,EACV,eAAe,EACf,UAAU,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EACH,UAAU,EACV,kBAAkB,EAElB,UAAU,IAAI,WAAW,EACzB,UAAU,IAAI,WAAW,GAC5B,MAAM,aAAa,CAAC;AAErB,OAAO,EACH,aAAa,EACb,YAAY,EACZ,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EAEnB,UAAU,IAAI,WAAW,EACzB,UAAU,IAAI,WAAW,EACzB,gBAAgB,IAAI,iBAAiB,EACrC,gBAAgB,IAAI,iBAAiB,EACrC,SAAS,IAAI,eAAe,GAC/B,MAAM,aAAa,CAAC"} \ No newline at end of file diff --git a/node_modules/entities/lib/esm/index.js b/node_modules/entities/lib/esm/index.js new file mode 100644 index 0000000..acc6dbe --- /dev/null +++ b/node_modules/entities/lib/esm/index.js @@ -0,0 +1,99 @@ +import { decodeXML, decodeHTML, DecodingMode } from "./decode.js"; +import { encodeHTML, encodeNonAsciiHTML } from "./encode.js"; +import { encodeXML, escapeUTF8, escapeAttribute, escapeText, } from "./escape.js"; +/** The level of entities to support. */ +export var EntityLevel; +(function (EntityLevel) { + /** Support only XML entities. */ + EntityLevel[EntityLevel["XML"] = 0] = "XML"; + /** Support HTML entities, which are a superset of XML entities. */ + EntityLevel[EntityLevel["HTML"] = 1] = "HTML"; +})(EntityLevel || (EntityLevel = {})); +export var EncodingMode; +(function (EncodingMode) { + /** + * The output is UTF-8 encoded. Only characters that need escaping within + * XML will be escaped. + */ + EncodingMode[EncodingMode["UTF8"] = 0] = "UTF8"; + /** + * The output consists only of ASCII characters. Characters that need + * escaping within HTML, and characters that aren't ASCII characters will + * be escaped. + */ + EncodingMode[EncodingMode["ASCII"] = 1] = "ASCII"; + /** + * Encode all characters that have an equivalent entity, as well as all + * characters that are not ASCII characters. + */ + EncodingMode[EncodingMode["Extensive"] = 2] = "Extensive"; + /** + * Encode all characters that have to be escaped in HTML attributes, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + */ + EncodingMode[EncodingMode["Attribute"] = 3] = "Attribute"; + /** + * Encode all characters that have to be escaped in HTML text, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + */ + EncodingMode[EncodingMode["Text"] = 4] = "Text"; +})(EncodingMode || (EncodingMode = {})); +/** + * Decodes a string with entities. + * + * @param data String to decode. + * @param options Decoding options. + */ +export function decode(data, options = EntityLevel.XML) { + const level = typeof options === "number" ? options : options.level; + if (level === EntityLevel.HTML) { + const mode = typeof options === "object" ? options.mode : undefined; + return decodeHTML(data, mode); + } + return decodeXML(data); +} +/** + * Decodes a string with entities. Does not allow missing trailing semicolons for entities. + * + * @param data String to decode. + * @param options Decoding options. + * @deprecated Use `decode` with the `mode` set to `Strict`. + */ +export function decodeStrict(data, options = EntityLevel.XML) { + var _a; + const opts = typeof options === "number" ? { level: options } : options; + (_a = opts.mode) !== null && _a !== void 0 ? _a : (opts.mode = DecodingMode.Strict); + return decode(data, opts); +} +/** + * Encodes a string with entities. + * + * @param data String to encode. + * @param options Encoding options. + */ +export function encode(data, options = EntityLevel.XML) { + const opts = typeof options === "number" ? { level: options } : options; + // Mode `UTF8` just escapes XML entities + if (opts.mode === EncodingMode.UTF8) + return escapeUTF8(data); + if (opts.mode === EncodingMode.Attribute) + return escapeAttribute(data); + if (opts.mode === EncodingMode.Text) + return escapeText(data); + if (opts.level === EntityLevel.HTML) { + if (opts.mode === EncodingMode.ASCII) { + return encodeNonAsciiHTML(data); + } + return encodeHTML(data); + } + // ASCII and Extensive are equivalent + return encodeXML(data); +} +export { encodeXML, escape, escapeUTF8, escapeAttribute, escapeText, } from "./escape.js"; +export { encodeHTML, encodeNonAsciiHTML, +// Legacy aliases (deprecated) +encodeHTML as encodeHTML4, encodeHTML as encodeHTML5, } from "./encode.js"; +export { EntityDecoder, DecodingMode, decodeXML, decodeHTML, decodeHTMLStrict, decodeHTMLAttribute, +// Legacy aliases (deprecated) +decodeHTML as decodeHTML4, decodeHTML as decodeHTML5, decodeHTMLStrict as decodeHTML4Strict, decodeHTMLStrict as decodeHTML5Strict, decodeXML as decodeXMLStrict, } from "./decode.js"; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/entities/lib/esm/index.js.map b/node_modules/entities/lib/esm/index.js.map new file mode 100644 index 0000000..5f634fc --- /dev/null +++ b/node_modules/entities/lib/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["index.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/entities/lib/esm/package.json b/node_modules/entities/lib/esm/package.json new file mode 100644 index 0000000..089153b --- /dev/null +++ b/node_modules/entities/lib/esm/package.json @@ -0,0 +1 @@ +{"type":"module"} diff --git a/node_modules/entities/lib/generated/decode-data-html.d.ts b/node_modules/entities/lib/generated/decode-data-html.d.ts new file mode 100644 index 0000000..9cfc4f4 --- /dev/null +++ b/node_modules/entities/lib/generated/decode-data-html.d.ts @@ -0,0 +1,3 @@ +declare const _default: Uint16Array; +export default _default; +//# sourceMappingURL=decode-data-html.d.ts.map \ No newline at end of file diff --git a/node_modules/entities/lib/generated/decode-data-html.d.ts.map b/node_modules/entities/lib/generated/decode-data-html.d.ts.map new file mode 100644 index 0000000..6d4d64b --- /dev/null +++ b/node_modules/entities/lib/generated/decode-data-html.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"decode-data-html.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["generated/decode-data-html.ts"],"names":[],"mappings":";AAEA,wBAKE"} \ No newline at end of file diff --git a/node_modules/entities/lib/generated/decode-data-html.js b/node_modules/entities/lib/generated/decode-data-html.js new file mode 100644 index 0000000..295cd9b --- /dev/null +++ b/node_modules/entities/lib/generated/decode-data-html.js @@ -0,0 +1,9 @@ +"use strict"; +// Generated using scripts/write-decode-map.ts +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = new Uint16Array( +// prettier-ignore +"\u1d41<\xd5\u0131\u028a\u049d\u057b\u05d0\u0675\u06de\u07a2\u07d6\u080f\u0a4a\u0a91\u0da1\u0e6d\u0f09\u0f26\u10ca\u1228\u12e1\u1415\u149d\u14c3\u14df\u1525\0\0\0\0\0\0\u156b\u16cd\u198d\u1c12\u1ddd\u1f7e\u2060\u21b0\u228d\u23c0\u23fb\u2442\u2824\u2912\u2d08\u2e48\u2fce\u3016\u32ba\u3639\u37ac\u38fe\u3a28\u3a71\u3ae0\u3b2e\u0800EMabcfglmnoprstu\\bfms\x7f\x84\x8b\x90\x95\x98\xa6\xb3\xb9\xc8\xcflig\u803b\xc6\u40c6P\u803b&\u4026cute\u803b\xc1\u40c1reve;\u4102\u0100iyx}rc\u803b\xc2\u40c2;\u4410r;\uc000\ud835\udd04rave\u803b\xc0\u40c0pha;\u4391acr;\u4100d;\u6a53\u0100gp\x9d\xa1on;\u4104f;\uc000\ud835\udd38plyFunction;\u6061ing\u803b\xc5\u40c5\u0100cs\xbe\xc3r;\uc000\ud835\udc9cign;\u6254ilde\u803b\xc3\u40c3ml\u803b\xc4\u40c4\u0400aceforsu\xe5\xfb\xfe\u0117\u011c\u0122\u0127\u012a\u0100cr\xea\xf2kslash;\u6216\u0176\xf6\xf8;\u6ae7ed;\u6306y;\u4411\u0180crt\u0105\u010b\u0114ause;\u6235noullis;\u612ca;\u4392r;\uc000\ud835\udd05pf;\uc000\ud835\udd39eve;\u42d8c\xf2\u0113mpeq;\u624e\u0700HOacdefhilorsu\u014d\u0151\u0156\u0180\u019e\u01a2\u01b5\u01b7\u01ba\u01dc\u0215\u0273\u0278\u027ecy;\u4427PY\u803b\xa9\u40a9\u0180cpy\u015d\u0162\u017aute;\u4106\u0100;i\u0167\u0168\u62d2talDifferentialD;\u6145leys;\u612d\u0200aeio\u0189\u018e\u0194\u0198ron;\u410cdil\u803b\xc7\u40c7rc;\u4108nint;\u6230ot;\u410a\u0100dn\u01a7\u01adilla;\u40b8terDot;\u40b7\xf2\u017fi;\u43a7rcle\u0200DMPT\u01c7\u01cb\u01d1\u01d6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01e2\u01f8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020foubleQuote;\u601duote;\u6019\u0200lnpu\u021e\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6a74\u0180git\u022f\u0236\u023aruent;\u6261nt;\u622fourIntegral;\u622e\u0100fr\u024c\u024e;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6a2fcr;\uc000\ud835\udc9ep\u0100;C\u0284\u0285\u62d3ap;\u624d\u0580DJSZacefios\u02a0\u02ac\u02b0\u02b4\u02b8\u02cb\u02d7\u02e1\u02e6\u0333\u048d\u0100;o\u0179\u02a5trahd;\u6911cy;\u4402cy;\u4405cy;\u440f\u0180grs\u02bf\u02c4\u02c7ger;\u6021r;\u61a1hv;\u6ae4\u0100ay\u02d0\u02d5ron;\u410e;\u4414l\u0100;t\u02dd\u02de\u6207a;\u4394r;\uc000\ud835\udd07\u0100af\u02eb\u0327\u0100cm\u02f0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031ccute;\u40b4o\u0174\u030b\u030d;\u42d9bleAcute;\u42ddrave;\u4060ilde;\u42dcond;\u62c4ferentialD;\u6146\u0470\u033d\0\0\0\u0342\u0354\0\u0405f;\uc000\ud835\udd3b\u0180;DE\u0348\u0349\u034d\u40a8ot;\u60dcqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03cf\u03e2\u03f8ontourIntegra\xec\u0239o\u0274\u0379\0\0\u037b\xbb\u0349nArrow;\u61d3\u0100eo\u0387\u03a4ft\u0180ART\u0390\u0396\u03a1rrow;\u61d0ightArrow;\u61d4e\xe5\u02cang\u0100LR\u03ab\u03c4eft\u0100AR\u03b3\u03b9rrow;\u67f8ightArrow;\u67faightArrow;\u67f9ight\u0100AT\u03d8\u03derrow;\u61d2ee;\u62a8p\u0241\u03e9\0\0\u03efrrow;\u61d1ownArrow;\u61d5erticalBar;\u6225n\u0300ABLRTa\u0412\u042a\u0430\u045e\u047f\u037crrow\u0180;BU\u041d\u041e\u0422\u6193ar;\u6913pArrow;\u61f5reve;\u4311eft\u02d2\u043a\0\u0446\0\u0450ightVector;\u6950eeVector;\u695eector\u0100;B\u0459\u045a\u61bdar;\u6956ight\u01d4\u0467\0\u0471eeVector;\u695fector\u0100;B\u047a\u047b\u61c1ar;\u6957ee\u0100;A\u0486\u0487\u62a4rrow;\u61a7\u0100ct\u0492\u0497r;\uc000\ud835\udc9frok;\u4110\u0800NTacdfglmopqstux\u04bd\u04c0\u04c4\u04cb\u04de\u04e2\u04e7\u04ee\u04f5\u0521\u052f\u0536\u0552\u055d\u0560\u0565G;\u414aH\u803b\xd0\u40d0cute\u803b\xc9\u40c9\u0180aiy\u04d2\u04d7\u04dcron;\u411arc\u803b\xca\u40ca;\u442dot;\u4116r;\uc000\ud835\udd08rave\u803b\xc8\u40c8ement;\u6208\u0100ap\u04fa\u04fecr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65fberySmallSquare;\u65ab\u0100gp\u0526\u052aon;\u4118f;\uc000\ud835\udd3csilon;\u4395u\u0100ai\u053c\u0549l\u0100;T\u0542\u0543\u6a75ilde;\u6242librium;\u61cc\u0100ci\u0557\u055ar;\u6130m;\u6a73a;\u4397ml\u803b\xcb\u40cb\u0100ip\u056a\u056fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058d\u05b2\u05ccy;\u4424r;\uc000\ud835\udd09lled\u0253\u0597\0\0\u05a3mallSquare;\u65fcerySmallSquare;\u65aa\u0370\u05ba\0\u05bf\0\0\u05c4f;\uc000\ud835\udd3dAll;\u6200riertrf;\u6131c\xf2\u05cb\u0600JTabcdfgorst\u05e8\u05ec\u05ef\u05fa\u0600\u0612\u0616\u061b\u061d\u0623\u066c\u0672cy;\u4403\u803b>\u403emma\u0100;d\u05f7\u05f8\u4393;\u43dcreve;\u411e\u0180eiy\u0607\u060c\u0610dil;\u4122rc;\u411c;\u4413ot;\u4120r;\uc000\ud835\udd0a;\u62d9pf;\uc000\ud835\udd3eeater\u0300EFGLST\u0635\u0644\u064e\u0656\u065b\u0666qual\u0100;L\u063e\u063f\u6265ess;\u62dbullEqual;\u6267reater;\u6aa2ess;\u6277lantEqual;\u6a7eilde;\u6273cr;\uc000\ud835\udca2;\u626b\u0400Aacfiosu\u0685\u068b\u0696\u069b\u069e\u06aa\u06be\u06caRDcy;\u442a\u0100ct\u0690\u0694ek;\u42c7;\u405eirc;\u4124r;\u610clbertSpace;\u610b\u01f0\u06af\0\u06b2f;\u610dizontalLine;\u6500\u0100ct\u06c3\u06c5\xf2\u06a9rok;\u4126mp\u0144\u06d0\u06d8ownHum\xf0\u012fqual;\u624f\u0700EJOacdfgmnostu\u06fa\u06fe\u0703\u0707\u070e\u071a\u071e\u0721\u0728\u0744\u0778\u078b\u078f\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803b\xcd\u40cd\u0100iy\u0713\u0718rc\u803b\xce\u40ce;\u4418ot;\u4130r;\u6111rave\u803b\xcc\u40cc\u0180;ap\u0720\u072f\u073f\u0100cg\u0734\u0737r;\u412ainaryI;\u6148lie\xf3\u03dd\u01f4\u0749\0\u0762\u0100;e\u074d\u074e\u622c\u0100gr\u0753\u0758ral;\u622bsection;\u62c2isible\u0100CT\u076c\u0772omma;\u6063imes;\u6062\u0180gpt\u077f\u0783\u0788on;\u412ef;\uc000\ud835\udd40a;\u4399cr;\u6110ilde;\u4128\u01eb\u079a\0\u079ecy;\u4406l\u803b\xcf\u40cf\u0280cfosu\u07ac\u07b7\u07bc\u07c2\u07d0\u0100iy\u07b1\u07b5rc;\u4134;\u4419r;\uc000\ud835\udd0dpf;\uc000\ud835\udd41\u01e3\u07c7\0\u07ccr;\uc000\ud835\udca5rcy;\u4408kcy;\u4404\u0380HJacfos\u07e4\u07e8\u07ec\u07f1\u07fd\u0802\u0808cy;\u4425cy;\u440cppa;\u439a\u0100ey\u07f6\u07fbdil;\u4136;\u441ar;\uc000\ud835\udd0epf;\uc000\ud835\udd42cr;\uc000\ud835\udca6\u0580JTaceflmost\u0825\u0829\u082c\u0850\u0863\u09b3\u09b8\u09c7\u09cd\u0a37\u0a47cy;\u4409\u803b<\u403c\u0280cmnpr\u0837\u083c\u0841\u0844\u084dute;\u4139bda;\u439bg;\u67ealacetrf;\u6112r;\u619e\u0180aey\u0857\u085c\u0861ron;\u413ddil;\u413b;\u441b\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087e\u08a9\u08b1\u08e0\u08e6\u08fc\u092f\u095b\u0390\u096a\u0100nr\u0883\u088fgleBracket;\u67e8row\u0180;BR\u0899\u089a\u089e\u6190ar;\u61e4ightArrow;\u61c6eiling;\u6308o\u01f5\u08b7\0\u08c3bleBracket;\u67e6n\u01d4\u08c8\0\u08d2eeVector;\u6961ector\u0100;B\u08db\u08dc\u61c3ar;\u6959loor;\u630aight\u0100AV\u08ef\u08f5rrow;\u6194ector;\u694e\u0100er\u0901\u0917e\u0180;AV\u0909\u090a\u0910\u62a3rrow;\u61a4ector;\u695aiangle\u0180;BE\u0924\u0925\u0929\u62b2ar;\u69cfqual;\u62b4p\u0180DTV\u0937\u0942\u094cownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61bfar;\u6958ector\u0100;B\u0965\u0966\u61bcar;\u6952ight\xe1\u039cs\u0300EFGLST\u097e\u098b\u0995\u099d\u09a2\u09adqualGreater;\u62daullEqual;\u6266reater;\u6276ess;\u6aa1lantEqual;\u6a7dilde;\u6272r;\uc000\ud835\udd0f\u0100;e\u09bd\u09be\u62d8ftarrow;\u61daidot;\u413f\u0180npw\u09d4\u0a16\u0a1bg\u0200LRlr\u09de\u09f7\u0a02\u0a10eft\u0100AR\u09e6\u09ecrrow;\u67f5ightArrow;\u67f7ightArrow;\u67f6eft\u0100ar\u03b3\u0a0aight\xe1\u03bfight\xe1\u03caf;\uc000\ud835\udd43er\u0100LR\u0a22\u0a2ceftArrow;\u6199ightArrow;\u6198\u0180cht\u0a3e\u0a40\u0a42\xf2\u084c;\u61b0rok;\u4141;\u626a\u0400acefiosu\u0a5a\u0a5d\u0a60\u0a77\u0a7c\u0a85\u0a8b\u0a8ep;\u6905y;\u441c\u0100dl\u0a65\u0a6fiumSpace;\u605flintrf;\u6133r;\uc000\ud835\udd10nusPlus;\u6213pf;\uc000\ud835\udd44c\xf2\u0a76;\u439c\u0480Jacefostu\u0aa3\u0aa7\u0aad\u0ac0\u0b14\u0b19\u0d91\u0d97\u0d9ecy;\u440acute;\u4143\u0180aey\u0ab4\u0ab9\u0aberon;\u4147dil;\u4145;\u441d\u0180gsw\u0ac7\u0af0\u0b0eative\u0180MTV\u0ad3\u0adf\u0ae8ediumSpace;\u600bhi\u0100cn\u0ae6\u0ad8\xeb\u0ad9eryThi\xee\u0ad9ted\u0100GL\u0af8\u0b06reaterGreate\xf2\u0673essLes\xf3\u0a48Line;\u400ar;\uc000\ud835\udd11\u0200Bnpt\u0b22\u0b28\u0b37\u0b3areak;\u6060BreakingSpace;\u40a0f;\u6115\u0680;CDEGHLNPRSTV\u0b55\u0b56\u0b6a\u0b7c\u0ba1\u0beb\u0c04\u0c5e\u0c84\u0ca6\u0cd8\u0d61\u0d85\u6aec\u0100ou\u0b5b\u0b64ngruent;\u6262pCap;\u626doubleVerticalBar;\u6226\u0180lqx\u0b83\u0b8a\u0b9bement;\u6209ual\u0100;T\u0b92\u0b93\u6260ilde;\uc000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0bb6\u0bb7\u0bbd\u0bc9\u0bd3\u0bd8\u0be5\u626fqual;\u6271ullEqual;\uc000\u2267\u0338reater;\uc000\u226b\u0338ess;\u6279lantEqual;\uc000\u2a7e\u0338ilde;\u6275ump\u0144\u0bf2\u0bfdownHump;\uc000\u224e\u0338qual;\uc000\u224f\u0338e\u0100fs\u0c0a\u0c27tTriangle\u0180;BE\u0c1a\u0c1b\u0c21\u62eaar;\uc000\u29cf\u0338qual;\u62ecs\u0300;EGLST\u0c35\u0c36\u0c3c\u0c44\u0c4b\u0c58\u626equal;\u6270reater;\u6278ess;\uc000\u226a\u0338lantEqual;\uc000\u2a7d\u0338ilde;\u6274ested\u0100GL\u0c68\u0c79reaterGreater;\uc000\u2aa2\u0338essLess;\uc000\u2aa1\u0338recedes\u0180;ES\u0c92\u0c93\u0c9b\u6280qual;\uc000\u2aaf\u0338lantEqual;\u62e0\u0100ei\u0cab\u0cb9verseElement;\u620cghtTriangle\u0180;BE\u0ccb\u0ccc\u0cd2\u62ebar;\uc000\u29d0\u0338qual;\u62ed\u0100qu\u0cdd\u0d0cuareSu\u0100bp\u0ce8\u0cf9set\u0100;E\u0cf0\u0cf3\uc000\u228f\u0338qual;\u62e2erset\u0100;E\u0d03\u0d06\uc000\u2290\u0338qual;\u62e3\u0180bcp\u0d13\u0d24\u0d4eset\u0100;E\u0d1b\u0d1e\uc000\u2282\u20d2qual;\u6288ceeds\u0200;EST\u0d32\u0d33\u0d3b\u0d46\u6281qual;\uc000\u2ab0\u0338lantEqual;\u62e1ilde;\uc000\u227f\u0338erset\u0100;E\u0d58\u0d5b\uc000\u2283\u20d2qual;\u6289ilde\u0200;EFT\u0d6e\u0d6f\u0d75\u0d7f\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uc000\ud835\udca9ilde\u803b\xd1\u40d1;\u439d\u0700Eacdfgmoprstuv\u0dbd\u0dc2\u0dc9\u0dd5\u0ddb\u0de0\u0de7\u0dfc\u0e02\u0e20\u0e22\u0e32\u0e3f\u0e44lig;\u4152cute\u803b\xd3\u40d3\u0100iy\u0dce\u0dd3rc\u803b\xd4\u40d4;\u441eblac;\u4150r;\uc000\ud835\udd12rave\u803b\xd2\u40d2\u0180aei\u0dee\u0df2\u0df6cr;\u414cga;\u43a9cron;\u439fpf;\uc000\ud835\udd46enCurly\u0100DQ\u0e0e\u0e1aoubleQuote;\u601cuote;\u6018;\u6a54\u0100cl\u0e27\u0e2cr;\uc000\ud835\udcaaash\u803b\xd8\u40d8i\u016c\u0e37\u0e3cde\u803b\xd5\u40d5es;\u6a37ml\u803b\xd6\u40d6er\u0100BP\u0e4b\u0e60\u0100ar\u0e50\u0e53r;\u603eac\u0100ek\u0e5a\u0e5c;\u63deet;\u63b4arenthesis;\u63dc\u0480acfhilors\u0e7f\u0e87\u0e8a\u0e8f\u0e92\u0e94\u0e9d\u0eb0\u0efcrtialD;\u6202y;\u441fr;\uc000\ud835\udd13i;\u43a6;\u43a0usMinus;\u40b1\u0100ip\u0ea2\u0eadncareplan\xe5\u069df;\u6119\u0200;eio\u0eb9\u0eba\u0ee0\u0ee4\u6abbcedes\u0200;EST\u0ec8\u0ec9\u0ecf\u0eda\u627aqual;\u6aaflantEqual;\u627cilde;\u627eme;\u6033\u0100dp\u0ee9\u0eeeuct;\u620fortion\u0100;a\u0225\u0ef9l;\u621d\u0100ci\u0f01\u0f06r;\uc000\ud835\udcab;\u43a8\u0200Ufos\u0f11\u0f16\u0f1b\u0f1fOT\u803b\"\u4022r;\uc000\ud835\udd14pf;\u611acr;\uc000\ud835\udcac\u0600BEacefhiorsu\u0f3e\u0f43\u0f47\u0f60\u0f73\u0fa7\u0faa\u0fad\u1096\u10a9\u10b4\u10bearr;\u6910G\u803b\xae\u40ae\u0180cnr\u0f4e\u0f53\u0f56ute;\u4154g;\u67ebr\u0100;t\u0f5c\u0f5d\u61a0l;\u6916\u0180aey\u0f67\u0f6c\u0f71ron;\u4158dil;\u4156;\u4420\u0100;v\u0f78\u0f79\u611cerse\u0100EU\u0f82\u0f99\u0100lq\u0f87\u0f8eement;\u620builibrium;\u61cbpEquilibrium;\u696fr\xbb\u0f79o;\u43a1ght\u0400ACDFTUVa\u0fc1\u0feb\u0ff3\u1022\u1028\u105b\u1087\u03d8\u0100nr\u0fc6\u0fd2gleBracket;\u67e9row\u0180;BL\u0fdc\u0fdd\u0fe1\u6192ar;\u61e5eftArrow;\u61c4eiling;\u6309o\u01f5\u0ff9\0\u1005bleBracket;\u67e7n\u01d4\u100a\0\u1014eeVector;\u695dector\u0100;B\u101d\u101e\u61c2ar;\u6955loor;\u630b\u0100er\u102d\u1043e\u0180;AV\u1035\u1036\u103c\u62a2rrow;\u61a6ector;\u695biangle\u0180;BE\u1050\u1051\u1055\u62b3ar;\u69d0qual;\u62b5p\u0180DTV\u1063\u106e\u1078ownVector;\u694feeVector;\u695cector\u0100;B\u1082\u1083\u61bear;\u6954ector\u0100;B\u1091\u1092\u61c0ar;\u6953\u0100pu\u109b\u109ef;\u611dndImplies;\u6970ightarrow;\u61db\u0100ch\u10b9\u10bcr;\u611b;\u61b1leDelayed;\u69f4\u0680HOacfhimoqstu\u10e4\u10f1\u10f7\u10fd\u1119\u111e\u1151\u1156\u1161\u1167\u11b5\u11bb\u11bf\u0100Cc\u10e9\u10eeHcy;\u4429y;\u4428FTcy;\u442ccute;\u415a\u0280;aeiy\u1108\u1109\u110e\u1113\u1117\u6abcron;\u4160dil;\u415erc;\u415c;\u4421r;\uc000\ud835\udd16ort\u0200DLRU\u112a\u1134\u113e\u1149ownArrow\xbb\u041eeftArrow\xbb\u089aightArrow\xbb\u0fddpArrow;\u6191gma;\u43a3allCircle;\u6218pf;\uc000\ud835\udd4a\u0272\u116d\0\0\u1170t;\u621aare\u0200;ISU\u117b\u117c\u1189\u11af\u65a1ntersection;\u6293u\u0100bp\u118f\u119eset\u0100;E\u1197\u1198\u628fqual;\u6291erset\u0100;E\u11a8\u11a9\u6290qual;\u6292nion;\u6294cr;\uc000\ud835\udcaear;\u62c6\u0200bcmp\u11c8\u11db\u1209\u120b\u0100;s\u11cd\u11ce\u62d0et\u0100;E\u11cd\u11d5qual;\u6286\u0100ch\u11e0\u1205eeds\u0200;EST\u11ed\u11ee\u11f4\u11ff\u627bqual;\u6ab0lantEqual;\u627dilde;\u627fTh\xe1\u0f8c;\u6211\u0180;es\u1212\u1213\u1223\u62d1rset\u0100;E\u121c\u121d\u6283qual;\u6287et\xbb\u1213\u0580HRSacfhiors\u123e\u1244\u1249\u1255\u125e\u1271\u1276\u129f\u12c2\u12c8\u12d1ORN\u803b\xde\u40deADE;\u6122\u0100Hc\u124e\u1252cy;\u440by;\u4426\u0100bu\u125a\u125c;\u4009;\u43a4\u0180aey\u1265\u126a\u126fron;\u4164dil;\u4162;\u4422r;\uc000\ud835\udd17\u0100ei\u127b\u1289\u01f2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128e\u1298kSpace;\uc000\u205f\u200aSpace;\u6009lde\u0200;EFT\u12ab\u12ac\u12b2\u12bc\u623cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uc000\ud835\udd4bipleDot;\u60db\u0100ct\u12d6\u12dbr;\uc000\ud835\udcafrok;\u4166\u0ae1\u12f7\u130e\u131a\u1326\0\u132c\u1331\0\0\0\0\0\u1338\u133d\u1377\u1385\0\u13ff\u1404\u140a\u1410\u0100cr\u12fb\u1301ute\u803b\xda\u40dar\u0100;o\u1307\u1308\u619fcir;\u6949r\u01e3\u1313\0\u1316y;\u440eve;\u416c\u0100iy\u131e\u1323rc\u803b\xdb\u40db;\u4423blac;\u4170r;\uc000\ud835\udd18rave\u803b\xd9\u40d9acr;\u416a\u0100di\u1341\u1369er\u0100BP\u1348\u135d\u0100ar\u134d\u1350r;\u405fac\u0100ek\u1357\u1359;\u63dfet;\u63b5arenthesis;\u63ddon\u0100;P\u1370\u1371\u62c3lus;\u628e\u0100gp\u137b\u137fon;\u4172f;\uc000\ud835\udd4c\u0400ADETadps\u1395\u13ae\u13b8\u13c4\u03e8\u13d2\u13d7\u13f3rrow\u0180;BD\u1150\u13a0\u13a4ar;\u6912ownArrow;\u61c5ownArrow;\u6195quilibrium;\u696eee\u0100;A\u13cb\u13cc\u62a5rrow;\u61a5own\xe1\u03f3er\u0100LR\u13de\u13e8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13f9\u13fa\u43d2on;\u43a5ing;\u416ecr;\uc000\ud835\udcb0ilde;\u4168ml\u803b\xdc\u40dc\u0480Dbcdefosv\u1427\u142c\u1430\u1433\u143e\u1485\u148a\u1490\u1496ash;\u62abar;\u6aeby;\u4412ash\u0100;l\u143b\u143c\u62a9;\u6ae6\u0100er\u1443\u1445;\u62c1\u0180bty\u144c\u1450\u147aar;\u6016\u0100;i\u144f\u1455cal\u0200BLST\u1461\u1465\u146a\u1474ar;\u6223ine;\u407ceparator;\u6758ilde;\u6240ThinSpace;\u600ar;\uc000\ud835\udd19pf;\uc000\ud835\udd4dcr;\uc000\ud835\udcb1dash;\u62aa\u0280cefos\u14a7\u14ac\u14b1\u14b6\u14bcirc;\u4174dge;\u62c0r;\uc000\ud835\udd1apf;\uc000\ud835\udd4ecr;\uc000\ud835\udcb2\u0200fios\u14cb\u14d0\u14d2\u14d8r;\uc000\ud835\udd1b;\u439epf;\uc000\ud835\udd4fcr;\uc000\ud835\udcb3\u0480AIUacfosu\u14f1\u14f5\u14f9\u14fd\u1504\u150f\u1514\u151a\u1520cy;\u442fcy;\u4407cy;\u442ecute\u803b\xdd\u40dd\u0100iy\u1509\u150drc;\u4176;\u442br;\uc000\ud835\udd1cpf;\uc000\ud835\udd50cr;\uc000\ud835\udcb4ml;\u4178\u0400Hacdefos\u1535\u1539\u153f\u154b\u154f\u155d\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417d;\u4417ot;\u417b\u01f2\u1554\0\u155boWidt\xe8\u0ad9a;\u4396r;\u6128pf;\u6124cr;\uc000\ud835\udcb5\u0be1\u1583\u158a\u1590\0\u15b0\u15b6\u15bf\0\0\0\0\u15c6\u15db\u15eb\u165f\u166d\0\u1695\u169b\u16b2\u16b9\0\u16becute\u803b\xe1\u40e1reve;\u4103\u0300;Ediuy\u159c\u159d\u15a1\u15a3\u15a8\u15ad\u623e;\uc000\u223e\u0333;\u623frc\u803b\xe2\u40e2te\u80bb\xb4\u0306;\u4430lig\u803b\xe6\u40e6\u0100;r\xb2\u15ba;\uc000\ud835\udd1erave\u803b\xe0\u40e0\u0100ep\u15ca\u15d6\u0100fp\u15cf\u15d4sym;\u6135\xe8\u15d3ha;\u43b1\u0100ap\u15dfc\u0100cl\u15e4\u15e7r;\u4101g;\u6a3f\u0264\u15f0\0\0\u160a\u0280;adsv\u15fa\u15fb\u15ff\u1601\u1607\u6227nd;\u6a55;\u6a5clope;\u6a58;\u6a5a\u0380;elmrsz\u1618\u1619\u161b\u161e\u163f\u164f\u1659\u6220;\u69a4e\xbb\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163a\u163c\u163e;\u69a8;\u69a9;\u69aa;\u69ab;\u69ac;\u69ad;\u69ae;\u69aft\u0100;v\u1645\u1646\u621fb\u0100;d\u164c\u164d\u62be;\u699d\u0100pt\u1654\u1657h;\u6222\xbb\xb9arr;\u637c\u0100gp\u1663\u1667on;\u4105f;\uc000\ud835\udd52\u0380;Eaeiop\u12c1\u167b\u167d\u1682\u1684\u1687\u168a;\u6a70cir;\u6a6f;\u624ad;\u624bs;\u4027rox\u0100;e\u12c1\u1692\xf1\u1683ing\u803b\xe5\u40e5\u0180cty\u16a1\u16a6\u16a8r;\uc000\ud835\udcb6;\u402amp\u0100;e\u12c1\u16af\xf1\u0288ilde\u803b\xe3\u40e3ml\u803b\xe4\u40e4\u0100ci\u16c2\u16c8onin\xf4\u0272nt;\u6a11\u0800Nabcdefiklnoprsu\u16ed\u16f1\u1730\u173c\u1743\u1748\u1778\u177d\u17e0\u17e6\u1839\u1850\u170d\u193d\u1948\u1970ot;\u6aed\u0100cr\u16f6\u171ek\u0200ceps\u1700\u1705\u170d\u1713ong;\u624cpsilon;\u43f6rime;\u6035im\u0100;e\u171a\u171b\u623dq;\u62cd\u0176\u1722\u1726ee;\u62bded\u0100;g\u172c\u172d\u6305e\xbb\u172drk\u0100;t\u135c\u1737brk;\u63b6\u0100oy\u1701\u1741;\u4431quo;\u601e\u0280cmprt\u1753\u175b\u1761\u1764\u1768aus\u0100;e\u010a\u0109ptyv;\u69b0s\xe9\u170cno\xf5\u0113\u0180ahw\u176f\u1771\u1773;\u43b2;\u6136een;\u626cr;\uc000\ud835\udd1fg\u0380costuvw\u178d\u179d\u17b3\u17c1\u17d5\u17db\u17de\u0180aiu\u1794\u1796\u179a\xf0\u0760rc;\u65efp\xbb\u1371\u0180dpt\u17a4\u17a8\u17adot;\u6a00lus;\u6a01imes;\u6a02\u0271\u17b9\0\0\u17becup;\u6a06ar;\u6605riangle\u0100du\u17cd\u17d2own;\u65bdp;\u65b3plus;\u6a04e\xe5\u1444\xe5\u14adarow;\u690d\u0180ako\u17ed\u1826\u1835\u0100cn\u17f2\u1823k\u0180lst\u17fa\u05ab\u1802ozenge;\u69ebriangle\u0200;dlr\u1812\u1813\u1818\u181d\u65b4own;\u65beeft;\u65c2ight;\u65b8k;\u6423\u01b1\u182b\0\u1833\u01b2\u182f\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183e\u184d\u0100;q\u1843\u1846\uc000=\u20e5uiv;\uc000\u2261\u20e5t;\u6310\u0200ptwx\u1859\u185e\u1867\u186cf;\uc000\ud835\udd53\u0100;t\u13cb\u1863om\xbb\u13cctie;\u62c8\u0600DHUVbdhmptuv\u1885\u1896\u18aa\u18bb\u18d7\u18db\u18ec\u18ff\u1905\u190a\u1910\u1921\u0200LRlr\u188e\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18a1\u18a2\u18a4\u18a6\u18a8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18b3\u18b5\u18b7\u18b9;\u655d;\u655a;\u655c;\u6559\u0380;HLRhlr\u18ca\u18cb\u18cd\u18cf\u18d1\u18d3\u18d5\u6551;\u656c;\u6563;\u6560;\u656b;\u6562;\u655fox;\u69c9\u0200LRlr\u18e4\u18e6\u18e8\u18ea;\u6555;\u6552;\u6510;\u650c\u0280;DUdu\u06bd\u18f7\u18f9\u18fb\u18fd;\u6565;\u6568;\u652c;\u6534inus;\u629flus;\u629eimes;\u62a0\u0200LRlr\u1919\u191b\u191d\u191f;\u655b;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193b\u6502;\u656a;\u6561;\u655e;\u653c;\u6524;\u651c\u0100ev\u0123\u1942bar\u803b\xa6\u40a6\u0200ceio\u1951\u1956\u195a\u1960r;\uc000\ud835\udcb7mi;\u604fm\u0100;e\u171a\u171cl\u0180;bh\u1968\u1969\u196b\u405c;\u69c5sub;\u67c8\u016c\u1974\u197el\u0100;e\u1979\u197a\u6022t\xbb\u197ap\u0180;Ee\u012f\u1985\u1987;\u6aae\u0100;q\u06dc\u06db\u0ce1\u19a7\0\u19e8\u1a11\u1a15\u1a32\0\u1a37\u1a50\0\0\u1ab4\0\0\u1ac1\0\0\u1b21\u1b2e\u1b4d\u1b52\0\u1bfd\0\u1c0c\u0180cpr\u19ad\u19b2\u19ddute;\u4107\u0300;abcds\u19bf\u19c0\u19c4\u19ca\u19d5\u19d9\u6229nd;\u6a44rcup;\u6a49\u0100au\u19cf\u19d2p;\u6a4bp;\u6a47ot;\u6a40;\uc000\u2229\ufe00\u0100eo\u19e2\u19e5t;\u6041\xee\u0693\u0200aeiu\u19f0\u19fb\u1a01\u1a05\u01f0\u19f5\0\u19f8s;\u6a4don;\u410ddil\u803b\xe7\u40e7rc;\u4109ps\u0100;s\u1a0c\u1a0d\u6a4cm;\u6a50ot;\u410b\u0180dmn\u1a1b\u1a20\u1a26il\u80bb\xb8\u01adptyv;\u69b2t\u8100\xa2;e\u1a2d\u1a2e\u40a2r\xe4\u01b2r;\uc000\ud835\udd20\u0180cei\u1a3d\u1a40\u1a4dy;\u4447ck\u0100;m\u1a47\u1a48\u6713ark\xbb\u1a48;\u43c7r\u0380;Ecefms\u1a5f\u1a60\u1a62\u1a6b\u1aa4\u1aaa\u1aae\u65cb;\u69c3\u0180;el\u1a69\u1a6a\u1a6d\u42c6q;\u6257e\u0261\u1a74\0\0\u1a88rrow\u0100lr\u1a7c\u1a81eft;\u61baight;\u61bb\u0280RSacd\u1a92\u1a94\u1a96\u1a9a\u1a9f\xbb\u0f47;\u64c8st;\u629birc;\u629aash;\u629dnint;\u6a10id;\u6aefcir;\u69c2ubs\u0100;u\u1abb\u1abc\u6663it\xbb\u1abc\u02ec\u1ac7\u1ad4\u1afa\0\u1b0aon\u0100;e\u1acd\u1ace\u403a\u0100;q\xc7\xc6\u026d\u1ad9\0\0\u1ae2a\u0100;t\u1ade\u1adf\u402c;\u4040\u0180;fl\u1ae8\u1ae9\u1aeb\u6201\xee\u1160e\u0100mx\u1af1\u1af6ent\xbb\u1ae9e\xf3\u024d\u01e7\u1afe\0\u1b07\u0100;d\u12bb\u1b02ot;\u6a6dn\xf4\u0246\u0180fry\u1b10\u1b14\u1b17;\uc000\ud835\udd54o\xe4\u0254\u8100\xa9;s\u0155\u1b1dr;\u6117\u0100ao\u1b25\u1b29rr;\u61b5ss;\u6717\u0100cu\u1b32\u1b37r;\uc000\ud835\udcb8\u0100bp\u1b3c\u1b44\u0100;e\u1b41\u1b42\u6acf;\u6ad1\u0100;e\u1b49\u1b4a\u6ad0;\u6ad2dot;\u62ef\u0380delprvw\u1b60\u1b6c\u1b77\u1b82\u1bac\u1bd4\u1bf9arr\u0100lr\u1b68\u1b6a;\u6938;\u6935\u0270\u1b72\0\0\u1b75r;\u62dec;\u62dfarr\u0100;p\u1b7f\u1b80\u61b6;\u693d\u0300;bcdos\u1b8f\u1b90\u1b96\u1ba1\u1ba5\u1ba8\u622arcap;\u6a48\u0100au\u1b9b\u1b9ep;\u6a46p;\u6a4aot;\u628dr;\u6a45;\uc000\u222a\ufe00\u0200alrv\u1bb5\u1bbf\u1bde\u1be3rr\u0100;m\u1bbc\u1bbd\u61b7;\u693cy\u0180evw\u1bc7\u1bd4\u1bd8q\u0270\u1bce\0\0\u1bd2re\xe3\u1b73u\xe3\u1b75ee;\u62ceedge;\u62cfen\u803b\xa4\u40a4earrow\u0100lr\u1bee\u1bf3eft\xbb\u1b80ight\xbb\u1bbde\xe4\u1bdd\u0100ci\u1c01\u1c07onin\xf4\u01f7nt;\u6231lcty;\u632d\u0980AHabcdefhijlorstuwz\u1c38\u1c3b\u1c3f\u1c5d\u1c69\u1c75\u1c8a\u1c9e\u1cac\u1cb7\u1cfb\u1cff\u1d0d\u1d7b\u1d91\u1dab\u1dbb\u1dc6\u1dcdr\xf2\u0381ar;\u6965\u0200glrs\u1c48\u1c4d\u1c52\u1c54ger;\u6020eth;\u6138\xf2\u1133h\u0100;v\u1c5a\u1c5b\u6010\xbb\u090a\u016b\u1c61\u1c67arow;\u690fa\xe3\u0315\u0100ay\u1c6e\u1c73ron;\u410f;\u4434\u0180;ao\u0332\u1c7c\u1c84\u0100gr\u02bf\u1c81r;\u61catseq;\u6a77\u0180glm\u1c91\u1c94\u1c98\u803b\xb0\u40b0ta;\u43b4ptyv;\u69b1\u0100ir\u1ca3\u1ca8sht;\u697f;\uc000\ud835\udd21ar\u0100lr\u1cb3\u1cb5\xbb\u08dc\xbb\u101e\u0280aegsv\u1cc2\u0378\u1cd6\u1cdc\u1ce0m\u0180;os\u0326\u1cca\u1cd4nd\u0100;s\u0326\u1cd1uit;\u6666amma;\u43ddin;\u62f2\u0180;io\u1ce7\u1ce8\u1cf8\u40f7de\u8100\xf7;o\u1ce7\u1cf0ntimes;\u62c7n\xf8\u1cf7cy;\u4452c\u026f\u1d06\0\0\u1d0arn;\u631eop;\u630d\u0280lptuw\u1d18\u1d1d\u1d22\u1d49\u1d55lar;\u4024f;\uc000\ud835\udd55\u0280;emps\u030b\u1d2d\u1d37\u1d3d\u1d42q\u0100;d\u0352\u1d33ot;\u6251inus;\u6238lus;\u6214quare;\u62a1blebarwedg\xe5\xfan\u0180adh\u112e\u1d5d\u1d67ownarrow\xf3\u1c83arpoon\u0100lr\u1d72\u1d76ef\xf4\u1cb4igh\xf4\u1cb6\u0162\u1d7f\u1d85karo\xf7\u0f42\u026f\u1d8a\0\0\u1d8ern;\u631fop;\u630c\u0180cot\u1d98\u1da3\u1da6\u0100ry\u1d9d\u1da1;\uc000\ud835\udcb9;\u4455l;\u69f6rok;\u4111\u0100dr\u1db0\u1db4ot;\u62f1i\u0100;f\u1dba\u1816\u65bf\u0100ah\u1dc0\u1dc3r\xf2\u0429a\xf2\u0fa6angle;\u69a6\u0100ci\u1dd2\u1dd5y;\u445fgrarr;\u67ff\u0900Dacdefglmnopqrstux\u1e01\u1e09\u1e19\u1e38\u0578\u1e3c\u1e49\u1e61\u1e7e\u1ea5\u1eaf\u1ebd\u1ee1\u1f2a\u1f37\u1f44\u1f4e\u1f5a\u0100Do\u1e06\u1d34o\xf4\u1c89\u0100cs\u1e0e\u1e14ute\u803b\xe9\u40e9ter;\u6a6e\u0200aioy\u1e22\u1e27\u1e31\u1e36ron;\u411br\u0100;c\u1e2d\u1e2e\u6256\u803b\xea\u40ealon;\u6255;\u444dot;\u4117\u0100Dr\u1e41\u1e45ot;\u6252;\uc000\ud835\udd22\u0180;rs\u1e50\u1e51\u1e57\u6a9aave\u803b\xe8\u40e8\u0100;d\u1e5c\u1e5d\u6a96ot;\u6a98\u0200;ils\u1e6a\u1e6b\u1e72\u1e74\u6a99nters;\u63e7;\u6113\u0100;d\u1e79\u1e7a\u6a95ot;\u6a97\u0180aps\u1e85\u1e89\u1e97cr;\u4113ty\u0180;sv\u1e92\u1e93\u1e95\u6205et\xbb\u1e93p\u01001;\u1e9d\u1ea4\u0133\u1ea1\u1ea3;\u6004;\u6005\u6003\u0100gs\u1eaa\u1eac;\u414bp;\u6002\u0100gp\u1eb4\u1eb8on;\u4119f;\uc000\ud835\udd56\u0180als\u1ec4\u1ece\u1ed2r\u0100;s\u1eca\u1ecb\u62d5l;\u69e3us;\u6a71i\u0180;lv\u1eda\u1edb\u1edf\u43b5on\xbb\u1edb;\u43f5\u0200csuv\u1eea\u1ef3\u1f0b\u1f23\u0100io\u1eef\u1e31rc\xbb\u1e2e\u0269\u1ef9\0\0\u1efb\xed\u0548ant\u0100gl\u1f02\u1f06tr\xbb\u1e5dess\xbb\u1e7a\u0180aei\u1f12\u1f16\u1f1als;\u403dst;\u625fv\u0100;D\u0235\u1f20D;\u6a78parsl;\u69e5\u0100Da\u1f2f\u1f33ot;\u6253rr;\u6971\u0180cdi\u1f3e\u1f41\u1ef8r;\u612fo\xf4\u0352\u0100ah\u1f49\u1f4b;\u43b7\u803b\xf0\u40f0\u0100mr\u1f53\u1f57l\u803b\xeb\u40ebo;\u60ac\u0180cip\u1f61\u1f64\u1f67l;\u4021s\xf4\u056e\u0100eo\u1f6c\u1f74ctatio\xee\u0559nential\xe5\u0579\u09e1\u1f92\0\u1f9e\0\u1fa1\u1fa7\0\0\u1fc6\u1fcc\0\u1fd3\0\u1fe6\u1fea\u2000\0\u2008\u205allingdotse\xf1\u1e44y;\u4444male;\u6640\u0180ilr\u1fad\u1fb3\u1fc1lig;\u8000\ufb03\u0269\u1fb9\0\0\u1fbdg;\u8000\ufb00ig;\u8000\ufb04;\uc000\ud835\udd23lig;\u8000\ufb01lig;\uc000fj\u0180alt\u1fd9\u1fdc\u1fe1t;\u666dig;\u8000\ufb02ns;\u65b1of;\u4192\u01f0\u1fee\0\u1ff3f;\uc000\ud835\udd57\u0100ak\u05bf\u1ff7\u0100;v\u1ffc\u1ffd\u62d4;\u6ad9artint;\u6a0d\u0100ao\u200c\u2055\u0100cs\u2011\u2052\u03b1\u201a\u2030\u2038\u2045\u2048\0\u2050\u03b2\u2022\u2025\u2027\u202a\u202c\0\u202e\u803b\xbd\u40bd;\u6153\u803b\xbc\u40bc;\u6155;\u6159;\u615b\u01b3\u2034\0\u2036;\u6154;\u6156\u02b4\u203e\u2041\0\0\u2043\u803b\xbe\u40be;\u6157;\u615c5;\u6158\u01b6\u204c\0\u204e;\u615a;\u615d8;\u615el;\u6044wn;\u6322cr;\uc000\ud835\udcbb\u0880Eabcdefgijlnorstv\u2082\u2089\u209f\u20a5\u20b0\u20b4\u20f0\u20f5\u20fa\u20ff\u2103\u2112\u2138\u0317\u213e\u2152\u219e\u0100;l\u064d\u2087;\u6a8c\u0180cmp\u2090\u2095\u209dute;\u41f5ma\u0100;d\u209c\u1cda\u43b3;\u6a86reve;\u411f\u0100iy\u20aa\u20aerc;\u411d;\u4433ot;\u4121\u0200;lqs\u063e\u0642\u20bd\u20c9\u0180;qs\u063e\u064c\u20c4lan\xf4\u0665\u0200;cdl\u0665\u20d2\u20d5\u20e5c;\u6aa9ot\u0100;o\u20dc\u20dd\u6a80\u0100;l\u20e2\u20e3\u6a82;\u6a84\u0100;e\u20ea\u20ed\uc000\u22db\ufe00s;\u6a94r;\uc000\ud835\udd24\u0100;g\u0673\u061bmel;\u6137cy;\u4453\u0200;Eaj\u065a\u210c\u210e\u2110;\u6a92;\u6aa5;\u6aa4\u0200Eaes\u211b\u211d\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6a8arox\xbb\u2124\u0100;q\u212e\u212f\u6a88\u0100;q\u212e\u211bim;\u62e7pf;\uc000\ud835\udd58\u0100ci\u2143\u2146r;\u610am\u0180;el\u066b\u214e\u2150;\u6a8e;\u6a90\u8300>;cdlqr\u05ee\u2160\u216a\u216e\u2173\u2179\u0100ci\u2165\u2167;\u6aa7r;\u6a7aot;\u62d7Par;\u6995uest;\u6a7c\u0280adels\u2184\u216a\u2190\u0656\u219b\u01f0\u2189\0\u218epro\xf8\u209er;\u6978q\u0100lq\u063f\u2196les\xf3\u2088i\xed\u066b\u0100en\u21a3\u21adrtneqq;\uc000\u2269\ufe00\xc5\u21aa\u0500Aabcefkosy\u21c4\u21c7\u21f1\u21f5\u21fa\u2218\u221d\u222f\u2268\u227dr\xf2\u03a0\u0200ilmr\u21d0\u21d4\u21d7\u21dbrs\xf0\u1484f\xbb\u2024il\xf4\u06a9\u0100dr\u21e0\u21e4cy;\u444a\u0180;cw\u08f4\u21eb\u21efir;\u6948;\u61adar;\u610firc;\u4125\u0180alr\u2201\u220e\u2213rts\u0100;u\u2209\u220a\u6665it\xbb\u220alip;\u6026con;\u62b9r;\uc000\ud835\udd25s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223a\u223e\u2243\u225e\u2263rr;\u61fftht;\u623bk\u0100lr\u2249\u2253eftarrow;\u61a9ightarrow;\u61aaf;\uc000\ud835\udd59bar;\u6015\u0180clt\u226f\u2274\u2278r;\uc000\ud835\udcbdas\xe8\u21f4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xbb\u1c5b\u0ae1\u22a3\0\u22aa\0\u22b8\u22c5\u22ce\0\u22d5\u22f3\0\0\u22f8\u2322\u2367\u2362\u237f\0\u2386\u23aa\u23b4cute\u803b\xed\u40ed\u0180;iy\u0771\u22b0\u22b5rc\u803b\xee\u40ee;\u4438\u0100cx\u22bc\u22bfy;\u4435cl\u803b\xa1\u40a1\u0100fr\u039f\u22c9;\uc000\ud835\udd26rave\u803b\xec\u40ec\u0200;ino\u073e\u22dd\u22e9\u22ee\u0100in\u22e2\u22e6nt;\u6a0ct;\u622dfin;\u69dcta;\u6129lig;\u4133\u0180aop\u22fe\u231a\u231d\u0180cgt\u2305\u2308\u2317r;\u412b\u0180elp\u071f\u230f\u2313in\xe5\u078ear\xf4\u0720h;\u4131f;\u62b7ed;\u41b5\u0280;cfot\u04f4\u232c\u2331\u233d\u2341are;\u6105in\u0100;t\u2338\u2339\u621eie;\u69dddo\xf4\u2319\u0280;celp\u0757\u234c\u2350\u235b\u2361al;\u62ba\u0100gr\u2355\u2359er\xf3\u1563\xe3\u234darhk;\u6a17rod;\u6a3c\u0200cgpt\u236f\u2372\u2376\u237by;\u4451on;\u412ff;\uc000\ud835\udd5aa;\u43b9uest\u803b\xbf\u40bf\u0100ci\u238a\u238fr;\uc000\ud835\udcben\u0280;Edsv\u04f4\u239b\u239d\u23a1\u04f3;\u62f9ot;\u62f5\u0100;v\u23a6\u23a7\u62f4;\u62f3\u0100;i\u0777\u23aelde;\u4129\u01eb\u23b8\0\u23bccy;\u4456l\u803b\xef\u40ef\u0300cfmosu\u23cc\u23d7\u23dc\u23e1\u23e7\u23f5\u0100iy\u23d1\u23d5rc;\u4135;\u4439r;\uc000\ud835\udd27ath;\u4237pf;\uc000\ud835\udd5b\u01e3\u23ec\0\u23f1r;\uc000\ud835\udcbfrcy;\u4458kcy;\u4454\u0400acfghjos\u240b\u2416\u2422\u2427\u242d\u2431\u2435\u243bppa\u0100;v\u2413\u2414\u43ba;\u43f0\u0100ey\u241b\u2420dil;\u4137;\u443ar;\uc000\ud835\udd28reen;\u4138cy;\u4445cy;\u445cpf;\uc000\ud835\udd5ccr;\uc000\ud835\udcc0\u0b80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248d\u2491\u250e\u253d\u255a\u2580\u264e\u265e\u2665\u2679\u267d\u269a\u26b2\u26d8\u275d\u2768\u278b\u27c0\u2801\u2812\u0180art\u2477\u247a\u247cr\xf2\u09c6\xf2\u0395ail;\u691barr;\u690e\u0100;g\u0994\u248b;\u6a8bar;\u6962\u0963\u24a5\0\u24aa\0\u24b1\0\0\0\0\0\u24b5\u24ba\0\u24c6\u24c8\u24cd\0\u24f9ute;\u413amptyv;\u69b4ra\xee\u084cbda;\u43bbg\u0180;dl\u088e\u24c1\u24c3;\u6991\xe5\u088e;\u6a85uo\u803b\xab\u40abr\u0400;bfhlpst\u0899\u24de\u24e6\u24e9\u24eb\u24ee\u24f1\u24f5\u0100;f\u089d\u24e3s;\u691fs;\u691d\xeb\u2252p;\u61abl;\u6939im;\u6973l;\u61a2\u0180;ae\u24ff\u2500\u2504\u6aabil;\u6919\u0100;s\u2509\u250a\u6aad;\uc000\u2aad\ufe00\u0180abr\u2515\u2519\u251drr;\u690crk;\u6772\u0100ak\u2522\u252cc\u0100ek\u2528\u252a;\u407b;\u405b\u0100es\u2531\u2533;\u698bl\u0100du\u2539\u253b;\u698f;\u698d\u0200aeuy\u2546\u254b\u2556\u2558ron;\u413e\u0100di\u2550\u2554il;\u413c\xec\u08b0\xe2\u2529;\u443b\u0200cqrs\u2563\u2566\u256d\u257da;\u6936uo\u0100;r\u0e19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694bh;\u61b2\u0280;fgqs\u258b\u258c\u0989\u25f3\u25ff\u6264t\u0280ahlrt\u2598\u25a4\u25b7\u25c2\u25e8rrow\u0100;t\u0899\u25a1a\xe9\u24f6arpoon\u0100du\u25af\u25b4own\xbb\u045ap\xbb\u0966eftarrows;\u61c7ight\u0180ahs\u25cd\u25d6\u25derrow\u0100;s\u08f4\u08a7arpoon\xf3\u0f98quigarro\xf7\u21f0hreetimes;\u62cb\u0180;qs\u258b\u0993\u25falan\xf4\u09ac\u0280;cdgs\u09ac\u260a\u260d\u261d\u2628c;\u6aa8ot\u0100;o\u2614\u2615\u6a7f\u0100;r\u261a\u261b\u6a81;\u6a83\u0100;e\u2622\u2625\uc000\u22da\ufe00s;\u6a93\u0280adegs\u2633\u2639\u263d\u2649\u264bppro\xf8\u24c6ot;\u62d6q\u0100gq\u2643\u2645\xf4\u0989gt\xf2\u248c\xf4\u099bi\xed\u09b2\u0180ilr\u2655\u08e1\u265asht;\u697c;\uc000\ud835\udd29\u0100;E\u099c\u2663;\u6a91\u0161\u2669\u2676r\u0100du\u25b2\u266e\u0100;l\u0965\u2673;\u696alk;\u6584cy;\u4459\u0280;acht\u0a48\u2688\u268b\u2691\u2696r\xf2\u25c1orne\xf2\u1d08ard;\u696bri;\u65fa\u0100io\u269f\u26a4dot;\u4140ust\u0100;a\u26ac\u26ad\u63b0che\xbb\u26ad\u0200Eaes\u26bb\u26bd\u26c9\u26d4;\u6268p\u0100;p\u26c3\u26c4\u6a89rox\xbb\u26c4\u0100;q\u26ce\u26cf\u6a87\u0100;q\u26ce\u26bbim;\u62e6\u0400abnoptwz\u26e9\u26f4\u26f7\u271a\u272f\u2741\u2747\u2750\u0100nr\u26ee\u26f1g;\u67ecr;\u61fdr\xeb\u08c1g\u0180lmr\u26ff\u270d\u2714eft\u0100ar\u09e6\u2707ight\xe1\u09f2apsto;\u67fcight\xe1\u09fdparrow\u0100lr\u2725\u2729ef\xf4\u24edight;\u61ac\u0180afl\u2736\u2739\u273dr;\u6985;\uc000\ud835\udd5dus;\u6a2dimes;\u6a34\u0161\u274b\u274fst;\u6217\xe1\u134e\u0180;ef\u2757\u2758\u1800\u65cange\xbb\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277c\u2785\u2787r\xf2\u08a8orne\xf2\u1d8car\u0100;d\u0f98\u2783;\u696d;\u600eri;\u62bf\u0300achiqt\u2798\u279d\u0a40\u27a2\u27ae\u27bbquo;\u6039r;\uc000\ud835\udcc1m\u0180;eg\u09b2\u27aa\u27ac;\u6a8d;\u6a8f\u0100bu\u252a\u27b3o\u0100;r\u0e1f\u27b9;\u601arok;\u4142\u8400<;cdhilqr\u082b\u27d2\u2639\u27dc\u27e0\u27e5\u27ea\u27f0\u0100ci\u27d7\u27d9;\u6aa6r;\u6a79re\xe5\u25f2mes;\u62c9arr;\u6976uest;\u6a7b\u0100Pi\u27f5\u27f9ar;\u6996\u0180;ef\u2800\u092d\u181b\u65c3r\u0100du\u2807\u280dshar;\u694ahar;\u6966\u0100en\u2817\u2821rtneqq;\uc000\u2268\ufe00\xc5\u281e\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288e\u2893\u28a0\u28a5\u28a8\u28da\u28e2\u28e4\u0a83\u28f3\u2902Dot;\u623a\u0200clpr\u284e\u2852\u2863\u287dr\u803b\xaf\u40af\u0100et\u2857\u2859;\u6642\u0100;e\u285e\u285f\u6720se\xbb\u285f\u0100;s\u103b\u2868to\u0200;dlu\u103b\u2873\u2877\u287bow\xee\u048cef\xf4\u090f\xf0\u13d1ker;\u65ae\u0100oy\u2887\u288cmma;\u6a29;\u443cash;\u6014asuredangle\xbb\u1626r;\uc000\ud835\udd2ao;\u6127\u0180cdn\u28af\u28b4\u28c9ro\u803b\xb5\u40b5\u0200;acd\u1464\u28bd\u28c0\u28c4s\xf4\u16a7ir;\u6af0ot\u80bb\xb7\u01b5us\u0180;bd\u28d2\u1903\u28d3\u6212\u0100;u\u1d3c\u28d8;\u6a2a\u0163\u28de\u28e1p;\u6adb\xf2\u2212\xf0\u0a81\u0100dp\u28e9\u28eeels;\u62a7f;\uc000\ud835\udd5e\u0100ct\u28f8\u28fdr;\uc000\ud835\udcc2pos\xbb\u159d\u0180;lm\u2909\u290a\u290d\u43bctimap;\u62b8\u0c00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297e\u2989\u2998\u29da\u29e9\u2a15\u2a1a\u2a58\u2a5d\u2a83\u2a95\u2aa4\u2aa8\u2b04\u2b07\u2b44\u2b7f\u2bae\u2c34\u2c67\u2c7c\u2ce9\u0100gt\u2947\u294b;\uc000\u22d9\u0338\u0100;v\u2950\u0bcf\uc000\u226b\u20d2\u0180elt\u295a\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61cdightarrow;\u61ce;\uc000\u22d8\u0338\u0100;v\u297b\u0c47\uc000\u226a\u20d2ightarrow;\u61cf\u0100Dd\u298e\u2993ash;\u62afash;\u62ae\u0280bcnpt\u29a3\u29a7\u29ac\u29b1\u29ccla\xbb\u02deute;\u4144g;\uc000\u2220\u20d2\u0280;Eiop\u0d84\u29bc\u29c0\u29c5\u29c8;\uc000\u2a70\u0338d;\uc000\u224b\u0338s;\u4149ro\xf8\u0d84ur\u0100;a\u29d3\u29d4\u666el\u0100;s\u29d3\u0b38\u01f3\u29df\0\u29e3p\u80bb\xa0\u0b37mp\u0100;e\u0bf9\u0c00\u0280aeouy\u29f4\u29fe\u2a03\u2a10\u2a13\u01f0\u29f9\0\u29fb;\u6a43on;\u4148dil;\u4146ng\u0100;d\u0d7e\u2a0aot;\uc000\u2a6d\u0338p;\u6a42;\u443dash;\u6013\u0380;Aadqsx\u0b92\u2a29\u2a2d\u2a3b\u2a41\u2a45\u2a50rr;\u61d7r\u0100hr\u2a33\u2a36k;\u6924\u0100;o\u13f2\u13f0ot;\uc000\u2250\u0338ui\xf6\u0b63\u0100ei\u2a4a\u2a4ear;\u6928\xed\u0b98ist\u0100;s\u0ba0\u0b9fr;\uc000\ud835\udd2b\u0200Eest\u0bc5\u2a66\u2a79\u2a7c\u0180;qs\u0bbc\u2a6d\u0be1\u0180;qs\u0bbc\u0bc5\u2a74lan\xf4\u0be2i\xed\u0bea\u0100;r\u0bb6\u2a81\xbb\u0bb7\u0180Aap\u2a8a\u2a8d\u2a91r\xf2\u2971rr;\u61aear;\u6af2\u0180;sv\u0f8d\u2a9c\u0f8c\u0100;d\u2aa1\u2aa2\u62fc;\u62facy;\u445a\u0380AEadest\u2ab7\u2aba\u2abe\u2ac2\u2ac5\u2af6\u2af9r\xf2\u2966;\uc000\u2266\u0338rr;\u619ar;\u6025\u0200;fqs\u0c3b\u2ace\u2ae3\u2aeft\u0100ar\u2ad4\u2ad9rro\xf7\u2ac1ightarro\xf7\u2a90\u0180;qs\u0c3b\u2aba\u2aealan\xf4\u0c55\u0100;s\u0c55\u2af4\xbb\u0c36i\xed\u0c5d\u0100;r\u0c35\u2afei\u0100;e\u0c1a\u0c25i\xe4\u0d90\u0100pt\u2b0c\u2b11f;\uc000\ud835\udd5f\u8180\xac;in\u2b19\u2b1a\u2b36\u40acn\u0200;Edv\u0b89\u2b24\u2b28\u2b2e;\uc000\u22f9\u0338ot;\uc000\u22f5\u0338\u01e1\u0b89\u2b33\u2b35;\u62f7;\u62f6i\u0100;v\u0cb8\u2b3c\u01e1\u0cb8\u2b41\u2b43;\u62fe;\u62fd\u0180aor\u2b4b\u2b63\u2b69r\u0200;ast\u0b7b\u2b55\u2b5a\u2b5flle\xec\u0b7bl;\uc000\u2afd\u20e5;\uc000\u2202\u0338lint;\u6a14\u0180;ce\u0c92\u2b70\u2b73u\xe5\u0ca5\u0100;c\u0c98\u2b78\u0100;e\u0c92\u2b7d\xf1\u0c98\u0200Aait\u2b88\u2b8b\u2b9d\u2ba7r\xf2\u2988rr\u0180;cw\u2b94\u2b95\u2b99\u619b;\uc000\u2933\u0338;\uc000\u219d\u0338ghtarrow\xbb\u2b95ri\u0100;e\u0ccb\u0cd6\u0380chimpqu\u2bbd\u2bcd\u2bd9\u2b04\u0b78\u2be4\u2bef\u0200;cer\u0d32\u2bc6\u0d37\u2bc9u\xe5\u0d45;\uc000\ud835\udcc3ort\u026d\u2b05\0\0\u2bd6ar\xe1\u2b56m\u0100;e\u0d6e\u2bdf\u0100;q\u0d74\u0d73su\u0100bp\u2beb\u2bed\xe5\u0cf8\xe5\u0d0b\u0180bcp\u2bf6\u2c11\u2c19\u0200;Ees\u2bff\u2c00\u0d22\u2c04\u6284;\uc000\u2ac5\u0338et\u0100;e\u0d1b\u2c0bq\u0100;q\u0d23\u2c00c\u0100;e\u0d32\u2c17\xf1\u0d38\u0200;Ees\u2c22\u2c23\u0d5f\u2c27\u6285;\uc000\u2ac6\u0338et\u0100;e\u0d58\u2c2eq\u0100;q\u0d60\u2c23\u0200gilr\u2c3d\u2c3f\u2c45\u2c47\xec\u0bd7lde\u803b\xf1\u40f1\xe7\u0c43iangle\u0100lr\u2c52\u2c5ceft\u0100;e\u0c1a\u2c5a\xf1\u0c26ight\u0100;e\u0ccb\u2c65\xf1\u0cd7\u0100;m\u2c6c\u2c6d\u43bd\u0180;es\u2c74\u2c75\u2c79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2c8f\u2c94\u2c99\u2c9e\u2ca3\u2cb0\u2cb6\u2cd3\u2ce3ash;\u62adarr;\u6904p;\uc000\u224d\u20d2ash;\u62ac\u0100et\u2ca8\u2cac;\uc000\u2265\u20d2;\uc000>\u20d2nfin;\u69de\u0180Aet\u2cbd\u2cc1\u2cc5rr;\u6902;\uc000\u2264\u20d2\u0100;r\u2cca\u2ccd\uc000<\u20d2ie;\uc000\u22b4\u20d2\u0100At\u2cd8\u2cdcrr;\u6903rie;\uc000\u22b5\u20d2im;\uc000\u223c\u20d2\u0180Aan\u2cf0\u2cf4\u2d02rr;\u61d6r\u0100hr\u2cfa\u2cfdk;\u6923\u0100;o\u13e7\u13e5ear;\u6927\u1253\u1a95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2d2d\0\u2d38\u2d48\u2d60\u2d65\u2d72\u2d84\u1b07\0\0\u2d8d\u2dab\0\u2dc8\u2dce\0\u2ddc\u2e19\u2e2b\u2e3e\u2e43\u0100cs\u2d31\u1a97ute\u803b\xf3\u40f3\u0100iy\u2d3c\u2d45r\u0100;c\u1a9e\u2d42\u803b\xf4\u40f4;\u443e\u0280abios\u1aa0\u2d52\u2d57\u01c8\u2d5alac;\u4151v;\u6a38old;\u69bclig;\u4153\u0100cr\u2d69\u2d6dir;\u69bf;\uc000\ud835\udd2c\u036f\u2d79\0\0\u2d7c\0\u2d82n;\u42dbave\u803b\xf2\u40f2;\u69c1\u0100bm\u2d88\u0df4ar;\u69b5\u0200acit\u2d95\u2d98\u2da5\u2da8r\xf2\u1a80\u0100ir\u2d9d\u2da0r;\u69beoss;\u69bbn\xe5\u0e52;\u69c0\u0180aei\u2db1\u2db5\u2db9cr;\u414dga;\u43c9\u0180cdn\u2dc0\u2dc5\u01cdron;\u43bf;\u69b6pf;\uc000\ud835\udd60\u0180ael\u2dd4\u2dd7\u01d2r;\u69b7rp;\u69b9\u0380;adiosv\u2dea\u2deb\u2dee\u2e08\u2e0d\u2e10\u2e16\u6228r\xf2\u1a86\u0200;efm\u2df7\u2df8\u2e02\u2e05\u6a5dr\u0100;o\u2dfe\u2dff\u6134f\xbb\u2dff\u803b\xaa\u40aa\u803b\xba\u40bagof;\u62b6r;\u6a56lope;\u6a57;\u6a5b\u0180clo\u2e1f\u2e21\u2e27\xf2\u2e01ash\u803b\xf8\u40f8l;\u6298i\u016c\u2e2f\u2e34de\u803b\xf5\u40f5es\u0100;a\u01db\u2e3as;\u6a36ml\u803b\xf6\u40f6bar;\u633d\u0ae1\u2e5e\0\u2e7d\0\u2e80\u2e9d\0\u2ea2\u2eb9\0\0\u2ecb\u0e9c\0\u2f13\0\0\u2f2b\u2fbc\0\u2fc8r\u0200;ast\u0403\u2e67\u2e72\u0e85\u8100\xb6;l\u2e6d\u2e6e\u40b6le\xec\u0403\u0269\u2e78\0\0\u2e7bm;\u6af3;\u6afdy;\u443fr\u0280cimpt\u2e8b\u2e8f\u2e93\u1865\u2e97nt;\u4025od;\u402eil;\u6030enk;\u6031r;\uc000\ud835\udd2d\u0180imo\u2ea8\u2eb0\u2eb4\u0100;v\u2ead\u2eae\u43c6;\u43d5ma\xf4\u0a76ne;\u660e\u0180;tv\u2ebf\u2ec0\u2ec8\u43c0chfork\xbb\u1ffd;\u43d6\u0100au\u2ecf\u2edfn\u0100ck\u2ed5\u2eddk\u0100;h\u21f4\u2edb;\u610e\xf6\u21f4s\u0480;abcdemst\u2ef3\u2ef4\u1908\u2ef9\u2efd\u2f04\u2f06\u2f0a\u2f0e\u402bcir;\u6a23ir;\u6a22\u0100ou\u1d40\u2f02;\u6a25;\u6a72n\u80bb\xb1\u0e9dim;\u6a26wo;\u6a27\u0180ipu\u2f19\u2f20\u2f25ntint;\u6a15f;\uc000\ud835\udd61nd\u803b\xa3\u40a3\u0500;Eaceinosu\u0ec8\u2f3f\u2f41\u2f44\u2f47\u2f81\u2f89\u2f92\u2f7e\u2fb6;\u6ab3p;\u6ab7u\xe5\u0ed9\u0100;c\u0ece\u2f4c\u0300;acens\u0ec8\u2f59\u2f5f\u2f66\u2f68\u2f7eppro\xf8\u2f43urlye\xf1\u0ed9\xf1\u0ece\u0180aes\u2f6f\u2f76\u2f7approx;\u6ab9qq;\u6ab5im;\u62e8i\xed\u0edfme\u0100;s\u2f88\u0eae\u6032\u0180Eas\u2f78\u2f90\u2f7a\xf0\u2f75\u0180dfp\u0eec\u2f99\u2faf\u0180als\u2fa0\u2fa5\u2faalar;\u632eine;\u6312urf;\u6313\u0100;t\u0efb\u2fb4\xef\u0efbrel;\u62b0\u0100ci\u2fc0\u2fc5r;\uc000\ud835\udcc5;\u43c8ncsp;\u6008\u0300fiopsu\u2fda\u22e2\u2fdf\u2fe5\u2feb\u2ff1r;\uc000\ud835\udd2epf;\uc000\ud835\udd62rime;\u6057cr;\uc000\ud835\udcc6\u0180aeo\u2ff8\u3009\u3013t\u0100ei\u2ffe\u3005rnion\xf3\u06b0nt;\u6a16st\u0100;e\u3010\u3011\u403f\xf1\u1f19\xf4\u0f14\u0a80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30e0\u310e\u312b\u3147\u3162\u3172\u318e\u3206\u3215\u3224\u3229\u3258\u326e\u3272\u3290\u32b0\u32b7\u0180art\u3047\u304a\u304cr\xf2\u10b3\xf2\u03ddail;\u691car\xf2\u1c65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307f\u308f\u3094\u30cc\u0100eu\u306d\u3071;\uc000\u223d\u0331te;\u4155i\xe3\u116emptyv;\u69b3g\u0200;del\u0fd1\u3089\u308b\u308d;\u6992;\u69a5\xe5\u0fd1uo\u803b\xbb\u40bbr\u0580;abcfhlpstw\u0fdc\u30ac\u30af\u30b7\u30b9\u30bc\u30be\u30c0\u30c3\u30c7\u30cap;\u6975\u0100;f\u0fe0\u30b4s;\u6920;\u6933s;\u691e\xeb\u225d\xf0\u272el;\u6945im;\u6974l;\u61a3;\u619d\u0100ai\u30d1\u30d5il;\u691ao\u0100;n\u30db\u30dc\u6236al\xf3\u0f1e\u0180abr\u30e7\u30ea\u30eer\xf2\u17e5rk;\u6773\u0100ak\u30f3\u30fdc\u0100ek\u30f9\u30fb;\u407d;\u405d\u0100es\u3102\u3104;\u698cl\u0100du\u310a\u310c;\u698e;\u6990\u0200aeuy\u3117\u311c\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xec\u0ff2\xe2\u30fa;\u4440\u0200clqs\u3134\u3137\u313d\u3144a;\u6937dhar;\u6969uo\u0100;r\u020e\u020dh;\u61b3\u0180acg\u314e\u315f\u0f44l\u0200;ips\u0f78\u3158\u315b\u109cn\xe5\u10bbar\xf4\u0fa9t;\u65ad\u0180ilr\u3169\u1023\u316esht;\u697d;\uc000\ud835\udd2f\u0100ao\u3177\u3186r\u0100du\u317d\u317f\xbb\u047b\u0100;l\u1091\u3184;\u696c\u0100;v\u318b\u318c\u43c1;\u43f1\u0180gns\u3195\u31f9\u31fcht\u0300ahlrst\u31a4\u31b0\u31c2\u31d8\u31e4\u31eerrow\u0100;t\u0fdc\u31ada\xe9\u30c8arpoon\u0100du\u31bb\u31bfow\xee\u317ep\xbb\u1092eft\u0100ah\u31ca\u31d0rrow\xf3\u0feaarpoon\xf3\u0551ightarrows;\u61c9quigarro\xf7\u30cbhreetimes;\u62ccg;\u42daingdotse\xf1\u1f32\u0180ahm\u320d\u3210\u3213r\xf2\u0feaa\xf2\u0551;\u600foust\u0100;a\u321e\u321f\u63b1che\xbb\u321fmid;\u6aee\u0200abpt\u3232\u323d\u3240\u3252\u0100nr\u3237\u323ag;\u67edr;\u61fer\xeb\u1003\u0180afl\u3247\u324a\u324er;\u6986;\uc000\ud835\udd63us;\u6a2eimes;\u6a35\u0100ap\u325d\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6a12ar\xf2\u31e3\u0200achq\u327b\u3280\u10bc\u3285quo;\u603ar;\uc000\ud835\udcc7\u0100bu\u30fb\u328ao\u0100;r\u0214\u0213\u0180hir\u3297\u329b\u32a0re\xe5\u31f8mes;\u62cai\u0200;efl\u32aa\u1059\u1821\u32ab\u65b9tri;\u69celuhar;\u6968;\u611e\u0d61\u32d5\u32db\u32df\u332c\u3338\u3371\0\u337a\u33a4\0\0\u33ec\u33f0\0\u3428\u3448\u345a\u34ad\u34b1\u34ca\u34f1\0\u3616\0\0\u3633cute;\u415bqu\xef\u27ba\u0500;Eaceinpsy\u11ed\u32f3\u32f5\u32ff\u3302\u330b\u330f\u331f\u3326\u3329;\u6ab4\u01f0\u32fa\0\u32fc;\u6ab8on;\u4161u\xe5\u11fe\u0100;d\u11f3\u3307il;\u415frc;\u415d\u0180Eas\u3316\u3318\u331b;\u6ab6p;\u6abaim;\u62e9olint;\u6a13i\xed\u1204;\u4441ot\u0180;be\u3334\u1d47\u3335\u62c5;\u6a66\u0380Aacmstx\u3346\u334a\u3357\u335b\u335e\u3363\u336drr;\u61d8r\u0100hr\u3350\u3352\xeb\u2228\u0100;o\u0a36\u0a34t\u803b\xa7\u40a7i;\u403bwar;\u6929m\u0100in\u3369\xf0nu\xf3\xf1t;\u6736r\u0100;o\u3376\u2055\uc000\ud835\udd30\u0200acoy\u3382\u3386\u3391\u33a0rp;\u666f\u0100hy\u338b\u338fcy;\u4449;\u4448rt\u026d\u3399\0\0\u339ci\xe4\u1464ara\xec\u2e6f\u803b\xad\u40ad\u0100gm\u33a8\u33b4ma\u0180;fv\u33b1\u33b2\u33b2\u43c3;\u43c2\u0400;deglnpr\u12ab\u33c5\u33c9\u33ce\u33d6\u33de\u33e1\u33e6ot;\u6a6a\u0100;q\u12b1\u12b0\u0100;E\u33d3\u33d4\u6a9e;\u6aa0\u0100;E\u33db\u33dc\u6a9d;\u6a9fe;\u6246lus;\u6a24arr;\u6972ar\xf2\u113d\u0200aeit\u33f8\u3408\u340f\u3417\u0100ls\u33fd\u3404lsetm\xe9\u336ahp;\u6a33parsl;\u69e4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341c\u341d\u6aaa\u0100;s\u3422\u3423\u6aac;\uc000\u2aac\ufe00\u0180flp\u342e\u3433\u3442tcy;\u444c\u0100;b\u3438\u3439\u402f\u0100;a\u343e\u343f\u69c4r;\u633ff;\uc000\ud835\udd64a\u0100dr\u344d\u0402es\u0100;u\u3454\u3455\u6660it\xbb\u3455\u0180csu\u3460\u3479\u349f\u0100au\u3465\u346fp\u0100;s\u1188\u346b;\uc000\u2293\ufe00p\u0100;s\u11b4\u3475;\uc000\u2294\ufe00u\u0100bp\u347f\u348f\u0180;es\u1197\u119c\u3486et\u0100;e\u1197\u348d\xf1\u119d\u0180;es\u11a8\u11ad\u3496et\u0100;e\u11a8\u349d\xf1\u11ae\u0180;af\u117b\u34a6\u05b0r\u0165\u34ab\u05b1\xbb\u117car\xf2\u1148\u0200cemt\u34b9\u34be\u34c2\u34c5r;\uc000\ud835\udcc8tm\xee\xf1i\xec\u3415ar\xe6\u11be\u0100ar\u34ce\u34d5r\u0100;f\u34d4\u17bf\u6606\u0100an\u34da\u34edight\u0100ep\u34e3\u34eapsilo\xee\u1ee0h\xe9\u2eafs\xbb\u2852\u0280bcmnp\u34fb\u355e\u1209\u358b\u358e\u0480;Edemnprs\u350e\u350f\u3511\u3515\u351e\u3523\u352c\u3531\u3536\u6282;\u6ac5ot;\u6abd\u0100;d\u11da\u351aot;\u6ac3ult;\u6ac1\u0100Ee\u3528\u352a;\u6acb;\u628alus;\u6abfarr;\u6979\u0180eiu\u353d\u3552\u3555t\u0180;en\u350e\u3545\u354bq\u0100;q\u11da\u350feq\u0100;q\u352b\u3528m;\u6ac7\u0100bp\u355a\u355c;\u6ad5;\u6ad3c\u0300;acens\u11ed\u356c\u3572\u3579\u357b\u3326ppro\xf8\u32faurlye\xf1\u11fe\xf1\u11f3\u0180aes\u3582\u3588\u331bppro\xf8\u331aq\xf1\u3317g;\u666a\u0680123;Edehlmnps\u35a9\u35ac\u35af\u121c\u35b2\u35b4\u35c0\u35c9\u35d5\u35da\u35df\u35e8\u35ed\u803b\xb9\u40b9\u803b\xb2\u40b2\u803b\xb3\u40b3;\u6ac6\u0100os\u35b9\u35bct;\u6abeub;\u6ad8\u0100;d\u1222\u35c5ot;\u6ac4s\u0100ou\u35cf\u35d2l;\u67c9b;\u6ad7arr;\u697bult;\u6ac2\u0100Ee\u35e4\u35e6;\u6acc;\u628blus;\u6ac0\u0180eiu\u35f4\u3609\u360ct\u0180;en\u121c\u35fc\u3602q\u0100;q\u1222\u35b2eq\u0100;q\u35e7\u35e4m;\u6ac8\u0100bp\u3611\u3613;\u6ad4;\u6ad6\u0180Aan\u361c\u3620\u362drr;\u61d9r\u0100hr\u3626\u3628\xeb\u222e\u0100;o\u0a2b\u0a29war;\u692alig\u803b\xdf\u40df\u0be1\u3651\u365d\u3660\u12ce\u3673\u3679\0\u367e\u36c2\0\0\0\0\0\u36db\u3703\0\u3709\u376c\0\0\0\u3787\u0272\u3656\0\0\u365bget;\u6316;\u43c4r\xeb\u0e5f\u0180aey\u3666\u366b\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uc000\ud835\udd31\u0200eiko\u3686\u369d\u36b5\u36bc\u01f2\u368b\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369b\u43b8ym;\u43d1\u0100cn\u36a2\u36b2k\u0100as\u36a8\u36aeppro\xf8\u12c1im\xbb\u12acs\xf0\u129e\u0100as\u36ba\u36ae\xf0\u12c1rn\u803b\xfe\u40fe\u01ec\u031f\u36c6\u22e7es\u8180\xd7;bd\u36cf\u36d0\u36d8\u40d7\u0100;a\u190f\u36d5r;\u6a31;\u6a30\u0180eps\u36e1\u36e3\u3700\xe1\u2a4d\u0200;bcf\u0486\u36ec\u36f0\u36f4ot;\u6336ir;\u6af1\u0100;o\u36f9\u36fc\uc000\ud835\udd65rk;\u6ada\xe1\u3362rime;\u6034\u0180aip\u370f\u3712\u3764d\xe5\u1248\u0380adempst\u3721\u374d\u3740\u3751\u3757\u375c\u375fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65b5own\xbb\u1dbbeft\u0100;e\u2800\u373e\xf1\u092e;\u625cight\u0100;e\u32aa\u374b\xf1\u105aot;\u65ecinus;\u6a3alus;\u6a39b;\u69cdime;\u6a3bezium;\u63e2\u0180cht\u3772\u377d\u3781\u0100ry\u3777\u377b;\uc000\ud835\udcc9;\u4446cy;\u445brok;\u4167\u0100io\u378b\u378ex\xf4\u1777head\u0100lr\u3797\u37a0eftarro\xf7\u084fightarrow\xbb\u0f5d\u0900AHabcdfghlmoprstuw\u37d0\u37d3\u37d7\u37e4\u37f0\u37fc\u380e\u381c\u3823\u3834\u3851\u385d\u386b\u38a9\u38cc\u38d2\u38ea\u38f6r\xf2\u03edar;\u6963\u0100cr\u37dc\u37e2ute\u803b\xfa\u40fa\xf2\u1150r\u01e3\u37ea\0\u37edy;\u445eve;\u416d\u0100iy\u37f5\u37farc\u803b\xfb\u40fb;\u4443\u0180abh\u3803\u3806\u380br\xf2\u13adlac;\u4171a\xf2\u13c3\u0100ir\u3813\u3818sht;\u697e;\uc000\ud835\udd32rave\u803b\xf9\u40f9\u0161\u3827\u3831r\u0100lr\u382c\u382e\xbb\u0957\xbb\u1083lk;\u6580\u0100ct\u3839\u384d\u026f\u383f\0\0\u384arn\u0100;e\u3845\u3846\u631cr\xbb\u3846op;\u630fri;\u65f8\u0100al\u3856\u385acr;\u416b\u80bb\xa8\u0349\u0100gp\u3862\u3866on;\u4173f;\uc000\ud835\udd66\u0300adhlsu\u114b\u3878\u387d\u1372\u3891\u38a0own\xe1\u13b3arpoon\u0100lr\u3888\u388cef\xf4\u382digh\xf4\u382fi\u0180;hl\u3899\u389a\u389c\u43c5\xbb\u13faon\xbb\u389aparrows;\u61c8\u0180cit\u38b0\u38c4\u38c8\u026f\u38b6\0\0\u38c1rn\u0100;e\u38bc\u38bd\u631dr\xbb\u38bdop;\u630eng;\u416fri;\u65f9cr;\uc000\ud835\udcca\u0180dir\u38d9\u38dd\u38e2ot;\u62f0lde;\u4169i\u0100;f\u3730\u38e8\xbb\u1813\u0100am\u38ef\u38f2r\xf2\u38a8l\u803b\xfc\u40fcangle;\u69a7\u0780ABDacdeflnoprsz\u391c\u391f\u3929\u392d\u39b5\u39b8\u39bd\u39df\u39e4\u39e8\u39f3\u39f9\u39fd\u3a01\u3a20r\xf2\u03f7ar\u0100;v\u3926\u3927\u6ae8;\u6ae9as\xe8\u03e1\u0100nr\u3932\u3937grt;\u699c\u0380eknprst\u34e3\u3946\u394b\u3952\u395d\u3964\u3996app\xe1\u2415othin\xe7\u1e96\u0180hir\u34eb\u2ec8\u3959op\xf4\u2fb5\u0100;h\u13b7\u3962\xef\u318d\u0100iu\u3969\u396dgm\xe1\u33b3\u0100bp\u3972\u3984setneq\u0100;q\u397d\u3980\uc000\u228a\ufe00;\uc000\u2acb\ufe00setneq\u0100;q\u398f\u3992\uc000\u228b\ufe00;\uc000\u2acc\ufe00\u0100hr\u399b\u399fet\xe1\u369ciangle\u0100lr\u39aa\u39afeft\xbb\u0925ight\xbb\u1051y;\u4432ash\xbb\u1036\u0180elr\u39c4\u39d2\u39d7\u0180;be\u2dea\u39cb\u39cfar;\u62bbq;\u625alip;\u62ee\u0100bt\u39dc\u1468a\xf2\u1469r;\uc000\ud835\udd33tr\xe9\u39aesu\u0100bp\u39ef\u39f1\xbb\u0d1c\xbb\u0d59pf;\uc000\ud835\udd67ro\xf0\u0efbtr\xe9\u39b4\u0100cu\u3a06\u3a0br;\uc000\ud835\udccb\u0100bp\u3a10\u3a18n\u0100Ee\u3980\u3a16\xbb\u397en\u0100Ee\u3992\u3a1e\xbb\u3990igzag;\u699a\u0380cefoprs\u3a36\u3a3b\u3a56\u3a5b\u3a54\u3a61\u3a6airc;\u4175\u0100di\u3a40\u3a51\u0100bg\u3a45\u3a49ar;\u6a5fe\u0100;q\u15fa\u3a4f;\u6259erp;\u6118r;\uc000\ud835\udd34pf;\uc000\ud835\udd68\u0100;e\u1479\u3a66at\xe8\u1479cr;\uc000\ud835\udccc\u0ae3\u178e\u3a87\0\u3a8b\0\u3a90\u3a9b\0\0\u3a9d\u3aa8\u3aab\u3aaf\0\0\u3ac3\u3ace\0\u3ad8\u17dc\u17dftr\xe9\u17d1r;\uc000\ud835\udd35\u0100Aa\u3a94\u3a97r\xf2\u03c3r\xf2\u09f6;\u43be\u0100Aa\u3aa1\u3aa4r\xf2\u03b8r\xf2\u09eba\xf0\u2713is;\u62fb\u0180dpt\u17a4\u3ab5\u3abe\u0100fl\u3aba\u17a9;\uc000\ud835\udd69im\xe5\u17b2\u0100Aa\u3ac7\u3acar\xf2\u03cer\xf2\u0a01\u0100cq\u3ad2\u17b8r;\uc000\ud835\udccd\u0100pt\u17d6\u3adcr\xe9\u17d4\u0400acefiosu\u3af0\u3afd\u3b08\u3b0c\u3b11\u3b15\u3b1b\u3b21c\u0100uy\u3af6\u3afbte\u803b\xfd\u40fd;\u444f\u0100iy\u3b02\u3b06rc;\u4177;\u444bn\u803b\xa5\u40a5r;\uc000\ud835\udd36cy;\u4457pf;\uc000\ud835\udd6acr;\uc000\ud835\udcce\u0100cm\u3b26\u3b29y;\u444el\u803b\xff\u40ff\u0500acdefhiosw\u3b42\u3b48\u3b54\u3b58\u3b64\u3b69\u3b6d\u3b74\u3b7a\u3b80cute;\u417a\u0100ay\u3b4d\u3b52ron;\u417e;\u4437ot;\u417c\u0100et\u3b5d\u3b61tr\xe6\u155fa;\u43b6r;\uc000\ud835\udd37cy;\u4436grarr;\u61ddpf;\uc000\ud835\udd6bcr;\uc000\ud835\udccf\u0100jn\u3b85\u3b87;\u600dj;\u600c" + .split("") + .map(function (c) { return c.charCodeAt(0); })); +//# sourceMappingURL=decode-data-html.js.map \ No newline at end of file diff --git a/node_modules/entities/lib/generated/decode-data-html.js.map b/node_modules/entities/lib/generated/decode-data-html.js.map new file mode 100644 index 0000000..5732f6f --- /dev/null +++ b/node_modules/entities/lib/generated/decode-data-html.js.map @@ -0,0 +1 @@ +{"version":3,"file":"decode-data-html.js","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["generated/decode-data-html.ts"],"names":[],"mappings":";AAAA,8CAA8C;;AAE9C,kBAAe,IAAI,WAAW;AAC1B,kBAAkB;AAClB,268CAA268C;KACt68C,KAAK,CAAC,EAAE,CAAC;KACT,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAf,CAAe,CAAC,CACnC,CAAC"} \ No newline at end of file diff --git a/node_modules/entities/lib/generated/decode-data-xml.d.ts b/node_modules/entities/lib/generated/decode-data-xml.d.ts new file mode 100644 index 0000000..4a3f533 --- /dev/null +++ b/node_modules/entities/lib/generated/decode-data-xml.d.ts @@ -0,0 +1,3 @@ +declare const _default: Uint16Array; +export default _default; +//# sourceMappingURL=decode-data-xml.d.ts.map \ No newline at end of file diff --git a/node_modules/entities/lib/generated/decode-data-xml.d.ts.map b/node_modules/entities/lib/generated/decode-data-xml.d.ts.map new file mode 100644 index 0000000..be2a9a2 --- /dev/null +++ b/node_modules/entities/lib/generated/decode-data-xml.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"decode-data-xml.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["generated/decode-data-xml.ts"],"names":[],"mappings":";AAEA,wBAKE"} \ No newline at end of file diff --git a/node_modules/entities/lib/generated/decode-data-xml.js b/node_modules/entities/lib/generated/decode-data-xml.js new file mode 100644 index 0000000..8fee783 --- /dev/null +++ b/node_modules/entities/lib/generated/decode-data-xml.js @@ -0,0 +1,9 @@ +"use strict"; +// Generated using scripts/write-decode-map.ts +Object.defineProperty(exports, "__esModule", { value: true }); +exports.default = new Uint16Array( +// prettier-ignore +"\u0200aglq\t\x15\x18\x1b\u026d\x0f\0\0\x12p;\u4026os;\u4027t;\u403et;\u403cuot;\u4022" + .split("") + .map(function (c) { return c.charCodeAt(0); })); +//# sourceMappingURL=decode-data-xml.js.map \ No newline at end of file diff --git a/node_modules/entities/lib/generated/decode-data-xml.js.map b/node_modules/entities/lib/generated/decode-data-xml.js.map new file mode 100644 index 0000000..569fef4 --- /dev/null +++ b/node_modules/entities/lib/generated/decode-data-xml.js.map @@ -0,0 +1 @@ +{"version":3,"file":"decode-data-xml.js","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["generated/decode-data-xml.ts"],"names":[],"mappings":";AAAA,8CAA8C;;AAE9C,kBAAe,IAAI,WAAW;AAC1B,kBAAkB;AAClB,uFAAuF;KAClF,KAAK,CAAC,EAAE,CAAC;KACT,GAAG,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAf,CAAe,CAAC,CACnC,CAAC"} \ No newline at end of file diff --git a/node_modules/entities/lib/generated/encode-html.d.ts b/node_modules/entities/lib/generated/encode-html.d.ts new file mode 100644 index 0000000..0704827 --- /dev/null +++ b/node_modules/entities/lib/generated/encode-html.d.ts @@ -0,0 +1,8 @@ +type EncodeTrieNode = string | { + v?: string; + n: number | Map; + o?: string; +}; +declare const _default: Map; +export default _default; +//# sourceMappingURL=encode-html.d.ts.map \ No newline at end of file diff --git a/node_modules/entities/lib/generated/encode-html.d.ts.map b/node_modules/entities/lib/generated/encode-html.d.ts.map new file mode 100644 index 0000000..e665a6e --- /dev/null +++ b/node_modules/entities/lib/generated/encode-html.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"encode-html.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["generated/encode-html.ts"],"names":[],"mappings":"AAEA,KAAK,cAAc,GACb,MAAM,GACN;IAAE,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;;AAY1E,wBAAo+tB"} \ No newline at end of file diff --git a/node_modules/entities/lib/generated/encode-html.js b/node_modules/entities/lib/generated/encode-html.js new file mode 100644 index 0000000..071e853 --- /dev/null +++ b/node_modules/entities/lib/generated/encode-html.js @@ -0,0 +1,12 @@ +"use strict"; +// Generated using scripts/write-encode-map.ts +Object.defineProperty(exports, "__esModule", { value: true }); +function restoreDiff(arr) { + for (var i = 1; i < arr.length; i++) { + arr[i][0] += arr[i - 1][0] + 1; + } + return arr; +} +// prettier-ignore +exports.default = new Map(/* #__PURE__ */ restoreDiff([[9, " "], [0, " "], [22, "!"], [0, """], [0, "#"], [0, "$"], [0, "%"], [0, "&"], [0, "'"], [0, "("], [0, ")"], [0, "*"], [0, "+"], [0, ","], [1, "."], [0, "/"], [10, ":"], [0, ";"], [0, { v: "<", n: 8402, o: "<⃒" }], [0, { v: "=", n: 8421, o: "=⃥" }], [0, { v: ">", n: 8402, o: ">⃒" }], [0, "?"], [0, "@"], [26, "["], [0, "\"], [0, "]"], [0, "^"], [0, "_"], [0, "`"], [5, { n: 106, o: "fj" }], [20, "{"], [0, "|"], [0, "}"], [34, " "], [0, "¡"], [0, "¢"], [0, "£"], [0, "¤"], [0, "¥"], [0, "¦"], [0, "§"], [0, "¨"], [0, "©"], [0, "ª"], [0, "«"], [0, "¬"], [0, "­"], [0, "®"], [0, "¯"], [0, "°"], [0, "±"], [0, "²"], [0, "³"], [0, "´"], [0, "µ"], [0, "¶"], [0, "·"], [0, "¸"], [0, "¹"], [0, "º"], [0, "»"], [0, "¼"], [0, "½"], [0, "¾"], [0, "¿"], [0, "À"], [0, "Á"], [0, "Â"], [0, "Ã"], [0, "Ä"], [0, "Å"], [0, "Æ"], [0, "Ç"], [0, "È"], [0, "É"], [0, "Ê"], [0, "Ë"], [0, "Ì"], [0, "Í"], [0, "Î"], [0, "Ï"], [0, "Ð"], [0, "Ñ"], [0, "Ò"], [0, "Ó"], [0, "Ô"], [0, "Õ"], [0, "Ö"], [0, "×"], [0, "Ø"], [0, "Ù"], [0, "Ú"], [0, "Û"], [0, "Ü"], [0, "Ý"], [0, "Þ"], [0, "ß"], [0, "à"], [0, "á"], [0, "â"], [0, "ã"], [0, "ä"], [0, "å"], [0, "æ"], [0, "ç"], [0, "è"], [0, "é"], [0, "ê"], [0, "ë"], [0, "ì"], [0, "í"], [0, "î"], [0, "ï"], [0, "ð"], [0, "ñ"], [0, "ò"], [0, "ó"], [0, "ô"], [0, "õ"], [0, "ö"], [0, "÷"], [0, "ø"], [0, "ù"], [0, "ú"], [0, "û"], [0, "ü"], [0, "ý"], [0, "þ"], [0, "ÿ"], [0, "Ā"], [0, "ā"], [0, "Ă"], [0, "ă"], [0, "Ą"], [0, "ą"], [0, "Ć"], [0, "ć"], [0, "Ĉ"], [0, "ĉ"], [0, "Ċ"], [0, "ċ"], [0, "Č"], [0, "č"], [0, "Ď"], [0, "ď"], [0, "Đ"], [0, "đ"], [0, "Ē"], [0, "ē"], [2, "Ė"], [0, "ė"], [0, "Ę"], [0, "ę"], [0, "Ě"], [0, "ě"], [0, "Ĝ"], [0, "ĝ"], [0, "Ğ"], [0, "ğ"], [0, "Ġ"], [0, "ġ"], [0, "Ģ"], [1, "Ĥ"], [0, "ĥ"], [0, "Ħ"], [0, "ħ"], [0, "Ĩ"], [0, "ĩ"], [0, "Ī"], [0, "ī"], [2, "Į"], [0, "į"], [0, "İ"], [0, "ı"], [0, "IJ"], [0, "ij"], [0, "Ĵ"], [0, "ĵ"], [0, "Ķ"], [0, "ķ"], [0, "ĸ"], [0, "Ĺ"], [0, "ĺ"], [0, "Ļ"], [0, "ļ"], [0, "Ľ"], [0, "ľ"], [0, "Ŀ"], [0, "ŀ"], [0, "Ł"], [0, "ł"], [0, "Ń"], [0, "ń"], [0, "Ņ"], [0, "ņ"], [0, "Ň"], [0, "ň"], [0, "ʼn"], [0, "Ŋ"], [0, "ŋ"], [0, "Ō"], [0, "ō"], [2, "Ő"], [0, "ő"], [0, "Œ"], [0, "œ"], [0, "Ŕ"], [0, "ŕ"], [0, "Ŗ"], [0, "ŗ"], [0, "Ř"], [0, "ř"], [0, "Ś"], [0, "ś"], [0, "Ŝ"], [0, "ŝ"], [0, "Ş"], [0, "ş"], [0, "Š"], [0, "š"], [0, "Ţ"], [0, "ţ"], [0, "Ť"], [0, "ť"], [0, "Ŧ"], [0, "ŧ"], [0, "Ũ"], [0, "ũ"], [0, "Ū"], [0, "ū"], [0, "Ŭ"], [0, "ŭ"], [0, "Ů"], [0, "ů"], [0, "Ű"], [0, "ű"], [0, "Ų"], [0, "ų"], [0, "Ŵ"], [0, "ŵ"], [0, "Ŷ"], [0, "ŷ"], [0, "Ÿ"], [0, "Ź"], [0, "ź"], [0, "Ż"], [0, "ż"], [0, "Ž"], [0, "ž"], [19, "ƒ"], [34, "Ƶ"], [63, "ǵ"], [65, "ȷ"], [142, "ˆ"], [0, "ˇ"], [16, "˘"], [0, "˙"], [0, "˚"], [0, "˛"], [0, "˜"], [0, "˝"], [51, "̑"], [127, "Α"], [0, "Β"], [0, "Γ"], [0, "Δ"], [0, "Ε"], [0, "Ζ"], [0, "Η"], [0, "Θ"], [0, "Ι"], [0, "Κ"], [0, "Λ"], [0, "Μ"], [0, "Ν"], [0, "Ξ"], [0, "Ο"], [0, "Π"], [0, "Ρ"], [1, "Σ"], [0, "Τ"], [0, "Υ"], [0, "Φ"], [0, "Χ"], [0, "Ψ"], [0, "Ω"], [7, "α"], [0, "β"], [0, "γ"], [0, "δ"], [0, "ε"], [0, "ζ"], [0, "η"], [0, "θ"], [0, "ι"], [0, "κ"], [0, "λ"], [0, "μ"], [0, "ν"], [0, "ξ"], [0, "ο"], [0, "π"], [0, "ρ"], [0, "ς"], [0, "σ"], [0, "τ"], [0, "υ"], [0, "φ"], [0, "χ"], [0, "ψ"], [0, "ω"], [7, "ϑ"], [0, "ϒ"], [2, "ϕ"], [0, "ϖ"], [5, "Ϝ"], [0, "ϝ"], [18, "ϰ"], [0, "ϱ"], [3, "ϵ"], [0, "϶"], [10, "Ё"], [0, "Ђ"], [0, "Ѓ"], [0, "Є"], [0, "Ѕ"], [0, "І"], [0, "Ї"], [0, "Ј"], [0, "Љ"], [0, "Њ"], [0, "Ћ"], [0, "Ќ"], [1, "Ў"], [0, "Џ"], [0, "А"], [0, "Б"], [0, "В"], [0, "Г"], [0, "Д"], [0, "Е"], [0, "Ж"], [0, "З"], [0, "И"], [0, "Й"], [0, "К"], [0, "Л"], [0, "М"], [0, "Н"], [0, "О"], [0, "П"], [0, "Р"], [0, "С"], [0, "Т"], [0, "У"], [0, "Ф"], [0, "Х"], [0, "Ц"], [0, "Ч"], [0, "Ш"], [0, "Щ"], [0, "Ъ"], [0, "Ы"], [0, "Ь"], [0, "Э"], [0, "Ю"], [0, "Я"], [0, "а"], [0, "б"], [0, "в"], [0, "г"], [0, "д"], [0, "е"], [0, "ж"], [0, "з"], [0, "и"], [0, "й"], [0, "к"], [0, "л"], [0, "м"], [0, "н"], [0, "о"], [0, "п"], [0, "р"], [0, "с"], [0, "т"], [0, "у"], [0, "ф"], [0, "х"], [0, "ц"], [0, "ч"], [0, "ш"], [0, "щ"], [0, "ъ"], [0, "ы"], [0, "ь"], [0, "э"], [0, "ю"], [0, "я"], [1, "ё"], [0, "ђ"], [0, "ѓ"], [0, "є"], [0, "ѕ"], [0, "і"], [0, "ї"], [0, "ј"], [0, "љ"], [0, "њ"], [0, "ћ"], [0, "ќ"], [1, "ў"], [0, "џ"], [7074, " "], [0, " "], [0, " "], [0, " "], [1, " "], [0, " "], [0, " "], [0, " "], [0, "​"], [0, "‌"], [0, "‍"], [0, "‎"], [0, "‏"], [0, "‐"], [2, "–"], [0, "—"], [0, "―"], [0, "‖"], [1, "‘"], [0, "’"], [0, "‚"], [1, "“"], [0, "”"], [0, "„"], [1, "†"], [0, "‡"], [0, "•"], [2, "‥"], [0, "…"], [9, "‰"], [0, "‱"], [0, "′"], [0, "″"], [0, "‴"], [0, "‵"], [3, "‹"], [0, "›"], [3, "‾"], [2, "⁁"], [1, "⁃"], [0, "⁄"], [10, "⁏"], [7, "⁗"], [7, { v: " ", n: 8202, o: "  " }], [0, "⁠"], [0, "⁡"], [0, "⁢"], [0, "⁣"], [72, "€"], [46, "⃛"], [0, "⃜"], [37, "ℂ"], [2, "℅"], [4, "ℊ"], [0, "ℋ"], [0, "ℌ"], [0, "ℍ"], [0, "ℎ"], [0, "ℏ"], [0, "ℐ"], [0, "ℑ"], [0, "ℒ"], [0, "ℓ"], [1, "ℕ"], [0, "№"], [0, "℗"], [0, "℘"], [0, "ℙ"], [0, "ℚ"], [0, "ℛ"], [0, "ℜ"], [0, "ℝ"], [0, "℞"], [3, "™"], [1, "ℤ"], [2, "℧"], [0, "ℨ"], [0, "℩"], [2, "ℬ"], [0, "ℭ"], [1, "ℯ"], [0, "ℰ"], [0, "ℱ"], [1, "ℳ"], [0, "ℴ"], [0, "ℵ"], [0, "ℶ"], [0, "ℷ"], [0, "ℸ"], [12, "ⅅ"], [0, "ⅆ"], [0, "ⅇ"], [0, "ⅈ"], [10, "⅓"], [0, "⅔"], [0, "⅕"], [0, "⅖"], [0, "⅗"], [0, "⅘"], [0, "⅙"], [0, "⅚"], [0, "⅛"], [0, "⅜"], [0, "⅝"], [0, "⅞"], [49, "←"], [0, "↑"], [0, "→"], [0, "↓"], [0, "↔"], [0, "↕"], [0, "↖"], [0, "↗"], [0, "↘"], [0, "↙"], [0, "↚"], [0, "↛"], [1, { v: "↝", n: 824, o: "↝̸" }], [0, "↞"], [0, "↟"], [0, "↠"], [0, "↡"], [0, "↢"], [0, "↣"], [0, "↤"], [0, "↥"], [0, "↦"], [0, "↧"], [1, "↩"], [0, "↪"], [0, "↫"], [0, "↬"], [0, "↭"], [0, "↮"], [1, "↰"], [0, "↱"], [0, "↲"], [0, "↳"], [1, "↵"], [0, "↶"], [0, "↷"], [2, "↺"], [0, "↻"], [0, "↼"], [0, "↽"], [0, "↾"], [0, "↿"], [0, "⇀"], [0, "⇁"], [0, "⇂"], [0, "⇃"], [0, "⇄"], [0, "⇅"], [0, "⇆"], [0, "⇇"], [0, "⇈"], [0, "⇉"], [0, "⇊"], [0, "⇋"], [0, "⇌"], [0, "⇍"], [0, "⇎"], [0, "⇏"], [0, "⇐"], [0, "⇑"], [0, "⇒"], [0, "⇓"], [0, "⇔"], [0, "⇕"], [0, "⇖"], [0, "⇗"], [0, "⇘"], [0, "⇙"], [0, "⇚"], [0, "⇛"], [1, "⇝"], [6, "⇤"], [0, "⇥"], [15, "⇵"], [7, "⇽"], [0, "⇾"], [0, "⇿"], [0, "∀"], [0, "∁"], [0, { v: "∂", n: 824, o: "∂̸" }], [0, "∃"], [0, "∄"], [0, "∅"], [1, "∇"], [0, "∈"], [0, "∉"], [1, "∋"], [0, "∌"], [2, "∏"], [0, "∐"], [0, "∑"], [0, "−"], [0, "∓"], [0, "∔"], [1, "∖"], [0, "∗"], [0, "∘"], [1, "√"], [2, "∝"], [0, "∞"], [0, "∟"], [0, { v: "∠", n: 8402, o: "∠⃒" }], [0, "∡"], [0, "∢"], [0, "∣"], [0, "∤"], [0, "∥"], [0, "∦"], [0, "∧"], [0, "∨"], [0, { v: "∩", n: 65024, o: "∩︀" }], [0, { v: "∪", n: 65024, o: "∪︀" }], [0, "∫"], [0, "∬"], [0, "∭"], [0, "∮"], [0, "∯"], [0, "∰"], [0, "∱"], [0, "∲"], [0, "∳"], [0, "∴"], [0, "∵"], [0, "∶"], [0, "∷"], [0, "∸"], [1, "∺"], [0, "∻"], [0, { v: "∼", n: 8402, o: "∼⃒" }], [0, { v: "∽", n: 817, o: "∽̱" }], [0, { v: "∾", n: 819, o: "∾̳" }], [0, "∿"], [0, "≀"], [0, "≁"], [0, { v: "≂", n: 824, o: "≂̸" }], [0, "≃"], [0, "≄"], [0, "≅"], [0, "≆"], [0, "≇"], [0, "≈"], [0, "≉"], [0, "≊"], [0, { v: "≋", n: 824, o: "≋̸" }], [0, "≌"], [0, { v: "≍", n: 8402, o: "≍⃒" }], [0, { v: "≎", n: 824, o: "≎̸" }], [0, { v: "≏", n: 824, o: "≏̸" }], [0, { v: "≐", n: 824, o: "≐̸" }], [0, "≑"], [0, "≒"], [0, "≓"], [0, "≔"], [0, "≕"], [0, "≖"], [0, "≗"], [1, "≙"], [0, "≚"], [1, "≜"], [2, "≟"], [0, "≠"], [0, { v: "≡", n: 8421, o: "≡⃥" }], [0, "≢"], [1, { v: "≤", n: 8402, o: "≤⃒" }], [0, { v: "≥", n: 8402, o: "≥⃒" }], [0, { v: "≦", n: 824, o: "≦̸" }], [0, { v: "≧", n: 824, o: "≧̸" }], [0, { v: "≨", n: 65024, o: "≨︀" }], [0, { v: "≩", n: 65024, o: "≩︀" }], [0, { v: "≪", n: new Map(/* #__PURE__ */ restoreDiff([[824, "≪̸"], [7577, "≪⃒"]])) }], [0, { v: "≫", n: new Map(/* #__PURE__ */ restoreDiff([[824, "≫̸"], [7577, "≫⃒"]])) }], [0, "≬"], [0, "≭"], [0, "≮"], [0, "≯"], [0, "≰"], [0, "≱"], [0, "≲"], [0, "≳"], [0, "≴"], [0, "≵"], [0, "≶"], [0, "≷"], [0, "≸"], [0, "≹"], [0, "≺"], [0, "≻"], [0, "≼"], [0, "≽"], [0, "≾"], [0, { v: "≿", n: 824, o: "≿̸" }], [0, "⊀"], [0, "⊁"], [0, { v: "⊂", n: 8402, o: "⊂⃒" }], [0, { v: "⊃", n: 8402, o: "⊃⃒" }], [0, "⊄"], [0, "⊅"], [0, "⊆"], [0, "⊇"], [0, "⊈"], [0, "⊉"], [0, { v: "⊊", n: 65024, o: "⊊︀" }], [0, { v: "⊋", n: 65024, o: "⊋︀" }], [1, "⊍"], [0, "⊎"], [0, { v: "⊏", n: 824, o: "⊏̸" }], [0, { v: "⊐", n: 824, o: "⊐̸" }], [0, "⊑"], [0, "⊒"], [0, { v: "⊓", n: 65024, o: "⊓︀" }], [0, { v: "⊔", n: 65024, o: "⊔︀" }], [0, "⊕"], [0, "⊖"], [0, "⊗"], [0, "⊘"], [0, "⊙"], [0, "⊚"], [0, "⊛"], [1, "⊝"], [0, "⊞"], [0, "⊟"], [0, "⊠"], [0, "⊡"], [0, "⊢"], [0, "⊣"], [0, "⊤"], [0, "⊥"], [1, "⊧"], [0, "⊨"], [0, "⊩"], [0, "⊪"], [0, "⊫"], [0, "⊬"], [0, "⊭"], [0, "⊮"], [0, "⊯"], [0, "⊰"], [1, "⊲"], [0, "⊳"], [0, { v: "⊴", n: 8402, o: "⊴⃒" }], [0, { v: "⊵", n: 8402, o: "⊵⃒" }], [0, "⊶"], [0, "⊷"], [0, "⊸"], [0, "⊹"], [0, "⊺"], [0, "⊻"], [1, "⊽"], [0, "⊾"], [0, "⊿"], [0, "⋀"], [0, "⋁"], [0, "⋂"], [0, "⋃"], [0, "⋄"], [0, "⋅"], [0, "⋆"], [0, "⋇"], [0, "⋈"], [0, "⋉"], [0, "⋊"], [0, "⋋"], [0, "⋌"], [0, "⋍"], [0, "⋎"], [0, "⋏"], [0, "⋐"], [0, "⋑"], [0, "⋒"], [0, "⋓"], [0, "⋔"], [0, "⋕"], [0, "⋖"], [0, "⋗"], [0, { v: "⋘", n: 824, o: "⋘̸" }], [0, { v: "⋙", n: 824, o: "⋙̸" }], [0, { v: "⋚", n: 65024, o: "⋚︀" }], [0, { v: "⋛", n: 65024, o: "⋛︀" }], [2, "⋞"], [0, "⋟"], [0, "⋠"], [0, "⋡"], [0, "⋢"], [0, "⋣"], [2, "⋦"], [0, "⋧"], [0, "⋨"], [0, "⋩"], [0, "⋪"], [0, "⋫"], [0, "⋬"], [0, "⋭"], [0, "⋮"], [0, "⋯"], [0, "⋰"], [0, "⋱"], [0, "⋲"], [0, "⋳"], [0, "⋴"], [0, { v: "⋵", n: 824, o: "⋵̸" }], [0, "⋶"], [0, "⋷"], [1, { v: "⋹", n: 824, o: "⋹̸" }], [0, "⋺"], [0, "⋻"], [0, "⋼"], [0, "⋽"], [0, "⋾"], [6, "⌅"], [0, "⌆"], [1, "⌈"], [0, "⌉"], [0, "⌊"], [0, "⌋"], [0, "⌌"], [0, "⌍"], [0, "⌎"], [0, "⌏"], [0, "⌐"], [1, "⌒"], [0, "⌓"], [1, "⌕"], [0, "⌖"], [5, "⌜"], [0, "⌝"], [0, "⌞"], [0, "⌟"], [2, "⌢"], [0, "⌣"], [9, "⌭"], [0, "⌮"], [7, "⌶"], [6, "⌽"], [1, "⌿"], [60, "⍼"], [51, "⎰"], [0, "⎱"], [2, "⎴"], [0, "⎵"], [0, "⎶"], [37, "⏜"], [0, "⏝"], [0, "⏞"], [0, "⏟"], [2, "⏢"], [4, "⏧"], [59, "␣"], [164, "Ⓢ"], [55, "─"], [1, "│"], [9, "┌"], [3, "┐"], [3, "└"], [3, "┘"], [3, "├"], [7, "┤"], [7, "┬"], [7, "┴"], [7, "┼"], [19, "═"], [0, "║"], [0, "╒"], [0, "╓"], [0, "╔"], [0, "╕"], [0, "╖"], [0, "╗"], [0, "╘"], [0, "╙"], [0, "╚"], [0, "╛"], [0, "╜"], [0, "╝"], [0, "╞"], [0, "╟"], [0, "╠"], [0, "╡"], [0, "╢"], [0, "╣"], [0, "╤"], [0, "╥"], [0, "╦"], [0, "╧"], [0, "╨"], [0, "╩"], [0, "╪"], [0, "╫"], [0, "╬"], [19, "▀"], [3, "▄"], [3, "█"], [8, "░"], [0, "▒"], [0, "▓"], [13, "□"], [8, "▪"], [0, "▫"], [1, "▭"], [0, "▮"], [2, "▱"], [1, "△"], [0, "▴"], [0, "▵"], [2, "▸"], [0, "▹"], [3, "▽"], [0, "▾"], [0, "▿"], [2, "◂"], [0, "◃"], [6, "◊"], [0, "○"], [32, "◬"], [2, "◯"], [8, "◸"], [0, "◹"], [0, "◺"], [0, "◻"], [0, "◼"], [8, "★"], [0, "☆"], [7, "☎"], [49, "♀"], [1, "♂"], [29, "♠"], [2, "♣"], [1, "♥"], [0, "♦"], [3, "♪"], [2, "♭"], [0, "♮"], [0, "♯"], [163, "✓"], [3, "✗"], [8, "✠"], [21, "✶"], [33, "❘"], [25, "❲"], [0, "❳"], [84, "⟈"], [0, "⟉"], [28, "⟦"], [0, "⟧"], [0, "⟨"], [0, "⟩"], [0, "⟪"], [0, "⟫"], [0, "⟬"], [0, "⟭"], [7, "⟵"], [0, "⟶"], [0, "⟷"], [0, "⟸"], [0, "⟹"], [0, "⟺"], [1, "⟼"], [2, "⟿"], [258, "⤂"], [0, "⤃"], [0, "⤄"], [0, "⤅"], [6, "⤌"], [0, "⤍"], [0, "⤎"], [0, "⤏"], [0, "⤐"], [0, "⤑"], [0, "⤒"], [0, "⤓"], [2, "⤖"], [2, "⤙"], [0, "⤚"], [0, "⤛"], [0, "⤜"], [0, "⤝"], [0, "⤞"], [0, "⤟"], [0, "⤠"], [2, "⤣"], [0, "⤤"], [0, "⤥"], [0, "⤦"], [0, "⤧"], [0, "⤨"], [0, "⤩"], [0, "⤪"], [8, { v: "⤳", n: 824, o: "⤳̸" }], [1, "⤵"], [0, "⤶"], [0, "⤷"], [0, "⤸"], [0, "⤹"], [2, "⤼"], [0, "⤽"], [7, "⥅"], [2, "⥈"], [0, "⥉"], [0, "⥊"], [0, "⥋"], [2, "⥎"], [0, "⥏"], [0, "⥐"], [0, "⥑"], [0, "⥒"], [0, "⥓"], [0, "⥔"], [0, "⥕"], [0, "⥖"], [0, "⥗"], [0, "⥘"], [0, "⥙"], [0, "⥚"], [0, "⥛"], [0, "⥜"], [0, "⥝"], [0, "⥞"], [0, "⥟"], [0, "⥠"], [0, "⥡"], [0, "⥢"], [0, "⥣"], [0, "⥤"], [0, "⥥"], [0, "⥦"], [0, "⥧"], [0, "⥨"], [0, "⥩"], [0, "⥪"], [0, "⥫"], [0, "⥬"], [0, "⥭"], [0, "⥮"], [0, "⥯"], [0, "⥰"], [0, "⥱"], [0, "⥲"], [0, "⥳"], [0, "⥴"], [0, "⥵"], [0, "⥶"], [1, "⥸"], [0, "⥹"], [1, "⥻"], [0, "⥼"], [0, "⥽"], [0, "⥾"], [0, "⥿"], [5, "⦅"], [0, "⦆"], [4, "⦋"], [0, "⦌"], [0, "⦍"], [0, "⦎"], [0, "⦏"], [0, "⦐"], [0, "⦑"], [0, "⦒"], [0, "⦓"], [0, "⦔"], [0, "⦕"], [0, "⦖"], [3, "⦚"], [1, "⦜"], [0, "⦝"], [6, "⦤"], [0, "⦥"], [0, "⦦"], [0, "⦧"], [0, "⦨"], [0, "⦩"], [0, "⦪"], [0, "⦫"], [0, "⦬"], [0, "⦭"], [0, "⦮"], [0, "⦯"], [0, "⦰"], [0, "⦱"], [0, "⦲"], [0, "⦳"], [0, "⦴"], [0, "⦵"], [0, "⦶"], [0, "⦷"], [1, "⦹"], [1, "⦻"], [0, "⦼"], [1, "⦾"], [0, "⦿"], [0, "⧀"], [0, "⧁"], [0, "⧂"], [0, "⧃"], [0, "⧄"], [0, "⧅"], [3, "⧉"], [3, "⧍"], [0, "⧎"], [0, { v: "⧏", n: 824, o: "⧏̸" }], [0, { v: "⧐", n: 824, o: "⧐̸" }], [11, "⧜"], [0, "⧝"], [0, "⧞"], [4, "⧣"], [0, "⧤"], [0, "⧥"], [5, "⧫"], [8, "⧴"], [1, "⧶"], [9, "⨀"], [0, "⨁"], [0, "⨂"], [1, "⨄"], [1, "⨆"], [5, "⨌"], [0, "⨍"], [2, "⨐"], [0, "⨑"], [0, "⨒"], [0, "⨓"], [0, "⨔"], [0, "⨕"], [0, "⨖"], [0, "⨗"], [10, "⨢"], [0, "⨣"], [0, "⨤"], [0, "⨥"], [0, "⨦"], [0, "⨧"], [1, "⨩"], [0, "⨪"], [2, "⨭"], [0, "⨮"], [0, "⨯"], [0, "⨰"], [0, "⨱"], [1, "⨳"], [0, "⨴"], [0, "⨵"], [0, "⨶"], [0, "⨷"], [0, "⨸"], [0, "⨹"], [0, "⨺"], [0, "⨻"], [0, "⨼"], [2, "⨿"], [0, "⩀"], [1, "⩂"], [0, "⩃"], [0, "⩄"], [0, "⩅"], [0, "⩆"], [0, "⩇"], [0, "⩈"], [0, "⩉"], [0, "⩊"], [0, "⩋"], [0, "⩌"], [0, "⩍"], [2, "⩐"], [2, "⩓"], [0, "⩔"], [0, "⩕"], [0, "⩖"], [0, "⩗"], [0, "⩘"], [1, "⩚"], [0, "⩛"], [0, "⩜"], [0, "⩝"], [1, "⩟"], [6, "⩦"], [3, "⩪"], [2, { v: "⩭", n: 824, o: "⩭̸" }], [0, "⩮"], [0, "⩯"], [0, { v: "⩰", n: 824, o: "⩰̸" }], [0, "⩱"], [0, "⩲"], [0, "⩳"], [0, "⩴"], [0, "⩵"], [1, "⩷"], [0, "⩸"], [0, "⩹"], [0, "⩺"], [0, "⩻"], [0, "⩼"], [0, { v: "⩽", n: 824, o: "⩽̸" }], [0, { v: "⩾", n: 824, o: "⩾̸" }], [0, "⩿"], [0, "⪀"], [0, "⪁"], [0, "⪂"], [0, "⪃"], [0, "⪄"], [0, "⪅"], [0, "⪆"], [0, "⪇"], [0, "⪈"], [0, "⪉"], [0, "⪊"], [0, "⪋"], [0, "⪌"], [0, "⪍"], [0, "⪎"], [0, "⪏"], [0, "⪐"], [0, "⪑"], [0, "⪒"], [0, "⪓"], [0, "⪔"], [0, "⪕"], [0, "⪖"], [0, "⪗"], [0, "⪘"], [0, "⪙"], [0, "⪚"], [2, "⪝"], [0, "⪞"], [0, "⪟"], [0, "⪠"], [0, { v: "⪡", n: 824, o: "⪡̸" }], [0, { v: "⪢", n: 824, o: "⪢̸" }], [1, "⪤"], [0, "⪥"], [0, "⪦"], [0, "⪧"], [0, "⪨"], [0, "⪩"], [0, "⪪"], [0, "⪫"], [0, { v: "⪬", n: 65024, o: "⪬︀" }], [0, { v: "⪭", n: 65024, o: "⪭︀" }], [0, "⪮"], [0, { v: "⪯", n: 824, o: "⪯̸" }], [0, { v: "⪰", n: 824, o: "⪰̸" }], [2, "⪳"], [0, "⪴"], [0, "⪵"], [0, "⪶"], [0, "⪷"], [0, "⪸"], [0, "⪹"], [0, "⪺"], [0, "⪻"], [0, "⪼"], [0, "⪽"], [0, "⪾"], [0, "⪿"], [0, "⫀"], [0, "⫁"], [0, "⫂"], [0, "⫃"], [0, "⫄"], [0, { v: "⫅", n: 824, o: "⫅̸" }], [0, { v: "⫆", n: 824, o: "⫆̸" }], [0, "⫇"], [0, "⫈"], [2, { v: "⫋", n: 65024, o: "⫋︀" }], [0, { v: "⫌", n: 65024, o: "⫌︀" }], [2, "⫏"], [0, "⫐"], [0, "⫑"], [0, "⫒"], [0, "⫓"], [0, "⫔"], [0, "⫕"], [0, "⫖"], [0, "⫗"], [0, "⫘"], [0, "⫙"], [0, "⫚"], [0, "⫛"], [8, "⫤"], [1, "⫦"], [0, "⫧"], [0, "⫨"], [0, "⫩"], [1, "⫫"], [0, "⫬"], [0, "⫭"], [0, "⫮"], [0, "⫯"], [0, "⫰"], [0, "⫱"], [0, "⫲"], [0, "⫳"], [9, { v: "⫽", n: 8421, o: "⫽⃥" }], [44343, { n: new Map(/* #__PURE__ */ restoreDiff([[56476, "𝒜"], [1, "𝒞"], [0, "𝒟"], [2, "𝒢"], [2, "𝒥"], [0, "𝒦"], [2, "𝒩"], [0, "𝒪"], [0, "𝒫"], [0, "𝒬"], [1, "𝒮"], [0, "𝒯"], [0, "𝒰"], [0, "𝒱"], [0, "𝒲"], [0, "𝒳"], [0, "𝒴"], [0, "𝒵"], [0, "𝒶"], [0, "𝒷"], [0, "𝒸"], [0, "𝒹"], [1, "𝒻"], [1, "𝒽"], [0, "𝒾"], [0, "𝒿"], [0, "𝓀"], [0, "𝓁"], [0, "𝓂"], [0, "𝓃"], [1, "𝓅"], [0, "𝓆"], [0, "𝓇"], [0, "𝓈"], [0, "𝓉"], [0, "𝓊"], [0, "𝓋"], [0, "𝓌"], [0, "𝓍"], [0, "𝓎"], [0, "𝓏"], [52, "𝔄"], [0, "𝔅"], [1, "𝔇"], [0, "𝔈"], [0, "𝔉"], [0, "𝔊"], [2, "𝔍"], [0, "𝔎"], [0, "𝔏"], [0, "𝔐"], [0, "𝔑"], [0, "𝔒"], [0, "𝔓"], [0, "𝔔"], [1, "𝔖"], [0, "𝔗"], [0, "𝔘"], [0, "𝔙"], [0, "𝔚"], [0, "𝔛"], [0, "𝔜"], [1, "𝔞"], [0, "𝔟"], [0, "𝔠"], [0, "𝔡"], [0, "𝔢"], [0, "𝔣"], [0, "𝔤"], [0, "𝔥"], [0, "𝔦"], [0, "𝔧"], [0, "𝔨"], [0, "𝔩"], [0, "𝔪"], [0, "𝔫"], [0, "𝔬"], [0, "𝔭"], [0, "𝔮"], [0, "𝔯"], [0, "𝔰"], [0, "𝔱"], [0, "𝔲"], [0, "𝔳"], [0, "𝔴"], [0, "𝔵"], [0, "𝔶"], [0, "𝔷"], [0, "𝔸"], [0, "𝔹"], [1, "𝔻"], [0, "𝔼"], [0, "𝔽"], [0, "𝔾"], [1, "𝕀"], [0, "𝕁"], [0, "𝕂"], [0, "𝕃"], [0, "𝕄"], [1, "𝕆"], [3, "𝕊"], [0, "𝕋"], [0, "𝕌"], [0, "𝕍"], [0, "𝕎"], [0, "𝕏"], [0, "𝕐"], [1, "𝕒"], [0, "𝕓"], [0, "𝕔"], [0, "𝕕"], [0, "𝕖"], [0, "𝕗"], [0, "𝕘"], [0, "𝕙"], [0, "𝕚"], [0, "𝕛"], [0, "𝕜"], [0, "𝕝"], [0, "𝕞"], [0, "𝕟"], [0, "𝕠"], [0, "𝕡"], [0, "𝕢"], [0, "𝕣"], [0, "𝕤"], [0, "𝕥"], [0, "𝕦"], [0, "𝕧"], [0, "𝕨"], [0, "𝕩"], [0, "𝕪"], [0, "𝕫"]])) }], [8906, "ff"], [0, "fi"], [0, "fl"], [0, "ffi"], [0, "ffl"]])); +//# sourceMappingURL=encode-html.js.map \ No newline at end of file diff --git a/node_modules/entities/lib/generated/encode-html.js.map b/node_modules/entities/lib/generated/encode-html.js.map new file mode 100644 index 0000000..2d2d9be --- /dev/null +++ b/node_modules/entities/lib/generated/encode-html.js.map @@ -0,0 +1 @@ +{"version":3,"file":"encode-html.js","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["generated/encode-html.ts"],"names":[],"mappings":"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CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,EAAE,EAAC,QAAQ,CAAC,EAAC,CAAC,EAAE,EAAC,SAAS,CAAC,EAAC,CAAC,EAAE,EAAC,UAAU,CAAC,EAAC,CAAC,EAAE,EAAC,SAAS,CAAC,EAAC,CAAC,GAAG,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,EAAE,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,kBAAkB,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,EAAE,EAAC,aAAa,CAAC,EAAC,CAAC,GAAG,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,EAAE,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,eAAe,CAAC,EAAC,CAAC,EAAE,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,IAAI,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,aAAa,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,uBAAuB,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,mBAAmB,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,yBAAyB,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,aAAa,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,EAAE,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,eAAe,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,cAAc,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,kBAAkB,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,EAAE,EAAC,QAAQ,CAAC,EAAC,CAAC,EAAE,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,EAAE,EAAC,aAAa,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,cAAc,CAAC,EAAC,CAAC,CAAC,EAAC,aAAa,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,EAAE,EAAC,wBAAwB,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,EAAE,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,EAAE,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,gBAAgB,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,eAAe,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,mBAAmB,CAAC,EAAC,CAAC,CAAC,EAAC,kBAAkB,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,UAAU,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,gBAAgB,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,gBAAgB,CAAC,EAAC,CAAC,CAAC,EAAC,iBAAiB,CAAC,EAAC,CAAC,CAAC,EAAC,kBAAkB,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,kBAAkB,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,mBAAmB,CAAC,EAAC,CAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,iBAAiB,CAAC,EAAC,CAAC,CAAC,EAAC,kBAAkB,CAAC,EAAC,CAAC,CAAC,EAAC,iBAAiB,CAAC,EAAC,CAAC,CAAC,EAAC,gBAAgB,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,mBAAmB,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,uBAAuB,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,uBAAuB,CAAC,EAAC,CAAC,CAAC,EAAC,kBAAkB,CAAC,EAAC,CAAC,CAAC,EAAC,cAAc,CAAC,EAAC,CAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,qBAAqB,CAAC,EAAC,CAAC,CAAC,EAAC,eAAe,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,mBAAmB,CAAC,EAAC,CAAC,CAAC,EAAC,iBAAiB,CAAC,EAAC,CAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,wBAAwB,CAAC,EAAC,CAAC,CAAC,EAAC,qBAAqB,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,EAAE,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,cAAc,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,aAAa,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,aAAa,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,OAAO,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,qBAAqB,CAAC,EAAC,CAAC,CAAC,EAAC,wBAAwB,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,OAAO,EAAC,CAAC,EAAC,KAAK,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,OAAO,EAAC,CAAC,EAAC,KAAK,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,4BAA4B,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,OAAO,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,WAAW,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,OAAO,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,iBAAiB,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,iBAAiB,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,WAAW,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,UAAU,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,aAAa,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,aAAa,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,WAAW,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,OAAO,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,OAAO,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,OAAO,EAAC,CAAC,EAAC,KAAK,EAAC,CAAC,EAAC,aAAa,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,OAAO,EAAC,CAAC,EAAC,KAAK,EAAC,CAAC,EAAC,aAAa,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,GAAG,CAAgB,eAAe,CAAA,WAAW,CAAC,CAAC,CAAC,GAAG,EAAC,QAAQ,CAAC,EAAC,CAAC,IAAI,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,IAAI,GAAG,CAAgB,eAAe,CAAA,WAAW,CAAC,CAAC,CAAC,GAAG,EAAC,QAAQ,CAAC,EAAC,CAAC,IAAI,EAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,aAAa,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,gBAAgB,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,eAAe,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,kBAAkB,CAAC,EAAC,CAAC,CAAC,EAAC,kBAAkB,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,MAAM,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,iBAAiB,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,oBAAoB,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,eAAe,CAAC,EAAC,CAAC,CAAC,EAAC,eAAe,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,OAAO,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,aAAa,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,OAAO,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,eAAe,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,kBAAkB,CAAC,EAAC,CAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,KAAK,EAAC,CAAC,EAAC,gBAAgB,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,KAAK,EAAC,CAAC,EAAC,gBAAgB,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,aAAa,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,mBAAmB,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,qBAAqB,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,KAAK,EAAC,CAAC,EAAC,UAAU,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,KAAK,EAAC,CAAC,EAAC,UAAU,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,cAAc,CAAC,EAAC,CAAC,CAAC,EAAC,eAAe,CAAC,EAAC,CAAC,CAAC,EAAC,eAAe,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,aAAa,CAAC,EAAC,CAAC,CAAC,EAAC,eAAe,CAAC,EAAC,CAAC,CAAC,EAAC,cAAc,CAAC,EAAC,CAAC,CAAC,EAAC,eAAe,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,aAAa,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,kBAAkB,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,gBAAgB,CAAC,EAAC,CAAC,CAAC,EAAC,iBAAiB,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,qBAAqB,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,WAAW,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,sBAAsB,EAAC,CAAC,EAAC,IAAI,EAAC,CAAC,EAAC,WAAW,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,iBAAiB,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,kBAAkB,CAAC,EAAC,CAAC,CAAC,EAAC,mBAAmB,CAAC,EAAC,CAAC,CAAC,EAAC,aAAa,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,cAAc,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,OAAO,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,MAAM,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,OAAO,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,OAAO,EAAC,CAAC,EAAC,KAAK,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,OAAO,EAAC,CAAC,EAAC,KAAK,EAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,yBAAyB,CAAC,EAAC,CAAC,CAAC,EAAC,yBAAyB,CAAC,EAAC,CAAC,CAAC,EAAC,wBAAwB,CAAC,EAAC,CAAC,CAAC,EAAC,0BAA0B,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,yBAAyB,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,WAAW,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,YAAY,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,UAAU,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,aAAa,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,EAAE,EAAC,WAAW,CAAC,EAAC,CAAC,EAAE,EAAC,cAAc,CAAC,EAAC,CAAC,CAAC,EAAC,cAAc,CAAC,EAAC,CAAC,CAAC,EAAC,eAAe,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,EAAE,EAAC,mBAAmB,CAAC,EAAC,CAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,aAAa,CAAC,EAAC,CAAC,CAAC,EAAC,cAAc,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,EAAE,EAAC,SAAS,CAAC,EAAC,CAAC,GAAG,EAAC,YAAY,CAAC,EAAC,CAAC,EAAE,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,EAAE,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,EAAE,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,EAAE,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,eAAe,CAAC,EAAC,CAAC,CAAC,EAAC,wBAAwB,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,iBAAiB,CAAC,EAAC,CAAC,CAAC,EAAC,iBAAiB,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,sBAAsB,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,mBAAmB,CAAC,EAAC,CAAC,CAAC,EAAC,qBAAqB,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,qBAAqB,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,EAAE,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,qBAAqB,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,EAAE,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,EAAE,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,eAAe,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,GAAG,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,EAAE,EAAC,QAAQ,CAAC,EAAC,CAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,EAAE,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,EAAE,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,EAAE,EAAC,qBAAqB,CAAC,EAAC,CAAC,CAAC,EAAC,sBAAsB,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,iBAAiB,CAAC,EAAC,CAAC,CAAC,EAAC,kBAAkB,CAAC,EAAC,CAAC,CAAC,EAAC,sBAAsB,CAAC,EAAC,CAAC,CAAC,EAAC,uBAAuB,CAAC,EAAC,CAAC,CAAC,EAAC,wBAAwB,CAAC,EAAC,CAAC,CAAC,EAAC,4BAA4B,CAAC,EAAC,CAAC,CAAC,EAAC,cAAc,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,GAAG,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,cAAc,CAAC,EAAC,CAAC,CAAC,EAAC,gBAAgB,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,EAAC,CAAC,EAAC,SAAS,EAAC,CAAC,EAAC,GAAG,EAAC,CAAC,EAAC,UAAU,EAAC,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,mBAAmB,CAAC,EAAC,CAAC,CAAC,EAAC,qBAAqB,CAAC,EAAC,CAAC,CAAC,EAAC,uBAAuB,CAAC,EAAC,CAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,iBAAiB,CAAC,EAAC,CAAC,CAAC,EAAC,kBAAkB,CAAC,EAAC,CAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,sBAAsB,CAAC,EAAC,CAAC,CAAC,EAAC,qBAAqB,CAAC,EAAC,CAAC,CAAC,EAAC,sBAAsB,CAAC,EAAC,CAAC,CAAC,EAAC,mBAAmB,CAAC,EAAC,CAAC,CAAC,EAAC,qBAAqB,CAAC,EAAC,CAAC,CAAC,EAAC,iBAAiB,CAAC,EAAC,CAAC,CAAC,EAAC,kBAAkB,CAAC,EAAC,CAAC,CAAC,EAAC,oBAAoB,CAAC,EAAC,CAAC,CAAC,EAAC,sBAAsB,CAAC,EAAC,CAAC,CAAC,EAAC,qBAAqB,CAAC,EAAC,CAAC,CAAC,EAAC,sBAAsB,CAAC,EAAC,CAAC,CAAC,EAAC,mBAAmB,CAAC,EAAC,CAAC,CAAC,EAAC,qBAAqB,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,gBAAgB,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,YAAY,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,WAAW,CAAC,EAA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AAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,EAAE,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,OAAO,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,EAAC,CAAC,CAAC,EAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAC,CAAC,EAAC,CAAC,IAAI,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,SAAS,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,EAAC,CAAC,CAAC,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC"} \ No newline at end of file diff --git a/node_modules/entities/lib/index.d.ts b/node_modules/entities/lib/index.d.ts new file mode 100644 index 0000000..dd4eb11 --- /dev/null +++ b/node_modules/entities/lib/index.d.ts @@ -0,0 +1,96 @@ +import { DecodingMode } from "./decode.js"; +/** The level of entities to support. */ +export declare enum EntityLevel { + /** Support only XML entities. */ + XML = 0, + /** Support HTML entities, which are a superset of XML entities. */ + HTML = 1 +} +export declare enum EncodingMode { + /** + * The output is UTF-8 encoded. Only characters that need escaping within + * XML will be escaped. + */ + UTF8 = 0, + /** + * The output consists only of ASCII characters. Characters that need + * escaping within HTML, and characters that aren't ASCII characters will + * be escaped. + */ + ASCII = 1, + /** + * Encode all characters that have an equivalent entity, as well as all + * characters that are not ASCII characters. + */ + Extensive = 2, + /** + * Encode all characters that have to be escaped in HTML attributes, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + */ + Attribute = 3, + /** + * Encode all characters that have to be escaped in HTML text, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + */ + Text = 4 +} +export interface DecodingOptions { + /** + * The level of entities to support. + * @default {@link EntityLevel.XML} + */ + level?: EntityLevel; + /** + * Decoding mode. If `Legacy`, will support legacy entities not terminated + * with a semicolon (`;`). + * + * Always `Strict` for XML. For HTML, set this to `true` if you are parsing + * an attribute value. + * + * The deprecated `decodeStrict` function defaults this to `Strict`. + * + * @default {@link DecodingMode.Legacy} + */ + mode?: DecodingMode | undefined; +} +/** + * Decodes a string with entities. + * + * @param data String to decode. + * @param options Decoding options. + */ +export declare function decode(data: string, options?: DecodingOptions | EntityLevel): string; +/** + * Decodes a string with entities. Does not allow missing trailing semicolons for entities. + * + * @param data String to decode. + * @param options Decoding options. + * @deprecated Use `decode` with the `mode` set to `Strict`. + */ +export declare function decodeStrict(data: string, options?: DecodingOptions | EntityLevel): string; +/** + * Options for `encode`. + */ +export interface EncodingOptions { + /** + * The level of entities to support. + * @default {@link EntityLevel.XML} + */ + level?: EntityLevel; + /** + * Output format. + * @default {@link EncodingMode.Extensive} + */ + mode?: EncodingMode; +} +/** + * Encodes a string with entities. + * + * @param data String to encode. + * @param options Encoding options. + */ +export declare function encode(data: string, options?: EncodingOptions | EntityLevel): string; +export { encodeXML, escape, escapeUTF8, escapeAttribute, escapeText, } from "./escape.js"; +export { encodeHTML, encodeNonAsciiHTML, encodeHTML as encodeHTML4, encodeHTML as encodeHTML5, } from "./encode.js"; +export { EntityDecoder, DecodingMode, decodeXML, decodeHTML, decodeHTMLStrict, decodeHTMLAttribute, decodeHTML as decodeHTML4, decodeHTML as decodeHTML5, decodeHTMLStrict as decodeHTML4Strict, decodeHTMLStrict as decodeHTML5Strict, decodeXML as decodeXMLStrict, } from "./decode.js"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/entities/lib/index.d.ts.map b/node_modules/entities/lib/index.d.ts.map new file mode 100644 index 0000000..cfeef9f --- /dev/null +++ b/node_modules/entities/lib/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,YAAY,EAAE,MAAM,aAAa,CAAC;AASlE,wCAAwC;AACxC,oBAAY,WAAW;IACnB,iCAAiC;IACjC,GAAG,IAAI;IACP,mEAAmE;IACnE,IAAI,IAAI;CACX;AAED,oBAAY,YAAY;IACpB;;;OAGG;IACH,IAAI,IAAA;IACJ;;;;OAIG;IACH,KAAK,IAAA;IACL;;;OAGG;IACH,SAAS,IAAA;IACT;;;OAGG;IACH,SAAS,IAAA;IACT;;;OAGG;IACH,IAAI,IAAA;CACP;AAED,MAAM,WAAW,eAAe;IAC5B;;;OAGG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;;;;;;;;OAUG;IACH,IAAI,CAAC,EAAE,YAAY,GAAG,SAAS,CAAC;CACnC;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAe,GAAG,WAA6B,GACzD,MAAM,CASR;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CACxB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAe,GAAG,WAA6B,GACzD,MAAM,CAKR;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B;;;OAGG;IACH,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,YAAY,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAClB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,eAAe,GAAG,WAA6B,GACzD,MAAM,CAkBR;AAED,OAAO,EACH,SAAS,EACT,MAAM,EACN,UAAU,EACV,eAAe,EACf,UAAU,GACb,MAAM,aAAa,CAAC;AAErB,OAAO,EACH,UAAU,EACV,kBAAkB,EAElB,UAAU,IAAI,WAAW,EACzB,UAAU,IAAI,WAAW,GAC5B,MAAM,aAAa,CAAC;AAErB,OAAO,EACH,aAAa,EACb,YAAY,EACZ,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,mBAAmB,EAEnB,UAAU,IAAI,WAAW,EACzB,UAAU,IAAI,WAAW,EACzB,gBAAgB,IAAI,iBAAiB,EACrC,gBAAgB,IAAI,iBAAiB,EACrC,SAAS,IAAI,eAAe,GAC/B,MAAM,aAAa,CAAC"} \ No newline at end of file diff --git a/node_modules/entities/lib/index.js b/node_modules/entities/lib/index.js new file mode 100644 index 0000000..f809b1b --- /dev/null +++ b/node_modules/entities/lib/index.js @@ -0,0 +1,126 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.decodeXMLStrict = exports.decodeHTML5Strict = exports.decodeHTML4Strict = exports.decodeHTML5 = exports.decodeHTML4 = exports.decodeHTMLAttribute = exports.decodeHTMLStrict = exports.decodeHTML = exports.decodeXML = exports.DecodingMode = exports.EntityDecoder = exports.encodeHTML5 = exports.encodeHTML4 = exports.encodeNonAsciiHTML = exports.encodeHTML = exports.escapeText = exports.escapeAttribute = exports.escapeUTF8 = exports.escape = exports.encodeXML = exports.encode = exports.decodeStrict = exports.decode = exports.EncodingMode = exports.EntityLevel = void 0; +var decode_js_1 = require("./decode.js"); +var encode_js_1 = require("./encode.js"); +var escape_js_1 = require("./escape.js"); +/** The level of entities to support. */ +var EntityLevel; +(function (EntityLevel) { + /** Support only XML entities. */ + EntityLevel[EntityLevel["XML"] = 0] = "XML"; + /** Support HTML entities, which are a superset of XML entities. */ + EntityLevel[EntityLevel["HTML"] = 1] = "HTML"; +})(EntityLevel = exports.EntityLevel || (exports.EntityLevel = {})); +var EncodingMode; +(function (EncodingMode) { + /** + * The output is UTF-8 encoded. Only characters that need escaping within + * XML will be escaped. + */ + EncodingMode[EncodingMode["UTF8"] = 0] = "UTF8"; + /** + * The output consists only of ASCII characters. Characters that need + * escaping within HTML, and characters that aren't ASCII characters will + * be escaped. + */ + EncodingMode[EncodingMode["ASCII"] = 1] = "ASCII"; + /** + * Encode all characters that have an equivalent entity, as well as all + * characters that are not ASCII characters. + */ + EncodingMode[EncodingMode["Extensive"] = 2] = "Extensive"; + /** + * Encode all characters that have to be escaped in HTML attributes, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + */ + EncodingMode[EncodingMode["Attribute"] = 3] = "Attribute"; + /** + * Encode all characters that have to be escaped in HTML text, + * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}. + */ + EncodingMode[EncodingMode["Text"] = 4] = "Text"; +})(EncodingMode = exports.EncodingMode || (exports.EncodingMode = {})); +/** + * Decodes a string with entities. + * + * @param data String to decode. + * @param options Decoding options. + */ +function decode(data, options) { + if (options === void 0) { options = EntityLevel.XML; } + var level = typeof options === "number" ? options : options.level; + if (level === EntityLevel.HTML) { + var mode = typeof options === "object" ? options.mode : undefined; + return (0, decode_js_1.decodeHTML)(data, mode); + } + return (0, decode_js_1.decodeXML)(data); +} +exports.decode = decode; +/** + * Decodes a string with entities. Does not allow missing trailing semicolons for entities. + * + * @param data String to decode. + * @param options Decoding options. + * @deprecated Use `decode` with the `mode` set to `Strict`. + */ +function decodeStrict(data, options) { + var _a; + if (options === void 0) { options = EntityLevel.XML; } + var opts = typeof options === "number" ? { level: options } : options; + (_a = opts.mode) !== null && _a !== void 0 ? _a : (opts.mode = decode_js_1.DecodingMode.Strict); + return decode(data, opts); +} +exports.decodeStrict = decodeStrict; +/** + * Encodes a string with entities. + * + * @param data String to encode. + * @param options Encoding options. + */ +function encode(data, options) { + if (options === void 0) { options = EntityLevel.XML; } + var opts = typeof options === "number" ? { level: options } : options; + // Mode `UTF8` just escapes XML entities + if (opts.mode === EncodingMode.UTF8) + return (0, escape_js_1.escapeUTF8)(data); + if (opts.mode === EncodingMode.Attribute) + return (0, escape_js_1.escapeAttribute)(data); + if (opts.mode === EncodingMode.Text) + return (0, escape_js_1.escapeText)(data); + if (opts.level === EntityLevel.HTML) { + if (opts.mode === EncodingMode.ASCII) { + return (0, encode_js_1.encodeNonAsciiHTML)(data); + } + return (0, encode_js_1.encodeHTML)(data); + } + // ASCII and Extensive are equivalent + return (0, escape_js_1.encodeXML)(data); +} +exports.encode = encode; +var escape_js_2 = require("./escape.js"); +Object.defineProperty(exports, "encodeXML", { enumerable: true, get: function () { return escape_js_2.encodeXML; } }); +Object.defineProperty(exports, "escape", { enumerable: true, get: function () { return escape_js_2.escape; } }); +Object.defineProperty(exports, "escapeUTF8", { enumerable: true, get: function () { return escape_js_2.escapeUTF8; } }); +Object.defineProperty(exports, "escapeAttribute", { enumerable: true, get: function () { return escape_js_2.escapeAttribute; } }); +Object.defineProperty(exports, "escapeText", { enumerable: true, get: function () { return escape_js_2.escapeText; } }); +var encode_js_2 = require("./encode.js"); +Object.defineProperty(exports, "encodeHTML", { enumerable: true, get: function () { return encode_js_2.encodeHTML; } }); +Object.defineProperty(exports, "encodeNonAsciiHTML", { enumerable: true, get: function () { return encode_js_2.encodeNonAsciiHTML; } }); +// Legacy aliases (deprecated) +Object.defineProperty(exports, "encodeHTML4", { enumerable: true, get: function () { return encode_js_2.encodeHTML; } }); +Object.defineProperty(exports, "encodeHTML5", { enumerable: true, get: function () { return encode_js_2.encodeHTML; } }); +var decode_js_2 = require("./decode.js"); +Object.defineProperty(exports, "EntityDecoder", { enumerable: true, get: function () { return decode_js_2.EntityDecoder; } }); +Object.defineProperty(exports, "DecodingMode", { enumerable: true, get: function () { return decode_js_2.DecodingMode; } }); +Object.defineProperty(exports, "decodeXML", { enumerable: true, get: function () { return decode_js_2.decodeXML; } }); +Object.defineProperty(exports, "decodeHTML", { enumerable: true, get: function () { return decode_js_2.decodeHTML; } }); +Object.defineProperty(exports, "decodeHTMLStrict", { enumerable: true, get: function () { return decode_js_2.decodeHTMLStrict; } }); +Object.defineProperty(exports, "decodeHTMLAttribute", { enumerable: true, get: function () { return decode_js_2.decodeHTMLAttribute; } }); +// Legacy aliases (deprecated) +Object.defineProperty(exports, "decodeHTML4", { enumerable: true, get: function () { return decode_js_2.decodeHTML; } }); +Object.defineProperty(exports, "decodeHTML5", { enumerable: true, get: function () { return decode_js_2.decodeHTML; } }); +Object.defineProperty(exports, "decodeHTML4Strict", { enumerable: true, get: function () { return decode_js_2.decodeHTMLStrict; } }); +Object.defineProperty(exports, "decodeHTML5Strict", { enumerable: true, get: function () { return decode_js_2.decodeHTMLStrict; } }); +Object.defineProperty(exports, "decodeXMLStrict", { enumerable: true, get: function () { return decode_js_2.decodeXML; } }); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/entities/lib/index.js.map b/node_modules/entities/lib/index.js.map new file mode 100644 index 0000000..2ef7751 --- /dev/null +++ b/node_modules/entities/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"https://raw.githubusercontent.com/fb55/entities/61afd4701eaa736978b13c7351cd3de9a96b04bc/src/","sources":["index.ts"],"names":[],"mappings":";;;AAAA,yCAAkE;AAClE,yCAA6D;AAC7D,yCAKqB;AAErB,wCAAwC;AACxC,IAAY,WAKX;AALD,WAAY,WAAW;IACnB,iCAAiC;IACjC,2CAAO,CAAA;IACP,mEAAmE;IACnE,6CAAQ,CAAA;AACZ,CAAC,EALW,WAAW,GAAX,mBAAW,KAAX,mBAAW,QAKtB;AAED,IAAY,YA2BX;AA3BD,WAAY,YAAY;IACpB;;;OAGG;IACH,+CAAI,CAAA;IACJ;;;;OAIG;IACH,iDAAK,CAAA;IACL;;;OAGG;IACH,yDAAS,CAAA;IACT;;;OAGG;IACH,yDAAS,CAAA;IACT;;;OAGG;IACH,+CAAI,CAAA;AACR,CAAC,EA3BW,YAAY,GAAZ,oBAAY,KAAZ,oBAAY,QA2BvB;AAsBD;;;;;GAKG;AACH,SAAgB,MAAM,CAClB,IAAY,EACZ,OAAwD;IAAxD,wBAAA,EAAA,UAAyC,WAAW,CAAC,GAAG;IAExD,IAAM,KAAK,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;IAEpE,IAAI,KAAK,KAAK,WAAW,CAAC,IAAI,EAAE;QAC5B,IAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;QACpE,OAAO,IAAA,sBAAU,EAAC,IAAI,EAAE,IAAI,CAAC,CAAC;KACjC;IAED,OAAO,IAAA,qBAAS,EAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAZD,wBAYC;AAED;;;;;;GAMG;AACH,SAAgB,YAAY,CACxB,IAAY,EACZ,OAAwD;;IAAxD,wBAAA,EAAA,UAAyC,WAAW,CAAC,GAAG;IAExD,IAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACxE,MAAA,IAAI,CAAC,IAAI,oCAAT,IAAI,CAAC,IAAI,GAAK,wBAAY,CAAC,MAAM,EAAC;IAElC,OAAO,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAC9B,CAAC;AARD,oCAQC;AAkBD;;;;;GAKG;AACH,SAAgB,MAAM,CAClB,IAAY,EACZ,OAAwD;IAAxD,wBAAA,EAAA,UAAyC,WAAW,CAAC,GAAG;IAExD,IAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IAExE,wCAAwC;IACxC,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI;QAAE,OAAO,IAAA,sBAAU,EAAC,IAAI,CAAC,CAAC;IAC7D,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,SAAS;QAAE,OAAO,IAAA,2BAAe,EAAC,IAAI,CAAC,CAAC;IACvE,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI;QAAE,OAAO,IAAA,sBAAU,EAAC,IAAI,CAAC,CAAC;IAE7D,IAAI,IAAI,CAAC,KAAK,KAAK,WAAW,CAAC,IAAI,EAAE;QACjC,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,KAAK,EAAE;YAClC,OAAO,IAAA,8BAAkB,EAAC,IAAI,CAAC,CAAC;SACnC;QAED,OAAO,IAAA,sBAAU,EAAC,IAAI,CAAC,CAAC;KAC3B;IAED,qCAAqC;IACrC,OAAO,IAAA,qBAAS,EAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AArBD,wBAqBC;AAED,yCAMqB;AALjB,sGAAA,SAAS,OAAA;AACT,mGAAA,MAAM,OAAA;AACN,uGAAA,UAAU,OAAA;AACV,4GAAA,eAAe,OAAA;AACf,uGAAA,UAAU,OAAA;AAGd,yCAMqB;AALjB,uGAAA,UAAU,OAAA;AACV,+GAAA,kBAAkB,OAAA;AAClB,8BAA8B;AAC9B,wGAAA,UAAU,OAAe;AACzB,wGAAA,UAAU,OAAe;AAG7B,yCAaqB;AAZjB,0GAAA,aAAa,OAAA;AACb,yGAAA,YAAY,OAAA;AACZ,sGAAA,SAAS,OAAA;AACT,uGAAA,UAAU,OAAA;AACV,6GAAA,gBAAgB,OAAA;AAChB,gHAAA,mBAAmB,OAAA;AACnB,8BAA8B;AAC9B,wGAAA,UAAU,OAAe;AACzB,wGAAA,UAAU,OAAe;AACzB,8GAAA,gBAAgB,OAAqB;AACrC,8GAAA,gBAAgB,OAAqB;AACrC,4GAAA,SAAS,OAAmB"} \ No newline at end of file diff --git a/node_modules/entities/package.json b/node_modules/entities/package.json new file mode 100644 index 0000000..2e857f8 --- /dev/null +++ b/node_modules/entities/package.json @@ -0,0 +1,90 @@ +{ + "name": "entities", + "version": "4.5.0", + "description": "Encode & decode XML and HTML entities with ease & speed", + "author": "Felix Boehm ", + "funding": "https://github.com/fb55/entities?sponsor=1", + "sideEffects": false, + "keywords": [ + "entity", + "decoding", + "encoding", + "html", + "xml", + "html entities" + ], + "directories": { + "lib": "lib/" + }, + "main": "lib/index.js", + "types": "lib/index.d.ts", + "module": "lib/esm/index.js", + "exports": { + ".": { + "require": "./lib/index.js", + "import": "./lib/esm/index.js" + }, + "./lib/decode.js": { + "require": "./lib/decode.js", + "import": "./lib/esm/decode.js" + }, + "./lib/escape.js": { + "require": "./lib/escape.js", + "import": "./lib/esm/escape.js" + } + }, + "files": [ + "lib/**/*" + ], + "engines": { + "node": ">=0.12" + }, + "devDependencies": { + "@types/jest": "^28.1.8", + "@types/node": "^18.15.11", + "@typescript-eslint/eslint-plugin": "^5.58.0", + "@typescript-eslint/parser": "^5.58.0", + "eslint": "^8.38.0", + "eslint-config-prettier": "^8.8.0", + "eslint-plugin-node": "^11.1.0", + "jest": "^28.1.3", + "prettier": "^2.8.7", + "ts-jest": "^28.0.8", + "typedoc": "^0.24.1", + "typescript": "^5.0.4" + }, + "scripts": { + "test": "npm run test:jest && npm run lint", + "test:jest": "jest", + "lint": "npm run lint:es && npm run lint:prettier", + "lint:es": "eslint .", + "lint:prettier": "npm run prettier -- --check", + "format": "npm run format:es && npm run format:prettier", + "format:es": "npm run lint:es -- --fix", + "format:prettier": "npm run prettier -- --write", + "prettier": "prettier '**/*.{ts,md,json,yml}'", + "build": "npm run build:cjs && npm run build:esm", + "build:cjs": "tsc --sourceRoot https://raw.githubusercontent.com/fb55/entities/$(git rev-parse HEAD)/src/", + "build:esm": "npm run build:cjs -- --module esnext --target es2019 --outDir lib/esm && echo '{\"type\":\"module\"}' > lib/esm/package.json", + "build:docs": "typedoc --hideGenerator src/index.ts", + "build:trie": "ts-node scripts/write-decode-map.ts", + "build:encode-trie": "ts-node scripts/write-encode-map.ts", + "prepare": "npm run build" + }, + "repository": { + "type": "git", + "url": "git://github.com/fb55/entities.git" + }, + "license": "BSD-2-Clause", + "jest": { + "preset": "ts-jest", + "coverageProvider": "v8", + "moduleNameMapper": { + "^(.*)\\.js$": "$1" + } + }, + "prettier": { + "tabWidth": 4, + "proseWrap": "always" + } +} diff --git a/node_modules/entities/readme.md b/node_modules/entities/readme.md new file mode 100644 index 0000000..731d90c --- /dev/null +++ b/node_modules/entities/readme.md @@ -0,0 +1,122 @@ +# entities [![NPM version](https://img.shields.io/npm/v/entities.svg)](https://npmjs.org/package/entities) [![Downloads](https://img.shields.io/npm/dm/entities.svg)](https://npmjs.org/package/entities) [![Node.js CI](https://github.com/fb55/entities/actions/workflows/nodejs-test.yml/badge.svg)](https://github.com/fb55/entities/actions/workflows/nodejs-test.yml) + +Encode & decode HTML & XML entities with ease & speed. + +## Features + +- ๐Ÿ˜‡ Tried and true: `entities` is used by many popular libraries; eg. + [`htmlparser2`](https://github.com/fb55/htmlparser2), the official + [AWS SDK](https://github.com/aws/aws-sdk-js-v3) and + [`commonmark`](https://github.com/commonmark/commonmark.js) use it to + process HTML entities. +- โšก๏ธ Fast: `entities` is the fastest library for decoding HTML entities (as + of April 2022); see [performance](#performance). +- ๐ŸŽ› Configurable: Get an output tailored for your needs. You are fine with + UTF8? That'll save you some bytes. Prefer to only have ASCII characters? We + can do that as well! + +## How toโ€ฆ + +### โ€ฆinstall `entities` + + npm install entities + +### โ€ฆuse `entities` + +```javascript +const entities = require("entities"); + +// Encoding +entities.escapeUTF8("& รผ"); // "&#38; รผ" +entities.encodeXML("& รผ"); // "&#38; ü" +entities.encodeHTML("& รผ"); // "&#38; ü" + +// Decoding +entities.decodeXML("asdf & ÿ ü '"); // "asdf & รฟ รผ '" +entities.decodeHTML("asdf & ÿ ü '"); // "asdf & รฟ รผ '" +``` + +## Performance + +This is how `entities` compares to other libraries on a very basic benchmark +(see `scripts/benchmark.ts`, for 10,000,000 iterations; **lower is better**): + +| Library | Version | `decode` perf | `encode` perf | `escape` perf | +| -------------- | ------- | ------------- | ------------- | ------------- | +| entities | `3.0.1` | 1.418s | 6.786s | 2.196s | +| html-entities | `2.3.2` | 2.530s | 6.829s | 2.415s | +| he | `1.2.0` | 5.800s | 24.237s | 3.624s | +| parse-entities | `3.0.0` | 9.660s | N/A | N/A | + +--- + +## FAQ + +> What methods should I actually use to encode my documents? + +If your target supports UTF-8, the `escapeUTF8` method is going to be your best +choice. Otherwise, use either `encodeHTML` or `encodeXML` based on whether +you're dealing with an HTML or an XML document. + +You can have a look at the options for the `encode` and `decode` methods to see +everything you can configure. + +> When should I use strict decoding? + +When strict decoding, entities not terminated with a semicolon will be ignored. +This is helpful for decoding entities in legacy environments. + +> Why should I use `entities` instead of alternative modules? + +As of April 2022, `entities` is a bit faster than other modules. Still, this is +not a very differentiated space and other modules can catch up. + +**More importantly**, you might already have `entities` in your dependency graph +(as a dependency of eg. `cheerio`, or `htmlparser2`), and including it directly +might not even increase your bundle size. The same is true for other entity +libraries, so have a look through your `node_modules` directory! + +> Does `entities` support tree shaking? + +Yes! `entities` ships as both a CommonJS and a ES module. Note that for best +results, you should not use the `encode` and `decode` functions, as they wrap +around a number of other functions, all of which will remain in the bundle. +Instead, use the functions that you need directly. + +--- + +## Acknowledgements + +This library wouldn't be possible without the work of these individuals. Thanks +to + +- [@mathiasbynens](https://github.com/mathiasbynens) for his explanations + about character encodings, and his library `he`, which was one of the + inspirations for `entities` +- [@inikulin](https://github.com/inikulin) for his work on optimized tries for + decoding HTML entities for the `parse5` project +- [@mdevils](https://github.com/mdevils) for taking on the challenge of + producing a quick entity library with his `html-entities` library. + `entities` would be quite a bit slower if there wasn't any competition. + Right now `entities` is on top, but we'll see how long that lasts! + +--- + +License: BSD-2-Clause + +## Security contact information + +To report a security vulnerability, please use the +[Tidelift security contact](https://tidelift.com/security). Tidelift will +coordinate the fix and disclosure. + +## `entities` for enterprise + +Available as part of the Tidelift Subscription + +The maintainers of `entities` and thousands of other packages are working with +Tidelift to deliver commercial support and maintenance for the open source +dependencies you use to build your applications. Save time, reduce risk, and +improve code health, while paying the maintainers of the exact dependencies you +use. +[Learn more.](https://tidelift.com/subscription/pkg/npm-entities?utm_source=npm-entities&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/es-define-property/.eslintrc b/node_modules/es-define-property/.eslintrc new file mode 100644 index 0000000..46f3b12 --- /dev/null +++ b/node_modules/es-define-property/.eslintrc @@ -0,0 +1,13 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "new-cap": ["error", { + "capIsNewExceptions": [ + "GetIntrinsic", + ], + }], + }, +} diff --git a/node_modules/es-define-property/.github/FUNDING.yml b/node_modules/es-define-property/.github/FUNDING.yml new file mode 100644 index 0000000..4445451 --- /dev/null +++ b/node_modules/es-define-property/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/es-define-property +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with a single custom sponsorship URL diff --git a/node_modules/es-define-property/.nycrc b/node_modules/es-define-property/.nycrc new file mode 100644 index 0000000..bdd626c --- /dev/null +++ b/node_modules/es-define-property/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/es-define-property/CHANGELOG.md b/node_modules/es-define-property/CHANGELOG.md new file mode 100644 index 0000000..5f60cc0 --- /dev/null +++ b/node_modules/es-define-property/CHANGELOG.md @@ -0,0 +1,29 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.0.1](https://github.com/ljharb/es-define-property/compare/v1.0.0...v1.0.1) - 2024-12-06 + +### Commits + +- [types] use shared tsconfig [`954a663`](https://github.com/ljharb/es-define-property/commit/954a66360326e508a0e5daa4b07493d58f5e110e) +- [actions] split out node 10-20, and 20+ [`3a8e84b`](https://github.com/ljharb/es-define-property/commit/3a8e84b23883f26ff37b3e82ff283834228e18c6) +- [Dev Deps] update `@ljharb/eslint-config`, `@ljharb/tsconfig`, `@types/get-intrinsic`, `@types/tape`, `auto-changelog`, `gopd`, `tape` [`86ae27b`](https://github.com/ljharb/es-define-property/commit/86ae27bb8cc857b23885136fad9cbe965ae36612) +- [Refactor] avoid using `get-intrinsic` [`02480c0`](https://github.com/ljharb/es-define-property/commit/02480c0353ef6118965282977c3864aff53d98b1) +- [Tests] replace `aud` with `npm audit` [`f6093ff`](https://github.com/ljharb/es-define-property/commit/f6093ff74ab51c98015c2592cd393bd42478e773) +- [Tests] configure testling [`7139e66`](https://github.com/ljharb/es-define-property/commit/7139e66959247a56086d9977359caef27c6849e7) +- [Dev Deps] update `tape` [`b901b51`](https://github.com/ljharb/es-define-property/commit/b901b511a75e001a40ce1a59fef7d9ffcfc87482) +- [Tests] fix types in tests [`469d269`](https://github.com/ljharb/es-define-property/commit/469d269fd141b1e773ec053a9fa35843493583e0) +- [Dev Deps] add missing peer dep [`733acfb`](https://github.com/ljharb/es-define-property/commit/733acfb0c4c96edf337e470b89a25a5b3724c352) + +## v1.0.0 - 2024-02-12 + +### Commits + +- Initial implementation, tests, readme, types [`3e154e1`](https://github.com/ljharb/es-define-property/commit/3e154e11a2fee09127220f5e503bf2c0a31dd480) +- Initial commit [`07d98de`](https://github.com/ljharb/es-define-property/commit/07d98de34a4dc31ff5e83a37c0c3f49e0d85cd50) +- npm init [`c4eb634`](https://github.com/ljharb/es-define-property/commit/c4eb6348b0d3886aac36cef34ad2ee0665ea6f3e) +- Only apps should have lockfiles [`7af86ec`](https://github.com/ljharb/es-define-property/commit/7af86ec1d311ec0b17fdfe616a25f64276903856) diff --git a/node_modules/es-define-property/LICENSE b/node_modules/es-define-property/LICENSE new file mode 100644 index 0000000..f82f389 --- /dev/null +++ b/node_modules/es-define-property/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/es-define-property/README.md b/node_modules/es-define-property/README.md new file mode 100644 index 0000000..9b291bd --- /dev/null +++ b/node_modules/es-define-property/README.md @@ -0,0 +1,49 @@ +# es-define-property [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +`Object.defineProperty`, but not IE 8's broken one. + +## Example + +```js +const assert = require('assert'); + +const $defineProperty = require('es-define-property'); + +if ($defineProperty) { + assert.equal($defineProperty, Object.defineProperty); +} else if (Object.defineProperty) { + assert.equal($defineProperty, false, 'this is IE 8'); +} else { + assert.equal($defineProperty, false, 'this is an ES3 engine'); +} +``` + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +## Security + +Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. + +[package-url]: https://npmjs.org/package/es-define-property +[npm-version-svg]: https://versionbadg.es/ljharb/es-define-property.svg +[deps-svg]: https://david-dm.org/ljharb/es-define-property.svg +[deps-url]: https://david-dm.org/ljharb/es-define-property +[dev-deps-svg]: https://david-dm.org/ljharb/es-define-property/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/es-define-property#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/es-define-property.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/es-define-property.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/es-define-property.svg +[downloads-url]: https://npm-stat.com/charts.html?package=es-define-property +[codecov-image]: https://codecov.io/gh/ljharb/es-define-property/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/es-define-property/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/es-define-property +[actions-url]: https://github.com/ljharb/es-define-property/actions diff --git a/node_modules/es-define-property/index.d.ts b/node_modules/es-define-property/index.d.ts new file mode 100644 index 0000000..6012247 --- /dev/null +++ b/node_modules/es-define-property/index.d.ts @@ -0,0 +1,3 @@ +declare const defineProperty: false | typeof Object.defineProperty; + +export = defineProperty; \ No newline at end of file diff --git a/node_modules/es-define-property/index.js b/node_modules/es-define-property/index.js new file mode 100644 index 0000000..e0a2925 --- /dev/null +++ b/node_modules/es-define-property/index.js @@ -0,0 +1,14 @@ +'use strict'; + +/** @type {import('.')} */ +var $defineProperty = Object.defineProperty || false; +if ($defineProperty) { + try { + $defineProperty({}, 'a', { value: 1 }); + } catch (e) { + // IE 8 has a broken defineProperty + $defineProperty = false; + } +} + +module.exports = $defineProperty; diff --git a/node_modules/es-define-property/package.json b/node_modules/es-define-property/package.json new file mode 100644 index 0000000..fbed187 --- /dev/null +++ b/node_modules/es-define-property/package.json @@ -0,0 +1,81 @@ +{ + "name": "es-define-property", + "version": "1.0.1", + "description": "`Object.defineProperty`, but not IE 8's broken one.", + "main": "index.js", + "types": "./index.d.ts", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p .", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "npx npm@'>= 10.2' audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/es-define-property.git" + }, + "keywords": [ + "javascript", + "ecmascript", + "object", + "define", + "property", + "defineProperty", + "Object.defineProperty" + ], + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/es-define-property/issues" + }, + "homepage": "https://github.com/ljharb/es-define-property#readme", + "devDependencies": { + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.2", + "@types/gopd": "^1.0.3", + "@types/tape": "^5.6.5", + "auto-changelog": "^2.5.0", + "encoding": "^0.1.13", + "eslint": "^8.8.0", + "evalmd": "^0.0.19", + "gopd": "^1.2.0", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "engines": { + "node": ">= 0.4" + }, + "testling": { + "files": "test/index.js" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/node_modules/es-define-property/test/index.js b/node_modules/es-define-property/test/index.js new file mode 100644 index 0000000..b4b4688 --- /dev/null +++ b/node_modules/es-define-property/test/index.js @@ -0,0 +1,56 @@ +'use strict'; + +var $defineProperty = require('../'); + +var test = require('tape'); +var gOPD = require('gopd'); + +test('defineProperty: supported', { skip: !$defineProperty }, function (t) { + t.plan(4); + + t.equal(typeof $defineProperty, 'function', 'defineProperty is supported'); + if ($defineProperty && gOPD) { // this `if` check is just to shut TS up + /** @type {{ a: number, b?: number, c?: number }} */ + var o = { a: 1 }; + + $defineProperty(o, 'b', { enumerable: true, value: 2 }); + t.deepEqual( + gOPD(o, 'b'), + { + configurable: false, + enumerable: true, + value: 2, + writable: false + }, + 'property descriptor is as expected' + ); + + $defineProperty(o, 'c', { enumerable: false, value: 3, writable: true }); + t.deepEqual( + gOPD(o, 'c'), + { + configurable: false, + enumerable: false, + value: 3, + writable: true + }, + 'property descriptor is as expected' + ); + } + + t.equal($defineProperty, Object.defineProperty, 'defineProperty is Object.defineProperty'); + + t.end(); +}); + +test('defineProperty: not supported', { skip: !!$defineProperty }, function (t) { + t.notOk($defineProperty, 'defineProperty is not supported'); + + t.match( + typeof $defineProperty, + /^(?:undefined|boolean)$/, + '`typeof defineProperty` is `undefined` or `boolean`' + ); + + t.end(); +}); diff --git a/node_modules/es-define-property/tsconfig.json b/node_modules/es-define-property/tsconfig.json new file mode 100644 index 0000000..5a49992 --- /dev/null +++ b/node_modules/es-define-property/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "es2022", + }, + "exclude": [ + "coverage", + "test/list-exports" + ], +} diff --git a/node_modules/es-errors/.eslintrc b/node_modules/es-errors/.eslintrc new file mode 100644 index 0000000..3b5d9e9 --- /dev/null +++ b/node_modules/es-errors/.eslintrc @@ -0,0 +1,5 @@ +{ + "root": true, + + "extends": "@ljharb", +} diff --git a/node_modules/es-errors/.github/FUNDING.yml b/node_modules/es-errors/.github/FUNDING.yml new file mode 100644 index 0000000..f1b8805 --- /dev/null +++ b/node_modules/es-errors/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/es-errors +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with a single custom sponsorship URL diff --git a/node_modules/es-errors/CHANGELOG.md b/node_modules/es-errors/CHANGELOG.md new file mode 100644 index 0000000..204a9e9 --- /dev/null +++ b/node_modules/es-errors/CHANGELOG.md @@ -0,0 +1,40 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.3.0](https://github.com/ljharb/es-errors/compare/v1.2.1...v1.3.0) - 2024-02-05 + +### Commits + +- [New] add `EvalError` and `URIError` [`1927627`](https://github.com/ljharb/es-errors/commit/1927627ba68cb6c829d307231376c967db53acdf) + +## [v1.2.1](https://github.com/ljharb/es-errors/compare/v1.2.0...v1.2.1) - 2024-02-04 + +### Commits + +- [Fix] add missing `exports` entry [`5bb5f28`](https://github.com/ljharb/es-errors/commit/5bb5f280f98922701109d6ebb82eea2257cecc7e) + +## [v1.2.0](https://github.com/ljharb/es-errors/compare/v1.1.0...v1.2.0) - 2024-02-04 + +### Commits + +- [New] add `ReferenceError` [`6d8cf5b`](https://github.com/ljharb/es-errors/commit/6d8cf5bbb6f3f598d02cf6f30e468ba2caa8e143) + +## [v1.1.0](https://github.com/ljharb/es-errors/compare/v1.0.0...v1.1.0) - 2024-02-04 + +### Commits + +- [New] add base Error [`2983ab6`](https://github.com/ljharb/es-errors/commit/2983ab65f7bc5441276cb021dc3aa03c78881698) + +## v1.0.0 - 2024-02-03 + +### Commits + +- Initial implementation, tests, readme, type [`8f47631`](https://github.com/ljharb/es-errors/commit/8f476317e9ad76f40ad648081829b1a1a3a1288b) +- Initial commit [`ea5d099`](https://github.com/ljharb/es-errors/commit/ea5d099ef18e550509ab9e2be000526afd81c385) +- npm init [`6f5ebf9`](https://github.com/ljharb/es-errors/commit/6f5ebf9cead474dadd72b9e63dad315820a089ae) +- Only apps should have lockfiles [`e1a0aeb`](https://github.com/ljharb/es-errors/commit/e1a0aeb7b80f5cfc56be54d6b2100e915d47def8) +- [meta] add `sideEffects` flag [`a9c7d46`](https://github.com/ljharb/es-errors/commit/a9c7d460a492f1d8a241c836bc25a322a19cc043) diff --git a/node_modules/es-errors/LICENSE b/node_modules/es-errors/LICENSE new file mode 100644 index 0000000..f82f389 --- /dev/null +++ b/node_modules/es-errors/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/es-errors/README.md b/node_modules/es-errors/README.md new file mode 100644 index 0000000..8dbfacf --- /dev/null +++ b/node_modules/es-errors/README.md @@ -0,0 +1,55 @@ +# es-errors [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +A simple cache for a few of the JS Error constructors. + +## Example + +```js +const assert = require('assert'); + +const Base = require('es-errors'); +const Eval = require('es-errors/eval'); +const Range = require('es-errors/range'); +const Ref = require('es-errors/ref'); +const Syntax = require('es-errors/syntax'); +const Type = require('es-errors/type'); +const URI = require('es-errors/uri'); + +assert.equal(Base, Error); +assert.equal(Eval, EvalError); +assert.equal(Range, RangeError); +assert.equal(Ref, ReferenceError); +assert.equal(Syntax, SyntaxError); +assert.equal(Type, TypeError); +assert.equal(URI, URIError); +``` + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +## Security + +Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. + +[package-url]: https://npmjs.org/package/es-errors +[npm-version-svg]: https://versionbadg.es/ljharb/es-errors.svg +[deps-svg]: https://david-dm.org/ljharb/es-errors.svg +[deps-url]: https://david-dm.org/ljharb/es-errors +[dev-deps-svg]: https://david-dm.org/ljharb/es-errors/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/es-errors#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/es-errors.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/es-errors.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/es-errors.svg +[downloads-url]: https://npm-stat.com/charts.html?package=es-errors +[codecov-image]: https://codecov.io/gh/ljharb/es-errors/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/es-errors/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/es-errors +[actions-url]: https://github.com/ljharb/es-errors/actions diff --git a/node_modules/es-errors/eval.d.ts b/node_modules/es-errors/eval.d.ts new file mode 100644 index 0000000..e4210e0 --- /dev/null +++ b/node_modules/es-errors/eval.d.ts @@ -0,0 +1,3 @@ +declare const EvalError: EvalErrorConstructor; + +export = EvalError; diff --git a/node_modules/es-errors/eval.js b/node_modules/es-errors/eval.js new file mode 100644 index 0000000..725ccb6 --- /dev/null +++ b/node_modules/es-errors/eval.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./eval')} */ +module.exports = EvalError; diff --git a/node_modules/es-errors/index.d.ts b/node_modules/es-errors/index.d.ts new file mode 100644 index 0000000..69bdbc9 --- /dev/null +++ b/node_modules/es-errors/index.d.ts @@ -0,0 +1,3 @@ +declare const Error: ErrorConstructor; + +export = Error; diff --git a/node_modules/es-errors/index.js b/node_modules/es-errors/index.js new file mode 100644 index 0000000..cc0c521 --- /dev/null +++ b/node_modules/es-errors/index.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('.')} */ +module.exports = Error; diff --git a/node_modules/es-errors/package.json b/node_modules/es-errors/package.json new file mode 100644 index 0000000..ff8c2a5 --- /dev/null +++ b/node_modules/es-errors/package.json @@ -0,0 +1,80 @@ +{ + "name": "es-errors", + "version": "1.3.0", + "description": "A simple cache for a few of the JS Error constructors.", + "main": "index.js", + "exports": { + ".": "./index.js", + "./eval": "./eval.js", + "./range": "./range.js", + "./ref": "./ref.js", + "./syntax": "./syntax.js", + "./type": "./type.js", + "./uri": "./uri.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "pretest": "npm run lint", + "test": "npm run tests-only", + "tests-only": "nyc tape 'test/**/*.js'", + "posttest": "aud --production", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p . && eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git' | grep -v dist/)", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/es-errors.git" + }, + "keywords": [ + "javascript", + "ecmascript", + "error", + "typeerror", + "syntaxerror", + "rangeerror" + ], + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/es-errors/issues" + }, + "homepage": "https://github.com/ljharb/es-errors#readme", + "devDependencies": { + "@ljharb/eslint-config": "^21.1.0", + "@types/tape": "^5.6.4", + "aud": "^2.0.4", + "auto-changelog": "^2.4.0", + "eclint": "^2.8.1", + "eslint": "^8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.7.4", + "typescript": "next" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/node_modules/es-errors/range.d.ts b/node_modules/es-errors/range.d.ts new file mode 100644 index 0000000..3a12e86 --- /dev/null +++ b/node_modules/es-errors/range.d.ts @@ -0,0 +1,3 @@ +declare const RangeError: RangeErrorConstructor; + +export = RangeError; diff --git a/node_modules/es-errors/range.js b/node_modules/es-errors/range.js new file mode 100644 index 0000000..2044fe0 --- /dev/null +++ b/node_modules/es-errors/range.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./range')} */ +module.exports = RangeError; diff --git a/node_modules/es-errors/ref.d.ts b/node_modules/es-errors/ref.d.ts new file mode 100644 index 0000000..a13107e --- /dev/null +++ b/node_modules/es-errors/ref.d.ts @@ -0,0 +1,3 @@ +declare const ReferenceError: ReferenceErrorConstructor; + +export = ReferenceError; diff --git a/node_modules/es-errors/ref.js b/node_modules/es-errors/ref.js new file mode 100644 index 0000000..d7c430f --- /dev/null +++ b/node_modules/es-errors/ref.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./ref')} */ +module.exports = ReferenceError; diff --git a/node_modules/es-errors/syntax.d.ts b/node_modules/es-errors/syntax.d.ts new file mode 100644 index 0000000..6a0c53c --- /dev/null +++ b/node_modules/es-errors/syntax.d.ts @@ -0,0 +1,3 @@ +declare const SyntaxError: SyntaxErrorConstructor; + +export = SyntaxError; diff --git a/node_modules/es-errors/syntax.js b/node_modules/es-errors/syntax.js new file mode 100644 index 0000000..5f5fdde --- /dev/null +++ b/node_modules/es-errors/syntax.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./syntax')} */ +module.exports = SyntaxError; diff --git a/node_modules/es-errors/test/index.js b/node_modules/es-errors/test/index.js new file mode 100644 index 0000000..1ff0277 --- /dev/null +++ b/node_modules/es-errors/test/index.js @@ -0,0 +1,19 @@ +'use strict'; + +var test = require('tape'); + +var E = require('../'); +var R = require('../range'); +var Ref = require('../ref'); +var S = require('../syntax'); +var T = require('../type'); + +test('errors', function (t) { + t.equal(E, Error); + t.equal(R, RangeError); + t.equal(Ref, ReferenceError); + t.equal(S, SyntaxError); + t.equal(T, TypeError); + + t.end(); +}); diff --git a/node_modules/es-errors/tsconfig.json b/node_modules/es-errors/tsconfig.json new file mode 100644 index 0000000..99dfeb6 --- /dev/null +++ b/node_modules/es-errors/tsconfig.json @@ -0,0 +1,49 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Projects */ + + /* Language and Environment */ + "target": "es5", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + // "typeRoots": ["types"], /* Specify multiple folders that act like `./node_modules/@types`. */ + "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + "declarationMap": true, /* Create sourcemaps for d.ts files. */ + "noEmit": true, /* Disable emitting files from a compilation. */ + + /* Interop Constraints */ + "allowSyntheticDefaultImports": true, /* Allow `import x from y` when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + + /* Completeness */ + // "skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/es-errors/type.d.ts b/node_modules/es-errors/type.d.ts new file mode 100644 index 0000000..576fb51 --- /dev/null +++ b/node_modules/es-errors/type.d.ts @@ -0,0 +1,3 @@ +declare const TypeError: TypeErrorConstructor + +export = TypeError; diff --git a/node_modules/es-errors/type.js b/node_modules/es-errors/type.js new file mode 100644 index 0000000..9769e44 --- /dev/null +++ b/node_modules/es-errors/type.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./type')} */ +module.exports = TypeError; diff --git a/node_modules/es-errors/uri.d.ts b/node_modules/es-errors/uri.d.ts new file mode 100644 index 0000000..c3261c9 --- /dev/null +++ b/node_modules/es-errors/uri.d.ts @@ -0,0 +1,3 @@ +declare const URIError: URIErrorConstructor; + +export = URIError; diff --git a/node_modules/es-errors/uri.js b/node_modules/es-errors/uri.js new file mode 100644 index 0000000..e9cd1c7 --- /dev/null +++ b/node_modules/es-errors/uri.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./uri')} */ +module.exports = URIError; diff --git a/node_modules/es-object-atoms/.eslintrc b/node_modules/es-object-atoms/.eslintrc new file mode 100644 index 0000000..d90a1bc --- /dev/null +++ b/node_modules/es-object-atoms/.eslintrc @@ -0,0 +1,16 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "eqeqeq": ["error", "allow-null"], + "id-length": "off", + "new-cap": ["error", { + "capIsNewExceptions": [ + "RequireObjectCoercible", + "ToObject", + ], + }], + }, +} diff --git a/node_modules/es-object-atoms/.github/FUNDING.yml b/node_modules/es-object-atoms/.github/FUNDING.yml new file mode 100644 index 0000000..352bfda --- /dev/null +++ b/node_modules/es-object-atoms/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/es-object +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with a single custom sponsorship URL diff --git a/node_modules/es-object-atoms/CHANGELOG.md b/node_modules/es-object-atoms/CHANGELOG.md new file mode 100644 index 0000000..fdd2abe --- /dev/null +++ b/node_modules/es-object-atoms/CHANGELOG.md @@ -0,0 +1,37 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.1.1](https://github.com/ljharb/es-object-atoms/compare/v1.1.0...v1.1.1) - 2025-01-14 + +### Commits + +- [types] `ToObject`: improve types [`cfe8c8a`](https://github.com/ljharb/es-object-atoms/commit/cfe8c8a105c44820cb22e26f62d12ef0ad9715c8) + +## [v1.1.0](https://github.com/ljharb/es-object-atoms/compare/v1.0.1...v1.1.0) - 2025-01-14 + +### Commits + +- [New] add `isObject` [`51e4042`](https://github.com/ljharb/es-object-atoms/commit/51e4042df722eb3165f40dc5f4bf33d0197ecb07) + +## [v1.0.1](https://github.com/ljharb/es-object-atoms/compare/v1.0.0...v1.0.1) - 2025-01-13 + +### Commits + +- [Dev Deps] update `@ljharb/eslint-config`, `@ljharb/tsconfig`, `@types/tape`, `auto-changelog`, `tape` [`38ab9eb`](https://github.com/ljharb/es-object-atoms/commit/38ab9eb00b62c2f4668644f5e513d9b414ebd595) +- [types] improve types [`7d1beb8`](https://github.com/ljharb/es-object-atoms/commit/7d1beb887958b78b6a728a210a1c8370ab7e2aa1) +- [Tests] replace `aud` with `npm audit` [`25863ba`](https://github.com/ljharb/es-object-atoms/commit/25863baf99178f1d1ad33d1120498db28631907e) +- [Dev Deps] add missing peer dep [`c012309`](https://github.com/ljharb/es-object-atoms/commit/c0123091287e6132d6f4240496340c427433df28) + +## v1.0.0 - 2024-03-16 + +### Commits + +- Initial implementation, tests, readme, types [`f1499db`](https://github.com/ljharb/es-object-atoms/commit/f1499db7d3e1741e64979c61d645ab3137705e82) +- Initial commit [`99eedc7`](https://github.com/ljharb/es-object-atoms/commit/99eedc7b5fde38a50a28d3c8b724706e3e4c5f6a) +- [meta] rename repo [`fc851fa`](https://github.com/ljharb/es-object-atoms/commit/fc851fa70616d2d182aaf0bd02c2ed7084dea8fa) +- npm init [`b909377`](https://github.com/ljharb/es-object-atoms/commit/b909377c50049bd0ec575562d20b0f9ebae8947f) +- Only apps should have lockfiles [`7249edd`](https://github.com/ljharb/es-object-atoms/commit/7249edd2178c1b9ddfc66ffcc6d07fdf0d28efc1) diff --git a/node_modules/es-object-atoms/LICENSE b/node_modules/es-object-atoms/LICENSE new file mode 100644 index 0000000..f82f389 --- /dev/null +++ b/node_modules/es-object-atoms/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/es-object-atoms/README.md b/node_modules/es-object-atoms/README.md new file mode 100644 index 0000000..447695b --- /dev/null +++ b/node_modules/es-object-atoms/README.md @@ -0,0 +1,63 @@ +# es-object-atoms [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +ES Object-related atoms: Object, ToObject, RequireObjectCoercible. + +## Example + +```js +const assert = require('assert'); + +const $Object = require('es-object-atoms'); +const isObject = require('es-object-atoms/isObject'); +const ToObject = require('es-object-atoms/ToObject'); +const RequireObjectCoercible = require('es-object-atoms/RequireObjectCoercible'); + +assert.equal($Object, Object); +assert.throws(() => ToObject(null), TypeError); +assert.throws(() => ToObject(undefined), TypeError); +assert.throws(() => RequireObjectCoercible(null), TypeError); +assert.throws(() => RequireObjectCoercible(undefined), TypeError); + +assert.equal(isObject(undefined), false); +assert.equal(isObject(null), false); +assert.equal(isObject({}), true); +assert.equal(isObject([]), true); +assert.equal(isObject(function () {}), true); + +assert.deepEqual(RequireObjectCoercible(true), true); +assert.deepEqual(ToObject(true), Object(true)); + +const obj = {}; +assert.equal(RequireObjectCoercible(obj), obj); +assert.equal(ToObject(obj), obj); +``` + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +## Security + +Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. + +[package-url]: https://npmjs.org/package/es-object-atoms +[npm-version-svg]: https://versionbadg.es/ljharb/es-object-atoms.svg +[deps-svg]: https://david-dm.org/ljharb/es-object-atoms.svg +[deps-url]: https://david-dm.org/ljharb/es-object-atoms +[dev-deps-svg]: https://david-dm.org/ljharb/es-object-atoms/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/es-object-atoms#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/es-object-atoms.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/es-object-atoms.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/es-object.svg +[downloads-url]: https://npm-stat.com/charts.html?package=es-object-atoms +[codecov-image]: https://codecov.io/gh/ljharb/es-object-atoms/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/es-object-atoms/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/es-object-atoms +[actions-url]: https://github.com/ljharb/es-object-atoms/actions diff --git a/node_modules/es-object-atoms/RequireObjectCoercible.d.ts b/node_modules/es-object-atoms/RequireObjectCoercible.d.ts new file mode 100644 index 0000000..7e26c45 --- /dev/null +++ b/node_modules/es-object-atoms/RequireObjectCoercible.d.ts @@ -0,0 +1,3 @@ +declare function RequireObjectCoercible(value: T, optMessage?: string): T; + +export = RequireObjectCoercible; diff --git a/node_modules/es-object-atoms/RequireObjectCoercible.js b/node_modules/es-object-atoms/RequireObjectCoercible.js new file mode 100644 index 0000000..8e191c6 --- /dev/null +++ b/node_modules/es-object-atoms/RequireObjectCoercible.js @@ -0,0 +1,11 @@ +'use strict'; + +var $TypeError = require('es-errors/type'); + +/** @type {import('./RequireObjectCoercible')} */ +module.exports = function RequireObjectCoercible(value) { + if (value == null) { + throw new $TypeError((arguments.length > 0 && arguments[1]) || ('Cannot call method on ' + value)); + } + return value; +}; diff --git a/node_modules/es-object-atoms/ToObject.d.ts b/node_modules/es-object-atoms/ToObject.d.ts new file mode 100644 index 0000000..d6dd302 --- /dev/null +++ b/node_modules/es-object-atoms/ToObject.d.ts @@ -0,0 +1,7 @@ +declare function ToObject(value: number): Number; +declare function ToObject(value: boolean): Boolean; +declare function ToObject(value: string): String; +declare function ToObject(value: bigint): BigInt; +declare function ToObject(value: T): T; + +export = ToObject; diff --git a/node_modules/es-object-atoms/ToObject.js b/node_modules/es-object-atoms/ToObject.js new file mode 100644 index 0000000..2b99a7d --- /dev/null +++ b/node_modules/es-object-atoms/ToObject.js @@ -0,0 +1,10 @@ +'use strict'; + +var $Object = require('./'); +var RequireObjectCoercible = require('./RequireObjectCoercible'); + +/** @type {import('./ToObject')} */ +module.exports = function ToObject(value) { + RequireObjectCoercible(value); + return $Object(value); +}; diff --git a/node_modules/es-object-atoms/index.d.ts b/node_modules/es-object-atoms/index.d.ts new file mode 100644 index 0000000..8bdbfc8 --- /dev/null +++ b/node_modules/es-object-atoms/index.d.ts @@ -0,0 +1,3 @@ +declare const Object: ObjectConstructor; + +export = Object; diff --git a/node_modules/es-object-atoms/index.js b/node_modules/es-object-atoms/index.js new file mode 100644 index 0000000..1d33cef --- /dev/null +++ b/node_modules/es-object-atoms/index.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('.')} */ +module.exports = Object; diff --git a/node_modules/es-object-atoms/isObject.d.ts b/node_modules/es-object-atoms/isObject.d.ts new file mode 100644 index 0000000..43bee3b --- /dev/null +++ b/node_modules/es-object-atoms/isObject.d.ts @@ -0,0 +1,3 @@ +declare function isObject(x: unknown): x is object; + +export = isObject; diff --git a/node_modules/es-object-atoms/isObject.js b/node_modules/es-object-atoms/isObject.js new file mode 100644 index 0000000..ec49bf1 --- /dev/null +++ b/node_modules/es-object-atoms/isObject.js @@ -0,0 +1,6 @@ +'use strict'; + +/** @type {import('./isObject')} */ +module.exports = function isObject(x) { + return !!x && (typeof x === 'function' || typeof x === 'object'); +}; diff --git a/node_modules/es-object-atoms/package.json b/node_modules/es-object-atoms/package.json new file mode 100644 index 0000000..f4cec71 --- /dev/null +++ b/node_modules/es-object-atoms/package.json @@ -0,0 +1,80 @@ +{ + "name": "es-object-atoms", + "version": "1.1.1", + "description": "ES Object-related atoms: Object, ToObject, RequireObjectCoercible", + "main": "index.js", + "exports": { + ".": "./index.js", + "./RequireObjectCoercible": "./RequireObjectCoercible.js", + "./isObject": "./isObject.js", + "./ToObject": "./ToObject.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "pretest": "npm run lint", + "test": "npm run tests-only", + "tests-only": "nyc tape 'test/**/*.js'", + "posttest": "npx npm@\">= 10.2\" audit --production", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p . && eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git' | grep -v dist/)", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/es-object-atoms.git" + }, + "keywords": [ + "javascript", + "ecmascript", + "object", + "toobject", + "coercible" + ], + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/es-object-atoms/issues" + }, + "homepage": "https://github.com/ljharb/es-object-atoms#readme", + "dependencies": { + "es-errors": "^1.3.0" + }, + "devDependencies": { + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.3", + "@types/tape": "^5.8.1", + "auto-changelog": "^2.5.0", + "eclint": "^2.8.1", + "encoding": "^0.1.13", + "eslint": "^8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/node_modules/es-object-atoms/test/index.js b/node_modules/es-object-atoms/test/index.js new file mode 100644 index 0000000..430b705 --- /dev/null +++ b/node_modules/es-object-atoms/test/index.js @@ -0,0 +1,38 @@ +'use strict'; + +var test = require('tape'); + +var $Object = require('../'); +var isObject = require('../isObject'); +var ToObject = require('../ToObject'); +var RequireObjectCoercible = require('..//RequireObjectCoercible'); + +test('errors', function (t) { + t.equal($Object, Object); + // @ts-expect-error + t['throws'](function () { ToObject(null); }, TypeError); + // @ts-expect-error + t['throws'](function () { ToObject(undefined); }, TypeError); + // @ts-expect-error + t['throws'](function () { RequireObjectCoercible(null); }, TypeError); + // @ts-expect-error + t['throws'](function () { RequireObjectCoercible(undefined); }, TypeError); + + t.deepEqual(RequireObjectCoercible(true), true); + t.deepEqual(ToObject(true), Object(true)); + t.deepEqual(ToObject(42), Object(42)); + var f = function () {}; + t.equal(ToObject(f), f); + + t.equal(isObject(undefined), false); + t.equal(isObject(null), false); + t.equal(isObject({}), true); + t.equal(isObject([]), true); + t.equal(isObject(function () {}), true); + + var obj = {}; + t.equal(RequireObjectCoercible(obj), obj); + t.equal(ToObject(obj), obj); + + t.end(); +}); diff --git a/node_modules/es-object-atoms/tsconfig.json b/node_modules/es-object-atoms/tsconfig.json new file mode 100644 index 0000000..1f73cb7 --- /dev/null +++ b/node_modules/es-object-atoms/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "es5", + }, +} diff --git a/node_modules/es-set-tostringtag/.eslintrc b/node_modules/es-set-tostringtag/.eslintrc new file mode 100644 index 0000000..2612ed8 --- /dev/null +++ b/node_modules/es-set-tostringtag/.eslintrc @@ -0,0 +1,13 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "new-cap": [2, { + "capIsNewExceptions": [ + "GetIntrinsic", + ], + }], + }, +} diff --git a/node_modules/es-set-tostringtag/.nycrc b/node_modules/es-set-tostringtag/.nycrc new file mode 100644 index 0000000..bdd626c --- /dev/null +++ b/node_modules/es-set-tostringtag/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/es-set-tostringtag/CHANGELOG.md b/node_modules/es-set-tostringtag/CHANGELOG.md new file mode 100644 index 0000000..00bdc03 --- /dev/null +++ b/node_modules/es-set-tostringtag/CHANGELOG.md @@ -0,0 +1,67 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v2.1.0](https://github.com/es-shims/es-set-tostringtag/compare/v2.0.3...v2.1.0) - 2025-01-01 + +### Commits + +- [actions] split out node 10-20, and 20+ [`ede033c`](https://github.com/es-shims/es-set-tostringtag/commit/ede033cc4e506c3966d2d482d4ac5987e329162a) +- [types] use shared config [`28ef164`](https://github.com/es-shims/es-set-tostringtag/commit/28ef164ad7c5bc21837c79f7ef25542a1f258ade) +- [New] add `nonConfigurable` option [`3bee3f0`](https://github.com/es-shims/es-set-tostringtag/commit/3bee3f04caddd318f3932912212ed20b2d62aad7) +- [Fix] validate boolean option argument [`3c8a609`](https://github.com/es-shims/es-set-tostringtag/commit/3c8a609c795a305ccca163f0ff6956caa88cdc0e) +- [Dev Deps] update `@arethetypeswrong/cli`, `@ljharb/eslint-config`, `@ljharb/tsconfig`, `@types/get-intrinsic`, `@types/tape`, `auto-changelog`, `tape` [`501a969`](https://github.com/es-shims/es-set-tostringtag/commit/501a96998484226e07f5ffd447e8f305a998f1d8) +- [Tests] add coverage [`18af289`](https://github.com/es-shims/es-set-tostringtag/commit/18af2897b4e937373c9b8c8831bc338932246470) +- [readme] document `force` option [`bd446a1`](https://github.com/es-shims/es-set-tostringtag/commit/bd446a107b71a2270278442e5124f45590d3ee64) +- [Tests] use `@arethetypeswrong/cli` [`7c2c2fa`](https://github.com/es-shims/es-set-tostringtag/commit/7c2c2fa3cca0f4d263603adb75426b239514598f) +- [Tests] replace `aud` with `npm audit` [`9e372d7`](https://github.com/es-shims/es-set-tostringtag/commit/9e372d7e6db3dab405599a14d9074a99a03b8242) +- [Deps] update `get-intrinsic` [`7df1216`](https://github.com/es-shims/es-set-tostringtag/commit/7df12167295385c2a547410e687cb0c04f3a34b9) +- [Deps] update `hasown` [`993a7d2`](https://github.com/es-shims/es-set-tostringtag/commit/993a7d200e2059fd857ec1a25d0a49c2c34ae6e2) +- [Dev Deps] add missing peer dep [`148ed8d`](https://github.com/es-shims/es-set-tostringtag/commit/148ed8db99a7a94f9af3823fd083e6e437fa1587) + +## [v2.0.3](https://github.com/es-shims/es-set-tostringtag/compare/v2.0.2...v2.0.3) - 2024-02-20 + +### Commits + +- add types [`d538513`](https://github.com/es-shims/es-set-tostringtag/commit/d5385133592a32a0a416cb535327918af7fbc4ad) +- [Deps] update `get-intrinsic`, `has-tostringtag`, `hasown` [`d129b29`](https://github.com/es-shims/es-set-tostringtag/commit/d129b29536bccc8a9d03a47887ca4d1f7ad0c5b9) +- [Dev Deps] update `aud`, `npmignore`, `tape` [`132ed23`](https://github.com/es-shims/es-set-tostringtag/commit/132ed23c964a41ed55e4ab4a5a2c3fe185e821c1) +- [Tests] fix hasOwn require [`f89c831`](https://github.com/es-shims/es-set-tostringtag/commit/f89c831fe5f3edf1f979c597b56fee1be6111f56) + +## [v2.0.2](https://github.com/es-shims/es-set-tostringtag/compare/v2.0.1...v2.0.2) - 2023-10-20 + +### Commits + +- [Refactor] use `hasown` instead of `has` [`0cc6c4e`](https://github.com/es-shims/es-set-tostringtag/commit/0cc6c4e61fd13e8f00b85424ae6e541ebf289e74) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `tape` [`70e447c`](https://github.com/es-shims/es-set-tostringtag/commit/70e447cf9f82b896ddf359fda0a0498c16cf3ed2) +- [Deps] update `get-intrinsic` [`826aab7`](https://github.com/es-shims/es-set-tostringtag/commit/826aab76180392871c8efa99acc0f0bbf775c64e) + +## [v2.0.1](https://github.com/es-shims/es-set-tostringtag/compare/v2.0.0...v2.0.1) - 2023-01-05 + +### Fixed + +- [Fix] move `has` to prod deps [`#2`](https://github.com/es-shims/es-set-tostringtag/issues/2) + +### Commits + +- [Dev Deps] update `@ljharb/eslint-config` [`b9eecd2`](https://github.com/es-shims/es-set-tostringtag/commit/b9eecd23c10b7b43ba75089ac8ff8cc6b295798b) + +## [v2.0.0](https://github.com/es-shims/es-set-tostringtag/compare/v1.0.0...v2.0.0) - 2022-12-21 + +### Commits + +- [Tests] refactor tests [`168dcfb`](https://github.com/es-shims/es-set-tostringtag/commit/168dcfbb535c279dc48ccdc89419155125aaec18) +- [Breaking] do not set toStringTag if it is already set [`226ab87`](https://github.com/es-shims/es-set-tostringtag/commit/226ab874192c625d9e5f0e599d3f60d2b2aa83b5) +- [New] add `force` option to set even if already set [`1abd4ec`](https://github.com/es-shims/es-set-tostringtag/commit/1abd4ecb282f19718c4518284b0293a343564505) + +## v1.0.0 - 2022-12-21 + +### Commits + +- Initial implementation, tests, readme [`a0e1147`](https://github.com/es-shims/es-set-tostringtag/commit/a0e11473f79a233b46374525c962ea1b4d42418a) +- Initial commit [`ffd4aff`](https://github.com/es-shims/es-set-tostringtag/commit/ffd4afffbeebf29aff0d87a7cfc3f7844e09fe68) +- npm init [`fffe5bd`](https://github.com/es-shims/es-set-tostringtag/commit/fffe5bd1d1146d084730a387a9c672371f4a8fff) +- Only apps should have lockfiles [`d363871`](https://github.com/es-shims/es-set-tostringtag/commit/d36387139465623e161a15dbd39120537f150c62) diff --git a/node_modules/es-set-tostringtag/LICENSE b/node_modules/es-set-tostringtag/LICENSE new file mode 100644 index 0000000..c2a8460 --- /dev/null +++ b/node_modules/es-set-tostringtag/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 ECMAScript Shims + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/es-set-tostringtag/README.md b/node_modules/es-set-tostringtag/README.md new file mode 100644 index 0000000..c27bc9f --- /dev/null +++ b/node_modules/es-set-tostringtag/README.md @@ -0,0 +1,53 @@ +# es-set-tostringtag [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +A helper to optimistically set Symbol.toStringTag, when possible. + +## Example +Most common usage: +```js +var assert = require('assert'); +var setToStringTag = require('es-set-tostringtag'); + +var obj = {}; + +assert.equal(Object.prototype.toString.call(obj), '[object Object]'); + +setToStringTag(obj, 'tagged!'); + +assert.equal(Object.prototype.toString.call(obj), '[object tagged!]'); +``` + +## Options +An optional options argument can be provided as the third argument. The available options are: + +### `force` +If the `force` option is set to `true`, the toStringTag will be set even if it is already set. + +### `nonConfigurable` +If the `nonConfigurable` option is set to `true`, the toStringTag will be defined as non-configurable when possible. + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.com/package/es-set-tostringtag +[npm-version-svg]: https://versionbadg.es/es-shims/es-set-tostringtag.svg +[deps-svg]: https://david-dm.org/es-shims/es-set-tostringtag.svg +[deps-url]: https://david-dm.org/es-shims/es-set-tostringtag +[dev-deps-svg]: https://david-dm.org/es-shims/es-set-tostringtag/dev-status.svg +[dev-deps-url]: https://david-dm.org/es-shims/es-set-tostringtag#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/es-set-tostringtag.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/es-set-tostringtag.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/es-set-tostringtag.svg +[downloads-url]: https://npm-stat.com/charts.html?package=es-set-tostringtag +[codecov-image]: https://codecov.io/gh/es-shims/es-set-tostringtag/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/es-shims/es-set-tostringtag/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/es-shims/es-set-tostringtag +[actions-url]: https://github.com/es-shims/es-set-tostringtag/actions diff --git a/node_modules/es-set-tostringtag/index.d.ts b/node_modules/es-set-tostringtag/index.d.ts new file mode 100644 index 0000000..c9a8fc4 --- /dev/null +++ b/node_modules/es-set-tostringtag/index.d.ts @@ -0,0 +1,10 @@ +declare function setToStringTag( + object: object & { [Symbol.toStringTag]?: unknown }, + value: string | unknown, + options?: { + force?: boolean; + nonConfigurable?: boolean; + }, +): void; + +export = setToStringTag; \ No newline at end of file diff --git a/node_modules/es-set-tostringtag/index.js b/node_modules/es-set-tostringtag/index.js new file mode 100644 index 0000000..6b6b49c --- /dev/null +++ b/node_modules/es-set-tostringtag/index.js @@ -0,0 +1,35 @@ +'use strict'; + +var GetIntrinsic = require('get-intrinsic'); + +var $defineProperty = GetIntrinsic('%Object.defineProperty%', true); + +var hasToStringTag = require('has-tostringtag/shams')(); +var hasOwn = require('hasown'); +var $TypeError = require('es-errors/type'); + +var toStringTag = hasToStringTag ? Symbol.toStringTag : null; + +/** @type {import('.')} */ +module.exports = function setToStringTag(object, value) { + var overrideIfSet = arguments.length > 2 && !!arguments[2] && arguments[2].force; + var nonConfigurable = arguments.length > 2 && !!arguments[2] && arguments[2].nonConfigurable; + if ( + (typeof overrideIfSet !== 'undefined' && typeof overrideIfSet !== 'boolean') + || (typeof nonConfigurable !== 'undefined' && typeof nonConfigurable !== 'boolean') + ) { + throw new $TypeError('if provided, the `overrideIfSet` and `nonConfigurable` options must be booleans'); + } + if (toStringTag && (overrideIfSet || !hasOwn(object, toStringTag))) { + if ($defineProperty) { + $defineProperty(object, toStringTag, { + configurable: !nonConfigurable, + enumerable: false, + value: value, + writable: false + }); + } else { + object[toStringTag] = value; // eslint-disable-line no-param-reassign + } + } +}; diff --git a/node_modules/es-set-tostringtag/package.json b/node_modules/es-set-tostringtag/package.json new file mode 100644 index 0000000..277c3e5 --- /dev/null +++ b/node_modules/es-set-tostringtag/package.json @@ -0,0 +1,78 @@ +{ + "name": "es-set-tostringtag", + "version": "2.1.0", + "description": "A helper to optimistically set Symbol.toStringTag, when possible.", + "main": "index.js", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p . && attw -P", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "npx npm@\">= 10.2\" audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/es-shims/es-set-tostringtag.git" + }, + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/es-shims/es-set-tostringtag/issues" + }, + "homepage": "https://github.com/es-shims/es-set-tostringtag#readme", + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.2", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.3", + "@types/get-intrinsic": "^1.2.3", + "@types/has-symbols": "^1.0.2", + "@types/tape": "^5.8.0", + "auto-changelog": "^2.5.0", + "encoding": "^0.1.13", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "testling": { + "files": "./test/index.js" + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/node_modules/es-set-tostringtag/test/index.js b/node_modules/es-set-tostringtag/test/index.js new file mode 100644 index 0000000..f1757b3 --- /dev/null +++ b/node_modules/es-set-tostringtag/test/index.js @@ -0,0 +1,85 @@ +'use strict'; + +var test = require('tape'); +var hasToStringTag = require('has-tostringtag/shams')(); +var hasOwn = require('hasown'); + +var setToStringTag = require('../'); + +test('setToStringTag', function (t) { + t.equal(typeof setToStringTag, 'function', 'is a function'); + + /** @type {{ [Symbol.toStringTag]?: typeof sentinel }} */ + var obj = {}; + var sentinel = {}; + + setToStringTag(obj, sentinel); + + t['throws']( + // @ts-expect-error + function () { setToStringTag(obj, sentinel, { force: 'yes' }); }, + TypeError, + 'throws if options is not an object' + ); + + t.test('has Symbol.toStringTag', { skip: !hasToStringTag }, function (st) { + st.ok(hasOwn(obj, Symbol.toStringTag), 'has toStringTag property'); + + st.equal(obj[Symbol.toStringTag], sentinel, 'toStringTag property is as expected'); + + st.equal(String(obj), '[object Object]', 'toStringTag works'); + + /** @type {{ [Symbol.toStringTag]?: string }} */ + var tagged = {}; + tagged[Symbol.toStringTag] = 'already tagged'; + st.equal(String(tagged), '[object already tagged]', 'toStringTag works'); + + setToStringTag(tagged, 'new tag'); + st.equal(String(tagged), '[object already tagged]', 'toStringTag is unchanged'); + + setToStringTag(tagged, 'new tag', { force: true }); + st.equal(String(tagged), '[object new tag]', 'toStringTag is changed with force: true'); + + st.deepEqual( + Object.getOwnPropertyDescriptor(tagged, Symbol.toStringTag), + { + configurable: true, + enumerable: false, + value: 'new tag', + writable: false + }, + 'has expected property descriptor' + ); + + setToStringTag(tagged, 'new tag', { force: true, nonConfigurable: true }); + st.deepEqual( + Object.getOwnPropertyDescriptor(tagged, Symbol.toStringTag), + { + configurable: false, + enumerable: false, + value: 'new tag', + writable: false + }, + 'is nonconfigurable' + ); + + st.end(); + }); + + t.test('does not have Symbol.toStringTag', { skip: hasToStringTag }, function (st) { + var passed = true; + for (var key in obj) { // eslint-disable-line no-restricted-syntax + if (hasOwn(obj, key)) { + st.fail('object has own key ' + key); + passed = false; + } + } + if (passed) { + st.ok(true, 'object has no enumerable own keys'); + } + + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/es-set-tostringtag/tsconfig.json b/node_modules/es-set-tostringtag/tsconfig.json new file mode 100644 index 0000000..d9a6668 --- /dev/null +++ b/node_modules/es-set-tostringtag/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "es2021", + }, + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/follow-redirects/LICENSE b/node_modules/follow-redirects/LICENSE new file mode 100644 index 0000000..742cbad --- /dev/null +++ b/node_modules/follow-redirects/LICENSE @@ -0,0 +1,18 @@ +Copyright 2014โ€“present Olivier Lalonde , James Talmage , Ruben Verborgh + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR +IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/follow-redirects/README.md b/node_modules/follow-redirects/README.md new file mode 100644 index 0000000..eb869a6 --- /dev/null +++ b/node_modules/follow-redirects/README.md @@ -0,0 +1,155 @@ +## Follow Redirects + +Drop-in replacement for Node's `http` and `https` modules that automatically follows redirects. + +[![npm version](https://img.shields.io/npm/v/follow-redirects.svg)](https://www.npmjs.com/package/follow-redirects) +[![Build Status](https://github.com/follow-redirects/follow-redirects/workflows/CI/badge.svg)](https://github.com/follow-redirects/follow-redirects/actions) +[![Coverage Status](https://coveralls.io/repos/follow-redirects/follow-redirects/badge.svg?branch=master)](https://coveralls.io/r/follow-redirects/follow-redirects?branch=master) +[![npm downloads](https://img.shields.io/npm/dm/follow-redirects.svg)](https://www.npmjs.com/package/follow-redirects) +[![Sponsor on GitHub](https://img.shields.io/static/v1?label=Sponsor&message=%F0%9F%92%96&logo=GitHub)](https://github.com/sponsors/RubenVerborgh) + +`follow-redirects` provides [request](https://nodejs.org/api/http.html#http_http_request_options_callback) and [get](https://nodejs.org/api/http.html#http_http_get_options_callback) + methods that behave identically to those found on the native [http](https://nodejs.org/api/http.html#http_http_request_options_callback) and [https](https://nodejs.org/api/https.html#https_https_request_options_callback) + modules, with the exception that they will seamlessly follow redirects. + +```javascript +const { http, https } = require('follow-redirects'); + +http.get('http://bit.ly/900913', response => { + response.on('data', chunk => { + console.log(chunk); + }); +}).on('error', err => { + console.error(err); +}); +``` + +You can inspect the final redirected URL through the `responseUrl` property on the `response`. +If no redirection happened, `responseUrl` is the original request URL. + +```javascript +const request = https.request({ + host: 'bitly.com', + path: '/UHfDGO', +}, response => { + console.log(response.responseUrl); + // 'http://duckduckgo.com/robots.txt' +}); +request.end(); +``` + +## Options +### Global options +Global options are set directly on the `follow-redirects` module: + +```javascript +const followRedirects = require('follow-redirects'); +followRedirects.maxRedirects = 10; +followRedirects.maxBodyLength = 20 * 1024 * 1024; // 20 MB +``` + +The following global options are supported: + +- `maxRedirects` (default: `21`) โ€“ sets the maximum number of allowed redirects; if exceeded, an error will be emitted. + +- `maxBodyLength` (default: 10MB) โ€“ sets the maximum size of the request body; if exceeded, an error will be emitted. + +### Per-request options +Per-request options are set by passing an `options` object: + +```javascript +const url = require('url'); +const { http, https } = require('follow-redirects'); + +const options = url.parse('http://bit.ly/900913'); +options.maxRedirects = 10; +options.beforeRedirect = (options, response, request) => { + // Use this to adjust the request options upon redirecting, + // to inspect the latest response headers, + // or to cancel the request by throwing an error + + // response.headers = the redirect response headers + // response.statusCode = the redirect response code (eg. 301, 307, etc.) + + // request.url = the requested URL that resulted in a redirect + // request.headers = the headers in the request that resulted in a redirect + // request.method = the method of the request that resulted in a redirect + if (options.hostname === "example.com") { + options.auth = "user:password"; + } +}; +http.request(options); +``` + +In addition to the [standard HTTP](https://nodejs.org/api/http.html#http_http_request_options_callback) and [HTTPS options](https://nodejs.org/api/https.html#https_https_request_options_callback), +the following per-request options are supported: +- `followRedirects` (default: `true`) โ€“ whether redirects should be followed. + +- `maxRedirects` (default: `21`) โ€“ sets the maximum number of allowed redirects; if exceeded, an error will be emitted. + +- `maxBodyLength` (default: 10MB) โ€“ sets the maximum size of the request body; if exceeded, an error will be emitted. + +- `beforeRedirect` (default: `undefined`) โ€“ optionally change the request `options` on redirects, or abort the request by throwing an error. + +- `agents` (default: `undefined`) โ€“ sets the `agent` option per protocol, since HTTP and HTTPS use different agents. Example value: `{ http: new http.Agent(), https: new https.Agent() }` + +- `trackRedirects` (default: `false`) โ€“ whether to store the redirected response details into the `redirects` array on the response object. + + +### Advanced usage +By default, `follow-redirects` will use the Node.js default implementations +of [`http`](https://nodejs.org/api/http.html) +and [`https`](https://nodejs.org/api/https.html). +To enable features such as caching and/or intermediate request tracking, +you might instead want to wrap `follow-redirects` around custom protocol implementations: + +```javascript +const { http, https } = require('follow-redirects').wrap({ + http: require('your-custom-http'), + https: require('your-custom-https'), +}); +``` + +Such custom protocols only need an implementation of the `request` method. + +## Browser Usage + +Due to the way the browser works, +the `http` and `https` browser equivalents perform redirects by default. + +By requiring `follow-redirects` this way: +```javascript +const http = require('follow-redirects/http'); +const https = require('follow-redirects/https'); +``` +you can easily tell webpack and friends to replace +`follow-redirect` by the built-in versions: + +```json +{ + "follow-redirects/http" : "http", + "follow-redirects/https" : "https" +} +``` + +## Contributing + +Pull Requests are always welcome. Please [file an issue](https://github.com/follow-redirects/follow-redirects/issues) + detailing your proposal before you invest your valuable time. Additional features and bug fixes should be accompanied + by tests. You can run the test suite locally with a simple `npm test` command. + +## Debug Logging + +`follow-redirects` uses the excellent [debug](https://www.npmjs.com/package/debug) for logging. To turn on logging + set the environment variable `DEBUG=follow-redirects` for debug output from just this module. When running the test + suite it is sometimes advantageous to set `DEBUG=*` to see output from the express server as well. + +## Authors + +- [Ruben Verborgh](https://ruben.verborgh.org/) +- [Olivier Lalonde](mailto:olalonde@gmail.com) +- [James Talmage](mailto:james@talmage.io) + +## License + +[MIT License](https://github.com/follow-redirects/follow-redirects/blob/master/LICENSE) diff --git a/node_modules/follow-redirects/debug.js b/node_modules/follow-redirects/debug.js new file mode 100644 index 0000000..decb77d --- /dev/null +++ b/node_modules/follow-redirects/debug.js @@ -0,0 +1,15 @@ +var debug; + +module.exports = function () { + if (!debug) { + try { + /* eslint global-require: off */ + debug = require("debug")("follow-redirects"); + } + catch (error) { /* */ } + if (typeof debug !== "function") { + debug = function () { /* */ }; + } + } + debug.apply(null, arguments); +}; diff --git a/node_modules/follow-redirects/http.js b/node_modules/follow-redirects/http.js new file mode 100644 index 0000000..695e356 --- /dev/null +++ b/node_modules/follow-redirects/http.js @@ -0,0 +1 @@ +module.exports = require("./").http; diff --git a/node_modules/follow-redirects/https.js b/node_modules/follow-redirects/https.js new file mode 100644 index 0000000..d21c921 --- /dev/null +++ b/node_modules/follow-redirects/https.js @@ -0,0 +1 @@ +module.exports = require("./").https; diff --git a/node_modules/follow-redirects/index.js b/node_modules/follow-redirects/index.js new file mode 100644 index 0000000..a30b32c --- /dev/null +++ b/node_modules/follow-redirects/index.js @@ -0,0 +1,686 @@ +var url = require("url"); +var URL = url.URL; +var http = require("http"); +var https = require("https"); +var Writable = require("stream").Writable; +var assert = require("assert"); +var debug = require("./debug"); + +// Preventive platform detection +// istanbul ignore next +(function detectUnsupportedEnvironment() { + var looksLikeNode = typeof process !== "undefined"; + var looksLikeBrowser = typeof window !== "undefined" && typeof document !== "undefined"; + var looksLikeV8 = isFunction(Error.captureStackTrace); + if (!looksLikeNode && (looksLikeBrowser || !looksLikeV8)) { + console.warn("The follow-redirects package should be excluded from browser builds."); + } +}()); + +// Whether to use the native URL object or the legacy url module +var useNativeURL = false; +try { + assert(new URL("")); +} +catch (error) { + useNativeURL = error.code === "ERR_INVALID_URL"; +} + +// URL fields to preserve in copy operations +var preservedUrlFields = [ + "auth", + "host", + "hostname", + "href", + "path", + "pathname", + "port", + "protocol", + "query", + "search", + "hash", +]; + +// Create handlers that pass events from native requests +var events = ["abort", "aborted", "connect", "error", "socket", "timeout"]; +var eventHandlers = Object.create(null); +events.forEach(function (event) { + eventHandlers[event] = function (arg1, arg2, arg3) { + this._redirectable.emit(event, arg1, arg2, arg3); + }; +}); + +// Error types with codes +var InvalidUrlError = createErrorType( + "ERR_INVALID_URL", + "Invalid URL", + TypeError +); +var RedirectionError = createErrorType( + "ERR_FR_REDIRECTION_FAILURE", + "Redirected request failed" +); +var TooManyRedirectsError = createErrorType( + "ERR_FR_TOO_MANY_REDIRECTS", + "Maximum number of redirects exceeded", + RedirectionError +); +var MaxBodyLengthExceededError = createErrorType( + "ERR_FR_MAX_BODY_LENGTH_EXCEEDED", + "Request body larger than maxBodyLength limit" +); +var WriteAfterEndError = createErrorType( + "ERR_STREAM_WRITE_AFTER_END", + "write after end" +); + +// istanbul ignore next +var destroy = Writable.prototype.destroy || noop; + +// An HTTP(S) request that can be redirected +function RedirectableRequest(options, responseCallback) { + // Initialize the request + Writable.call(this); + this._sanitizeOptions(options); + this._options = options; + this._ended = false; + this._ending = false; + this._redirectCount = 0; + this._redirects = []; + this._requestBodyLength = 0; + this._requestBodyBuffers = []; + + // Attach a callback if passed + if (responseCallback) { + this.on("response", responseCallback); + } + + // React to responses of native requests + var self = this; + this._onNativeResponse = function (response) { + try { + self._processResponse(response); + } + catch (cause) { + self.emit("error", cause instanceof RedirectionError ? + cause : new RedirectionError({ cause: cause })); + } + }; + + // Perform the first request + this._performRequest(); +} +RedirectableRequest.prototype = Object.create(Writable.prototype); + +RedirectableRequest.prototype.abort = function () { + destroyRequest(this._currentRequest); + this._currentRequest.abort(); + this.emit("abort"); +}; + +RedirectableRequest.prototype.destroy = function (error) { + destroyRequest(this._currentRequest, error); + destroy.call(this, error); + return this; +}; + +// Writes buffered data to the current native request +RedirectableRequest.prototype.write = function (data, encoding, callback) { + // Writing is not allowed if end has been called + if (this._ending) { + throw new WriteAfterEndError(); + } + + // Validate input and shift parameters if necessary + if (!isString(data) && !isBuffer(data)) { + throw new TypeError("data should be a string, Buffer or Uint8Array"); + } + if (isFunction(encoding)) { + callback = encoding; + encoding = null; + } + + // Ignore empty buffers, since writing them doesn't invoke the callback + // https://github.com/nodejs/node/issues/22066 + if (data.length === 0) { + if (callback) { + callback(); + } + return; + } + // Only write when we don't exceed the maximum body length + if (this._requestBodyLength + data.length <= this._options.maxBodyLength) { + this._requestBodyLength += data.length; + this._requestBodyBuffers.push({ data: data, encoding: encoding }); + this._currentRequest.write(data, encoding, callback); + } + // Error when we exceed the maximum body length + else { + this.emit("error", new MaxBodyLengthExceededError()); + this.abort(); + } +}; + +// Ends the current native request +RedirectableRequest.prototype.end = function (data, encoding, callback) { + // Shift parameters if necessary + if (isFunction(data)) { + callback = data; + data = encoding = null; + } + else if (isFunction(encoding)) { + callback = encoding; + encoding = null; + } + + // Write data if needed and end + if (!data) { + this._ended = this._ending = true; + this._currentRequest.end(null, null, callback); + } + else { + var self = this; + var currentRequest = this._currentRequest; + this.write(data, encoding, function () { + self._ended = true; + currentRequest.end(null, null, callback); + }); + this._ending = true; + } +}; + +// Sets a header value on the current native request +RedirectableRequest.prototype.setHeader = function (name, value) { + this._options.headers[name] = value; + this._currentRequest.setHeader(name, value); +}; + +// Clears a header value on the current native request +RedirectableRequest.prototype.removeHeader = function (name) { + delete this._options.headers[name]; + this._currentRequest.removeHeader(name); +}; + +// Global timeout for all underlying requests +RedirectableRequest.prototype.setTimeout = function (msecs, callback) { + var self = this; + + // Destroys the socket on timeout + function destroyOnTimeout(socket) { + socket.setTimeout(msecs); + socket.removeListener("timeout", socket.destroy); + socket.addListener("timeout", socket.destroy); + } + + // Sets up a timer to trigger a timeout event + function startTimer(socket) { + if (self._timeout) { + clearTimeout(self._timeout); + } + self._timeout = setTimeout(function () { + self.emit("timeout"); + clearTimer(); + }, msecs); + destroyOnTimeout(socket); + } + + // Stops a timeout from triggering + function clearTimer() { + // Clear the timeout + if (self._timeout) { + clearTimeout(self._timeout); + self._timeout = null; + } + + // Clean up all attached listeners + self.removeListener("abort", clearTimer); + self.removeListener("error", clearTimer); + self.removeListener("response", clearTimer); + self.removeListener("close", clearTimer); + if (callback) { + self.removeListener("timeout", callback); + } + if (!self.socket) { + self._currentRequest.removeListener("socket", startTimer); + } + } + + // Attach callback if passed + if (callback) { + this.on("timeout", callback); + } + + // Start the timer if or when the socket is opened + if (this.socket) { + startTimer(this.socket); + } + else { + this._currentRequest.once("socket", startTimer); + } + + // Clean up on events + this.on("socket", destroyOnTimeout); + this.on("abort", clearTimer); + this.on("error", clearTimer); + this.on("response", clearTimer); + this.on("close", clearTimer); + + return this; +}; + +// Proxy all other public ClientRequest methods +[ + "flushHeaders", "getHeader", + "setNoDelay", "setSocketKeepAlive", +].forEach(function (method) { + RedirectableRequest.prototype[method] = function (a, b) { + return this._currentRequest[method](a, b); + }; +}); + +// Proxy all public ClientRequest properties +["aborted", "connection", "socket"].forEach(function (property) { + Object.defineProperty(RedirectableRequest.prototype, property, { + get: function () { return this._currentRequest[property]; }, + }); +}); + +RedirectableRequest.prototype._sanitizeOptions = function (options) { + // Ensure headers are always present + if (!options.headers) { + options.headers = {}; + } + + // Since http.request treats host as an alias of hostname, + // but the url module interprets host as hostname plus port, + // eliminate the host property to avoid confusion. + if (options.host) { + // Use hostname if set, because it has precedence + if (!options.hostname) { + options.hostname = options.host; + } + delete options.host; + } + + // Complete the URL object when necessary + if (!options.pathname && options.path) { + var searchPos = options.path.indexOf("?"); + if (searchPos < 0) { + options.pathname = options.path; + } + else { + options.pathname = options.path.substring(0, searchPos); + options.search = options.path.substring(searchPos); + } + } +}; + + +// Executes the next native request (initial or redirect) +RedirectableRequest.prototype._performRequest = function () { + // Load the native protocol + var protocol = this._options.protocol; + var nativeProtocol = this._options.nativeProtocols[protocol]; + if (!nativeProtocol) { + throw new TypeError("Unsupported protocol " + protocol); + } + + // If specified, use the agent corresponding to the protocol + // (HTTP and HTTPS use different types of agents) + if (this._options.agents) { + var scheme = protocol.slice(0, -1); + this._options.agent = this._options.agents[scheme]; + } + + // Create the native request and set up its event handlers + var request = this._currentRequest = + nativeProtocol.request(this._options, this._onNativeResponse); + request._redirectable = this; + for (var event of events) { + request.on(event, eventHandlers[event]); + } + + // RFC7230ยง5.3.1: When making a request directly to an origin server, [โ€ฆ] + // a client MUST send only the absolute path [โ€ฆ] as the request-target. + this._currentUrl = /^\//.test(this._options.path) ? + url.format(this._options) : + // When making a request to a proxy, [โ€ฆ] + // a client MUST send the target URI in absolute-form [โ€ฆ]. + this._options.path; + + // End a redirected request + // (The first request must be ended explicitly with RedirectableRequest#end) + if (this._isRedirect) { + // Write the request entity and end + var i = 0; + var self = this; + var buffers = this._requestBodyBuffers; + (function writeNext(error) { + // Only write if this request has not been redirected yet + // istanbul ignore else + if (request === self._currentRequest) { + // Report any write errors + // istanbul ignore if + if (error) { + self.emit("error", error); + } + // Write the next buffer if there are still left + else if (i < buffers.length) { + var buffer = buffers[i++]; + // istanbul ignore else + if (!request.finished) { + request.write(buffer.data, buffer.encoding, writeNext); + } + } + // End the request if `end` has been called on us + else if (self._ended) { + request.end(); + } + } + }()); + } +}; + +// Processes a response from the current native request +RedirectableRequest.prototype._processResponse = function (response) { + // Store the redirected response + var statusCode = response.statusCode; + if (this._options.trackRedirects) { + this._redirects.push({ + url: this._currentUrl, + headers: response.headers, + statusCode: statusCode, + }); + } + + // RFC7231ยง6.4: The 3xx (Redirection) class of status code indicates + // that further action needs to be taken by the user agent in order to + // fulfill the request. If a Location header field is provided, + // the user agent MAY automatically redirect its request to the URI + // referenced by the Location field value, + // even if the specific status code is not understood. + + // If the response is not a redirect; return it as-is + var location = response.headers.location; + if (!location || this._options.followRedirects === false || + statusCode < 300 || statusCode >= 400) { + response.responseUrl = this._currentUrl; + response.redirects = this._redirects; + this.emit("response", response); + + // Clean up + this._requestBodyBuffers = []; + return; + } + + // The response is a redirect, so abort the current request + destroyRequest(this._currentRequest); + // Discard the remainder of the response to avoid waiting for data + response.destroy(); + + // RFC7231ยง6.4: A client SHOULD detect and intervene + // in cyclical redirections (i.e., "infinite" redirection loops). + if (++this._redirectCount > this._options.maxRedirects) { + throw new TooManyRedirectsError(); + } + + // Store the request headers if applicable + var requestHeaders; + var beforeRedirect = this._options.beforeRedirect; + if (beforeRedirect) { + requestHeaders = Object.assign({ + // The Host header was set by nativeProtocol.request + Host: response.req.getHeader("host"), + }, this._options.headers); + } + + // RFC7231ยง6.4: Automatic redirection needs to done with + // care for methods not known to be safe, [โ€ฆ] + // RFC7231ยง6.4.2โ€“3: For historical reasons, a user agent MAY change + // the request method from POST to GET for the subsequent request. + var method = this._options.method; + if ((statusCode === 301 || statusCode === 302) && this._options.method === "POST" || + // RFC7231ยง6.4.4: The 303 (See Other) status code indicates that + // the server is redirecting the user agent to a different resource [โ€ฆ] + // A user agent can perform a retrieval request targeting that URI + // (a GET or HEAD request if using HTTP) [โ€ฆ] + (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) { + this._options.method = "GET"; + // Drop a possible entity and headers related to it + this._requestBodyBuffers = []; + removeMatchingHeaders(/^content-/i, this._options.headers); + } + + // Drop the Host header, as the redirect might lead to a different host + var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers); + + // If the redirect is relative, carry over the host of the last request + var currentUrlParts = parseUrl(this._currentUrl); + var currentHost = currentHostHeader || currentUrlParts.host; + var currentUrl = /^\w+:/.test(location) ? this._currentUrl : + url.format(Object.assign(currentUrlParts, { host: currentHost })); + + // Create the redirected request + var redirectUrl = resolveUrl(location, currentUrl); + debug("redirecting to", redirectUrl.href); + this._isRedirect = true; + spreadUrlObject(redirectUrl, this._options); + + // Drop confidential headers when redirecting to a less secure protocol + // or to a different domain that is not a superdomain + if (redirectUrl.protocol !== currentUrlParts.protocol && + redirectUrl.protocol !== "https:" || + redirectUrl.host !== currentHost && + !isSubdomain(redirectUrl.host, currentHost)) { + removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers); + } + + // Evaluate the beforeRedirect callback + if (isFunction(beforeRedirect)) { + var responseDetails = { + headers: response.headers, + statusCode: statusCode, + }; + var requestDetails = { + url: currentUrl, + method: method, + headers: requestHeaders, + }; + beforeRedirect(this._options, responseDetails, requestDetails); + this._sanitizeOptions(this._options); + } + + // Perform the redirected request + this._performRequest(); +}; + +// Wraps the key/value object of protocols with redirect functionality +function wrap(protocols) { + // Default settings + var exports = { + maxRedirects: 21, + maxBodyLength: 10 * 1024 * 1024, + }; + + // Wrap each protocol + var nativeProtocols = {}; + Object.keys(protocols).forEach(function (scheme) { + var protocol = scheme + ":"; + var nativeProtocol = nativeProtocols[protocol] = protocols[scheme]; + var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol); + + // Executes a request, following redirects + function request(input, options, callback) { + // Parse parameters, ensuring that input is an object + if (isURL(input)) { + input = spreadUrlObject(input); + } + else if (isString(input)) { + input = spreadUrlObject(parseUrl(input)); + } + else { + callback = options; + options = validateUrl(input); + input = { protocol: protocol }; + } + if (isFunction(options)) { + callback = options; + options = null; + } + + // Set defaults + options = Object.assign({ + maxRedirects: exports.maxRedirects, + maxBodyLength: exports.maxBodyLength, + }, input, options); + options.nativeProtocols = nativeProtocols; + if (!isString(options.host) && !isString(options.hostname)) { + options.hostname = "::1"; + } + + assert.equal(options.protocol, protocol, "protocol mismatch"); + debug("options", options); + return new RedirectableRequest(options, callback); + } + + // Executes a GET request, following redirects + function get(input, options, callback) { + var wrappedRequest = wrappedProtocol.request(input, options, callback); + wrappedRequest.end(); + return wrappedRequest; + } + + // Expose the properties on the wrapped protocol + Object.defineProperties(wrappedProtocol, { + request: { value: request, configurable: true, enumerable: true, writable: true }, + get: { value: get, configurable: true, enumerable: true, writable: true }, + }); + }); + return exports; +} + +function noop() { /* empty */ } + +function parseUrl(input) { + var parsed; + // istanbul ignore else + if (useNativeURL) { + parsed = new URL(input); + } + else { + // Ensure the URL is valid and absolute + parsed = validateUrl(url.parse(input)); + if (!isString(parsed.protocol)) { + throw new InvalidUrlError({ input }); + } + } + return parsed; +} + +function resolveUrl(relative, base) { + // istanbul ignore next + return useNativeURL ? new URL(relative, base) : parseUrl(url.resolve(base, relative)); +} + +function validateUrl(input) { + if (/^\[/.test(input.hostname) && !/^\[[:0-9a-f]+\]$/i.test(input.hostname)) { + throw new InvalidUrlError({ input: input.href || input }); + } + if (/^\[/.test(input.host) && !/^\[[:0-9a-f]+\](:\d+)?$/i.test(input.host)) { + throw new InvalidUrlError({ input: input.href || input }); + } + return input; +} + +function spreadUrlObject(urlObject, target) { + var spread = target || {}; + for (var key of preservedUrlFields) { + spread[key] = urlObject[key]; + } + + // Fix IPv6 hostname + if (spread.hostname.startsWith("[")) { + spread.hostname = spread.hostname.slice(1, -1); + } + // Ensure port is a number + if (spread.port !== "") { + spread.port = Number(spread.port); + } + // Concatenate path + spread.path = spread.search ? spread.pathname + spread.search : spread.pathname; + + return spread; +} + +function removeMatchingHeaders(regex, headers) { + var lastValue; + for (var header in headers) { + if (regex.test(header)) { + lastValue = headers[header]; + delete headers[header]; + } + } + return (lastValue === null || typeof lastValue === "undefined") ? + undefined : String(lastValue).trim(); +} + +function createErrorType(code, message, baseClass) { + // Create constructor + function CustomError(properties) { + // istanbul ignore else + if (isFunction(Error.captureStackTrace)) { + Error.captureStackTrace(this, this.constructor); + } + Object.assign(this, properties || {}); + this.code = code; + this.message = this.cause ? message + ": " + this.cause.message : message; + } + + // Attach constructor and set default properties + CustomError.prototype = new (baseClass || Error)(); + Object.defineProperties(CustomError.prototype, { + constructor: { + value: CustomError, + enumerable: false, + }, + name: { + value: "Error [" + code + "]", + enumerable: false, + }, + }); + return CustomError; +} + +function destroyRequest(request, error) { + for (var event of events) { + request.removeListener(event, eventHandlers[event]); + } + request.on("error", noop); + request.destroy(error); +} + +function isSubdomain(subdomain, domain) { + assert(isString(subdomain) && isString(domain)); + var dot = subdomain.length - domain.length - 1; + return dot > 0 && subdomain[dot] === "." && subdomain.endsWith(domain); +} + +function isString(value) { + return typeof value === "string" || value instanceof String; +} + +function isFunction(value) { + return typeof value === "function"; +} + +function isBuffer(value) { + return typeof value === "object" && ("length" in value); +} + +function isURL(value) { + return URL && value instanceof URL; +} + +// Exports +module.exports = wrap({ http: http, https: https }); +module.exports.wrap = wrap; diff --git a/node_modules/follow-redirects/package.json b/node_modules/follow-redirects/package.json new file mode 100644 index 0000000..6f491e1 --- /dev/null +++ b/node_modules/follow-redirects/package.json @@ -0,0 +1,58 @@ +{ + "name": "follow-redirects", + "version": "1.15.9", + "description": "HTTP and HTTPS modules that follow redirects.", + "license": "MIT", + "main": "index.js", + "files": [ + "*.js" + ], + "engines": { + "node": ">=4.0" + }, + "scripts": { + "lint": "eslint *.js test", + "test": "nyc mocha" + }, + "repository": { + "type": "git", + "url": "git+ssh://git@github.com/follow-redirects/follow-redirects.git" + }, + "homepage": "https://github.com/follow-redirects/follow-redirects", + "bugs": { + "url": "https://github.com/follow-redirects/follow-redirects/issues" + }, + "keywords": [ + "http", + "https", + "url", + "redirect", + "client", + "location", + "utility" + ], + "author": "Ruben Verborgh (https://ruben.verborgh.org/)", + "contributors": [ + "Olivier Lalonde (http://www.syskall.com)", + "James Talmage " + ], + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "peerDependenciesMeta": { + "debug": { + "optional": true + } + }, + "devDependencies": { + "concat-stream": "^2.0.0", + "eslint": "^5.16.0", + "express": "^4.16.4", + "lolex": "^3.1.0", + "mocha": "^6.0.2", + "nyc": "^14.1.1" + } +} diff --git a/node_modules/form-data/License b/node_modules/form-data/License new file mode 100644 index 0000000..c7ff12a --- /dev/null +++ b/node_modules/form-data/License @@ -0,0 +1,19 @@ +Copyright (c) 2012 Felix Geisendรถrfer (felix@debuggable.com) and contributors + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. diff --git a/node_modules/form-data/Readme.md b/node_modules/form-data/Readme.md new file mode 100644 index 0000000..b09df6a --- /dev/null +++ b/node_modules/form-data/Readme.md @@ -0,0 +1,358 @@ +# Form-Data [![NPM Module](https://img.shields.io/npm/v/form-data.svg)](https://www.npmjs.com/package/form-data) [![Join the chat at https://gitter.im/form-data/form-data](http://form-data.github.io/images/gitterbadge.svg)](https://gitter.im/form-data/form-data) + +A library to create readable ```"multipart/form-data"``` streams. Can be used to submit forms and file uploads to other web applications. + +The API of this library is inspired by the [XMLHttpRequest-2 FormData Interface][xhr2-fd]. + +[xhr2-fd]: http://dev.w3.org/2006/webapi/XMLHttpRequest-2/Overview.html#the-formdata-interface + +[![Linux Build](https://img.shields.io/travis/form-data/form-data/master.svg?label=linux:6.x-12.x)](https://travis-ci.org/form-data/form-data) +[![MacOS Build](https://img.shields.io/travis/form-data/form-data/master.svg?label=macos:6.x-12.x)](https://travis-ci.org/form-data/form-data) +[![Windows Build](https://img.shields.io/travis/form-data/form-data/master.svg?label=windows:6.x-12.x)](https://travis-ci.org/form-data/form-data) + +[![Coverage Status](https://img.shields.io/coveralls/form-data/form-data/master.svg?label=code+coverage)](https://coveralls.io/github/form-data/form-data?branch=master) +[![Dependency Status](https://img.shields.io/david/form-data/form-data.svg)](https://david-dm.org/form-data/form-data) + +## Install + +``` +npm install --save form-data +``` + +## Usage + +In this example we are constructing a form with 3 fields that contain a string, +a buffer and a file stream. + +``` javascript +var FormData = require('form-data'); +var fs = require('fs'); + +var form = new FormData(); +form.append('my_field', 'my value'); +form.append('my_buffer', new Buffer(10)); +form.append('my_file', fs.createReadStream('/foo/bar.jpg')); +``` + +Also you can use http-response stream: + +``` javascript +var FormData = require('form-data'); +var http = require('http'); + +var form = new FormData(); + +http.request('http://nodejs.org/images/logo.png', function(response) { + form.append('my_field', 'my value'); + form.append('my_buffer', new Buffer(10)); + form.append('my_logo', response); +}); +``` + +Or @mikeal's [request](https://github.com/request/request) stream: + +``` javascript +var FormData = require('form-data'); +var request = require('request'); + +var form = new FormData(); + +form.append('my_field', 'my value'); +form.append('my_buffer', new Buffer(10)); +form.append('my_logo', request('http://nodejs.org/images/logo.png')); +``` + +In order to submit this form to a web application, call ```submit(url, [callback])``` method: + +``` javascript +form.submit('http://example.org/', function(err, res) { + // res โ€“ response object (http.IncomingMessage) // + res.resume(); +}); + +``` + +For more advanced request manipulations ```submit()``` method returns ```http.ClientRequest``` object, or you can choose from one of the alternative submission methods. + +### Custom options + +You can provide custom options, such as `maxDataSize`: + +``` javascript +var FormData = require('form-data'); + +var form = new FormData({ maxDataSize: 20971520 }); +form.append('my_field', 'my value'); +form.append('my_buffer', /* something big */); +``` + +List of available options could be found in [combined-stream](https://github.com/felixge/node-combined-stream/blob/master/lib/combined_stream.js#L7-L15) + +### Alternative submission methods + +You can use node's http client interface: + +``` javascript +var http = require('http'); + +var request = http.request({ + method: 'post', + host: 'example.org', + path: '/upload', + headers: form.getHeaders() +}); + +form.pipe(request); + +request.on('response', function(res) { + console.log(res.statusCode); +}); +``` + +Or if you would prefer the `'Content-Length'` header to be set for you: + +``` javascript +form.submit('example.org/upload', function(err, res) { + console.log(res.statusCode); +}); +``` + +To use custom headers and pre-known length in parts: + +``` javascript +var CRLF = '\r\n'; +var form = new FormData(); + +var options = { + header: CRLF + '--' + form.getBoundary() + CRLF + 'X-Custom-Header: 123' + CRLF + CRLF, + knownLength: 1 +}; + +form.append('my_buffer', buffer, options); + +form.submit('http://example.com/', function(err, res) { + if (err) throw err; + console.log('Done'); +}); +``` + +Form-Data can recognize and fetch all the required information from common types of streams (```fs.readStream```, ```http.response``` and ```mikeal's request```), for some other types of streams you'd need to provide "file"-related information manually: + +``` javascript +someModule.stream(function(err, stdout, stderr) { + if (err) throw err; + + var form = new FormData(); + + form.append('file', stdout, { + filename: 'unicycle.jpg', // ... or: + filepath: 'photos/toys/unicycle.jpg', + contentType: 'image/jpeg', + knownLength: 19806 + }); + + form.submit('http://example.com/', function(err, res) { + if (err) throw err; + console.log('Done'); + }); +}); +``` + +The `filepath` property overrides `filename` and may contain a relative path. This is typically used when uploading [multiple files from a directory](https://wicg.github.io/entries-api/#dom-htmlinputelement-webkitdirectory). + +For edge cases, like POST request to URL with query string or to pass HTTP auth credentials, object can be passed to `form.submit()` as first parameter: + +``` javascript +form.submit({ + host: 'example.com', + path: '/probably.php?extra=params', + auth: 'username:password' +}, function(err, res) { + console.log(res.statusCode); +}); +``` + +In case you need to also send custom HTTP headers with the POST request, you can use the `headers` key in first parameter of `form.submit()`: + +``` javascript +form.submit({ + host: 'example.com', + path: '/surelynot.php', + headers: {'x-test-header': 'test-header-value'} +}, function(err, res) { + console.log(res.statusCode); +}); +``` + +### Methods + +- [_Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] )](https://github.com/form-data/form-data#void-append-string-field-mixed-value--mixed-options-). +- [_Headers_ getHeaders( [**Headers** _userHeaders_] )](https://github.com/form-data/form-data#array-getheaders-array-userheaders-) +- [_String_ getBoundary()](https://github.com/form-data/form-data#string-getboundary) +- [_Void_ setBoundary()](https://github.com/form-data/form-data#void-setboundary) +- [_Buffer_ getBuffer()](https://github.com/form-data/form-data#buffer-getbuffer) +- [_Integer_ getLengthSync()](https://github.com/form-data/form-data#integer-getlengthsync) +- [_Integer_ getLength( **function** _callback_ )](https://github.com/form-data/form-data#integer-getlength-function-callback-) +- [_Boolean_ hasKnownLength()](https://github.com/form-data/form-data#boolean-hasknownlength) +- [_Request_ submit( _params_, **function** _callback_ )](https://github.com/form-data/form-data#request-submit-params-function-callback-) +- [_String_ toString()](https://github.com/form-data/form-data#string-tostring) + +#### _Void_ append( **String** _field_, **Mixed** _value_ [, **Mixed** _options_] ) +Append data to the form. You can submit about any format (string, integer, boolean, buffer, etc.). However, Arrays are not supported and need to be turned into strings by the user. +```javascript +var form = new FormData(); +form.append( 'my_string', 'my value' ); +form.append( 'my_integer', 1 ); +form.append( 'my_boolean', true ); +form.append( 'my_buffer', new Buffer(10) ); +form.append( 'my_array_as_json', JSON.stringify( ['bird','cute'] ) ) +``` + +You may provide a string for options, or an object. +```javascript +// Set filename by providing a string for options +form.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), 'bar.jpg' ); + +// provide an object. +form.append( 'my_file', fs.createReadStream('/foo/bar.jpg'), {filename: 'bar.jpg', contentType: 'image/jpeg', knownLength: 19806} ); +``` + +#### _Headers_ getHeaders( [**Headers** _userHeaders_] ) +This method adds the correct `content-type` header to the provided array of `userHeaders`. + +#### _String_ getBoundary() +Return the boundary of the formData. By default, the boundary consists of 26 `-` followed by 24 numbers +for example: +```javascript +--------------------------515890814546601021194782 +``` + +#### _Void_ setBoundary(String _boundary_) +Set the boundary string, overriding the default behavior described above. + +_Note: The boundary must be unique and may not appear in the data._ + +#### _Buffer_ getBuffer() +Return the full formdata request package, as a Buffer. You can insert this Buffer in e.g. Axios to send multipart data. +```javascript +var form = new FormData(); +form.append( 'my_buffer', Buffer.from([0x4a,0x42,0x20,0x52,0x6f,0x63,0x6b,0x73]) ); +form.append( 'my_file', fs.readFileSync('/foo/bar.jpg') ); + +axios.post( 'https://example.com/path/to/api', + form.getBuffer(), + form.getHeaders() + ) +``` +**Note:** Because the output is of type Buffer, you can only append types that are accepted by Buffer: *string, Buffer, ArrayBuffer, Array, or Array-like Object*. A ReadStream for example will result in an error. + +#### _Integer_ getLengthSync() +Same as `getLength` but synchronous. + +_Note: getLengthSync __doesn't__ calculate streams length._ + +#### _Integer_ getLength( **function** _callback_ ) +Returns the `Content-Length` async. The callback is used to handle errors and continue once the length has been calculated +```javascript +this.getLength(function(err, length) { + if (err) { + this._error(err); + return; + } + + // add content length + request.setHeader('Content-Length', length); + + ... +}.bind(this)); +``` + +#### _Boolean_ hasKnownLength() +Checks if the length of added values is known. + +#### _Request_ submit( _params_, **function** _callback_ ) +Submit the form to a web application. +```javascript +var form = new FormData(); +form.append( 'my_string', 'Hello World' ); + +form.submit( 'http://example.com/', function(err, res) { + // res โ€“ response object (http.IncomingMessage) // + res.resume(); +} ); +``` + +#### _String_ toString() +Returns the form data as a string. Don't use this if you are sending files or buffers, use `getBuffer()` instead. + +### Integration with other libraries + +#### Request + +Form submission using [request](https://github.com/request/request): + +```javascript +var formData = { + my_field: 'my_value', + my_file: fs.createReadStream(__dirname + '/unicycle.jpg'), +}; + +request.post({url:'http://service.com/upload', formData: formData}, function(err, httpResponse, body) { + if (err) { + return console.error('upload failed:', err); + } + console.log('Upload successful! Server responded with:', body); +}); +``` + +For more details see [request readme](https://github.com/request/request#multipartform-data-multipart-form-uploads). + +#### node-fetch + +You can also submit a form using [node-fetch](https://github.com/bitinn/node-fetch): + +```javascript +var form = new FormData(); + +form.append('a', 1); + +fetch('http://example.com', { method: 'POST', body: form }) + .then(function(res) { + return res.json(); + }).then(function(json) { + console.log(json); + }); +``` + +#### axios + +In Node.js you can post a file using [axios](https://github.com/axios/axios): +```javascript +const form = new FormData(); +const stream = fs.createReadStream(PATH_TO_FILE); + +form.append('image', stream); + +// In Node.js environment you need to set boundary in the header field 'Content-Type' by calling method `getHeaders` +const formHeaders = form.getHeaders(); + +axios.post('http://example.com', form, { + headers: { + ...formHeaders, + }, +}) +.then(response => response) +.catch(error => error) +``` + +## Notes + +- ```getLengthSync()``` method DOESN'T calculate length for streams, use ```knownLength``` options as workaround. +- ```getLength(cb)``` will send an error as first parameter of callback if stream length cannot be calculated (e.g. send in custom streams w/o using ```knownLength```). +- ```submit``` will not add `content-length` if form length is unknown or not calculable. +- Starting version `2.x` FormData has dropped support for `node@0.10.x`. +- Starting version `3.x` FormData has dropped support for `node@4.x`. + +## License + +Form-Data is released under the [MIT](License) license. diff --git a/node_modules/form-data/index.d.ts b/node_modules/form-data/index.d.ts new file mode 100644 index 0000000..295e9e9 --- /dev/null +++ b/node_modules/form-data/index.d.ts @@ -0,0 +1,62 @@ +// Definitions by: Carlos Ballesteros Velasco +// Leon Yu +// BendingBender +// Maple Miao + +/// +import * as stream from 'stream'; +import * as http from 'http'; + +export = FormData; + +// Extracted because @types/node doesn't export interfaces. +interface ReadableOptions { + highWaterMark?: number; + encoding?: string; + objectMode?: boolean; + read?(this: stream.Readable, size: number): void; + destroy?(this: stream.Readable, error: Error | null, callback: (error: Error | null) => void): void; + autoDestroy?: boolean; +} + +interface Options extends ReadableOptions { + writable?: boolean; + readable?: boolean; + dataSize?: number; + maxDataSize?: number; + pauseStreams?: boolean; +} + +declare class FormData extends stream.Readable { + constructor(options?: Options); + append(key: string, value: any, options?: FormData.AppendOptions | string): void; + getHeaders(userHeaders?: FormData.Headers): FormData.Headers; + submit( + params: string | FormData.SubmitOptions, + callback?: (error: Error | null, response: http.IncomingMessage) => void + ): http.ClientRequest; + getBuffer(): Buffer; + setBoundary(boundary: string): void; + getBoundary(): string; + getLength(callback: (err: Error | null, length: number) => void): void; + getLengthSync(): number; + hasKnownLength(): boolean; +} + +declare namespace FormData { + interface Headers { + [key: string]: any; + } + + interface AppendOptions { + header?: string | Headers; + knownLength?: number; + filename?: string; + filepath?: string; + contentType?: string; + } + + interface SubmitOptions extends http.RequestOptions { + protocol?: 'https:' | 'http:'; + } +} diff --git a/node_modules/form-data/lib/browser.js b/node_modules/form-data/lib/browser.js new file mode 100644 index 0000000..09e7c70 --- /dev/null +++ b/node_modules/form-data/lib/browser.js @@ -0,0 +1,2 @@ +/* eslint-env browser */ +module.exports = typeof self == 'object' ? self.FormData : window.FormData; diff --git a/node_modules/form-data/lib/form_data.js b/node_modules/form-data/lib/form_data.js new file mode 100644 index 0000000..3479d18 --- /dev/null +++ b/node_modules/form-data/lib/form_data.js @@ -0,0 +1,503 @@ +var CombinedStream = require('combined-stream'); +var util = require('util'); +var path = require('path'); +var http = require('http'); +var https = require('https'); +var parseUrl = require('url').parse; +var fs = require('fs'); +var Stream = require('stream').Stream; +var mime = require('mime-types'); +var asynckit = require('asynckit'); +var setToStringTag = require('es-set-tostringtag'); +var populate = require('./populate.js'); + +// Public API +module.exports = FormData; + +// make it a Stream +util.inherits(FormData, CombinedStream); + +/** + * Create readable "multipart/form-data" streams. + * Can be used to submit forms + * and file uploads to other web applications. + * + * @constructor + * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream + */ +function FormData(options) { + if (!(this instanceof FormData)) { + return new FormData(options); + } + + this._overheadLength = 0; + this._valueLength = 0; + this._valuesToMeasure = []; + + CombinedStream.call(this); + + options = options || {}; + for (var option in options) { + this[option] = options[option]; + } +} + +FormData.LINE_BREAK = '\r\n'; +FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream'; + +FormData.prototype.append = function(field, value, options) { + + options = options || {}; + + // allow filename as single option + if (typeof options == 'string') { + options = {filename: options}; + } + + var append = CombinedStream.prototype.append.bind(this); + + // all that streamy business can't handle numbers + if (typeof value == 'number') { + value = '' + value; + } + + // https://github.com/felixge/node-form-data/issues/38 + if (Array.isArray(value)) { + // Please convert your array into string + // the way web server expects it + this._error(new Error('Arrays are not supported.')); + return; + } + + var header = this._multiPartHeader(field, value, options); + var footer = this._multiPartFooter(); + + append(header); + append(value); + append(footer); + + // pass along options.knownLength + this._trackLength(header, value, options); +}; + +FormData.prototype._trackLength = function(header, value, options) { + var valueLength = 0; + + // used w/ getLengthSync(), when length is known. + // e.g. for streaming directly from a remote server, + // w/ a known file a size, and not wanting to wait for + // incoming file to finish to get its size. + if (options.knownLength != null) { + valueLength += +options.knownLength; + } else if (Buffer.isBuffer(value)) { + valueLength = value.length; + } else if (typeof value === 'string') { + valueLength = Buffer.byteLength(value); + } + + this._valueLength += valueLength; + + // @check why add CRLF? does this account for custom/multiple CRLFs? + this._overheadLength += + Buffer.byteLength(header) + + FormData.LINE_BREAK.length; + + // empty or either doesn't have path or not an http response or not a stream + if (!value || ( !value.path && !(value.readable && Object.prototype.hasOwnProperty.call(value, 'httpVersion')) && !(value instanceof Stream))) { + return; + } + + // no need to bother with the length + if (!options.knownLength) { + this._valuesToMeasure.push(value); + } +}; + +FormData.prototype._lengthRetriever = function(value, callback) { + if (Object.prototype.hasOwnProperty.call(value, 'fd')) { + + // take read range into a account + // `end` = Infinity โ€“> read file till the end + // + // TODO: Looks like there is bug in Node fs.createReadStream + // it doesn't respect `end` options without `start` options + // Fix it when node fixes it. + // https://github.com/joyent/node/issues/7819 + if (value.end != undefined && value.end != Infinity && value.start != undefined) { + + // when end specified + // no need to calculate range + // inclusive, starts with 0 + callback(null, value.end + 1 - (value.start ? value.start : 0)); + + // not that fast snoopy + } else { + // still need to fetch file size from fs + fs.stat(value.path, function(err, stat) { + + var fileSize; + + if (err) { + callback(err); + return; + } + + // update final size based on the range options + fileSize = stat.size - (value.start ? value.start : 0); + callback(null, fileSize); + }); + } + + // or http response + } else if (Object.prototype.hasOwnProperty.call(value, 'httpVersion')) { + callback(null, +value.headers['content-length']); + + // or request stream http://github.com/mikeal/request + } else if (Object.prototype.hasOwnProperty.call(value, 'httpModule')) { + // wait till response come back + value.on('response', function(response) { + value.pause(); + callback(null, +response.headers['content-length']); + }); + value.resume(); + + // something else + } else { + callback('Unknown stream'); + } +}; + +FormData.prototype._multiPartHeader = function(field, value, options) { + // custom header specified (as string)? + // it becomes responsible for boundary + // (e.g. to handle extra CRLFs on .NET servers) + if (typeof options.header == 'string') { + return options.header; + } + + var contentDisposition = this._getContentDisposition(value, options); + var contentType = this._getContentType(value, options); + + var contents = ''; + var headers = { + // add custom disposition as third element or keep it two elements if not + 'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []), + // if no content type. allow it to be empty array + 'Content-Type': [].concat(contentType || []) + }; + + // allow custom headers. + if (typeof options.header == 'object') { + populate(headers, options.header); + } + + var header; + for (var prop in headers) { + if (Object.prototype.hasOwnProperty.call(headers, prop)) { + header = headers[prop]; + + // skip nullish headers. + if (header == null) { + continue; + } + + // convert all headers to arrays. + if (!Array.isArray(header)) { + header = [header]; + } + + // add non-empty headers. + if (header.length) { + contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK; + } + } + } + + return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK; +}; + +FormData.prototype._getContentDisposition = function(value, options) { + + var filename + , contentDisposition + ; + + if (typeof options.filepath === 'string') { + // custom filepath for relative paths + filename = path.normalize(options.filepath).replace(/\\/g, '/'); + } else if (options.filename || value.name || value.path) { + // custom filename take precedence + // formidable and the browser add a name property + // fs- and request- streams have path property + filename = path.basename(options.filename || value.name || value.path); + } else if (value.readable && Object.prototype.hasOwnProperty.call(value, 'httpVersion')) { + // or try http response + filename = path.basename(value.client._httpMessage.path || ''); + } + + if (filename) { + contentDisposition = 'filename="' + filename + '"'; + } + + return contentDisposition; +}; + +FormData.prototype._getContentType = function(value, options) { + + // use custom content-type above all + var contentType = options.contentType; + + // or try `name` from formidable, browser + if (!contentType && value.name) { + contentType = mime.lookup(value.name); + } + + // or try `path` from fs-, request- streams + if (!contentType && value.path) { + contentType = mime.lookup(value.path); + } + + // or if it's http-reponse + if (!contentType && value.readable && Object.prototype.hasOwnProperty.call(value, 'httpVersion')) { + contentType = value.headers['content-type']; + } + + // or guess it from the filepath or filename + if (!contentType && (options.filepath || options.filename)) { + contentType = mime.lookup(options.filepath || options.filename); + } + + // fallback to the default content type if `value` is not simple value + if (!contentType && typeof value == 'object') { + contentType = FormData.DEFAULT_CONTENT_TYPE; + } + + return contentType; +}; + +FormData.prototype._multiPartFooter = function() { + return function(next) { + var footer = FormData.LINE_BREAK; + + var lastPart = (this._streams.length === 0); + if (lastPart) { + footer += this._lastBoundary(); + } + + next(footer); + }.bind(this); +}; + +FormData.prototype._lastBoundary = function() { + return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK; +}; + +FormData.prototype.getHeaders = function(userHeaders) { + var header; + var formHeaders = { + 'content-type': 'multipart/form-data; boundary=' + this.getBoundary() + }; + + for (header in userHeaders) { + if (Object.prototype.hasOwnProperty.call(userHeaders, header)) { + formHeaders[header.toLowerCase()] = userHeaders[header]; + } + } + + return formHeaders; +}; + +FormData.prototype.setBoundary = function(boundary) { + this._boundary = boundary; +}; + +FormData.prototype.getBoundary = function() { + if (!this._boundary) { + this._generateBoundary(); + } + + return this._boundary; +}; + +FormData.prototype.getBuffer = function() { + var dataBuffer = new Buffer.alloc(0); + var boundary = this.getBoundary(); + + // Create the form content. Add Line breaks to the end of data. + for (var i = 0, len = this._streams.length; i < len; i++) { + if (typeof this._streams[i] !== 'function') { + + // Add content to the buffer. + if(Buffer.isBuffer(this._streams[i])) { + dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]); + }else { + dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]); + } + + // Add break after content. + if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) { + dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] ); + } + } + } + + // Add the footer and return the Buffer object. + return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] ); +}; + +FormData.prototype._generateBoundary = function() { + // This generates a 50 character boundary similar to those used by Firefox. + // They are optimized for boyer-moore parsing. + var boundary = '--------------------------'; + for (var i = 0; i < 24; i++) { + boundary += Math.floor(Math.random() * 10).toString(16); + } + + this._boundary = boundary; +}; + +// Note: getLengthSync DOESN'T calculate streams length +// As workaround one can calculate file size manually +// and add it as knownLength option +FormData.prototype.getLengthSync = function() { + var knownLength = this._overheadLength + this._valueLength; + + // Don't get confused, there are 3 "internal" streams for each keyval pair + // so it basically checks if there is any value added to the form + if (this._streams.length) { + knownLength += this._lastBoundary().length; + } + + // https://github.com/form-data/form-data/issues/40 + if (!this.hasKnownLength()) { + // Some async length retrievers are present + // therefore synchronous length calculation is false. + // Please use getLength(callback) to get proper length + this._error(new Error('Cannot calculate proper length in synchronous way.')); + } + + return knownLength; +}; + +// Public API to check if length of added values is known +// https://github.com/form-data/form-data/issues/196 +// https://github.com/form-data/form-data/issues/262 +FormData.prototype.hasKnownLength = function() { + var hasKnownLength = true; + + if (this._valuesToMeasure.length) { + hasKnownLength = false; + } + + return hasKnownLength; +}; + +FormData.prototype.getLength = function(cb) { + var knownLength = this._overheadLength + this._valueLength; + + if (this._streams.length) { + knownLength += this._lastBoundary().length; + } + + if (!this._valuesToMeasure.length) { + process.nextTick(cb.bind(this, null, knownLength)); + return; + } + + asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) { + if (err) { + cb(err); + return; + } + + values.forEach(function(length) { + knownLength += length; + }); + + cb(null, knownLength); + }); +}; + +FormData.prototype.submit = function(params, cb) { + var request + , options + , defaults = {method: 'post'} + ; + + // parse provided url if it's string + // or treat it as options object + if (typeof params == 'string') { + + params = parseUrl(params); + options = populate({ + port: params.port, + path: params.pathname, + host: params.hostname, + protocol: params.protocol + }, defaults); + + // use custom params + } else { + + options = populate(params, defaults); + // if no port provided use default one + if (!options.port) { + options.port = options.protocol == 'https:' ? 443 : 80; + } + } + + // put that good code in getHeaders to some use + options.headers = this.getHeaders(params.headers); + + // https if specified, fallback to http in any other case + if (options.protocol == 'https:') { + request = https.request(options); + } else { + request = http.request(options); + } + + // get content length and fire away + this.getLength(function(err, length) { + if (err && err !== 'Unknown stream') { + this._error(err); + return; + } + + // add content length + if (length) { + request.setHeader('Content-Length', length); + } + + this.pipe(request); + if (cb) { + var onResponse; + + var callback = function (error, responce) { + request.removeListener('error', callback); + request.removeListener('response', onResponse); + + return cb.call(this, error, responce); + }; + + onResponse = callback.bind(this, null); + + request.on('error', callback); + request.on('response', onResponse); + } + }.bind(this)); + + return request; +}; + +FormData.prototype._error = function(err) { + if (!this.error) { + this.error = err; + this.pause(); + this.emit('error', err); + } +}; + +FormData.prototype.toString = function () { + return '[object FormData]'; +}; +setToStringTag(FormData, 'FormData'); diff --git a/node_modules/form-data/lib/populate.js b/node_modules/form-data/lib/populate.js new file mode 100644 index 0000000..4d35738 --- /dev/null +++ b/node_modules/form-data/lib/populate.js @@ -0,0 +1,10 @@ +// populates missing values +module.exports = function(dst, src) { + + Object.keys(src).forEach(function(prop) + { + dst[prop] = dst[prop] || src[prop]; + }); + + return dst; +}; diff --git a/node_modules/form-data/package.json b/node_modules/form-data/package.json new file mode 100644 index 0000000..47fc92b --- /dev/null +++ b/node_modules/form-data/package.json @@ -0,0 +1,74 @@ +{ + "author": "Felix Geisendรถrfer (http://debuggable.com/)", + "name": "form-data", + "description": "A library to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.", + "version": "4.0.2", + "repository": { + "type": "git", + "url": "git://github.com/form-data/form-data.git" + }, + "main": "./lib/form_data", + "browser": "./lib/browser", + "typings": "./index.d.ts", + "scripts": { + "pretest": "npm run lint", + "pretests-only": "rimraf coverage test/tmp", + "tests-only": "istanbul cover test/run.js", + "posttests-only": "istanbul report lcov text", + "test": "npm run tests-only", + "posttest": "npx npm@'>=10.2' audit --production", + "lint": "eslint --ext=js,mjs .", + "report": "istanbul report lcov text", + "ci-lint": "is-node-modern 8 && npm run lint || is-node-not-modern 8", + "ci-test": "npm run tests-only && npm run browser && npm run report", + "predebug": "rimraf coverage test/tmp", + "debug": "verbose=1 ./test/run.js", + "browser": "browserify -t browserify-istanbul test/run-browser.js | obake --coverage", + "check": "istanbul check-coverage coverage/coverage*.json", + "files": "pkgfiles --sort=name", + "get-version": "node -e \"console.log(require('./package.json').version)\"", + "update-readme": "sed -i.bak 's/\\/master\\.svg/\\/v'$(npm --silent run get-version)'.svg/g' README.md", + "restore-readme": "mv README.md.bak README.md", + "prepublish": "in-publish && npm run update-readme || not-in-publish", + "postpublish": "npm run restore-readme" + }, + "pre-commit": [ + "lint", + "ci-test", + "check" + ], + "engines": { + "node": ">= 6" + }, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "mime-types": "^2.1.12" + }, + "devDependencies": { + "@types/combined-stream": "^1.0.6", + "@types/mime-types": "^2.1.4", + "@types/node": "^12.20.55", + "browserify": "^13.3.0", + "browserify-istanbul": "^2.0.0", + "coveralls": "^3.1.1", + "cross-spawn": "^6.0.6", + "eslint": "^6.8.0", + "fake": "^0.2.2", + "far": "^0.0.7", + "formidable": "^1.2.6", + "in-publish": "^2.0.1", + "is-node-modern": "^1.0.0", + "istanbul": "^0.4.5", + "obake": "^0.1.2", + "pkgfiles": "^2.3.2", + "pre-commit": "^1.2.2", + "puppeteer": "^1.20.0", + "request": "~2.87.0", + "rimraf": "^2.7.1", + "tape": "^5.9.0", + "typescript": "^3.9.10" + }, + "license": "MIT" +} diff --git a/node_modules/function-bind/.eslintrc b/node_modules/function-bind/.eslintrc new file mode 100644 index 0000000..71a054f --- /dev/null +++ b/node_modules/function-bind/.eslintrc @@ -0,0 +1,21 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "func-name-matching": 0, + "indent": [2, 4], + "no-new-func": [1], + }, + + "overrides": [ + { + "files": "test/**", + "rules": { + "max-lines-per-function": 0, + "strict": [0] + }, + }, + ], +} diff --git a/node_modules/function-bind/.github/FUNDING.yml b/node_modules/function-bind/.github/FUNDING.yml new file mode 100644 index 0000000..7448219 --- /dev/null +++ b/node_modules/function-bind/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/function-bind +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/function-bind/.github/SECURITY.md b/node_modules/function-bind/.github/SECURITY.md new file mode 100644 index 0000000..82e4285 --- /dev/null +++ b/node_modules/function-bind/.github/SECURITY.md @@ -0,0 +1,3 @@ +# Security + +Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. diff --git a/node_modules/function-bind/.nycrc b/node_modules/function-bind/.nycrc new file mode 100644 index 0000000..1826526 --- /dev/null +++ b/node_modules/function-bind/.nycrc @@ -0,0 +1,13 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "lines": 86, + "statements": 85.93, + "functions": 82.43, + "branches": 76.06, + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/function-bind/CHANGELOG.md b/node_modules/function-bind/CHANGELOG.md new file mode 100644 index 0000000..f9e6cc0 --- /dev/null +++ b/node_modules/function-bind/CHANGELOG.md @@ -0,0 +1,136 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.1.2](https://github.com/ljharb/function-bind/compare/v1.1.1...v1.1.2) - 2023-10-12 + +### Merged + +- Point to the correct file [`#16`](https://github.com/ljharb/function-bind/pull/16) + +### Commits + +- [Tests] migrate tests to Github Actions [`4f8b57c`](https://github.com/ljharb/function-bind/commit/4f8b57c02f2011fe9ae353d5e74e8745f0988af8) +- [Tests] remove `jscs` [`90eb2ed`](https://github.com/ljharb/function-bind/commit/90eb2edbeefd5b76cd6c3a482ea3454db169b31f) +- [meta] update `.gitignore` [`53fcdc3`](https://github.com/ljharb/function-bind/commit/53fcdc371cd66634d6e9b71c836a50f437e89fed) +- [Tests] up to `node` `v11.10`, `v10.15`, `v9.11`, `v8.15`, `v6.16`, `v4.9`; use `nvm install-latest-npm`; run audit script in tests [`1fe8f6e`](https://github.com/ljharb/function-bind/commit/1fe8f6e9aed0dfa8d8b3cdbd00c7f5ea0cd2b36e) +- [meta] add `auto-changelog` [`1921fcb`](https://github.com/ljharb/function-bind/commit/1921fcb5b416b63ffc4acad051b6aad5722f777d) +- [Robustness] remove runtime dependency on all builtins except `.apply` [`f743e61`](https://github.com/ljharb/function-bind/commit/f743e61aa6bb2360358c04d4884c9db853d118b7) +- Docs: enable badges; update wording [`503cb12`](https://github.com/ljharb/function-bind/commit/503cb12d998b5f91822776c73332c7adcd6355dd) +- [readme] update badges [`290c5db`](https://github.com/ljharb/function-bind/commit/290c5dbbbda7264efaeb886552a374b869a4bb48) +- [Tests] switch to nyc for coverage [`ea360ba`](https://github.com/ljharb/function-bind/commit/ea360ba907fc2601ed18d01a3827fa2d3533cdf8) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`cae5e9e`](https://github.com/ljharb/function-bind/commit/cae5e9e07a5578dc6df26c03ee22851ce05b943c) +- [meta] add `funding` field; create FUNDING.yml [`c9f4274`](https://github.com/ljharb/function-bind/commit/c9f4274aa80ea3aae9657a3938fdba41a3b04ca6) +- [Tests] fix eslint errors from #15 [`f69aaa2`](https://github.com/ljharb/function-bind/commit/f69aaa2beb2fdab4415bfb885760a699d0b9c964) +- [actions] fix permissions [`99a0cd9`](https://github.com/ljharb/function-bind/commit/99a0cd9f3b5bac223a0d572f081834cd73314be7) +- [meta] use `npmignore` to autogenerate an npmignore file [`f03b524`](https://github.com/ljharb/function-bind/commit/f03b524ca91f75a109a5d062f029122c86ecd1ae) +- [Devย Deps] updateย `@ljharb/eslintโ€‘config`, `eslint`,ย `tape` [`7af9300`](https://github.com/ljharb/function-bind/commit/7af930023ae2ce7645489532821e4fbbcd7a2280) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `covert`, `tape` [`64a9127`](https://github.com/ljharb/function-bind/commit/64a9127ab0bd331b93d6572eaf6e9971967fc08c) +- [Tests] use `aud` instead of `npm audit` [`e75069c`](https://github.com/ljharb/function-bind/commit/e75069c50010a8fcce2a9ce2324934c35fdb4386) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `tape` [`d03555c`](https://github.com/ljharb/function-bind/commit/d03555ca59dea3b71ce710045e4303b9e2619e28) +- [meta] add `safe-publish-latest` [`9c8f809`](https://github.com/ljharb/function-bind/commit/9c8f8092aed027d7e80c94f517aa892385b64f09) +- [Dev Deps] update `@ljharb/eslint-config`, `tape` [`baf6893`](https://github.com/ljharb/function-bind/commit/baf6893e27f5b59abe88bc1995e6f6ed1e527397) +- [meta] create SECURITY.md [`4db1779`](https://github.com/ljharb/function-bind/commit/4db17799f1f28ae294cb95e0081ca2b591c3911b) +- [Tests] add `npm run audit` [`c8b38ec`](https://github.com/ljharb/function-bind/commit/c8b38ec40ed3f85dabdee40ed4148f1748375bc2) +- Revert "Point to the correct file" [`05cdf0f`](https://github.com/ljharb/function-bind/commit/05cdf0fa205c6a3c5ba40bbedd1dfa9874f915c9) + +## [v1.1.1](https://github.com/ljharb/function-bind/compare/v1.1.0...v1.1.1) - 2017-08-28 + +### Commits + +- [Tests] up to `node` `v8`; newer npm breaks on older node; fix scripts [`817f7d2`](https://github.com/ljharb/function-bind/commit/817f7d28470fdbff8ef608d4d565dd4d1430bc5e) +- [Dev Deps] update `eslint`, `jscs`, `tape`, `@ljharb/eslint-config` [`854288b`](https://github.com/ljharb/function-bind/commit/854288b1b6f5c555f89aceb9eff1152510262084) +- [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`83e639f`](https://github.com/ljharb/function-bind/commit/83e639ff74e6cd6921285bccec22c1bcf72311bd) +- Only apps should have lockfiles [`5ed97f5`](https://github.com/ljharb/function-bind/commit/5ed97f51235c17774e0832e122abda0f3229c908) +- Use a SPDX-compliant โ€œlicenseโ€ field. [`5feefea`](https://github.com/ljharb/function-bind/commit/5feefea0dc0193993e83e5df01ded424403a5381) + +## [v1.1.0](https://github.com/ljharb/function-bind/compare/v1.0.2...v1.1.0) - 2016-02-14 + +### Commits + +- Update `eslint`, `tape`; use my personal shared `eslint` config [`9c9062a`](https://github.com/ljharb/function-bind/commit/9c9062abbe9dd70b59ea2c3a3c3a81f29b457097) +- Add `npm run eslint` [`dd96c56`](https://github.com/ljharb/function-bind/commit/dd96c56720034a3c1ffee10b8a59a6f7c53e24ad) +- [New] return the native `bind` when available. [`82186e0`](https://github.com/ljharb/function-bind/commit/82186e03d73e580f95ff167e03f3582bed90ed72) +- [Dev Deps] update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`a3dd767`](https://github.com/ljharb/function-bind/commit/a3dd76720c795cb7f4586b0544efabf8aa107b8b) +- Update `eslint` [`3dae2f7`](https://github.com/ljharb/function-bind/commit/3dae2f7423de30a2d20313ddb1edc19660142fe9) +- Update `tape`, `covert`, `jscs` [`a181eee`](https://github.com/ljharb/function-bind/commit/a181eee0cfa24eb229c6e843a971f36e060a2f6a) +- [Tests] up to `node` `v5.6`, `v4.3` [`964929a`](https://github.com/ljharb/function-bind/commit/964929a6a4ddb36fb128de2bcc20af5e4f22e1ed) +- Test up to `io.js` `v2.1` [`2be7310`](https://github.com/ljharb/function-bind/commit/2be7310f2f74886a7124ca925be411117d41d5ea) +- Update `tape`, `jscs`, `eslint`, `@ljharb/eslint-config` [`45f3d68`](https://github.com/ljharb/function-bind/commit/45f3d6865c6ca93726abcef54febe009087af101) +- [Dev Deps] update `tape`, `jscs` [`6e1340d`](https://github.com/ljharb/function-bind/commit/6e1340d94642deaecad3e717825db641af4f8b1f) +- [Tests] up to `io.js` `v3.3`, `node` `v4.1` [`d9bad2b`](https://github.com/ljharb/function-bind/commit/d9bad2b778b1b3a6dd2876087b88b3acf319f8cc) +- Update `eslint` [`935590c`](https://github.com/ljharb/function-bind/commit/935590caa024ab356102e4858e8fc315b2ccc446) +- [Dev Deps] update `jscs`, `eslint`, `@ljharb/eslint-config` [`8c9a1ef`](https://github.com/ljharb/function-bind/commit/8c9a1efd848e5167887aa8501857a0940a480c57) +- Test on `io.js` `v2.2` [`9a3a38c`](https://github.com/ljharb/function-bind/commit/9a3a38c92013aed6e108666e7bd40969b84ac86e) +- Run `travis-ci` tests on `iojs` and `node` v0.12; speed up builds; allow 0.8 failures. [`69afc26`](https://github.com/ljharb/function-bind/commit/69afc2617405b147dd2a8d8ae73ca9e9283f18b4) +- [Dev Deps] Update `tape`, `eslint` [`36c1be0`](https://github.com/ljharb/function-bind/commit/36c1be0ab12b45fe5df6b0fdb01a5d5137fd0115) +- Update `tape`, `jscs` [`98d8303`](https://github.com/ljharb/function-bind/commit/98d8303cd5ca1c6b8f985469f86b0d44d7d45f6e) +- Update `jscs` [`9633a4e`](https://github.com/ljharb/function-bind/commit/9633a4e9fbf82051c240855166e468ba8ba0846f) +- Update `tape`, `jscs` [`c80ef0f`](https://github.com/ljharb/function-bind/commit/c80ef0f46efc9791e76fa50de4414092ac147831) +- Test up to `io.js` `v3.0` [`7e2c853`](https://github.com/ljharb/function-bind/commit/7e2c8537d52ab9cf5a655755561d8917684c0df4) +- Test on `io.js` `v2.4` [`5a199a2`](https://github.com/ljharb/function-bind/commit/5a199a27ba46795ba5eaf0845d07d4b8232895c9) +- Test on `io.js` `v2.3` [`a511b88`](https://github.com/ljharb/function-bind/commit/a511b8896de0bddf3b56862daa416c701f4d0453) +- Fixing a typo from 822b4e1938db02dc9584aa434fd3a45cb20caf43 [`732d6b6`](https://github.com/ljharb/function-bind/commit/732d6b63a9b33b45230e630dbcac7a10855d3266) +- Update `jscs` [`da52a48`](https://github.com/ljharb/function-bind/commit/da52a4886c06d6490f46ae30b15e4163ba08905d) +- Lock covert to v1.0.0. [`d6150fd`](https://github.com/ljharb/function-bind/commit/d6150fda1e6f486718ebdeff823333d9e48e7430) + +## [v1.0.2](https://github.com/ljharb/function-bind/compare/v1.0.1...v1.0.2) - 2014-10-04 + +## [v1.0.1](https://github.com/ljharb/function-bind/compare/v1.0.0...v1.0.1) - 2014-10-03 + +### Merged + +- make CI build faster [`#3`](https://github.com/ljharb/function-bind/pull/3) + +### Commits + +- Using my standard jscs.json [`d8ee94c`](https://github.com/ljharb/function-bind/commit/d8ee94c993eff0a84cf5744fe6a29627f5cffa1a) +- Adding `npm run lint` [`7571ab7`](https://github.com/ljharb/function-bind/commit/7571ab7dfdbd99b25a1dbb2d232622bd6f4f9c10) +- Using consistent indentation [`e91a1b1`](https://github.com/ljharb/function-bind/commit/e91a1b13a61e99ec1e530e299b55508f74218a95) +- Updating jscs [`7e17892`](https://github.com/ljharb/function-bind/commit/7e1789284bc629bc9c1547a61c9b227bbd8c7a65) +- Using consistent quotes [`c50b57f`](https://github.com/ljharb/function-bind/commit/c50b57fcd1c5ec38320979c837006069ebe02b77) +- Adding keywords [`cb94631`](https://github.com/ljharb/function-bind/commit/cb946314eed35f21186a25fb42fc118772f9ee00) +- Directly export a function expression instead of using a declaration, and relying on hoisting. [`5a33c5f`](https://github.com/ljharb/function-bind/commit/5a33c5f45642de180e0d207110bf7d1843ceb87c) +- Naming npm URL and badge in README; use SVG [`2aef8fc`](https://github.com/ljharb/function-bind/commit/2aef8fcb79d54e63a58ae557c4e60949e05d5e16) +- Naming deps URLs in README [`04228d7`](https://github.com/ljharb/function-bind/commit/04228d766670ee45ca24e98345c1f6a7621065b5) +- Naming travis-ci URLs in README; using SVG [`62c810c`](https://github.com/ljharb/function-bind/commit/62c810c2f54ced956cd4d4ab7b793055addfe36e) +- Make sure functions are invoked correctly (also passing coverage tests) [`2b289b4`](https://github.com/ljharb/function-bind/commit/2b289b4dfbf037ffcfa4dc95eb540f6165e9e43a) +- Removing the strict mode pragmas; they make tests fail. [`1aa701d`](https://github.com/ljharb/function-bind/commit/1aa701d199ddc3782476e8f7eef82679be97b845) +- Adding myself as a contributor [`85fd57b`](https://github.com/ljharb/function-bind/commit/85fd57b0860e5a7af42de9a287f3f265fc6d72fc) +- Adding strict mode pragmas [`915b08e`](https://github.com/ljharb/function-bind/commit/915b08e084c86a722eafe7245e21db74aa21ca4c) +- Adding devDeps URLs to README [`4ccc731`](https://github.com/ljharb/function-bind/commit/4ccc73112c1769859e4ca3076caf4086b3cba2cd) +- Fixing the description. [`a7a472c`](https://github.com/ljharb/function-bind/commit/a7a472cf649af515c635cf560fc478fbe48999c8) +- Using a function expression instead of a function declaration. [`b5d3e4e`](https://github.com/ljharb/function-bind/commit/b5d3e4ea6aaffc63888953eeb1fbc7ff45f1fa14) +- Updating tape [`f086be6`](https://github.com/ljharb/function-bind/commit/f086be6029fb56dde61a258c1340600fa174d1e0) +- Updating jscs [`5f9bdb3`](https://github.com/ljharb/function-bind/commit/5f9bdb375ab13ba48f30852aab94029520c54d71) +- Updating jscs [`9b409ba`](https://github.com/ljharb/function-bind/commit/9b409ba6118e23395a4e5d83ef39152aab9d3bfc) +- Run coverage as part of tests. [`8e1b6d4`](https://github.com/ljharb/function-bind/commit/8e1b6d459f047d1bd4fee814e01247c984c80bd0) +- Run linter as part of tests [`c1ca83f`](https://github.com/ljharb/function-bind/commit/c1ca83f832df94587d09e621beba682fabfaa987) +- Updating covert [`701e837`](https://github.com/ljharb/function-bind/commit/701e83774b57b4d3ef631e1948143f43a72f4bb9) + +## [v1.0.0](https://github.com/ljharb/function-bind/compare/v0.2.0...v1.0.0) - 2014-08-09 + +### Commits + +- Make sure old and unstable nodes don't fail Travis [`27adca3`](https://github.com/ljharb/function-bind/commit/27adca34a4ab6ad67b6dfde43942a1b103ce4d75) +- Fixing an issue when the bound function is called as a constructor in ES3. [`e20122d`](https://github.com/ljharb/function-bind/commit/e20122d267d92ce553859b280cbbea5d27c07731) +- Adding `npm run coverage` [`a2e29c4`](https://github.com/ljharb/function-bind/commit/a2e29c4ecaef9e2f6cd1603e868c139073375502) +- Updating tape [`b741168`](https://github.com/ljharb/function-bind/commit/b741168b12b235b1717ff696087645526b69213c) +- Upgrading tape [`63631a0`](https://github.com/ljharb/function-bind/commit/63631a04c7fbe97cc2fa61829cc27246d6986f74) +- Updating tape [`363cb46`](https://github.com/ljharb/function-bind/commit/363cb46dafb23cb3e347729a22f9448051d78464) + +## v0.2.0 - 2014-03-23 + +### Commits + +- Updating test coverage to match es5-shim. [`aa94d44`](https://github.com/ljharb/function-bind/commit/aa94d44b8f9d7f69f10e060db7709aa7a694e5d4) +- initial [`942ee07`](https://github.com/ljharb/function-bind/commit/942ee07e94e542d91798137bc4b80b926137e066) +- Setting the bound function's length properly. [`079f46a`](https://github.com/ljharb/function-bind/commit/079f46a2d3515b7c0b308c2c13fceb641f97ca25) +- Ensuring that some older browsers will throw when given a regex. [`36ac55b`](https://github.com/ljharb/function-bind/commit/36ac55b87f460d4330253c92870aa26fbfe8227f) +- Removing npm scripts that don't have dependencies [`9d2be60`](https://github.com/ljharb/function-bind/commit/9d2be600002cb8bc8606f8f3585ad3e05868c750) +- Updating tape [`297a4ac`](https://github.com/ljharb/function-bind/commit/297a4acc5464db381940aafb194d1c88f4e678f3) +- Skipping length tests for now. [`d9891ea`](https://github.com/ljharb/function-bind/commit/d9891ea4d2aaffa69f408339cdd61ff740f70565) +- don't take my tea [`dccd930`](https://github.com/ljharb/function-bind/commit/dccd930bfd60ea10cb178d28c97550c3bc8c1e07) diff --git a/node_modules/function-bind/LICENSE b/node_modules/function-bind/LICENSE new file mode 100644 index 0000000..62d6d23 --- /dev/null +++ b/node_modules/function-bind/LICENSE @@ -0,0 +1,20 @@ +Copyright (c) 2013 Raynos. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. + diff --git a/node_modules/function-bind/README.md b/node_modules/function-bind/README.md new file mode 100644 index 0000000..814c20b --- /dev/null +++ b/node_modules/function-bind/README.md @@ -0,0 +1,46 @@ +# function-bind [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] + +[![dependency status][deps-svg]][deps-url] +[![dev dependency status][dev-deps-svg]][dev-deps-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Implementation of function.prototype.bind + +Old versions of phantomjs, Internet Explorer < 9, and node < 0.6 don't support `Function.prototype.bind`. + +## Example + +```js +Function.prototype.bind = require("function-bind") +``` + +## Installation + +`npm install function-bind` + +## Contributors + + - Raynos + +## MIT Licenced + +[package-url]: https://npmjs.org/package/function-bind +[npm-version-svg]: https://versionbadg.es/Raynos/function-bind.svg +[deps-svg]: https://david-dm.org/Raynos/function-bind.svg +[deps-url]: https://david-dm.org/Raynos/function-bind +[dev-deps-svg]: https://david-dm.org/Raynos/function-bind/dev-status.svg +[dev-deps-url]: https://david-dm.org/Raynos/function-bind#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/function-bind.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/function-bind.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/function-bind.svg +[downloads-url]: https://npm-stat.com/charts.html?package=function-bind +[codecov-image]: https://codecov.io/gh/Raynos/function-bind/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/Raynos/function-bind/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/Raynos/function-bind +[actions-url]: https://github.com/Raynos/function-bind/actions diff --git a/node_modules/function-bind/implementation.js b/node_modules/function-bind/implementation.js new file mode 100644 index 0000000..fd4384c --- /dev/null +++ b/node_modules/function-bind/implementation.js @@ -0,0 +1,84 @@ +'use strict'; + +/* eslint no-invalid-this: 1 */ + +var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible '; +var toStr = Object.prototype.toString; +var max = Math.max; +var funcType = '[object Function]'; + +var concatty = function concatty(a, b) { + var arr = []; + + for (var i = 0; i < a.length; i += 1) { + arr[i] = a[i]; + } + for (var j = 0; j < b.length; j += 1) { + arr[j + a.length] = b[j]; + } + + return arr; +}; + +var slicy = function slicy(arrLike, offset) { + var arr = []; + for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) { + arr[j] = arrLike[i]; + } + return arr; +}; + +var joiny = function (arr, joiner) { + var str = ''; + for (var i = 0; i < arr.length; i += 1) { + str += arr[i]; + if (i + 1 < arr.length) { + str += joiner; + } + } + return str; +}; + +module.exports = function bind(that) { + var target = this; + if (typeof target !== 'function' || toStr.apply(target) !== funcType) { + throw new TypeError(ERROR_MESSAGE + target); + } + var args = slicy(arguments, 1); + + var bound; + var binder = function () { + if (this instanceof bound) { + var result = target.apply( + this, + concatty(args, arguments) + ); + if (Object(result) === result) { + return result; + } + return this; + } + return target.apply( + that, + concatty(args, arguments) + ); + + }; + + var boundLength = max(0, target.length - args.length); + var boundArgs = []; + for (var i = 0; i < boundLength; i++) { + boundArgs[i] = '$' + i; + } + + bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder); + + if (target.prototype) { + var Empty = function Empty() {}; + Empty.prototype = target.prototype; + bound.prototype = new Empty(); + Empty.prototype = null; + } + + return bound; +}; diff --git a/node_modules/function-bind/index.js b/node_modules/function-bind/index.js new file mode 100644 index 0000000..3bb6b96 --- /dev/null +++ b/node_modules/function-bind/index.js @@ -0,0 +1,5 @@ +'use strict'; + +var implementation = require('./implementation'); + +module.exports = Function.prototype.bind || implementation; diff --git a/node_modules/function-bind/package.json b/node_modules/function-bind/package.json new file mode 100644 index 0000000..6185963 --- /dev/null +++ b/node_modules/function-bind/package.json @@ -0,0 +1,87 @@ +{ + "name": "function-bind", + "version": "1.1.2", + "description": "Implementation of Function.prototype.bind", + "keywords": [ + "function", + "bind", + "shim", + "es5" + ], + "author": "Raynos ", + "repository": { + "type": "git", + "url": "https://github.com/Raynos/function-bind.git" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "main": "index", + "homepage": "https://github.com/Raynos/function-bind", + "contributors": [ + { + "name": "Raynos" + }, + { + "name": "Jordan Harband", + "url": "https://github.com/ljharb" + } + ], + "bugs": { + "url": "https://github.com/Raynos/function-bind/issues", + "email": "raynos2@gmail.com" + }, + "devDependencies": { + "@ljharb/eslint-config": "^21.1.0", + "aud": "^2.0.3", + "auto-changelog": "^2.4.0", + "eslint": "=8.8.0", + "in-publish": "^2.0.1", + "npmignore": "^0.3.0", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.7.1" + }, + "license": "MIT", + "scripts": { + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepack": "npmignore --auto --commentLines=autogenerated", + "pretest": "npm run lint", + "test": "npm run tests-only", + "posttest": "aud --production", + "tests-only": "nyc tape 'test/**/*.js'", + "lint": "eslint --ext=js,mjs .", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "testling": { + "files": "test/index.js", + "browsers": [ + "ie/8..latest", + "firefox/16..latest", + "firefox/nightly", + "chrome/22..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2..latest" + ] + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + } +} diff --git a/node_modules/function-bind/test/.eslintrc b/node_modules/function-bind/test/.eslintrc new file mode 100644 index 0000000..8a56d5b --- /dev/null +++ b/node_modules/function-bind/test/.eslintrc @@ -0,0 +1,9 @@ +{ + "rules": { + "array-bracket-newline": 0, + "array-element-newline": 0, + "max-statements-per-line": [2, { "max": 2 }], + "no-invalid-this": 0, + "no-magic-numbers": 0, + } +} diff --git a/node_modules/function-bind/test/index.js b/node_modules/function-bind/test/index.js new file mode 100644 index 0000000..2edecce --- /dev/null +++ b/node_modules/function-bind/test/index.js @@ -0,0 +1,252 @@ +// jscs:disable requireUseStrict + +var test = require('tape'); + +var functionBind = require('../implementation'); +var getCurrentContext = function () { return this; }; + +test('functionBind is a function', function (t) { + t.equal(typeof functionBind, 'function'); + t.end(); +}); + +test('non-functions', function (t) { + var nonFunctions = [true, false, [], {}, 42, 'foo', NaN, /a/g]; + t.plan(nonFunctions.length); + for (var i = 0; i < nonFunctions.length; ++i) { + try { functionBind.call(nonFunctions[i]); } catch (ex) { + t.ok(ex instanceof TypeError, 'throws when given ' + String(nonFunctions[i])); + } + } + t.end(); +}); + +test('without a context', function (t) { + t.test('binds properly', function (st) { + var args, context; + var namespace = { + func: functionBind.call(function () { + args = Array.prototype.slice.call(arguments); + context = this; + }) + }; + namespace.func(1, 2, 3); + st.deepEqual(args, [1, 2, 3]); + st.equal(context, getCurrentContext.call()); + st.end(); + }); + + t.test('binds properly, and still supplies bound arguments', function (st) { + var args, context; + var namespace = { + func: functionBind.call(function () { + args = Array.prototype.slice.call(arguments); + context = this; + }, undefined, 1, 2, 3) + }; + namespace.func(4, 5, 6); + st.deepEqual(args, [1, 2, 3, 4, 5, 6]); + st.equal(context, getCurrentContext.call()); + st.end(); + }); + + t.test('returns properly', function (st) { + var args; + var namespace = { + func: functionBind.call(function () { + args = Array.prototype.slice.call(arguments); + return this; + }, null) + }; + var context = namespace.func(1, 2, 3); + st.equal(context, getCurrentContext.call(), 'returned context is namespaced context'); + st.deepEqual(args, [1, 2, 3], 'passed arguments are correct'); + st.end(); + }); + + t.test('returns properly with bound arguments', function (st) { + var args; + var namespace = { + func: functionBind.call(function () { + args = Array.prototype.slice.call(arguments); + return this; + }, null, 1, 2, 3) + }; + var context = namespace.func(4, 5, 6); + st.equal(context, getCurrentContext.call(), 'returned context is namespaced context'); + st.deepEqual(args, [1, 2, 3, 4, 5, 6], 'passed arguments are correct'); + st.end(); + }); + + t.test('called as a constructor', function (st) { + var thunkify = function (value) { + return function () { return value; }; + }; + st.test('returns object value', function (sst) { + var expectedReturnValue = [1, 2, 3]; + var Constructor = functionBind.call(thunkify(expectedReturnValue), null); + var result = new Constructor(); + sst.equal(result, expectedReturnValue); + sst.end(); + }); + + st.test('does not return primitive value', function (sst) { + var Constructor = functionBind.call(thunkify(42), null); + var result = new Constructor(); + sst.notEqual(result, 42); + sst.end(); + }); + + st.test('object from bound constructor is instance of original and bound constructor', function (sst) { + var A = function (x) { + this.name = x || 'A'; + }; + var B = functionBind.call(A, null, 'B'); + + var result = new B(); + sst.ok(result instanceof B, 'result is instance of bound constructor'); + sst.ok(result instanceof A, 'result is instance of original constructor'); + sst.end(); + }); + + st.end(); + }); + + t.end(); +}); + +test('with a context', function (t) { + t.test('with no bound arguments', function (st) { + var args, context; + var boundContext = {}; + var namespace = { + func: functionBind.call(function () { + args = Array.prototype.slice.call(arguments); + context = this; + }, boundContext) + }; + namespace.func(1, 2, 3); + st.equal(context, boundContext, 'binds a context properly'); + st.deepEqual(args, [1, 2, 3], 'supplies passed arguments'); + st.end(); + }); + + t.test('with bound arguments', function (st) { + var args, context; + var boundContext = {}; + var namespace = { + func: functionBind.call(function () { + args = Array.prototype.slice.call(arguments); + context = this; + }, boundContext, 1, 2, 3) + }; + namespace.func(4, 5, 6); + st.equal(context, boundContext, 'binds a context properly'); + st.deepEqual(args, [1, 2, 3, 4, 5, 6], 'supplies bound and passed arguments'); + st.end(); + }); + + t.test('returns properly', function (st) { + var boundContext = {}; + var args; + var namespace = { + func: functionBind.call(function () { + args = Array.prototype.slice.call(arguments); + return this; + }, boundContext) + }; + var context = namespace.func(1, 2, 3); + st.equal(context, boundContext, 'returned context is bound context'); + st.notEqual(context, getCurrentContext.call(), 'returned context is not lexical context'); + st.deepEqual(args, [1, 2, 3], 'passed arguments are correct'); + st.end(); + }); + + t.test('returns properly with bound arguments', function (st) { + var boundContext = {}; + var args; + var namespace = { + func: functionBind.call(function () { + args = Array.prototype.slice.call(arguments); + return this; + }, boundContext, 1, 2, 3) + }; + var context = namespace.func(4, 5, 6); + st.equal(context, boundContext, 'returned context is bound context'); + st.notEqual(context, getCurrentContext.call(), 'returned context is not lexical context'); + st.deepEqual(args, [1, 2, 3, 4, 5, 6], 'passed arguments are correct'); + st.end(); + }); + + t.test('passes the correct arguments when called as a constructor', function (st) { + var expected = { name: 'Correct' }; + var namespace = { + Func: functionBind.call(function (arg) { + return arg; + }, { name: 'Incorrect' }) + }; + var returned = new namespace.Func(expected); + st.equal(returned, expected, 'returns the right arg when called as a constructor'); + st.end(); + }); + + t.test('has the new instance\'s context when called as a constructor', function (st) { + var actualContext; + var expectedContext = { foo: 'bar' }; + var namespace = { + Func: functionBind.call(function () { + actualContext = this; + }, expectedContext) + }; + var result = new namespace.Func(); + st.equal(result instanceof namespace.Func, true); + st.notEqual(actualContext, expectedContext); + st.end(); + }); + + t.end(); +}); + +test('bound function length', function (t) { + t.test('sets a correct length without thisArg', function (st) { + var subject = functionBind.call(function (a, b, c) { return a + b + c; }); + st.equal(subject.length, 3); + st.equal(subject(1, 2, 3), 6); + st.end(); + }); + + t.test('sets a correct length with thisArg', function (st) { + var subject = functionBind.call(function (a, b, c) { return a + b + c; }, {}); + st.equal(subject.length, 3); + st.equal(subject(1, 2, 3), 6); + st.end(); + }); + + t.test('sets a correct length without thisArg and first argument', function (st) { + var subject = functionBind.call(function (a, b, c) { return a + b + c; }, undefined, 1); + st.equal(subject.length, 2); + st.equal(subject(2, 3), 6); + st.end(); + }); + + t.test('sets a correct length with thisArg and first argument', function (st) { + var subject = functionBind.call(function (a, b, c) { return a + b + c; }, {}, 1); + st.equal(subject.length, 2); + st.equal(subject(2, 3), 6); + st.end(); + }); + + t.test('sets a correct length without thisArg and too many arguments', function (st) { + var subject = functionBind.call(function (a, b, c) { return a + b + c; }, undefined, 1, 2, 3, 4); + st.equal(subject.length, 0); + st.equal(subject(), 6); + st.end(); + }); + + t.test('sets a correct length with thisArg and too many arguments', function (st) { + var subject = functionBind.call(function (a, b, c) { return a + b + c; }, {}, 1, 2, 3, 4); + st.equal(subject.length, 0); + st.equal(subject(), 6); + st.end(); + }); +}); diff --git a/node_modules/generate-function/.travis.yml b/node_modules/generate-function/.travis.yml new file mode 100644 index 0000000..6e5919d --- /dev/null +++ b/node_modules/generate-function/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "0.10" diff --git a/node_modules/generate-function/LICENSE b/node_modules/generate-function/LICENSE new file mode 100644 index 0000000..757562e --- /dev/null +++ b/node_modules/generate-function/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Mathias Buus + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/generate-function/README.md b/node_modules/generate-function/README.md new file mode 100644 index 0000000..97419e9 --- /dev/null +++ b/node_modules/generate-function/README.md @@ -0,0 +1,89 @@ +# generate-function + +Module that helps you write generated functions in Node + +``` +npm install generate-function +``` + +[![build status](http://img.shields.io/travis/mafintosh/generate-function.svg?style=flat)](http://travis-ci.org/mafintosh/generate-function) + +## Disclamer + +Writing code that generates code is hard. +You should only use this if you really, really, really need this for performance reasons (like schema validators / parsers etc). + +## Usage + +``` js +const genfun = require('generate-function') +const { d } = genfun.formats + +function addNumber (val) { + const gen = genfun() + + gen(` + function add (n) {') + return n + ${d(val)}) // supports format strings to insert values + } + `) + + return gen.toFunction() // will compile the function +} + +const add2 = addNumber(2) + +console.log('1 + 2 =', add2(1)) +console.log(add2.toString()) // prints the generated function +``` + +If you need to close over variables in your generated function pass them to `toFunction(scope)` + +``` js +function multiply (a, b) { + return a * b +} + +function addAndMultiplyNumber (val) { + const gen = genfun() + + gen(` + function (n) { + if (typeof n !== 'number') { + throw new Error('argument should be a number') + } + const result = multiply(${d(val)}, n + ${d(val)}) + return result + } + `) + + // use gen.toString() if you want to see the generated source + + return gen.toFunction({multiply}) +} + +const addAndMultiply2 = addAndMultiplyNumber(2) + +console.log(addAndMultiply2.toString()) +console.log('(3 + 2) * 2 =', addAndMultiply2(3)) +``` + +You can call `gen(src)` as many times as you want to append more source code to the function. + +## Variables + +If you need a unique safe identifier for the scope of the generated function call `str = gen.sym('friendlyName')`. +These are safe to use for variable names etc. + +## Object properties + +If you need to access an object property use the `str = gen.property('objectName', 'propertyName')`. + +This returns `'objectName.propertyName'` if `propertyName` is safe to use as a variable. Otherwise +it returns `objectName[propertyNameAsString]`. + +If you only pass `gen.property('propertyName')` it will only return the `propertyName` part safely + +## License + +MIT diff --git a/node_modules/generate-function/example.js b/node_modules/generate-function/example.js new file mode 100644 index 0000000..7c36c76 --- /dev/null +++ b/node_modules/generate-function/example.js @@ -0,0 +1,27 @@ +const genfun = require('./') +const { d } = genfun.formats + +function multiply (a, b) { + return a * b +} + +function addAndMultiplyNumber (val) { + const fn = genfun(` + function (n) { + if (typeof n !== 'number') { + throw new Error('argument should be a number') + } + const result = multiply(${d(val)}, n + ${d(val)}) + return result + } + `) + + // use fn.toString() if you want to see the generated source + + return fn.toFunction({multiply}) +} + +const addAndMultiply2 = addAndMultiplyNumber(2) + +console.log(addAndMultiply2.toString()) +console.log('(3 + 2) * 2 =', addAndMultiply2(3)) diff --git a/node_modules/generate-function/index.js b/node_modules/generate-function/index.js new file mode 100644 index 0000000..8105dc0 --- /dev/null +++ b/node_modules/generate-function/index.js @@ -0,0 +1,181 @@ +var util = require('util') +var isProperty = require('is-property') + +var INDENT_START = /[\{\[]/ +var INDENT_END = /[\}\]]/ + +// from https://mathiasbynens.be/notes/reserved-keywords +var RESERVED = [ + 'do', + 'if', + 'in', + 'for', + 'let', + 'new', + 'try', + 'var', + 'case', + 'else', + 'enum', + 'eval', + 'null', + 'this', + 'true', + 'void', + 'with', + 'await', + 'break', + 'catch', + 'class', + 'const', + 'false', + 'super', + 'throw', + 'while', + 'yield', + 'delete', + 'export', + 'import', + 'public', + 'return', + 'static', + 'switch', + 'typeof', + 'default', + 'extends', + 'finally', + 'package', + 'private', + 'continue', + 'debugger', + 'function', + 'arguments', + 'interface', + 'protected', + 'implements', + 'instanceof', + 'NaN', + 'undefined' +] + +var RESERVED_MAP = {} + +for (var i = 0; i < RESERVED.length; i++) { + RESERVED_MAP[RESERVED[i]] = true +} + +var isVariable = function (name) { + return isProperty(name) && !RESERVED_MAP.hasOwnProperty(name) +} + +var formats = { + s: function(s) { + return '' + s + }, + d: function(d) { + return '' + Number(d) + }, + o: function(o) { + return JSON.stringify(o) + } +} + +var genfun = function() { + var lines = [] + var indent = 0 + var vars = {} + + var push = function(str) { + var spaces = '' + while (spaces.length < indent*2) spaces += ' ' + lines.push(spaces+str) + } + + var pushLine = function(line) { + if (INDENT_END.test(line.trim()[0]) && INDENT_START.test(line[line.length-1])) { + indent-- + push(line) + indent++ + return + } + if (INDENT_START.test(line[line.length-1])) { + push(line) + indent++ + return + } + if (INDENT_END.test(line.trim()[0])) { + indent-- + push(line) + return + } + + push(line) + } + + var line = function(fmt) { + if (!fmt) return line + + if (arguments.length === 1 && fmt.indexOf('\n') > -1) { + var lines = fmt.trim().split('\n') + for (var i = 0; i < lines.length; i++) { + pushLine(lines[i].trim()) + } + } else { + pushLine(util.format.apply(util, arguments)) + } + + return line + } + + line.scope = {} + line.formats = formats + + line.sym = function(name) { + if (!name || !isVariable(name)) name = 'tmp' + if (!vars[name]) vars[name] = 0 + return name + (vars[name]++ || '') + } + + line.property = function(obj, name) { + if (arguments.length === 1) { + name = obj + obj = '' + } + + name = name + '' + + if (isProperty(name)) return (obj ? obj + '.' + name : name) + return obj ? obj + '[' + JSON.stringify(name) + ']' : JSON.stringify(name) + } + + line.toString = function() { + return lines.join('\n') + } + + line.toFunction = function(scope) { + if (!scope) scope = {} + + var src = 'return ('+line.toString()+')' + + Object.keys(line.scope).forEach(function (key) { + if (!scope[key]) scope[key] = line.scope[key] + }) + + var keys = Object.keys(scope).map(function(key) { + return key + }) + + var vals = keys.map(function(key) { + return scope[key] + }) + + return Function.apply(null, keys.concat(src)).apply(null, vals) + } + + if (arguments.length) line.apply(null, arguments) + + return line +} + +genfun.formats = formats +module.exports = genfun diff --git a/node_modules/generate-function/package.json b/node_modules/generate-function/package.json new file mode 100644 index 0000000..be2ac04 --- /dev/null +++ b/node_modules/generate-function/package.json @@ -0,0 +1,32 @@ +{ + "name": "generate-function", + "version": "2.3.1", + "description": "Module that helps you write generated functions in Node", + "main": "index.js", + "scripts": { + "test": "tape test.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/mafintosh/generate-function" + }, + "keywords": [ + "generate", + "code", + "generation", + "function", + "performance" + ], + "author": "Mathias Buus", + "license": "MIT", + "bugs": { + "url": "https://github.com/mafintosh/generate-function/issues" + }, + "homepage": "https://github.com/mafintosh/generate-function", + "devDependencies": { + "tape": "^4.9.1" + }, + "dependencies": { + "is-property": "^1.0.2" + } +} diff --git a/node_modules/generate-function/test.js b/node_modules/generate-function/test.js new file mode 100644 index 0000000..9337b71 --- /dev/null +++ b/node_modules/generate-function/test.js @@ -0,0 +1,49 @@ +var tape = require('tape') +var genfun = require('./') + +tape('generate add function', function(t) { + var fn = genfun() + ('function add(n) {') + ('return n + %d', 42) + ('}') + + t.same(fn.toString(), 'function add(n) {\n return n + 42\n}', 'code is indented') + t.same(fn.toFunction()(10), 52, 'function works') + t.end() +}) + +tape('generate function + closed variables', function(t) { + var fn = genfun() + ('function add(n) {') + ('return n + %d + number', 42) + ('}') + + var notGood = fn.toFunction() + var good = fn.toFunction({number:10}) + + try { + notGood(10) + t.ok(false, 'function should not work') + } catch (err) { + t.same(err.message, 'number is not defined', 'throws reference error') + } + + t.same(good(11), 63, 'function with closed var works') + t.end() +}) + +tape('generate property', function(t) { + var gen = genfun() + + t.same(gen.property('a'), 'a') + t.same(gen.property('42'), '"42"') + t.same(gen.property('b', 'a'), 'b.a') + t.same(gen.property('b', '42'), 'b["42"]') + t.same(gen.sym(42), 'tmp') + t.same(gen.sym('a'), 'a') + t.same(gen.sym('a'), 'a1') + t.same(gen.sym(42), 'tmp1') + t.same(gen.sym('const'), 'tmp2') + + t.end() +}) diff --git a/node_modules/get-intrinsic/.eslintrc b/node_modules/get-intrinsic/.eslintrc new file mode 100644 index 0000000..235fb79 --- /dev/null +++ b/node_modules/get-intrinsic/.eslintrc @@ -0,0 +1,42 @@ +{ + "root": true, + + "extends": "@ljharb", + + "env": { + "es6": true, + "es2017": true, + "es2020": true, + "es2021": true, + "es2022": true, + }, + + "globals": { + "Float16Array": false, + }, + + "rules": { + "array-bracket-newline": 0, + "complexity": 0, + "eqeqeq": [2, "allow-null"], + "func-name-matching": 0, + "id-length": 0, + "max-lines": 0, + "max-lines-per-function": [2, 90], + "max-params": [2, 4], + "max-statements": 0, + "max-statements-per-line": [2, { "max": 2 }], + "multiline-comment-style": 0, + "no-magic-numbers": 0, + "sort-keys": 0, + }, + + "overrides": [ + { + "files": "test/**", + "rules": { + "new-cap": 0, + }, + }, + ], +} diff --git a/node_modules/get-intrinsic/.github/FUNDING.yml b/node_modules/get-intrinsic/.github/FUNDING.yml new file mode 100644 index 0000000..8e8da0d --- /dev/null +++ b/node_modules/get-intrinsic/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/get-intrinsic +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/get-intrinsic/.nycrc b/node_modules/get-intrinsic/.nycrc new file mode 100644 index 0000000..bdd626c --- /dev/null +++ b/node_modules/get-intrinsic/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/get-intrinsic/CHANGELOG.md b/node_modules/get-intrinsic/CHANGELOG.md new file mode 100644 index 0000000..ce1dd98 --- /dev/null +++ b/node_modules/get-intrinsic/CHANGELOG.md @@ -0,0 +1,186 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.3.0](https://github.com/ljharb/get-intrinsic/compare/v1.2.7...v1.3.0) - 2025-02-22 + +### Commits + +- [Dev Deps] update `es-abstract`, `es-value-fixtures`, `for-each`, `object-inspect` [`9b61553`](https://github.com/ljharb/get-intrinsic/commit/9b61553c587f1c1edbd435597e88c7d387da97dd) +- [Deps] update `call-bind-apply-helpers`, `es-object-atoms`, `get-proto` [`a341fee`](https://github.com/ljharb/get-intrinsic/commit/a341fee0f39a403b0f0069e82c97642d5eb11043) +- [New] add `Float16Array` [`de22116`](https://github.com/ljharb/get-intrinsic/commit/de22116b492fb989a0341bceb6e573abfaed73dc) + +## [v1.2.7](https://github.com/ljharb/get-intrinsic/compare/v1.2.6...v1.2.7) - 2025-01-02 + +### Commits + +- [Refactor] use `get-proto` directly [`00ab955`](https://github.com/ljharb/get-intrinsic/commit/00ab95546a0980c8ad42a84253daaa8d2adcedf9) +- [Deps] update `math-intrinsics` [`c716cdd`](https://github.com/ljharb/get-intrinsic/commit/c716cdd6bbe36b438057025561b8bb5a879ac8a0) +- [Dev Deps] update `call-bound`, `es-abstract` [`dc648a6`](https://github.com/ljharb/get-intrinsic/commit/dc648a67eb359037dff8d8619bfa71d86debccb1) + +## [v1.2.6](https://github.com/ljharb/get-intrinsic/compare/v1.2.5...v1.2.6) - 2024-12-11 + +### Commits + +- [Refactor] use `math-intrinsics` [`841be86`](https://github.com/ljharb/get-intrinsic/commit/841be8641a9254c4c75483b30c8871b5d5065926) +- [Refactor] use `es-object-atoms` [`42057df`](https://github.com/ljharb/get-intrinsic/commit/42057dfa16f66f64787e66482af381cc6f31d2c1) +- [Deps] update `call-bind-apply-helpers` [`45afa24`](https://github.com/ljharb/get-intrinsic/commit/45afa24a9ee4d6d3c172db1f555b16cb27843ef4) +- [Dev Deps] update `call-bound` [`9cba9c6`](https://github.com/ljharb/get-intrinsic/commit/9cba9c6e70212bc163b7a5529cb25df46071646f) + +## [v1.2.5](https://github.com/ljharb/get-intrinsic/compare/v1.2.4...v1.2.5) - 2024-12-06 + +### Commits + +- [actions] split out node 10-20, and 20+ [`6e2b9dd`](https://github.com/ljharb/get-intrinsic/commit/6e2b9dd23902665681ebe453256ccfe21d7966f0) +- [Refactor] use `dunder-proto` and `call-bind-apply-helpers` instead of `has-proto` [`c095d17`](https://github.com/ljharb/get-intrinsic/commit/c095d179ad0f4fbfff20c8a3e0cb4fe668018998) +- [Refactor] use `gopd` [`9841d5b`](https://github.com/ljharb/get-intrinsic/commit/9841d5b35f7ab4fd2d193f0c741a50a077920e90) +- [Dev Deps] update `@ljharb/eslint-config`, `auto-changelog`, `es-abstract`, `es-value-fixtures`, `gopd`, `mock-property`, `object-inspect`, `tape` [`2d07e01`](https://github.com/ljharb/get-intrinsic/commit/2d07e01310cee2cbaedfead6903df128b1f5d425) +- [Deps] update `gopd`, `has-proto`, `has-symbols`, `hasown` [`974d8bf`](https://github.com/ljharb/get-intrinsic/commit/974d8bf5baad7939eef35c25cc1dd88c10a30fa6) +- [Dev Deps] update `call-bind`, `es-abstract`, `tape` [`df9dde1`](https://github.com/ljharb/get-intrinsic/commit/df9dde178186631ab8a3165ede056549918ce4bc) +- [Refactor] cache `es-define-property` as well [`43ef543`](https://github.com/ljharb/get-intrinsic/commit/43ef543cb02194401420e3a914a4ca9168691926) +- [Deps] update `has-proto`, `has-symbols`, `hasown` [`ad4949d`](https://github.com/ljharb/get-intrinsic/commit/ad4949d5467316505aad89bf75f9417ed782f7af) +- [Tests] use `call-bound` directly [`ad5c406`](https://github.com/ljharb/get-intrinsic/commit/ad5c4069774bfe90e520a35eead5fe5ca9d69e80) +- [Deps] update `has-proto`, `hasown` [`45414ca`](https://github.com/ljharb/get-intrinsic/commit/45414caa312333a2798953682c68f85c550627dd) +- [Tests] replace `aud` with `npm audit` [`18d3509`](https://github.com/ljharb/get-intrinsic/commit/18d3509f79460e7924da70409ee81e5053087523) +- [Deps] update `es-define-property` [`aadaa3b`](https://github.com/ljharb/get-intrinsic/commit/aadaa3b2188d77ad9bff394ce5d4249c49eb21f5) +- [Dev Deps] add missing peer dep [`c296a16`](https://github.com/ljharb/get-intrinsic/commit/c296a16246d0c9a5981944f4cc5cf61fbda0cf6a) + +## [v1.2.4](https://github.com/ljharb/get-intrinsic/compare/v1.2.3...v1.2.4) - 2024-02-05 + +### Commits + +- [Refactor] use all 7 <+ ES6 Errors from `es-errors` [`bcac811`](https://github.com/ljharb/get-intrinsic/commit/bcac811abdc1c982e12abf848a410d6aae148d14) + +## [v1.2.3](https://github.com/ljharb/get-intrinsic/compare/v1.2.2...v1.2.3) - 2024-02-03 + +### Commits + +- [Refactor] use `es-errors`, so things that only need those do not need `get-intrinsic` [`f11db9c`](https://github.com/ljharb/get-intrinsic/commit/f11db9c4fb97d87bbd53d3c73ac6b3db3613ad3b) +- [Dev Deps] update `aud`, `es-abstract`, `mock-property`, `npmignore` [`b7ac7d1`](https://github.com/ljharb/get-intrinsic/commit/b7ac7d1616fefb03877b1aed0c8f8d61aad32b6c) +- [meta] simplify `exports` [`faa0cc6`](https://github.com/ljharb/get-intrinsic/commit/faa0cc618e2830ffb51a8202490b0c215d965cbc) +- [meta] add missing `engines.node` [`774dd0b`](https://github.com/ljharb/get-intrinsic/commit/774dd0b3e8f741c3f05a6322d124d6087f146af1) +- [Dev Deps] update `tape` [`5828e8e`](https://github.com/ljharb/get-intrinsic/commit/5828e8e4a04e69312e87a36c0ea39428a7a4c3d8) +- [Robustness] use null objects for lookups [`eb9a11f`](https://github.com/ljharb/get-intrinsic/commit/eb9a11fa9eb3e13b193fcc05a7fb814341b1a7b7) +- [meta] add `sideEffects` flag [`89bcc7a`](https://github.com/ljharb/get-intrinsic/commit/89bcc7a42e19bf07b7c21e3094d5ab177109e6d2) + +## [v1.2.2](https://github.com/ljharb/get-intrinsic/compare/v1.2.1...v1.2.2) - 2023-10-20 + +### Commits + +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `call-bind`, `es-abstract`, `mock-property`, `object-inspect`, `tape` [`f51bcf2`](https://github.com/ljharb/get-intrinsic/commit/f51bcf26412d58d17ce17c91c9afd0ad271f0762) +- [Refactor] use `hasown` instead of `has` [`18d14b7`](https://github.com/ljharb/get-intrinsic/commit/18d14b799bea6b5765e1cec91890830cbcdb0587) +- [Deps] update `function-bind` [`6e109c8`](https://github.com/ljharb/get-intrinsic/commit/6e109c81e03804cc5e7824fb64353cdc3d8ee2c7) + +## [v1.2.1](https://github.com/ljharb/get-intrinsic/compare/v1.2.0...v1.2.1) - 2023-05-13 + +### Commits + +- [Fix] avoid a crash in envs without `__proto__` [`7bad8d0`](https://github.com/ljharb/get-intrinsic/commit/7bad8d061bf8721733b58b73a2565af2b6756b64) +- [Dev Deps] update `es-abstract` [`c60e6b7`](https://github.com/ljharb/get-intrinsic/commit/c60e6b7b4cf9660c7f27ed970970fd55fac48dc5) + +## [v1.2.0](https://github.com/ljharb/get-intrinsic/compare/v1.1.3...v1.2.0) - 2023-01-19 + +### Commits + +- [actions] update checkout action [`ca6b12f`](https://github.com/ljharb/get-intrinsic/commit/ca6b12f31eaacea4ea3b055e744cd61623385ffb) +- [Dev Deps] update `@ljharb/eslint-config`, `es-abstract`, `object-inspect`, `tape` [`41a3727`](https://github.com/ljharb/get-intrinsic/commit/41a3727d0026fa04273ae216a5f8e12eefd72da8) +- [Fix] ensure `Error.prototype` is undeniable [`c511e97`](https://github.com/ljharb/get-intrinsic/commit/c511e97ae99c764c4524b540dee7a70757af8da3) +- [Dev Deps] update `aud`, `es-abstract`, `tape` [`1bef8a8`](https://github.com/ljharb/get-intrinsic/commit/1bef8a8fd439ebb80863199b6189199e0851ac67) +- [Dev Deps] update `aud`, `es-abstract` [`0d41f16`](https://github.com/ljharb/get-intrinsic/commit/0d41f16bcd500bc28b7bfc98043ebf61ea081c26) +- [New] add `BigInt64Array` and `BigUint64Array` [`a6cca25`](https://github.com/ljharb/get-intrinsic/commit/a6cca25f29635889b7e9bd669baf9e04be90e48c) +- [Tests] use `gopd` [`ecf7722`](https://github.com/ljharb/get-intrinsic/commit/ecf7722240d15cfd16edda06acf63359c10fb9bd) + +## [v1.1.3](https://github.com/ljharb/get-intrinsic/compare/v1.1.2...v1.1.3) - 2022-09-12 + +### Commits + +- [Dev Deps] update `es-abstract`, `es-value-fixtures`, `tape` [`07ff291`](https://github.com/ljharb/get-intrinsic/commit/07ff291816406ebe5a12d7f16965bde0942dd688) +- [Fix] properly check for % signs [`50ac176`](https://github.com/ljharb/get-intrinsic/commit/50ac1760fe99c227e64eabde76e9c0e44cd881b5) + +## [v1.1.2](https://github.com/ljharb/get-intrinsic/compare/v1.1.1...v1.1.2) - 2022-06-08 + +### Fixed + +- [Fix] properly validate against extra % signs [`#16`](https://github.com/ljharb/get-intrinsic/issues/16) + +### Commits + +- [actions] reuse common workflows [`0972547`](https://github.com/ljharb/get-intrinsic/commit/0972547efd0abc863fe4c445a6ca7eb4f8c6901d) +- [meta] use `npmignore` to autogenerate an npmignore file [`5ba0b51`](https://github.com/ljharb/get-intrinsic/commit/5ba0b51d8d8d4f1c31d426d74abc0770fd106bad) +- [actions] use `node/install` instead of `node/run`; use `codecov` action [`c364492`](https://github.com/ljharb/get-intrinsic/commit/c364492af4af51333e6f81c0bf21fd3d602c3661) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `es-abstract`, `object-inspect`, `tape` [`dc04dad`](https://github.com/ljharb/get-intrinsic/commit/dc04dad86f6e5608775a2640cb0db5927ae29ed9) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `es-abstract`, `object-inspect`, `safe-publish-latest`, `tape` [`1c14059`](https://github.com/ljharb/get-intrinsic/commit/1c1405984e86dd2dc9366c15d8a0294a96a146a5) +- [Tests] use `mock-property` [`b396ef0`](https://github.com/ljharb/get-intrinsic/commit/b396ef05bb73b1d699811abd64b0d9b97997fdda) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `object-inspect`, `tape` [`c2c758d`](https://github.com/ljharb/get-intrinsic/commit/c2c758d3b90af4fef0a76910d8d3c292ec8d1d3e) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `es-abstract`, `es-value-fixtures`, `object-inspect`, `tape` [`29e3c09`](https://github.com/ljharb/get-intrinsic/commit/29e3c091c2bf3e17099969847e8729d0e46896de) +- [actions] update codecov uploader [`8cbc141`](https://github.com/ljharb/get-intrinsic/commit/8cbc1418940d7a8941f3a7985cbc4ac095c5e13d) +- [Dev Deps] update `@ljharb/eslint-config`, `es-abstract`, `es-value-fixtures`, `object-inspect`, `tape` [`10b6f5c`](https://github.com/ljharb/get-intrinsic/commit/10b6f5c02593fb3680c581d696ac124e30652932) +- [readme] add github actions/codecov badges [`4e25400`](https://github.com/ljharb/get-intrinsic/commit/4e25400d9f51ae9eb059cbe22d9144e70ea214e8) +- [Tests] use `for-each` instead of `foreach` [`c05b957`](https://github.com/ljharb/get-intrinsic/commit/c05b957ad9a7bc7721af7cc9e9be1edbfe057496) +- [Dev Deps] update `es-abstract` [`29b05ae`](https://github.com/ljharb/get-intrinsic/commit/29b05aec3e7330e9ad0b8e0f685a9112c20cdd97) +- [meta] use `prepublishOnly` script for npm 7+ [`95c285d`](https://github.com/ljharb/get-intrinsic/commit/95c285da810516057d3bbfa871176031af38f05d) +- [Deps] update `has-symbols` [`593cb4f`](https://github.com/ljharb/get-intrinsic/commit/593cb4fb38e7922e40e42c183f45274b636424cd) +- [readme] fix repo URLs [`1c8305b`](https://github.com/ljharb/get-intrinsic/commit/1c8305b5365827c9b6fc785434aac0e1328ff2f5) +- [Deps] update `has-symbols` [`c7138b6`](https://github.com/ljharb/get-intrinsic/commit/c7138b6c6d73132d859471fb8c13304e1e7c8b20) +- [Dev Deps] remove unused `has-bigints` [`bd63aff`](https://github.com/ljharb/get-intrinsic/commit/bd63aff6ad8f3a986c557fcda2914187bdaab359) + +## [v1.1.1](https://github.com/ljharb/get-intrinsic/compare/v1.1.0...v1.1.1) - 2021-02-03 + +### Fixed + +- [meta] export `./package.json` [`#9`](https://github.com/ljharb/get-intrinsic/issues/9) + +### Commits + +- [readme] flesh out the readme; use `evalmd` [`d12f12c`](https://github.com/ljharb/get-intrinsic/commit/d12f12c15345a0a0772cc65a7c64369529abd614) +- [eslint] set up proper globals config [`5a8c098`](https://github.com/ljharb/get-intrinsic/commit/5a8c0984e3319d1ac0e64b102f8ec18b64e79f36) +- [Dev Deps] update `eslint` [`7b9a5c0`](https://github.com/ljharb/get-intrinsic/commit/7b9a5c0d31a90ca1a1234181c74988fb046701cd) + +## [v1.1.0](https://github.com/ljharb/get-intrinsic/compare/v1.0.2...v1.1.0) - 2021-01-25 + +### Fixed + +- [Refactor] delay `Function` eval until syntax-derived values are requested [`#3`](https://github.com/ljharb/get-intrinsic/issues/3) + +### Commits + +- [Tests] migrate tests to Github Actions [`2ab762b`](https://github.com/ljharb/get-intrinsic/commit/2ab762b48164aea8af37a40ba105bbc8246ab8c4) +- [meta] do not publish github action workflow files [`5e7108e`](https://github.com/ljharb/get-intrinsic/commit/5e7108e4768b244d48d9567ba4f8a6cab9c65b8e) +- [Tests] add some coverage [`01ac7a8`](https://github.com/ljharb/get-intrinsic/commit/01ac7a87ac29738567e8524cd8c9e026b1fa8cb3) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `call-bind`, `es-abstract`, `tape`; add `call-bind` [`911b672`](https://github.com/ljharb/get-intrinsic/commit/911b672fbffae433a96924c6ce013585e425f4b7) +- [Refactor] rearrange evalled constructors a bit [`7e7e4bf`](https://github.com/ljharb/get-intrinsic/commit/7e7e4bf583f3799c8ac1c6c5e10d2cb553957347) +- [meta] add Automatic Rebase and Require Allow Edits workflows [`0199968`](https://github.com/ljharb/get-intrinsic/commit/01999687a263ffce0a3cb011dfbcb761754aedbc) + +## [v1.0.2](https://github.com/ljharb/get-intrinsic/compare/v1.0.1...v1.0.2) - 2020-12-17 + +### Commits + +- [Fix] Throwย for nonโ€‘existentย intrinsics [`68f873b`](https://github.com/ljharb/get-intrinsic/commit/68f873b013c732a05ad6f5fc54f697e55515461b) +- [Fix] Throwย for nonโ€‘existentย segments in the intrinsic path [`8325dee`](https://github.com/ljharb/get-intrinsic/commit/8325deee43128f3654d3399aa9591741ebe17b21) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `has-bigints`, `object-inspect` [`0c227a7`](https://github.com/ljharb/get-intrinsic/commit/0c227a7d8b629166f25715fd242553892e458525) +- [meta] do not lint coverage output [`70d2419`](https://github.com/ljharb/get-intrinsic/commit/70d24199b620043cd9110fc5f426d214ebe21dc9) + +## [v1.0.1](https://github.com/ljharb/get-intrinsic/compare/v1.0.0...v1.0.1) - 2020-10-30 + +### Commits + +- [Tests] gather coverage data on every job [`d1d280d`](https://github.com/ljharb/get-intrinsic/commit/d1d280dec714e3f0519cc877dbcb193057d9cac6) +- [Fix] add missing dependencies [`5031771`](https://github.com/ljharb/get-intrinsic/commit/5031771bb1095b38be88ce7c41d5de88718e432e) +- [Tests] use `es-value-fixtures` [`af48765`](https://github.com/ljharb/get-intrinsic/commit/af48765a23c5323fb0b6b38dbf00eb5099c7bebc) + +## v1.0.0 - 2020-10-29 + +### Commits + +- Implementation [`bbce57c`](https://github.com/ljharb/get-intrinsic/commit/bbce57c6f33d05b2d8d3efa273ceeb3ee01127bb) +- Tests [`17b4f0d`](https://github.com/ljharb/get-intrinsic/commit/17b4f0d56dea6b4059b56fc30ef3ee4d9500ebc2) +- Initial commit [`3153294`](https://github.com/ljharb/get-intrinsic/commit/31532948de363b0a27dd9fd4649e7b7028ec4b44) +- npm init [`fb326c4`](https://github.com/ljharb/get-intrinsic/commit/fb326c4d2817c8419ec31de1295f06bb268a7902) +- [meta] add Automatic Rebase and Require Allow Edits workflows [`48862fb`](https://github.com/ljharb/get-intrinsic/commit/48862fb2508c8f6a57968e6d08b7c883afc9d550) +- [meta] add `auto-changelog` [`5f28ad0`](https://github.com/ljharb/get-intrinsic/commit/5f28ad019e060a353d8028f9f2591a9cc93074a1) +- [meta] add "funding"; create `FUNDING.yml` [`c2bbdde`](https://github.com/ljharb/get-intrinsic/commit/c2bbddeba73a875be61484ee4680b129a6d4e0a1) +- [Tests] add `npm run lint` [`0a84b98`](https://github.com/ljharb/get-intrinsic/commit/0a84b98b22b7cf7a748666f705b0003a493c35fd) +- Only apps should have lockfiles [`9586c75`](https://github.com/ljharb/get-intrinsic/commit/9586c75866c1ee678e4d5d4dbbdef6997e511b05) diff --git a/node_modules/get-intrinsic/LICENSE b/node_modules/get-intrinsic/LICENSE new file mode 100644 index 0000000..48f05d0 --- /dev/null +++ b/node_modules/get-intrinsic/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/get-intrinsic/README.md b/node_modules/get-intrinsic/README.md new file mode 100644 index 0000000..3aa0bba --- /dev/null +++ b/node_modules/get-intrinsic/README.md @@ -0,0 +1,71 @@ +# get-intrinsic [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][deps-svg]][deps-url] +[![dev dependency status][dev-deps-svg]][dev-deps-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Get and robustly cache all JS language-level intrinsics at first require time. + +See the syntax described [in the JS spec](https://tc39.es/ecma262/#sec-well-known-intrinsic-objects) for reference. + +## Example + +```js +var GetIntrinsic = require('get-intrinsic'); +var assert = require('assert'); + +// static methods +assert.equal(GetIntrinsic('%Math.pow%'), Math.pow); +assert.equal(Math.pow(2, 3), 8); +assert.equal(GetIntrinsic('%Math.pow%')(2, 3), 8); +delete Math.pow; +assert.equal(GetIntrinsic('%Math.pow%')(2, 3), 8); + +// instance methods +var arr = [1]; +assert.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push); +assert.deepEqual(arr, [1]); + +arr.push(2); +assert.deepEqual(arr, [1, 2]); + +GetIntrinsic('%Array.prototype.push%').call(arr, 3); +assert.deepEqual(arr, [1, 2, 3]); + +delete Array.prototype.push; +GetIntrinsic('%Array.prototype.push%').call(arr, 4); +assert.deepEqual(arr, [1, 2, 3, 4]); + +// missing features +delete JSON.parse; // to simulate a real intrinsic that is missing in the environment +assert.throws(() => GetIntrinsic('%JSON.parse%')); +assert.equal(undefined, GetIntrinsic('%JSON.parse%', true)); +``` + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +## Security + +Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. + +[package-url]: https://npmjs.org/package/get-intrinsic +[npm-version-svg]: https://versionbadg.es/ljharb/get-intrinsic.svg +[deps-svg]: https://david-dm.org/ljharb/get-intrinsic.svg +[deps-url]: https://david-dm.org/ljharb/get-intrinsic +[dev-deps-svg]: https://david-dm.org/ljharb/get-intrinsic/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/get-intrinsic#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/get-intrinsic.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/get-intrinsic.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/get-intrinsic.svg +[downloads-url]: https://npm-stat.com/charts.html?package=get-intrinsic +[codecov-image]: https://codecov.io/gh/ljharb/get-intrinsic/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/get-intrinsic/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/get-intrinsic +[actions-url]: https://github.com/ljharb/get-intrinsic/actions diff --git a/node_modules/get-intrinsic/index.js b/node_modules/get-intrinsic/index.js new file mode 100644 index 0000000..bd1d94b --- /dev/null +++ b/node_modules/get-intrinsic/index.js @@ -0,0 +1,378 @@ +'use strict'; + +var undefined; + +var $Object = require('es-object-atoms'); + +var $Error = require('es-errors'); +var $EvalError = require('es-errors/eval'); +var $RangeError = require('es-errors/range'); +var $ReferenceError = require('es-errors/ref'); +var $SyntaxError = require('es-errors/syntax'); +var $TypeError = require('es-errors/type'); +var $URIError = require('es-errors/uri'); + +var abs = require('math-intrinsics/abs'); +var floor = require('math-intrinsics/floor'); +var max = require('math-intrinsics/max'); +var min = require('math-intrinsics/min'); +var pow = require('math-intrinsics/pow'); +var round = require('math-intrinsics/round'); +var sign = require('math-intrinsics/sign'); + +var $Function = Function; + +// eslint-disable-next-line consistent-return +var getEvalledConstructor = function (expressionSyntax) { + try { + return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')(); + } catch (e) {} +}; + +var $gOPD = require('gopd'); +var $defineProperty = require('es-define-property'); + +var throwTypeError = function () { + throw new $TypeError(); +}; +var ThrowTypeError = $gOPD + ? (function () { + try { + // eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties + arguments.callee; // IE 8 does not throw here + return throwTypeError; + } catch (calleeThrows) { + try { + // IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '') + return $gOPD(arguments, 'callee').get; + } catch (gOPDthrows) { + return throwTypeError; + } + } + }()) + : throwTypeError; + +var hasSymbols = require('has-symbols')(); + +var getProto = require('get-proto'); +var $ObjectGPO = require('get-proto/Object.getPrototypeOf'); +var $ReflectGPO = require('get-proto/Reflect.getPrototypeOf'); + +var $apply = require('call-bind-apply-helpers/functionApply'); +var $call = require('call-bind-apply-helpers/functionCall'); + +var needsEval = {}; + +var TypedArray = typeof Uint8Array === 'undefined' || !getProto ? undefined : getProto(Uint8Array); + +var INTRINSICS = { + __proto__: null, + '%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError, + '%Array%': Array, + '%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer, + '%ArrayIteratorPrototype%': hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined, + '%AsyncFromSyncIteratorPrototype%': undefined, + '%AsyncFunction%': needsEval, + '%AsyncGenerator%': needsEval, + '%AsyncGeneratorFunction%': needsEval, + '%AsyncIteratorPrototype%': needsEval, + '%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics, + '%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt, + '%BigInt64Array%': typeof BigInt64Array === 'undefined' ? undefined : BigInt64Array, + '%BigUint64Array%': typeof BigUint64Array === 'undefined' ? undefined : BigUint64Array, + '%Boolean%': Boolean, + '%DataView%': typeof DataView === 'undefined' ? undefined : DataView, + '%Date%': Date, + '%decodeURI%': decodeURI, + '%decodeURIComponent%': decodeURIComponent, + '%encodeURI%': encodeURI, + '%encodeURIComponent%': encodeURIComponent, + '%Error%': $Error, + '%eval%': eval, // eslint-disable-line no-eval + '%EvalError%': $EvalError, + '%Float16Array%': typeof Float16Array === 'undefined' ? undefined : Float16Array, + '%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array, + '%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array, + '%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry, + '%Function%': $Function, + '%GeneratorFunction%': needsEval, + '%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array, + '%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array, + '%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array, + '%isFinite%': isFinite, + '%isNaN%': isNaN, + '%IteratorPrototype%': hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined, + '%JSON%': typeof JSON === 'object' ? JSON : undefined, + '%Map%': typeof Map === 'undefined' ? undefined : Map, + '%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Map()[Symbol.iterator]()), + '%Math%': Math, + '%Number%': Number, + '%Object%': $Object, + '%Object.getOwnPropertyDescriptor%': $gOPD, + '%parseFloat%': parseFloat, + '%parseInt%': parseInt, + '%Promise%': typeof Promise === 'undefined' ? undefined : Promise, + '%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy, + '%RangeError%': $RangeError, + '%ReferenceError%': $ReferenceError, + '%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect, + '%RegExp%': RegExp, + '%Set%': typeof Set === 'undefined' ? undefined : Set, + '%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols || !getProto ? undefined : getProto(new Set()[Symbol.iterator]()), + '%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer, + '%String%': String, + '%StringIteratorPrototype%': hasSymbols && getProto ? getProto(''[Symbol.iterator]()) : undefined, + '%Symbol%': hasSymbols ? Symbol : undefined, + '%SyntaxError%': $SyntaxError, + '%ThrowTypeError%': ThrowTypeError, + '%TypedArray%': TypedArray, + '%TypeError%': $TypeError, + '%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array, + '%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray, + '%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array, + '%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array, + '%URIError%': $URIError, + '%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap, + '%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef, + '%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet, + + '%Function.prototype.call%': $call, + '%Function.prototype.apply%': $apply, + '%Object.defineProperty%': $defineProperty, + '%Object.getPrototypeOf%': $ObjectGPO, + '%Math.abs%': abs, + '%Math.floor%': floor, + '%Math.max%': max, + '%Math.min%': min, + '%Math.pow%': pow, + '%Math.round%': round, + '%Math.sign%': sign, + '%Reflect.getPrototypeOf%': $ReflectGPO +}; + +if (getProto) { + try { + null.error; // eslint-disable-line no-unused-expressions + } catch (e) { + // https://github.com/tc39/proposal-shadowrealm/pull/384#issuecomment-1364264229 + var errorProto = getProto(getProto(e)); + INTRINSICS['%Error.prototype%'] = errorProto; + } +} + +var doEval = function doEval(name) { + var value; + if (name === '%AsyncFunction%') { + value = getEvalledConstructor('async function () {}'); + } else if (name === '%GeneratorFunction%') { + value = getEvalledConstructor('function* () {}'); + } else if (name === '%AsyncGeneratorFunction%') { + value = getEvalledConstructor('async function* () {}'); + } else if (name === '%AsyncGenerator%') { + var fn = doEval('%AsyncGeneratorFunction%'); + if (fn) { + value = fn.prototype; + } + } else if (name === '%AsyncIteratorPrototype%') { + var gen = doEval('%AsyncGenerator%'); + if (gen && getProto) { + value = getProto(gen.prototype); + } + } + + INTRINSICS[name] = value; + + return value; +}; + +var LEGACY_ALIASES = { + __proto__: null, + '%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'], + '%ArrayPrototype%': ['Array', 'prototype'], + '%ArrayProto_entries%': ['Array', 'prototype', 'entries'], + '%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'], + '%ArrayProto_keys%': ['Array', 'prototype', 'keys'], + '%ArrayProto_values%': ['Array', 'prototype', 'values'], + '%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'], + '%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'], + '%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'], + '%BooleanPrototype%': ['Boolean', 'prototype'], + '%DataViewPrototype%': ['DataView', 'prototype'], + '%DatePrototype%': ['Date', 'prototype'], + '%ErrorPrototype%': ['Error', 'prototype'], + '%EvalErrorPrototype%': ['EvalError', 'prototype'], + '%Float32ArrayPrototype%': ['Float32Array', 'prototype'], + '%Float64ArrayPrototype%': ['Float64Array', 'prototype'], + '%FunctionPrototype%': ['Function', 'prototype'], + '%Generator%': ['GeneratorFunction', 'prototype'], + '%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'], + '%Int8ArrayPrototype%': ['Int8Array', 'prototype'], + '%Int16ArrayPrototype%': ['Int16Array', 'prototype'], + '%Int32ArrayPrototype%': ['Int32Array', 'prototype'], + '%JSONParse%': ['JSON', 'parse'], + '%JSONStringify%': ['JSON', 'stringify'], + '%MapPrototype%': ['Map', 'prototype'], + '%NumberPrototype%': ['Number', 'prototype'], + '%ObjectPrototype%': ['Object', 'prototype'], + '%ObjProto_toString%': ['Object', 'prototype', 'toString'], + '%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'], + '%PromisePrototype%': ['Promise', 'prototype'], + '%PromiseProto_then%': ['Promise', 'prototype', 'then'], + '%Promise_all%': ['Promise', 'all'], + '%Promise_reject%': ['Promise', 'reject'], + '%Promise_resolve%': ['Promise', 'resolve'], + '%RangeErrorPrototype%': ['RangeError', 'prototype'], + '%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'], + '%RegExpPrototype%': ['RegExp', 'prototype'], + '%SetPrototype%': ['Set', 'prototype'], + '%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'], + '%StringPrototype%': ['String', 'prototype'], + '%SymbolPrototype%': ['Symbol', 'prototype'], + '%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'], + '%TypedArrayPrototype%': ['TypedArray', 'prototype'], + '%TypeErrorPrototype%': ['TypeError', 'prototype'], + '%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'], + '%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'], + '%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'], + '%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'], + '%URIErrorPrototype%': ['URIError', 'prototype'], + '%WeakMapPrototype%': ['WeakMap', 'prototype'], + '%WeakSetPrototype%': ['WeakSet', 'prototype'] +}; + +var bind = require('function-bind'); +var hasOwn = require('hasown'); +var $concat = bind.call($call, Array.prototype.concat); +var $spliceApply = bind.call($apply, Array.prototype.splice); +var $replace = bind.call($call, String.prototype.replace); +var $strSlice = bind.call($call, String.prototype.slice); +var $exec = bind.call($call, RegExp.prototype.exec); + +/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */ +var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; +var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */ +var stringToPath = function stringToPath(string) { + var first = $strSlice(string, 0, 1); + var last = $strSlice(string, -1); + if (first === '%' && last !== '%') { + throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`'); + } else if (last === '%' && first !== '%') { + throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`'); + } + var result = []; + $replace(string, rePropName, function (match, number, quote, subString) { + result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match; + }); + return result; +}; +/* end adaptation */ + +var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) { + var intrinsicName = name; + var alias; + if (hasOwn(LEGACY_ALIASES, intrinsicName)) { + alias = LEGACY_ALIASES[intrinsicName]; + intrinsicName = '%' + alias[0] + '%'; + } + + if (hasOwn(INTRINSICS, intrinsicName)) { + var value = INTRINSICS[intrinsicName]; + if (value === needsEval) { + value = doEval(intrinsicName); + } + if (typeof value === 'undefined' && !allowMissing) { + throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!'); + } + + return { + alias: alias, + name: intrinsicName, + value: value + }; + } + + throw new $SyntaxError('intrinsic ' + name + ' does not exist!'); +}; + +module.exports = function GetIntrinsic(name, allowMissing) { + if (typeof name !== 'string' || name.length === 0) { + throw new $TypeError('intrinsic name must be a non-empty string'); + } + if (arguments.length > 1 && typeof allowMissing !== 'boolean') { + throw new $TypeError('"allowMissing" argument must be a boolean'); + } + + if ($exec(/^%?[^%]*%?$/, name) === null) { + throw new $SyntaxError('`%` may not be present anywhere but at the beginning and end of the intrinsic name'); + } + var parts = stringToPath(name); + var intrinsicBaseName = parts.length > 0 ? parts[0] : ''; + + var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing); + var intrinsicRealName = intrinsic.name; + var value = intrinsic.value; + var skipFurtherCaching = false; + + var alias = intrinsic.alias; + if (alias) { + intrinsicBaseName = alias[0]; + $spliceApply(parts, $concat([0, 1], alias)); + } + + for (var i = 1, isOwn = true; i < parts.length; i += 1) { + var part = parts[i]; + var first = $strSlice(part, 0, 1); + var last = $strSlice(part, -1); + if ( + ( + (first === '"' || first === "'" || first === '`') + || (last === '"' || last === "'" || last === '`') + ) + && first !== last + ) { + throw new $SyntaxError('property names with quotes must have matching quotes'); + } + if (part === 'constructor' || !isOwn) { + skipFurtherCaching = true; + } + + intrinsicBaseName += '.' + part; + intrinsicRealName = '%' + intrinsicBaseName + '%'; + + if (hasOwn(INTRINSICS, intrinsicRealName)) { + value = INTRINSICS[intrinsicRealName]; + } else if (value != null) { + if (!(part in value)) { + if (!allowMissing) { + throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.'); + } + return void undefined; + } + if ($gOPD && (i + 1) >= parts.length) { + var desc = $gOPD(value, part); + isOwn = !!desc; + + // By convention, when a data property is converted to an accessor + // property to emulate a data property that does not suffer from + // the override mistake, that accessor's getter is marked with + // an `originalValue` property. Here, when we detect this, we + // uphold the illusion by pretending to see that original data + // property, i.e., returning the value rather than the getter + // itself. + if (isOwn && 'get' in desc && !('originalValue' in desc.get)) { + value = desc.get; + } else { + value = value[part]; + } + } else { + isOwn = hasOwn(value, part); + value = value[part]; + } + + if (isOwn && !skipFurtherCaching) { + INTRINSICS[intrinsicRealName] = value; + } + } + } + return value; +}; diff --git a/node_modules/get-intrinsic/package.json b/node_modules/get-intrinsic/package.json new file mode 100644 index 0000000..2828e73 --- /dev/null +++ b/node_modules/get-intrinsic/package.json @@ -0,0 +1,97 @@ +{ + "name": "get-intrinsic", + "version": "1.3.0", + "description": "Get and robustly cache all JS language-level intrinsics at first require time", + "main": "index.js", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "prelint": "evalmd README.md", + "lint": "eslint --ext=.js,.mjs .", + "pretest": "npm run lint", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "npx npm@'>= 10.2' audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/get-intrinsic.git" + }, + "keywords": [ + "javascript", + "ecmascript", + "es", + "js", + "intrinsic", + "getintrinsic", + "es-abstract" + ], + "author": "Jordan Harband ", + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/get-intrinsic/issues" + }, + "homepage": "https://github.com/ljharb/get-intrinsic#readme", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "devDependencies": { + "@ljharb/eslint-config": "^21.1.1", + "auto-changelog": "^2.5.0", + "call-bound": "^1.0.3", + "encoding": "^0.1.13", + "es-abstract": "^1.23.9", + "es-value-fixtures": "^1.7.1", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "for-each": "^0.3.5", + "make-async-function": "^1.0.0", + "make-async-generator-function": "^1.0.0", + "make-generator-function": "^2.0.0", + "mock-property": "^1.1.0", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "object-inspect": "^1.13.4", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "testling": { + "files": "test/GetIntrinsic.js" + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/node_modules/get-intrinsic/test/GetIntrinsic.js b/node_modules/get-intrinsic/test/GetIntrinsic.js new file mode 100644 index 0000000..d9c0f30 --- /dev/null +++ b/node_modules/get-intrinsic/test/GetIntrinsic.js @@ -0,0 +1,274 @@ +'use strict'; + +var GetIntrinsic = require('../'); + +var test = require('tape'); +var forEach = require('for-each'); +var debug = require('object-inspect'); +var generatorFns = require('make-generator-function')(); +var asyncFns = require('make-async-function').list(); +var asyncGenFns = require('make-async-generator-function')(); +var mockProperty = require('mock-property'); + +var callBound = require('call-bound'); +var v = require('es-value-fixtures'); +var $gOPD = require('gopd'); +var DefinePropertyOrThrow = require('es-abstract/2023/DefinePropertyOrThrow'); + +var $isProto = callBound('%Object.prototype.isPrototypeOf%'); + +test('export', function (t) { + t.equal(typeof GetIntrinsic, 'function', 'it is a function'); + t.equal(GetIntrinsic.length, 2, 'function has length of 2'); + + t.end(); +}); + +test('throws', function (t) { + t['throws']( + function () { GetIntrinsic('not an intrinsic'); }, + SyntaxError, + 'nonexistent intrinsic throws a syntax error' + ); + + t['throws']( + function () { GetIntrinsic(''); }, + TypeError, + 'empty string intrinsic throws a type error' + ); + + t['throws']( + function () { GetIntrinsic('.'); }, + SyntaxError, + '"just a dot" intrinsic throws a syntax error' + ); + + t['throws']( + function () { GetIntrinsic('%String'); }, + SyntaxError, + 'Leading % without trailing % throws a syntax error' + ); + + t['throws']( + function () { GetIntrinsic('String%'); }, + SyntaxError, + 'Trailing % without leading % throws a syntax error' + ); + + t['throws']( + function () { GetIntrinsic("String['prototype]"); }, + SyntaxError, + 'Dynamic property access is disallowed for intrinsics (unterminated string)' + ); + + t['throws']( + function () { GetIntrinsic('%Proxy.prototype.undefined%'); }, + TypeError, + "Throws when middle part doesn't exist (%Proxy.prototype.undefined%)" + ); + + t['throws']( + function () { GetIntrinsic('%Array.prototype%garbage%'); }, + SyntaxError, + 'Throws with extra percent signs' + ); + + t['throws']( + function () { GetIntrinsic('%Array.prototype%push%'); }, + SyntaxError, + 'Throws with extra percent signs, even on an existing intrinsic' + ); + + forEach(v.nonStrings, function (nonString) { + t['throws']( + function () { GetIntrinsic(nonString); }, + TypeError, + debug(nonString) + ' is not a String' + ); + }); + + forEach(v.nonBooleans, function (nonBoolean) { + t['throws']( + function () { GetIntrinsic('%', nonBoolean); }, + TypeError, + debug(nonBoolean) + ' is not a Boolean' + ); + }); + + forEach([ + 'toString', + 'propertyIsEnumerable', + 'hasOwnProperty' + ], function (objectProtoMember) { + t['throws']( + function () { GetIntrinsic(objectProtoMember); }, + SyntaxError, + debug(objectProtoMember) + ' is not an intrinsic' + ); + }); + + t.end(); +}); + +test('base intrinsics', function (t) { + t.equal(GetIntrinsic('%Object%'), Object, '%Object% yields Object'); + t.equal(GetIntrinsic('Object'), Object, 'Object yields Object'); + t.equal(GetIntrinsic('%Array%'), Array, '%Array% yields Array'); + t.equal(GetIntrinsic('Array'), Array, 'Array yields Array'); + + t.end(); +}); + +test('dotted paths', function (t) { + t.equal(GetIntrinsic('%Object.prototype.toString%'), Object.prototype.toString, '%Object.prototype.toString% yields Object.prototype.toString'); + t.equal(GetIntrinsic('Object.prototype.toString'), Object.prototype.toString, 'Object.prototype.toString yields Object.prototype.toString'); + t.equal(GetIntrinsic('%Array.prototype.push%'), Array.prototype.push, '%Array.prototype.push% yields Array.prototype.push'); + t.equal(GetIntrinsic('Array.prototype.push'), Array.prototype.push, 'Array.prototype.push yields Array.prototype.push'); + + test('underscore paths are aliases for dotted paths', { skip: !Object.isFrozen || Object.isFrozen(Object.prototype) }, function (st) { + var original = GetIntrinsic('%ObjProto_toString%'); + + forEach([ + '%Object.prototype.toString%', + 'Object.prototype.toString', + '%ObjectPrototype.toString%', + 'ObjectPrototype.toString', + '%ObjProto_toString%', + 'ObjProto_toString' + ], function (name) { + DefinePropertyOrThrow(Object.prototype, 'toString', { + '[[Value]]': function toString() { + return original.apply(this, arguments); + } + }); + st.equal(GetIntrinsic(name), original, name + ' yields original Object.prototype.toString'); + }); + + DefinePropertyOrThrow(Object.prototype, 'toString', { '[[Value]]': original }); + st.end(); + }); + + test('dotted paths cache', { skip: !Object.isFrozen || Object.isFrozen(Object.prototype) }, function (st) { + var original = GetIntrinsic('%Object.prototype.propertyIsEnumerable%'); + + forEach([ + '%Object.prototype.propertyIsEnumerable%', + 'Object.prototype.propertyIsEnumerable', + '%ObjectPrototype.propertyIsEnumerable%', + 'ObjectPrototype.propertyIsEnumerable' + ], function (name) { + var restore = mockProperty(Object.prototype, 'propertyIsEnumerable', { + value: function propertyIsEnumerable() { + return original.apply(this, arguments); + } + }); + st.equal(GetIntrinsic(name), original, name + ' yields cached Object.prototype.propertyIsEnumerable'); + + restore(); + }); + + st.end(); + }); + + test('dotted path reports correct error', function (st) { + st['throws'](function () { + GetIntrinsic('%NonExistentIntrinsic.prototype.property%'); + }, /%NonExistentIntrinsic%/, 'The base intrinsic of %NonExistentIntrinsic.prototype.property% is %NonExistentIntrinsic%'); + + st['throws'](function () { + GetIntrinsic('%NonExistentIntrinsicPrototype.property%'); + }, /%NonExistentIntrinsicPrototype%/, 'The base intrinsic of %NonExistentIntrinsicPrototype.property% is %NonExistentIntrinsicPrototype%'); + + st.end(); + }); + + t.end(); +}); + +test('accessors', { skip: !$gOPD || typeof Map !== 'function' }, function (t) { + var actual = $gOPD(Map.prototype, 'size'); + t.ok(actual, 'Map.prototype.size has a descriptor'); + t.equal(typeof actual.get, 'function', 'Map.prototype.size has a getter function'); + t.equal(GetIntrinsic('%Map.prototype.size%'), actual.get, '%Map.prototype.size% yields the getter for it'); + t.equal(GetIntrinsic('Map.prototype.size'), actual.get, 'Map.prototype.size yields the getter for it'); + + t.end(); +}); + +test('generator functions', { skip: !generatorFns.length }, function (t) { + var $GeneratorFunction = GetIntrinsic('%GeneratorFunction%'); + var $GeneratorFunctionPrototype = GetIntrinsic('%Generator%'); + var $GeneratorPrototype = GetIntrinsic('%GeneratorPrototype%'); + + forEach(generatorFns, function (genFn) { + var fnName = genFn.name; + fnName = fnName ? "'" + fnName + "'" : 'genFn'; + + t.ok(genFn instanceof $GeneratorFunction, fnName + ' instanceof %GeneratorFunction%'); + t.ok($isProto($GeneratorFunctionPrototype, genFn), '%Generator% is prototype of ' + fnName); + t.ok($isProto($GeneratorPrototype, genFn.prototype), '%GeneratorPrototype% is prototype of ' + fnName + '.prototype'); + }); + + t.end(); +}); + +test('async functions', { skip: !asyncFns.length }, function (t) { + var $AsyncFunction = GetIntrinsic('%AsyncFunction%'); + var $AsyncFunctionPrototype = GetIntrinsic('%AsyncFunctionPrototype%'); + + forEach(asyncFns, function (asyncFn) { + var fnName = asyncFn.name; + fnName = fnName ? "'" + fnName + "'" : 'asyncFn'; + + t.ok(asyncFn instanceof $AsyncFunction, fnName + ' instanceof %AsyncFunction%'); + t.ok($isProto($AsyncFunctionPrototype, asyncFn), '%AsyncFunctionPrototype% is prototype of ' + fnName); + }); + + t.end(); +}); + +test('async generator functions', { skip: asyncGenFns.length === 0 }, function (t) { + var $AsyncGeneratorFunction = GetIntrinsic('%AsyncGeneratorFunction%'); + var $AsyncGeneratorFunctionPrototype = GetIntrinsic('%AsyncGenerator%'); + var $AsyncGeneratorPrototype = GetIntrinsic('%AsyncGeneratorPrototype%'); + + forEach(asyncGenFns, function (asyncGenFn) { + var fnName = asyncGenFn.name; + fnName = fnName ? "'" + fnName + "'" : 'asyncGenFn'; + + t.ok(asyncGenFn instanceof $AsyncGeneratorFunction, fnName + ' instanceof %AsyncGeneratorFunction%'); + t.ok($isProto($AsyncGeneratorFunctionPrototype, asyncGenFn), '%AsyncGenerator% is prototype of ' + fnName); + t.ok($isProto($AsyncGeneratorPrototype, asyncGenFn.prototype), '%AsyncGeneratorPrototype% is prototype of ' + fnName + '.prototype'); + }); + + t.end(); +}); + +test('%ThrowTypeError%', function (t) { + var $ThrowTypeError = GetIntrinsic('%ThrowTypeError%'); + + t.equal(typeof $ThrowTypeError, 'function', 'is a function'); + t['throws']( + $ThrowTypeError, + TypeError, + '%ThrowTypeError% throws a TypeError' + ); + + t.end(); +}); + +test('allowMissing', { skip: asyncGenFns.length > 0 }, function (t) { + t['throws']( + function () { GetIntrinsic('%AsyncGeneratorPrototype%'); }, + TypeError, + 'throws when missing' + ); + + t.equal( + GetIntrinsic('%AsyncGeneratorPrototype%', true), + undefined, + 'does not throw when allowMissing' + ); + + t.end(); +}); diff --git a/node_modules/get-proto/.eslintrc b/node_modules/get-proto/.eslintrc new file mode 100644 index 0000000..1d21a8a --- /dev/null +++ b/node_modules/get-proto/.eslintrc @@ -0,0 +1,10 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "id-length": "off", + "sort-keys": "off", + }, +} diff --git a/node_modules/get-proto/.github/FUNDING.yml b/node_modules/get-proto/.github/FUNDING.yml new file mode 100644 index 0000000..93183ef --- /dev/null +++ b/node_modules/get-proto/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/get-proto +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/get-proto/.nycrc b/node_modules/get-proto/.nycrc new file mode 100644 index 0000000..bdd626c --- /dev/null +++ b/node_modules/get-proto/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/get-proto/CHANGELOG.md b/node_modules/get-proto/CHANGELOG.md new file mode 100644 index 0000000..5860229 --- /dev/null +++ b/node_modules/get-proto/CHANGELOG.md @@ -0,0 +1,21 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.0.1](https://github.com/ljharb/get-proto/compare/v1.0.0...v1.0.1) - 2025-01-02 + +### Commits + +- [Fix] for the `Object.getPrototypeOf` window, throw for non-objects [`7fe6508`](https://github.com/ljharb/get-proto/commit/7fe6508b71419ebe1976bedb86001d1feaeaa49a) + +## v1.0.0 - 2025-01-01 + +### Commits + +- Initial implementation, tests, readme, types [`5c70775`](https://github.com/ljharb/get-proto/commit/5c707751e81c3deeb2cf980d185fc7fd43611415) +- Initial commit [`7c65c2a`](https://github.com/ljharb/get-proto/commit/7c65c2ad4e33d5dae2f219ebe1a046ae2256972c) +- npm init [`0b8cf82`](https://github.com/ljharb/get-proto/commit/0b8cf824c9634e4a34ef7dd2a2cdc5be6ac79518) +- Only apps should have lockfiles [`a6d1bff`](https://github.com/ljharb/get-proto/commit/a6d1bffc364f5828377cea7194558b2dbef7aea2) diff --git a/node_modules/get-proto/LICENSE b/node_modules/get-proto/LICENSE new file mode 100644 index 0000000..eeabd1c --- /dev/null +++ b/node_modules/get-proto/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/get-proto/Object.getPrototypeOf.d.ts b/node_modules/get-proto/Object.getPrototypeOf.d.ts new file mode 100644 index 0000000..028b3ff --- /dev/null +++ b/node_modules/get-proto/Object.getPrototypeOf.d.ts @@ -0,0 +1,5 @@ +declare function getProto(object: O): object | null; + +declare const x: typeof getProto | null; + +export = x; \ No newline at end of file diff --git a/node_modules/get-proto/Object.getPrototypeOf.js b/node_modules/get-proto/Object.getPrototypeOf.js new file mode 100644 index 0000000..c2cbbdf --- /dev/null +++ b/node_modules/get-proto/Object.getPrototypeOf.js @@ -0,0 +1,6 @@ +'use strict'; + +var $Object = require('es-object-atoms'); + +/** @type {import('./Object.getPrototypeOf')} */ +module.exports = $Object.getPrototypeOf || null; diff --git a/node_modules/get-proto/README.md b/node_modules/get-proto/README.md new file mode 100644 index 0000000..f8b4cce --- /dev/null +++ b/node_modules/get-proto/README.md @@ -0,0 +1,50 @@ +# get-proto [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +Robustly get the [[Prototype]] of an object. Uses the best available method. + +## Getting started + +```sh +npm install --save get-proto +``` + +## Usage/Examples + +```js +const assert = require('assert'); +const getProto = require('get-proto'); + +const a = { a: 1, b: 2, [Symbol.toStringTag]: 'foo' }; +const b = { c: 3, __proto__: a }; + +assert.equal(getProto(b), a); +assert.equal(getProto(a), Object.prototype); +assert.equal(getProto({ __proto__: null }), null); +``` + +## Tests + +Clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.org/package/get-proto +[npm-version-svg]: https://versionbadg.es/ljharb/get-proto.svg +[deps-svg]: https://david-dm.org/ljharb/get-proto.svg +[deps-url]: https://david-dm.org/ljharb/get-proto +[dev-deps-svg]: https://david-dm.org/ljharb/get-proto/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/get-proto#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/get-proto.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/get-proto.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/get-proto.svg +[downloads-url]: https://npm-stat.com/charts.html?package=get-proto +[codecov-image]: https://codecov.io/gh/ljharb/get-proto/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/get-proto/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/get-proto +[actions-url]: https://github.com/ljharb/get-proto/actions diff --git a/node_modules/get-proto/Reflect.getPrototypeOf.d.ts b/node_modules/get-proto/Reflect.getPrototypeOf.d.ts new file mode 100644 index 0000000..2388fe0 --- /dev/null +++ b/node_modules/get-proto/Reflect.getPrototypeOf.d.ts @@ -0,0 +1,3 @@ +declare const x: typeof Reflect.getPrototypeOf | null; + +export = x; \ No newline at end of file diff --git a/node_modules/get-proto/Reflect.getPrototypeOf.js b/node_modules/get-proto/Reflect.getPrototypeOf.js new file mode 100644 index 0000000..e6c51be --- /dev/null +++ b/node_modules/get-proto/Reflect.getPrototypeOf.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./Reflect.getPrototypeOf')} */ +module.exports = (typeof Reflect !== 'undefined' && Reflect.getPrototypeOf) || null; diff --git a/node_modules/get-proto/index.d.ts b/node_modules/get-proto/index.d.ts new file mode 100644 index 0000000..2c021f3 --- /dev/null +++ b/node_modules/get-proto/index.d.ts @@ -0,0 +1,5 @@ +declare function getProto(object: O): object | null; + +declare const x: typeof getProto | null; + +export = x; diff --git a/node_modules/get-proto/index.js b/node_modules/get-proto/index.js new file mode 100644 index 0000000..7e5747b --- /dev/null +++ b/node_modules/get-proto/index.js @@ -0,0 +1,27 @@ +'use strict'; + +var reflectGetProto = require('./Reflect.getPrototypeOf'); +var originalGetProto = require('./Object.getPrototypeOf'); + +var getDunderProto = require('dunder-proto/get'); + +/** @type {import('.')} */ +module.exports = reflectGetProto + ? function getProto(O) { + // @ts-expect-error TS can't narrow inside a closure, for some reason + return reflectGetProto(O); + } + : originalGetProto + ? function getProto(O) { + if (!O || (typeof O !== 'object' && typeof O !== 'function')) { + throw new TypeError('getProto: not an object'); + } + // @ts-expect-error TS can't narrow inside a closure, for some reason + return originalGetProto(O); + } + : getDunderProto + ? function getProto(O) { + // @ts-expect-error TS can't narrow inside a closure, for some reason + return getDunderProto(O); + } + : null; diff --git a/node_modules/get-proto/package.json b/node_modules/get-proto/package.json new file mode 100644 index 0000000..9c35cec --- /dev/null +++ b/node_modules/get-proto/package.json @@ -0,0 +1,81 @@ +{ + "name": "get-proto", + "version": "1.0.1", + "description": "Robustly get the [[Prototype]] of an object", + "main": "index.js", + "exports": { + ".": "./index.js", + "./Reflect.getPrototypeOf": "./Reflect.getPrototypeOf.js", + "./Object.getPrototypeOf": "./Object.getPrototypeOf.js", + "./package.json": "./package.json" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "pretest": "npm run --silent lint", + "test": "npm run tests-only", + "posttest": "npx npm@\">=10.2\" audit --production", + "tests-only": "nyc tape 'test/**/*.js'", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc && attw -P", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/get-proto.git" + }, + "keywords": [ + "get", + "proto", + "prototype", + "getPrototypeOf", + "[[Prototype]]" + ], + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/get-proto/issues" + }, + "homepage": "https://github.com/ljharb/get-proto#readme", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.2", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.3", + "@types/tape": "^5.8.0", + "auto-changelog": "^2.5.0", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "engines": { + "node": ">= 0.4" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "testling": { + "files": "test/index.js" + } +} diff --git a/node_modules/get-proto/test/index.js b/node_modules/get-proto/test/index.js new file mode 100644 index 0000000..5a2ece2 --- /dev/null +++ b/node_modules/get-proto/test/index.js @@ -0,0 +1,68 @@ +'use strict'; + +var test = require('tape'); + +var getProto = require('../'); + +test('getProto', function (t) { + t.equal(typeof getProto, 'function', 'is a function'); + + t.test('can get', { skip: !getProto }, function (st) { + if (getProto) { // TS doesn't understand tape's skip + var proto = { b: 2 }; + st.equal(getProto(proto), Object.prototype, 'proto: returns the [[Prototype]]'); + + st.test('nullish value', function (s2t) { + // @ts-expect-error + s2t['throws'](function () { return getProto(undefined); }, TypeError, 'undefined is not an object'); + // @ts-expect-error + s2t['throws'](function () { return getProto(null); }, TypeError, 'null is not an object'); + s2t.end(); + }); + + // @ts-expect-error + st['throws'](function () { getProto(true); }, 'throws for true'); + // @ts-expect-error + st['throws'](function () { getProto(false); }, 'throws for false'); + // @ts-expect-error + st['throws'](function () { getProto(42); }, 'throws for 42'); + // @ts-expect-error + st['throws'](function () { getProto(NaN); }, 'throws for NaN'); + // @ts-expect-error + st['throws'](function () { getProto(0); }, 'throws for +0'); + // @ts-expect-error + st['throws'](function () { getProto(-0); }, 'throws for -0'); + // @ts-expect-error + st['throws'](function () { getProto(Infinity); }, 'throws for โˆž'); + // @ts-expect-error + st['throws'](function () { getProto(-Infinity); }, 'throws for -โˆž'); + // @ts-expect-error + st['throws'](function () { getProto(''); }, 'throws for empty string'); + // @ts-expect-error + st['throws'](function () { getProto('foo'); }, 'throws for non-empty string'); + st.equal(getProto(/a/g), RegExp.prototype); + st.equal(getProto(new Date()), Date.prototype); + st.equal(getProto(function () {}), Function.prototype); + st.equal(getProto([]), Array.prototype); + st.equal(getProto({}), Object.prototype); + + var nullObject = { __proto__: null }; + if ('toString' in nullObject) { + st.comment('no null objects in this engine'); + st.equal(getProto(nullObject), Object.prototype, '"null" object has Object.prototype as [[Prototype]]'); + } else { + st.equal(getProto(nullObject), null, 'null object has null [[Prototype]]'); + } + } + + st.end(); + }); + + t.test('can not get', { skip: !!getProto }, function (st) { + st.equal(getProto, null); + + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/get-proto/tsconfig.json b/node_modules/get-proto/tsconfig.json new file mode 100644 index 0000000..60fb90e --- /dev/null +++ b/node_modules/get-proto/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + //"target": "es2021", + }, + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/gopd/.eslintrc b/node_modules/gopd/.eslintrc new file mode 100644 index 0000000..e2550c0 --- /dev/null +++ b/node_modules/gopd/.eslintrc @@ -0,0 +1,16 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "func-style": [2, "declaration"], + "id-length": 0, + "multiline-comment-style": 0, + "new-cap": [2, { + "capIsNewExceptions": [ + "GetIntrinsic", + ], + }], + }, +} diff --git a/node_modules/gopd/.github/FUNDING.yml b/node_modules/gopd/.github/FUNDING.yml new file mode 100644 index 0000000..94a44a8 --- /dev/null +++ b/node_modules/gopd/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/gopd +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/gopd/CHANGELOG.md b/node_modules/gopd/CHANGELOG.md new file mode 100644 index 0000000..87f5727 --- /dev/null +++ b/node_modules/gopd/CHANGELOG.md @@ -0,0 +1,45 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.2.0](https://github.com/ljharb/gopd/compare/v1.1.0...v1.2.0) - 2024-12-03 + +### Commits + +- [New] add `gOPD` entry point; remove `get-intrinsic` [`5b61232`](https://github.com/ljharb/gopd/commit/5b61232dedea4591a314bcf16101b1961cee024e) + +## [v1.1.0](https://github.com/ljharb/gopd/compare/v1.0.1...v1.1.0) - 2024-11-29 + +### Commits + +- [New] add types [`f585e39`](https://github.com/ljharb/gopd/commit/f585e397886d270e4ba84e53d226e4f9ca2eb0e6) +- [Dev Deps] update `@ljharb/eslint-config`, `auto-changelog`, `tape` [`0b8e4fd`](https://github.com/ljharb/gopd/commit/0b8e4fded64397a7726a9daa144a6cc9a5e2edfa) +- [Dev Deps] update `aud`, `npmignore`, `tape` [`48378b2`](https://github.com/ljharb/gopd/commit/48378b2443f09a4f7efbd0fb6c3ee845a6cabcf3) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `tape` [`78099ee`](https://github.com/ljharb/gopd/commit/78099eeed41bfdc134c912280483689cc8861c31) +- [Tests] replace `aud` with `npm audit` [`4e0d0ac`](https://github.com/ljharb/gopd/commit/4e0d0ac47619d24a75318a8e1f543ee04b2a2632) +- [meta] add missing `engines.node` [`1443316`](https://github.com/ljharb/gopd/commit/14433165d07835c680155b3dfd62d9217d735eca) +- [Deps] update `get-intrinsic` [`eee5f51`](https://github.com/ljharb/gopd/commit/eee5f51769f3dbaf578b70e2a3199116b01aa670) +- [Deps] update `get-intrinsic` [`550c378`](https://github.com/ljharb/gopd/commit/550c3780e3a9c77b62565712a001b4ed64ea61f5) +- [Dev Deps] add missing peer dep [`8c2ecf8`](https://github.com/ljharb/gopd/commit/8c2ecf848122e4e30abfc5b5086fb48b390dce75) + +## [v1.0.1](https://github.com/ljharb/gopd/compare/v1.0.0...v1.0.1) - 2022-11-01 + +### Commits + +- [Fix] actually export gOPD instead of dP [`4b624bf`](https://github.com/ljharb/gopd/commit/4b624bfbeff788c5e3ff16d9443a83627847234f) + +## v1.0.0 - 2022-11-01 + +### Commits + +- Initial implementation, tests, readme [`0911e01`](https://github.com/ljharb/gopd/commit/0911e012cd642092bd88b732c161c58bf4f20bea) +- Initial commit [`b84e33f`](https://github.com/ljharb/gopd/commit/b84e33f5808a805ac57ff88d4247ad935569acbe) +- [actions] add reusable workflows [`12ae28a`](https://github.com/ljharb/gopd/commit/12ae28ae5f50f86e750215b6e2188901646d0119) +- npm init [`280118b`](https://github.com/ljharb/gopd/commit/280118badb45c80b4483836b5cb5315bddf6e582) +- [meta] add `auto-changelog` [`bb78de5`](https://github.com/ljharb/gopd/commit/bb78de5639a180747fb290c28912beaaf1615709) +- [meta] create FUNDING.yml; add `funding` in package.json [`11c22e6`](https://github.com/ljharb/gopd/commit/11c22e6355bb01f24e7fac4c9bb3055eb5b25002) +- [meta] use `npmignore` to autogenerate an npmignore file [`4f4537a`](https://github.com/ljharb/gopd/commit/4f4537a843b39f698c52f072845092e6fca345bb) +- Only apps should have lockfiles [`c567022`](https://github.com/ljharb/gopd/commit/c567022a18573aa7951cf5399445d9840e23e98b) diff --git a/node_modules/gopd/LICENSE b/node_modules/gopd/LICENSE new file mode 100644 index 0000000..6abfe14 --- /dev/null +++ b/node_modules/gopd/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2022 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/gopd/README.md b/node_modules/gopd/README.md new file mode 100644 index 0000000..784e56a --- /dev/null +++ b/node_modules/gopd/README.md @@ -0,0 +1,40 @@ +# gopd [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +`Object.getOwnPropertyDescriptor`, but accounts for IE's broken implementation. + +## Usage + +```javascript +var gOPD = require('gopd'); +var assert = require('assert'); + +if (gOPD) { + assert.equal(typeof gOPD, 'function', 'descriptors supported'); + // use gOPD like Object.getOwnPropertyDescriptor here +} else { + assert.ok(!gOPD, 'descriptors not supported'); +} +``` + +[package-url]: https://npmjs.org/package/gopd +[npm-version-svg]: https://versionbadg.es/ljharb/gopd.svg +[deps-svg]: https://david-dm.org/ljharb/gopd.svg +[deps-url]: https://david-dm.org/ljharb/gopd +[dev-deps-svg]: https://david-dm.org/ljharb/gopd/dev-status.svg +[dev-deps-url]: https://david-dm.org/ljharb/gopd#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/gopd.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/gopd.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/gopd.svg +[downloads-url]: https://npm-stat.com/charts.html?package=gopd +[codecov-image]: https://codecov.io/gh/ljharb/gopd/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/ljharb/gopd/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/ljharb/gopd +[actions-url]: https://github.com/ljharb/gopd/actions diff --git a/node_modules/gopd/gOPD.d.ts b/node_modules/gopd/gOPD.d.ts new file mode 100644 index 0000000..def48a3 --- /dev/null +++ b/node_modules/gopd/gOPD.d.ts @@ -0,0 +1 @@ +export = Object.getOwnPropertyDescriptor; diff --git a/node_modules/gopd/gOPD.js b/node_modules/gopd/gOPD.js new file mode 100644 index 0000000..cf9616c --- /dev/null +++ b/node_modules/gopd/gOPD.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./gOPD')} */ +module.exports = Object.getOwnPropertyDescriptor; diff --git a/node_modules/gopd/index.d.ts b/node_modules/gopd/index.d.ts new file mode 100644 index 0000000..e228065 --- /dev/null +++ b/node_modules/gopd/index.d.ts @@ -0,0 +1,5 @@ +declare function gOPD(obj: O, prop: K): PropertyDescriptor | undefined; + +declare const fn: typeof gOPD | undefined | null; + +export = fn; \ No newline at end of file diff --git a/node_modules/gopd/index.js b/node_modules/gopd/index.js new file mode 100644 index 0000000..a4081b0 --- /dev/null +++ b/node_modules/gopd/index.js @@ -0,0 +1,15 @@ +'use strict'; + +/** @type {import('.')} */ +var $gOPD = require('./gOPD'); + +if ($gOPD) { + try { + $gOPD([], 'length'); + } catch (e) { + // IE 8 has a broken gOPD + $gOPD = null; + } +} + +module.exports = $gOPD; diff --git a/node_modules/gopd/package.json b/node_modules/gopd/package.json new file mode 100644 index 0000000..01c5ffa --- /dev/null +++ b/node_modules/gopd/package.json @@ -0,0 +1,77 @@ +{ + "name": "gopd", + "version": "1.2.0", + "description": "`Object.getOwnPropertyDescriptor`, but accounts for IE's broken implementation.", + "main": "index.js", + "exports": { + ".": "./index.js", + "./gOPD": "./gOPD.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prelint": "tsc -p . && attw -P", + "lint": "eslint --ext=js,mjs .", + "postlint": "evalmd README.md", + "pretest": "npm run lint", + "tests-only": "tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "npx npm@'>=10.2' audit --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/ljharb/gopd.git" + }, + "keywords": [ + "ecmascript", + "javascript", + "getownpropertydescriptor", + "property", + "descriptor" + ], + "author": "Jordan Harband ", + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/gopd/issues" + }, + "homepage": "https://github.com/ljharb/gopd#readme", + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.0", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.0", + "@types/tape": "^5.6.5", + "auto-changelog": "^2.5.0", + "encoding": "^0.1.13", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/node_modules/gopd/test/index.js b/node_modules/gopd/test/index.js new file mode 100644 index 0000000..6f43453 --- /dev/null +++ b/node_modules/gopd/test/index.js @@ -0,0 +1,36 @@ +'use strict'; + +var test = require('tape'); +var gOPD = require('../'); + +test('gOPD', function (t) { + t.test('supported', { skip: !gOPD }, function (st) { + st.equal(typeof gOPD, 'function', 'is a function'); + + var obj = { x: 1 }; + st.ok('x' in obj, 'property exists'); + + // @ts-expect-error TS can't figure out narrowing from `skip` + var desc = gOPD(obj, 'x'); + st.deepEqual( + desc, + { + configurable: true, + enumerable: true, + value: 1, + writable: true + }, + 'descriptor is as expected' + ); + + st.end(); + }); + + t.test('not supported', { skip: !!gOPD }, function (st) { + st.notOk(gOPD, 'is falsy'); + + st.end(); + }); + + t.end(); +}); diff --git a/node_modules/gopd/tsconfig.json b/node_modules/gopd/tsconfig.json new file mode 100644 index 0000000..d9a6668 --- /dev/null +++ b/node_modules/gopd/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "es2021", + }, + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/has-symbols/.eslintrc b/node_modules/has-symbols/.eslintrc new file mode 100644 index 0000000..2d9a66a --- /dev/null +++ b/node_modules/has-symbols/.eslintrc @@ -0,0 +1,11 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "max-statements-per-line": [2, { "max": 2 }], + "no-magic-numbers": 0, + "multiline-comment-style": 0, + } +} diff --git a/node_modules/has-symbols/.github/FUNDING.yml b/node_modules/has-symbols/.github/FUNDING.yml new file mode 100644 index 0000000..04cf87e --- /dev/null +++ b/node_modules/has-symbols/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/has-symbols +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/has-symbols/.nycrc b/node_modules/has-symbols/.nycrc new file mode 100644 index 0000000..bdd626c --- /dev/null +++ b/node_modules/has-symbols/.nycrc @@ -0,0 +1,9 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/has-symbols/CHANGELOG.md b/node_modules/has-symbols/CHANGELOG.md new file mode 100644 index 0000000..cc3cf83 --- /dev/null +++ b/node_modules/has-symbols/CHANGELOG.md @@ -0,0 +1,91 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.1.0](https://github.com/inspect-js/has-symbols/compare/v1.0.3...v1.1.0) - 2024-12-02 + +### Commits + +- [actions] update workflows [`548c0bf`](https://github.com/inspect-js/has-symbols/commit/548c0bf8c9b1235458df7a1c0490b0064647a282) +- [actions] further shard; update action deps [`bec56bb`](https://github.com/inspect-js/has-symbols/commit/bec56bb0fb44b43a786686b944875a3175cf3ff3) +- [meta] use `npmignore` to autogenerate an npmignore file [`ac81032`](https://github.com/inspect-js/has-symbols/commit/ac81032809157e0a079e5264e9ce9b6f1275777e) +- [New] add types [`6469cbf`](https://github.com/inspect-js/has-symbols/commit/6469cbff1866cfe367b2b3d181d9296ec14b2a3d) +- [actions] update rebase action to use reusable workflow [`9c9d4d0`](https://github.com/inspect-js/has-symbols/commit/9c9d4d0d8938e4b267acdf8e421f4e92d1716d72) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`adb5887`](https://github.com/inspect-js/has-symbols/commit/adb5887ca9444849b08beb5caaa9e1d42320cdfb) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `tape` [`13ec198`](https://github.com/inspect-js/has-symbols/commit/13ec198ec80f1993a87710af1606a1970b22c7cb) +- [Dev Deps] update `auto-changelog`, `core-js`, `tape` [`941be52`](https://github.com/inspect-js/has-symbols/commit/941be5248387cab1da72509b22acf3fdb223f057) +- [Tests] replace `aud` with `npm audit` [`74f49e9`](https://github.com/inspect-js/has-symbols/commit/74f49e9a9d17a443020784234a1c53ce765b3559) +- [Dev Deps] update `npmignore` [`9c0ac04`](https://github.com/inspect-js/has-symbols/commit/9c0ac0452a834f4c2a4b54044f2d6a89f17e9a70) +- [Dev Deps] add missing peer dep [`52337a5`](https://github.com/inspect-js/has-symbols/commit/52337a5621cced61f846f2afdab7707a8132cc12) + +## [v1.0.3](https://github.com/inspect-js/has-symbols/compare/v1.0.2...v1.0.3) - 2022-03-01 + +### Commits + +- [actions] use `node/install` instead of `node/run`; use `codecov` action [`518b28f`](https://github.com/inspect-js/has-symbols/commit/518b28f6c5a516cbccae30794e40aa9f738b1693) +- [meta] add `bugs` and `homepage` fields; reorder package.json [`c480b13`](https://github.com/inspect-js/has-symbols/commit/c480b13fd6802b557e1cef9749872cb5fdeef744) +- [actions] reuse common workflows [`01d0ee0`](https://github.com/inspect-js/has-symbols/commit/01d0ee0a8d97c0947f5edb73eb722027a77b2b07) +- [actions] update codecov uploader [`6424ebe`](https://github.com/inspect-js/has-symbols/commit/6424ebe86b2c9c7c3d2e9bd4413a4e4f168cb275) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`dfa7e7f`](https://github.com/inspect-js/has-symbols/commit/dfa7e7ff38b594645d8c8222aab895157fa7e282) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `tape` [`0c8d436`](https://github.com/inspect-js/has-symbols/commit/0c8d43685c45189cea9018191d4fd7eca91c9d02) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`9026554`](https://github.com/inspect-js/has-symbols/commit/902655442a1bf88e72b42345494ef0c60f5d36ab) +- [readme] add actions and codecov badges [`eaa9682`](https://github.com/inspect-js/has-symbols/commit/eaa9682f990f481d3acf7a1c7600bec36f7b3adc) +- [Dev Deps] update `eslint`, `tape` [`bc7a3ba`](https://github.com/inspect-js/has-symbols/commit/bc7a3ba46f27b7743f8a2579732d59d1b9ac791e) +- [Dev Deps] update `eslint`, `auto-changelog` [`0ace00a`](https://github.com/inspect-js/has-symbols/commit/0ace00af08a88cdd1e6ce0d60357d941c60c2d9f) +- [meta] use `prepublishOnly` script for npm 7+ [`093f72b`](https://github.com/inspect-js/has-symbols/commit/093f72bc2b0ed00c781f444922a5034257bf561d) +- [Tests] test on all 16 minors [`9b80d3d`](https://github.com/inspect-js/has-symbols/commit/9b80d3d9102529f04c20ec5b1fcc6e38426c6b03) + +## [v1.0.2](https://github.com/inspect-js/has-symbols/compare/v1.0.1...v1.0.2) - 2021-02-27 + +### Fixed + +- [Fix] use a universal way to get the original Symbol [`#11`](https://github.com/inspect-js/has-symbols/issues/11) + +### Commits + +- [Tests] migrate tests to Github Actions [`90ae798`](https://github.com/inspect-js/has-symbols/commit/90ae79820bdfe7bc703d67f5f3c5e205f98556d3) +- [meta] do not publish github action workflow files [`29e60a1`](https://github.com/inspect-js/has-symbols/commit/29e60a1b7c25c7f1acf7acff4a9320d0d10c49b4) +- [Tests] run `nyc` on all tests [`8476b91`](https://github.com/inspect-js/has-symbols/commit/8476b915650d360915abe2522505abf4b0e8f0ae) +- [readme] fix repo URLs, remove defunct badges [`126288e`](https://github.com/inspect-js/has-symbols/commit/126288ecc1797c0a40247a6b78bcb2e0bc5d7036) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `core-js`, `get-own-property-symbols` [`d84bdfa`](https://github.com/inspect-js/has-symbols/commit/d84bdfa48ac5188abbb4904b42614cd6c030940a) +- [Tests] fix linting errors [`0df3070`](https://github.com/inspect-js/has-symbols/commit/0df3070b981b6c9f2ee530c09189a7f5c6def839) +- [actions] add "Allow Edits" workflow [`1e6bc29`](https://github.com/inspect-js/has-symbols/commit/1e6bc29b188f32b9648657b07eda08504be5aa9c) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `tape` [`36cea2a`](https://github.com/inspect-js/has-symbols/commit/36cea2addd4e6ec435f35a2656b4e9ef82498e9b) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`1278338`](https://github.com/inspect-js/has-symbols/commit/127833801865fbc2cc8979beb9ca869c7bfe8222) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `tape` [`1493254`](https://github.com/inspect-js/has-symbols/commit/1493254eda13db5fb8fc5e4a3e8324b3d196029d) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `core-js` [`b090bf2`](https://github.com/inspect-js/has-symbols/commit/b090bf214d3679a30edc1e2d729d466ab5183e1d) +- [actions] switch Automatic Rebase workflow to `pull_request_target` event [`4addb7a`](https://github.com/inspect-js/has-symbols/commit/4addb7ab4dc73f927ae99928d68817554fc21dc0) +- [Dev Deps] update `auto-changelog`, `tape` [`81d0baf`](https://github.com/inspect-js/has-symbols/commit/81d0baf3816096a89a8558e8043895f7a7d10d8b) +- [Dev Deps] update `auto-changelog`; add `aud` [`1a4e561`](https://github.com/inspect-js/has-symbols/commit/1a4e5612c25d91c3a03d509721d02630bc4fe3da) +- [readme] remove unused testling URLs [`3000941`](https://github.com/inspect-js/has-symbols/commit/3000941f958046e923ed8152edb1ef4a599e6fcc) +- [Tests] only audit prod deps [`692e974`](https://github.com/inspect-js/has-symbols/commit/692e9743c912410e9440207631a643a34b4741a1) +- [Dev Deps] update `@ljharb/eslint-config` [`51c946c`](https://github.com/inspect-js/has-symbols/commit/51c946c7f6baa793ec5390bb5a45cdce16b4ba76) + +## [v1.0.1](https://github.com/inspect-js/has-symbols/compare/v1.0.0...v1.0.1) - 2019-11-16 + +### Commits + +- [Tests] use shared travis-ci configs [`ce396c9`](https://github.com/inspect-js/has-symbols/commit/ce396c9419ff11c43d0da5d05cdbb79f7fb42229) +- [Tests] up to `node` `v12.4`, `v11.15`, `v10.15`, `v9.11`, `v8.15`, `v7.10`, `v6.17`, `v4.9`; use `nvm install-latest-npm` [`0690732`](https://github.com/inspect-js/has-symbols/commit/0690732801f47ab429f39ba1962f522d5c462d6b) +- [meta] add `auto-changelog` [`2163d0b`](https://github.com/inspect-js/has-symbols/commit/2163d0b7f36343076b8f947cd1667dd1750f26fc) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `core-js`, `safe-publish-latest`, `tape` [`8e0951f`](https://github.com/inspect-js/has-symbols/commit/8e0951f1a7a2e52068222b7bb73511761e6e4d9c) +- [actions] add automatic rebasing / merge commit blocking [`b09cdb7`](https://github.com/inspect-js/has-symbols/commit/b09cdb7cd7ee39e7a769878f56e2d6066f5ccd1d) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `core-js`, `get-own-property-symbols`, `tape` [`1dd42cd`](https://github.com/inspect-js/has-symbols/commit/1dd42cd86183ed0c50f99b1062345c458babca91) +- [meta] create FUNDING.yml [`aa57a17`](https://github.com/inspect-js/has-symbols/commit/aa57a17b19708906d1927f821ea8e73394d84ca4) +- Only apps should have lockfiles [`a2d8bea`](https://github.com/inspect-js/has-symbols/commit/a2d8bea23a97d15c09eaf60f5b107fcf9a4d57aa) +- [Tests] use `npx aud` instead of `nsp` or `npm audit` with hoops [`9e96cb7`](https://github.com/inspect-js/has-symbols/commit/9e96cb783746cbed0c10ef78e599a8eaa7ebe193) +- [meta] add `funding` field [`a0b32cf`](https://github.com/inspect-js/has-symbols/commit/a0b32cf68e803f963c1639b6d47b0a9d6440bab0) +- [Dev Deps] update `safe-publish-latest` [`cb9f0a5`](https://github.com/inspect-js/has-symbols/commit/cb9f0a521a3a1790f1064d437edd33bb6c3d6af0) + +## v1.0.0 - 2016-09-19 + +### Commits + +- Tests. [`ecb6eb9`](https://github.com/inspect-js/has-symbols/commit/ecb6eb934e4883137f3f93b965ba5e0a98df430d) +- package.json [`88a337c`](https://github.com/inspect-js/has-symbols/commit/88a337cee0864a0da35f5d19e69ff0ef0150e46a) +- Initial commit [`42e1e55`](https://github.com/inspect-js/has-symbols/commit/42e1e5502536a2b8ac529c9443984acd14836b1c) +- Initial implementation. [`33f5cc6`](https://github.com/inspect-js/has-symbols/commit/33f5cc6cdff86e2194b081ee842bfdc63caf43fb) +- read me [`01f1170`](https://github.com/inspect-js/has-symbols/commit/01f1170188ff7cb1558aa297f6ba5b516c6d7b0c) diff --git a/node_modules/has-symbols/LICENSE b/node_modules/has-symbols/LICENSE new file mode 100644 index 0000000..df31cbf --- /dev/null +++ b/node_modules/has-symbols/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2016 Jordan Harband + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/has-symbols/README.md b/node_modules/has-symbols/README.md new file mode 100644 index 0000000..33905f0 --- /dev/null +++ b/node_modules/has-symbols/README.md @@ -0,0 +1,46 @@ +# has-symbols [![Version Badge][2]][1] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][5]][6] +[![dev dependency status][7]][8] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][11]][1] + +Determine if the JS environment has Symbol support. Supports spec, or shams. + +## Example + +```js +var hasSymbols = require('has-symbols'); + +hasSymbols() === true; // if the environment has native Symbol support. Not polyfillable, not forgeable. + +var hasSymbolsKinda = require('has-symbols/shams'); +hasSymbolsKinda() === true; // if the environment has a Symbol sham that mostly follows the spec. +``` + +## Supported Symbol shams + - get-own-property-symbols [npm](https://www.npmjs.com/package/get-own-property-symbols) | [github](https://github.com/WebReflection/get-own-property-symbols) + - core-js [npm](https://www.npmjs.com/package/core-js) | [github](https://github.com/zloirock/core-js) + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[1]: https://npmjs.org/package/has-symbols +[2]: https://versionbadg.es/inspect-js/has-symbols.svg +[5]: https://david-dm.org/inspect-js/has-symbols.svg +[6]: https://david-dm.org/inspect-js/has-symbols +[7]: https://david-dm.org/inspect-js/has-symbols/dev-status.svg +[8]: https://david-dm.org/inspect-js/has-symbols#info=devDependencies +[11]: https://nodei.co/npm/has-symbols.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/has-symbols.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/has-symbols.svg +[downloads-url]: https://npm-stat.com/charts.html?package=has-symbols +[codecov-image]: https://codecov.io/gh/inspect-js/has-symbols/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/inspect-js/has-symbols/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-symbols +[actions-url]: https://github.com/inspect-js/has-symbols/actions diff --git a/node_modules/has-symbols/index.d.ts b/node_modules/has-symbols/index.d.ts new file mode 100644 index 0000000..9b98595 --- /dev/null +++ b/node_modules/has-symbols/index.d.ts @@ -0,0 +1,3 @@ +declare function hasNativeSymbols(): boolean; + +export = hasNativeSymbols; \ No newline at end of file diff --git a/node_modules/has-symbols/index.js b/node_modules/has-symbols/index.js new file mode 100644 index 0000000..fa65265 --- /dev/null +++ b/node_modules/has-symbols/index.js @@ -0,0 +1,14 @@ +'use strict'; + +var origSymbol = typeof Symbol !== 'undefined' && Symbol; +var hasSymbolSham = require('./shams'); + +/** @type {import('.')} */ +module.exports = function hasNativeSymbols() { + if (typeof origSymbol !== 'function') { return false; } + if (typeof Symbol !== 'function') { return false; } + if (typeof origSymbol('foo') !== 'symbol') { return false; } + if (typeof Symbol('bar') !== 'symbol') { return false; } + + return hasSymbolSham(); +}; diff --git a/node_modules/has-symbols/package.json b/node_modules/has-symbols/package.json new file mode 100644 index 0000000..d835e20 --- /dev/null +++ b/node_modules/has-symbols/package.json @@ -0,0 +1,111 @@ +{ + "name": "has-symbols", + "version": "1.1.0", + "description": "Determine if the JS environment has Symbol support. Supports spec, or shams.", + "main": "index.js", + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "pretest": "npm run --silent lint", + "test": "npm run tests-only", + "posttest": "npx npm@'>=10.2' audit --production", + "tests-only": "npm run test:stock && npm run test:shams", + "test:stock": "nyc node test", + "test:staging": "nyc node --harmony --es-staging test", + "test:shams": "npm run --silent test:shams:getownpropertysymbols && npm run --silent test:shams:corejs", + "test:shams:corejs": "nyc node test/shams/core-js.js", + "test:shams:getownpropertysymbols": "nyc node test/shams/get-own-property-symbols.js", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc -p . && attw -P", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git://github.com/inspect-js/has-symbols.git" + }, + "keywords": [ + "Symbol", + "symbols", + "typeof", + "sham", + "polyfill", + "native", + "core-js", + "ES6" + ], + "author": { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + }, + "contributors": [ + { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + } + ], + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "license": "MIT", + "bugs": { + "url": "https://github.com/ljharb/has-symbols/issues" + }, + "homepage": "https://github.com/ljharb/has-symbols#readme", + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.0", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.0", + "@types/core-js": "^2.5.8", + "@types/tape": "^5.6.5", + "auto-changelog": "^2.5.0", + "core-js": "^2.6.12", + "encoding": "^0.1.13", + "eslint": "=8.8.0", + "get-own-property-symbols": "^0.9.5", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "testling": { + "files": "test/index.js", + "browsers": [ + "iexplore/6.0..latest", + "firefox/3.0..6.0", + "firefox/15.0..latest", + "firefox/nightly", + "chrome/4.0..10.0", + "chrome/20.0..latest", + "chrome/canary", + "opera/10.0..latest", + "opera/next", + "safari/4.0..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2" + ] + }, + "engines": { + "node": ">= 0.4" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows", + "types" + ] + } +} diff --git a/node_modules/has-symbols/shams.d.ts b/node_modules/has-symbols/shams.d.ts new file mode 100644 index 0000000..8d0bf24 --- /dev/null +++ b/node_modules/has-symbols/shams.d.ts @@ -0,0 +1,3 @@ +declare function hasSymbolShams(): boolean; + +export = hasSymbolShams; \ No newline at end of file diff --git a/node_modules/has-symbols/shams.js b/node_modules/has-symbols/shams.js new file mode 100644 index 0000000..f97b474 --- /dev/null +++ b/node_modules/has-symbols/shams.js @@ -0,0 +1,45 @@ +'use strict'; + +/** @type {import('./shams')} */ +/* eslint complexity: [2, 18], max-statements: [2, 33] */ +module.exports = function hasSymbols() { + if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; } + if (typeof Symbol.iterator === 'symbol') { return true; } + + /** @type {{ [k in symbol]?: unknown }} */ + var obj = {}; + var sym = Symbol('test'); + var symObj = Object(sym); + if (typeof sym === 'string') { return false; } + + if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; } + if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; } + + // temp disabled per https://github.com/ljharb/object.assign/issues/17 + // if (sym instanceof Symbol) { return false; } + // temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4 + // if (!(symObj instanceof Symbol)) { return false; } + + // if (typeof Symbol.prototype.toString !== 'function') { return false; } + // if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; } + + var symVal = 42; + obj[sym] = symVal; + for (var _ in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop + if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; } + + if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; } + + var syms = Object.getOwnPropertySymbols(obj); + if (syms.length !== 1 || syms[0] !== sym) { return false; } + + if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; } + + if (typeof Object.getOwnPropertyDescriptor === 'function') { + // eslint-disable-next-line no-extra-parens + var descriptor = /** @type {PropertyDescriptor} */ (Object.getOwnPropertyDescriptor(obj, sym)); + if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; } + } + + return true; +}; diff --git a/node_modules/has-symbols/test/index.js b/node_modules/has-symbols/test/index.js new file mode 100644 index 0000000..352129c --- /dev/null +++ b/node_modules/has-symbols/test/index.js @@ -0,0 +1,22 @@ +'use strict'; + +var test = require('tape'); +var hasSymbols = require('../'); +var runSymbolTests = require('./tests'); + +test('interface', function (t) { + t.equal(typeof hasSymbols, 'function', 'is a function'); + t.equal(typeof hasSymbols(), 'boolean', 'returns a boolean'); + t.end(); +}); + +test('Symbols are supported', { skip: !hasSymbols() }, function (t) { + runSymbolTests(t); + t.end(); +}); + +test('Symbols are not supported', { skip: hasSymbols() }, function (t) { + t.equal(typeof Symbol, 'undefined', 'global Symbol is undefined'); + t.equal(typeof Object.getOwnPropertySymbols, 'undefined', 'Object.getOwnPropertySymbols does not exist'); + t.end(); +}); diff --git a/node_modules/has-symbols/test/shams/core-js.js b/node_modules/has-symbols/test/shams/core-js.js new file mode 100644 index 0000000..1a29024 --- /dev/null +++ b/node_modules/has-symbols/test/shams/core-js.js @@ -0,0 +1,29 @@ +'use strict'; + +var test = require('tape'); + +if (typeof Symbol === 'function' && typeof Symbol() === 'symbol') { + test('has native Symbol support', function (t) { + t.equal(typeof Symbol, 'function'); + t.equal(typeof Symbol(), 'symbol'); + t.end(); + }); + // @ts-expect-error TS is stupid and doesn't know about top level return + return; +} + +var hasSymbols = require('../../shams'); + +test('polyfilled Symbols', function (t) { + /* eslint-disable global-require */ + t.equal(hasSymbols(), false, 'hasSymbols is false before polyfilling'); + require('core-js/fn/symbol'); + require('core-js/fn/symbol/to-string-tag'); + + require('../tests')(t); + + var hasSymbolsAfter = hasSymbols(); + t.equal(hasSymbolsAfter, true, 'hasSymbols is true after polyfilling'); + /* eslint-enable global-require */ + t.end(); +}); diff --git a/node_modules/has-symbols/test/shams/get-own-property-symbols.js b/node_modules/has-symbols/test/shams/get-own-property-symbols.js new file mode 100644 index 0000000..e0296f8 --- /dev/null +++ b/node_modules/has-symbols/test/shams/get-own-property-symbols.js @@ -0,0 +1,29 @@ +'use strict'; + +var test = require('tape'); + +if (typeof Symbol === 'function' && typeof Symbol() === 'symbol') { + test('has native Symbol support', function (t) { + t.equal(typeof Symbol, 'function'); + t.equal(typeof Symbol(), 'symbol'); + t.end(); + }); + // @ts-expect-error TS is stupid and doesn't know about top level return + return; +} + +var hasSymbols = require('../../shams'); + +test('polyfilled Symbols', function (t) { + /* eslint-disable global-require */ + t.equal(hasSymbols(), false, 'hasSymbols is false before polyfilling'); + + require('get-own-property-symbols'); + + require('../tests')(t); + + var hasSymbolsAfter = hasSymbols(); + t.equal(hasSymbolsAfter, true, 'hasSymbols is true after polyfilling'); + /* eslint-enable global-require */ + t.end(); +}); diff --git a/node_modules/has-symbols/test/tests.js b/node_modules/has-symbols/test/tests.js new file mode 100644 index 0000000..66a2cb8 --- /dev/null +++ b/node_modules/has-symbols/test/tests.js @@ -0,0 +1,58 @@ +'use strict'; + +/** @type {(t: import('tape').Test) => false | void} */ +// eslint-disable-next-line consistent-return +module.exports = function runSymbolTests(t) { + t.equal(typeof Symbol, 'function', 'global Symbol is a function'); + + if (typeof Symbol !== 'function') { return false; } + + t.notEqual(Symbol(), Symbol(), 'two symbols are not equal'); + + /* + t.equal( + Symbol.prototype.toString.call(Symbol('foo')), + Symbol.prototype.toString.call(Symbol('foo')), + 'two symbols with the same description stringify the same' + ); + */ + + /* + var foo = Symbol('foo'); + + t.notEqual( + String(foo), + String(Symbol('bar')), + 'two symbols with different descriptions do not stringify the same' + ); + */ + + t.equal(typeof Symbol.prototype.toString, 'function', 'Symbol#toString is a function'); + // t.equal(String(foo), Symbol.prototype.toString.call(foo), 'Symbol#toString equals String of the same symbol'); + + t.equal(typeof Object.getOwnPropertySymbols, 'function', 'Object.getOwnPropertySymbols is a function'); + + /** @type {{ [k in symbol]?: unknown }} */ + var obj = {}; + var sym = Symbol('test'); + var symObj = Object(sym); + t.notEqual(typeof sym, 'string', 'Symbol is not a string'); + t.equal(Object.prototype.toString.call(sym), '[object Symbol]', 'symbol primitive Object#toStrings properly'); + t.equal(Object.prototype.toString.call(symObj), '[object Symbol]', 'symbol primitive Object#toStrings properly'); + + var symVal = 42; + obj[sym] = symVal; + // eslint-disable-next-line no-restricted-syntax, no-unused-vars + for (var _ in obj) { t.fail('symbol property key was found in for..in of object'); } + + t.deepEqual(Object.keys(obj), [], 'no enumerable own keys on symbol-valued object'); + t.deepEqual(Object.getOwnPropertyNames(obj), [], 'no own names on symbol-valued object'); + t.deepEqual(Object.getOwnPropertySymbols(obj), [sym], 'one own symbol on symbol-valued object'); + t.equal(Object.prototype.propertyIsEnumerable.call(obj, sym), true, 'symbol is enumerable'); + t.deepEqual(Object.getOwnPropertyDescriptor(obj, sym), { + configurable: true, + enumerable: true, + value: 42, + writable: true + }, 'property descriptor is correct'); +}; diff --git a/node_modules/has-symbols/tsconfig.json b/node_modules/has-symbols/tsconfig.json new file mode 100644 index 0000000..ba99af4 --- /dev/null +++ b/node_modules/has-symbols/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "@ljharb/tsconfig", + "compilerOptions": { + "target": "ES2021", + "maxNodeModuleJsDepth": 0, + }, + "exclude": [ + "coverage" + ] +} diff --git a/node_modules/has-tostringtag/.eslintrc b/node_modules/has-tostringtag/.eslintrc new file mode 100644 index 0000000..3b5d9e9 --- /dev/null +++ b/node_modules/has-tostringtag/.eslintrc @@ -0,0 +1,5 @@ +{ + "root": true, + + "extends": "@ljharb", +} diff --git a/node_modules/has-tostringtag/.github/FUNDING.yml b/node_modules/has-tostringtag/.github/FUNDING.yml new file mode 100644 index 0000000..7a450e7 --- /dev/null +++ b/node_modules/has-tostringtag/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/has-tostringtag +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2'] diff --git a/node_modules/has-tostringtag/.nycrc b/node_modules/has-tostringtag/.nycrc new file mode 100644 index 0000000..1826526 --- /dev/null +++ b/node_modules/has-tostringtag/.nycrc @@ -0,0 +1,13 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "lines": 86, + "statements": 85.93, + "functions": 82.43, + "branches": 76.06, + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/has-tostringtag/CHANGELOG.md b/node_modules/has-tostringtag/CHANGELOG.md new file mode 100644 index 0000000..eb186ec --- /dev/null +++ b/node_modules/has-tostringtag/CHANGELOG.md @@ -0,0 +1,42 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.0.2](https://github.com/inspect-js/has-tostringtag/compare/v1.0.1...v1.0.2) - 2024-02-01 + +### Fixed + +- [Fix] move `has-symbols` back to prod deps [`#3`](https://github.com/inspect-js/has-tostringtag/issues/3) + +## [v1.0.1](https://github.com/inspect-js/has-tostringtag/compare/v1.0.0...v1.0.1) - 2024-02-01 + +### Commits + +- [patch] add types [`9276414`](https://github.com/inspect-js/has-tostringtag/commit/9276414b22fab3eeb234688841722c4be113201f) +- [meta] use `npmignore` to autogenerate an npmignore file [`5c0dcd1`](https://github.com/inspect-js/has-tostringtag/commit/5c0dcd1ff66419562a30d1fd88b966cc36bce5fc) +- [actions] reuse common workflows [`dee9509`](https://github.com/inspect-js/has-tostringtag/commit/dee950904ab5719b62cf8d73d2ac950b09093266) +- [actions] update codecov uploader [`b8cb3a0`](https://github.com/inspect-js/has-tostringtag/commit/b8cb3a0b8ffbb1593012c4c2daa45fb25642825d) +- [Tests] generate coverage [`be5b288`](https://github.com/inspect-js/has-tostringtag/commit/be5b28889e2735cdbcef387f84c2829995f2f05e) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `safe-publish-latest`, `tape` [`69a0827`](https://github.com/inspect-js/has-tostringtag/commit/69a0827974e9b877b2c75b70b057555da8f25a65) +- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `tape` [`4c9e210`](https://github.com/inspect-js/has-tostringtag/commit/4c9e210a5682f0557a3235d36b68ce809d7fb825) +- [actions] update rebase action to use reusable workflow [`ca8dcd3`](https://github.com/inspect-js/has-tostringtag/commit/ca8dcd3a6f3f5805d7e3fd461b654aedba0946e7) +- [Dev Deps] update `@ljharb/eslint-config`, `aud`, `npmignore`, `tape` [`07f3eaf`](https://github.com/inspect-js/has-tostringtag/commit/07f3eafa45dd98208c94479737da77f9a69b94c4) +- [Deps] update `has-symbols` [`999e009`](https://github.com/inspect-js/has-tostringtag/commit/999e0095a7d1749a58f55472ec8bf8108cdfdcf3) +- [Tests] remove staging tests since they fail on modern node [`9d9526b`](https://github.com/inspect-js/has-tostringtag/commit/9d9526b1dc1ca7f2292b52efda4c3d857b0e39bd) + +## v1.0.0 - 2021-08-05 + +### Commits + +- Tests [`6b6f573`](https://github.com/inspect-js/has-tostringtag/commit/6b6f5734dc2058badb300ff0783efdad95fe1a65) +- Initial commit [`2f8190e`](https://github.com/inspect-js/has-tostringtag/commit/2f8190e799fac32ba9b95a076c0255e01d7ce475) +- [meta] do not publish github action workflow files [`6e08cc4`](https://github.com/inspect-js/has-tostringtag/commit/6e08cc4e0fea7ec71ef66e70734b2af2c4a8b71b) +- readme [`94bed6c`](https://github.com/inspect-js/has-tostringtag/commit/94bed6c9560cbbfda034f8d6c260bb7b0db33c1a) +- npm init [`be67840`](https://github.com/inspect-js/has-tostringtag/commit/be67840ab92ee7adb98bcc65261975543f815fa5) +- Implementation [`c4914ec`](https://github.com/inspect-js/has-tostringtag/commit/c4914ecc51ddee692c85b471ae0a5d8123030fbf) +- [meta] use `auto-changelog` [`4aaf768`](https://github.com/inspect-js/has-tostringtag/commit/4aaf76895ae01d7b739f2b19f967ef2372506cd7) +- Only apps should have lockfiles [`bc4d99e`](https://github.com/inspect-js/has-tostringtag/commit/bc4d99e4bf494afbaa235c5f098df6e642edf724) +- [meta] add `safe-publish-latest` [`6523c05`](https://github.com/inspect-js/has-tostringtag/commit/6523c05c9b87140f3ae74c9daf91633dd9ff4e1f) diff --git a/node_modules/has-tostringtag/LICENSE b/node_modules/has-tostringtag/LICENSE new file mode 100644 index 0000000..7948bc0 --- /dev/null +++ b/node_modules/has-tostringtag/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Inspect JS + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/has-tostringtag/README.md b/node_modules/has-tostringtag/README.md new file mode 100644 index 0000000..67a5e92 --- /dev/null +++ b/node_modules/has-tostringtag/README.md @@ -0,0 +1,46 @@ +# has-tostringtag [![Version Badge][2]][1] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![dependency status][5]][6] +[![dev dependency status][7]][8] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][11]][1] + +Determine if the JS environment has `Symbol.toStringTag` support. Supports spec, or shams. + +## Example + +```js +var hasSymbolToStringTag = require('has-tostringtag'); + +hasSymbolToStringTag() === true; // if the environment has native Symbol.toStringTag support. Not polyfillable, not forgeable. + +var hasSymbolToStringTagKinda = require('has-tostringtag/shams'); +hasSymbolToStringTagKinda() === true; // if the environment has a Symbol.toStringTag sham that mostly follows the spec. +``` + +## Supported Symbol shams + - get-own-property-symbols [npm](https://www.npmjs.com/package/get-own-property-symbols) | [github](https://github.com/WebReflection/get-own-property-symbols) + - core-js [npm](https://www.npmjs.com/package/core-js) | [github](https://github.com/zloirock/core-js) + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[1]: https://npmjs.org/package/has-tostringtag +[2]: https://versionbadg.es/inspect-js/has-tostringtag.svg +[5]: https://david-dm.org/inspect-js/has-tostringtag.svg +[6]: https://david-dm.org/inspect-js/has-tostringtag +[7]: https://david-dm.org/inspect-js/has-tostringtag/dev-status.svg +[8]: https://david-dm.org/inspect-js/has-tostringtag#info=devDependencies +[11]: https://nodei.co/npm/has-tostringtag.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/has-tostringtag.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/has-tostringtag.svg +[downloads-url]: https://npm-stat.com/charts.html?package=has-tostringtag +[codecov-image]: https://codecov.io/gh/inspect-js/has-tostringtag/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/inspect-js/has-tostringtag/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/has-tostringtag +[actions-url]: https://github.com/inspect-js/has-tostringtag/actions diff --git a/node_modules/has-tostringtag/index.d.ts b/node_modules/has-tostringtag/index.d.ts new file mode 100644 index 0000000..a61bc60 --- /dev/null +++ b/node_modules/has-tostringtag/index.d.ts @@ -0,0 +1,3 @@ +declare function hasToStringTag(): boolean; + +export = hasToStringTag; diff --git a/node_modules/has-tostringtag/index.js b/node_modules/has-tostringtag/index.js new file mode 100644 index 0000000..77bfa00 --- /dev/null +++ b/node_modules/has-tostringtag/index.js @@ -0,0 +1,8 @@ +'use strict'; + +var hasSymbols = require('has-symbols'); + +/** @type {import('.')} */ +module.exports = function hasToStringTag() { + return hasSymbols() && typeof Symbol.toStringTag === 'symbol'; +}; diff --git a/node_modules/has-tostringtag/package.json b/node_modules/has-tostringtag/package.json new file mode 100644 index 0000000..e5b0300 --- /dev/null +++ b/node_modules/has-tostringtag/package.json @@ -0,0 +1,108 @@ +{ + "name": "has-tostringtag", + "version": "1.0.2", + "author": { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + }, + "contributors": [ + { + "name": "Jordan Harband", + "email": "ljharb@gmail.com", + "url": "http://ljharb.codes" + } + ], + "description": "Determine if the JS environment has `Symbol.toStringTag` support. Supports spec, or shams.", + "license": "MIT", + "main": "index.js", + "types": "./index.d.ts", + "exports": { + ".": [ + { + "types": "./index.d.ts", + "default": "./index.js" + }, + "./index.js" + ], + "./shams": [ + { + "types": "./shams.d.ts", + "default": "./shams.js" + }, + "./shams.js" + ], + "./package.json": "./package.json" + }, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "pretest": "npm run --silent lint", + "test": "npm run tests-only", + "posttest": "aud --production", + "tests-only": "npm run test:stock && npm run test:shams", + "test:stock": "nyc node test", + "test:staging": "nyc node --harmony --es-staging test", + "test:shams": "npm run --silent test:shams:getownpropertysymbols && npm run --silent test:shams:corejs", + "test:shams:corejs": "nyc node test/shams/core-js.js", + "test:shams:getownpropertysymbols": "nyc node test/shams/get-own-property-symbols.js", + "lint": "eslint --ext=js,mjs .", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/inspect-js/has-tostringtag.git" + }, + "bugs": { + "url": "https://github.com/inspect-js/has-tostringtag/issues" + }, + "homepage": "https://github.com/inspect-js/has-tostringtag#readme", + "keywords": [ + "javascript", + "ecmascript", + "symbol", + "symbols", + "tostringtag", + "Symbol.toStringTag" + ], + "devDependencies": { + "@ljharb/eslint-config": "^21.1.0", + "@types/has-symbols": "^1.0.2", + "@types/tape": "^5.6.4", + "aud": "^2.0.4", + "auto-changelog": "^2.4.0", + "core-js": "^2.6.12", + "eslint": "=8.8.0", + "get-own-property-symbols": "^0.9.5", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.7.4", + "typescript": "next" + }, + "engines": { + "node": ">= 0.4" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "dependencies": { + "has-symbols": "^1.0.3" + } +} diff --git a/node_modules/has-tostringtag/shams.d.ts b/node_modules/has-tostringtag/shams.d.ts new file mode 100644 index 0000000..ea4aeec --- /dev/null +++ b/node_modules/has-tostringtag/shams.d.ts @@ -0,0 +1,3 @@ +declare function hasToStringTagShams(): boolean; + +export = hasToStringTagShams; diff --git a/node_modules/has-tostringtag/shams.js b/node_modules/has-tostringtag/shams.js new file mode 100644 index 0000000..809580d --- /dev/null +++ b/node_modules/has-tostringtag/shams.js @@ -0,0 +1,8 @@ +'use strict'; + +var hasSymbols = require('has-symbols/shams'); + +/** @type {import('.')} */ +module.exports = function hasToStringTagShams() { + return hasSymbols() && !!Symbol.toStringTag; +}; diff --git a/node_modules/has-tostringtag/test/index.js b/node_modules/has-tostringtag/test/index.js new file mode 100644 index 0000000..0679afd --- /dev/null +++ b/node_modules/has-tostringtag/test/index.js @@ -0,0 +1,21 @@ +'use strict'; + +var test = require('tape'); +var hasSymbolToStringTag = require('../'); +var runSymbolTests = require('./tests'); + +test('interface', function (t) { + t.equal(typeof hasSymbolToStringTag, 'function', 'is a function'); + t.equal(typeof hasSymbolToStringTag(), 'boolean', 'returns a boolean'); + t.end(); +}); + +test('Symbol.toStringTag exists', { skip: !hasSymbolToStringTag() }, function (t) { + runSymbolTests(t); + t.end(); +}); + +test('Symbol.toStringTag does not exist', { skip: hasSymbolToStringTag() }, function (t) { + t.equal(typeof Symbol === 'undefined' ? 'undefined' : typeof Symbol.toStringTag, 'undefined', 'global Symbol.toStringTag is undefined'); + t.end(); +}); diff --git a/node_modules/has-tostringtag/test/shams/core-js.js b/node_modules/has-tostringtag/test/shams/core-js.js new file mode 100644 index 0000000..7ab214d --- /dev/null +++ b/node_modules/has-tostringtag/test/shams/core-js.js @@ -0,0 +1,31 @@ +'use strict'; + +var test = require('tape'); + +if (typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol') { + test('has native Symbol.toStringTag support', function (t) { + t.equal(typeof Symbol, 'function'); + t.equal(typeof Symbol.toStringTag, 'symbol'); + t.end(); + }); + // @ts-expect-error CJS has top-level return + return; +} + +var hasSymbolToStringTag = require('../../shams'); + +test('polyfilled Symbols', function (t) { + /* eslint-disable global-require */ + t.equal(hasSymbolToStringTag(), false, 'hasSymbolToStringTag is false before polyfilling'); + // @ts-expect-error no types defined + require('core-js/fn/symbol'); + // @ts-expect-error no types defined + require('core-js/fn/symbol/to-string-tag'); + + require('../tests')(t); + + var hasToStringTagAfter = hasSymbolToStringTag(); + t.equal(hasToStringTagAfter, true, 'hasSymbolToStringTag is true after polyfilling'); + /* eslint-enable global-require */ + t.end(); +}); diff --git a/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js b/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js new file mode 100644 index 0000000..c8af44c --- /dev/null +++ b/node_modules/has-tostringtag/test/shams/get-own-property-symbols.js @@ -0,0 +1,30 @@ +'use strict'; + +var test = require('tape'); + +if (typeof Symbol === 'function' && typeof Symbol() === 'symbol') { + test('has native Symbol support', function (t) { + t.equal(typeof Symbol, 'function'); + t.equal(typeof Symbol(), 'symbol'); + t.end(); + }); + // @ts-expect-error CJS has top-level return + return; +} + +var hasSymbolToStringTag = require('../../shams'); + +test('polyfilled Symbols', function (t) { + /* eslint-disable global-require */ + t.equal(hasSymbolToStringTag(), false, 'hasSymbolToStringTag is false before polyfilling'); + + // @ts-expect-error no types defined + require('get-own-property-symbols'); + + require('../tests')(t); + + var hasToStringTagAfter = hasSymbolToStringTag(); + t.equal(hasToStringTagAfter, true, 'hasSymbolToStringTag is true after polyfilling'); + /* eslint-enable global-require */ + t.end(); +}); diff --git a/node_modules/has-tostringtag/test/tests.js b/node_modules/has-tostringtag/test/tests.js new file mode 100644 index 0000000..2aa0d48 --- /dev/null +++ b/node_modules/has-tostringtag/test/tests.js @@ -0,0 +1,15 @@ +'use strict'; + +// eslint-disable-next-line consistent-return +module.exports = /** @type {(t: import('tape').Test) => void | false} */ function runSymbolTests(t) { + t.equal(typeof Symbol, 'function', 'global Symbol is a function'); + t.ok(Symbol.toStringTag, 'Symbol.toStringTag exists'); + + if (typeof Symbol !== 'function' || !Symbol.toStringTag) { return false; } + + /** @type {{ [Symbol.toStringTag]?: 'test'}} */ + var obj = {}; + obj[Symbol.toStringTag] = 'test'; + + t.equal(Object.prototype.toString.call(obj), '[object test]'); +}; diff --git a/node_modules/has-tostringtag/tsconfig.json b/node_modules/has-tostringtag/tsconfig.json new file mode 100644 index 0000000..2002ce5 --- /dev/null +++ b/node_modules/has-tostringtag/tsconfig.json @@ -0,0 +1,49 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig to read more about this file */ + + /* Projects */ + + /* Language and Environment */ + "target": "ESNext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ + // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ + // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ + "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ + // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ + + /* Modules */ + "module": "commonjs", /* Specify what module code is generated. */ + // "rootDir": "./", /* Specify the root folder within your source files. */ + // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ + // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ + // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ + // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ + "typeRoots": ["types"], /* Specify multiple folders that act like './node_modules/@types'. */ + "resolveJsonModule": true, /* Enable importing .json files. */ + // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ + + /* JavaScript Support */ + "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ + "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ + "maxNodeModuleJsDepth": 0, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ + + /* Emit */ + "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ + "declarationMap": true, /* Create sourcemaps for d.ts files. */ + "noEmit": true, /* Disable emitting files from a compilation. */ + + /* Interop Constraints */ + "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ + "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ + "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ + + /* Type Checking */ + "strict": true, /* Enable all strict type-checking options. */ + + /* Completeness */ + //"skipLibCheck": true /* Skip type checking all .d.ts files. */ + }, + "exclude": [ + "coverage" + ] +} diff --git a/node_modules/hasown/.eslintrc b/node_modules/hasown/.eslintrc new file mode 100644 index 0000000..3b5d9e9 --- /dev/null +++ b/node_modules/hasown/.eslintrc @@ -0,0 +1,5 @@ +{ + "root": true, + + "extends": "@ljharb", +} diff --git a/node_modules/hasown/.github/FUNDING.yml b/node_modules/hasown/.github/FUNDING.yml new file mode 100644 index 0000000..d68c8b7 --- /dev/null +++ b/node_modules/hasown/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/hasown +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with a single custom sponsorship URL diff --git a/node_modules/hasown/.nycrc b/node_modules/hasown/.nycrc new file mode 100644 index 0000000..1826526 --- /dev/null +++ b/node_modules/hasown/.nycrc @@ -0,0 +1,13 @@ +{ + "all": true, + "check-coverage": false, + "reporter": ["text-summary", "text", "html", "json"], + "lines": 86, + "statements": 85.93, + "functions": 82.43, + "branches": 76.06, + "exclude": [ + "coverage", + "test" + ] +} diff --git a/node_modules/hasown/CHANGELOG.md b/node_modules/hasown/CHANGELOG.md new file mode 100644 index 0000000..2b0a980 --- /dev/null +++ b/node_modules/hasown/CHANGELOG.md @@ -0,0 +1,40 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v2.0.2](https://github.com/inspect-js/hasOwn/compare/v2.0.1...v2.0.2) - 2024-03-10 + +### Commits + +- [types] use shared config [`68e9d4d`](https://github.com/inspect-js/hasOwn/commit/68e9d4dab6facb4f05f02c6baea94a3f2a4e44b2) +- [actions] remove redundant finisher; use reusable workflow [`241a68e`](https://github.com/inspect-js/hasOwn/commit/241a68e13ea1fe52bec5ba7f74144befc31fae7b) +- [Tests] increase coverage [`4125c0d`](https://github.com/inspect-js/hasOwn/commit/4125c0d6121db56ae30e38346dfb0c000b04f0a7) +- [Tests] skip `npm ls` in old node due to TS [`01b9282`](https://github.com/inspect-js/hasOwn/commit/01b92822f9971dea031eafdd14767df41d61c202) +- [types] improve predicate type [`d340f85`](https://github.com/inspect-js/hasOwn/commit/d340f85ce02e286ef61096cbbb6697081d40a12b) +- [Dev Deps] update `tape` [`70089fc`](https://github.com/inspect-js/hasOwn/commit/70089fcf544e64acc024cbe60f5a9b00acad86de) +- [Tests] use `@arethetypeswrong/cli` [`50b272c`](https://github.com/inspect-js/hasOwn/commit/50b272c829f40d053a3dd91c9796e0ac0b2af084) + +## [v2.0.1](https://github.com/inspect-js/hasOwn/compare/v2.0.0...v2.0.1) - 2024-02-10 + +### Commits + +- [types] use a handwritten d.ts file; fix exported type [`012b989`](https://github.com/inspect-js/hasOwn/commit/012b9898ccf91dc441e2ebf594ff70270a5fda58) +- [Dev Deps] update `@types/function-bind`, `@types/mock-property`, `@types/tape`, `aud`, `mock-property`, `npmignore`, `tape`, `typescript` [`977a56f`](https://github.com/inspect-js/hasOwn/commit/977a56f51a1f8b20566f3c471612137894644025) +- [meta] add `sideEffects` flag [`3a60b7b`](https://github.com/inspect-js/hasOwn/commit/3a60b7bf42fccd8c605e5f145a6fcc83b13cb46f) + +## [v2.0.0](https://github.com/inspect-js/hasOwn/compare/v1.0.1...v2.0.0) - 2023-10-19 + +### Commits + +- revamped implementation, tests, readme [`72bf8b3`](https://github.com/inspect-js/hasOwn/commit/72bf8b338e77a638f0a290c63ffaed18339c36b4) +- [meta] revamp package.json [`079775f`](https://github.com/inspect-js/hasOwn/commit/079775fb1ec72c1c6334069593617a0be3847458) +- Only apps should have lockfiles [`6640e23`](https://github.com/inspect-js/hasOwn/commit/6640e233d1bb8b65260880f90787637db157d215) + +## v1.0.1 - 2023-10-10 + +### Commits + +- Initial commit [`8dbfde6`](https://github.com/inspect-js/hasOwn/commit/8dbfde6e8fb0ebb076fab38d138f2984eb340a62) diff --git a/node_modules/hasown/LICENSE b/node_modules/hasown/LICENSE new file mode 100644 index 0000000..0314929 --- /dev/null +++ b/node_modules/hasown/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) Jordan Harband and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/hasown/README.md b/node_modules/hasown/README.md new file mode 100644 index 0000000..f759b8a --- /dev/null +++ b/node_modules/hasown/README.md @@ -0,0 +1,40 @@ +# hasown [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +A robust, ES3 compatible, "has own property" predicate. + +## Example + +```js +const assert = require('assert'); +const hasOwn = require('hasown'); + +assert.equal(hasOwn({}, 'toString'), false); +assert.equal(hasOwn([], 'length'), true); +assert.equal(hasOwn({ a: 42 }, 'a'), true); +``` + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[package-url]: https://npmjs.org/package/hasown +[npm-version-svg]: https://versionbadg.es/inspect-js/hasown.svg +[deps-svg]: https://david-dm.org/inspect-js/hasOwn.svg +[deps-url]: https://david-dm.org/inspect-js/hasOwn +[dev-deps-svg]: https://david-dm.org/inspect-js/hasOwn/dev-status.svg +[dev-deps-url]: https://david-dm.org/inspect-js/hasOwn#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/hasown.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/hasown.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/hasown.svg +[downloads-url]: https://npm-stat.com/charts.html?package=hasown +[codecov-image]: https://codecov.io/gh/inspect-js/hasOwn/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/inspect-js/hasOwn/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/hasOwn +[actions-url]: https://github.com/inspect-js/hasOwn/actions diff --git a/node_modules/hasown/index.d.ts b/node_modules/hasown/index.d.ts new file mode 100644 index 0000000..aafdf3b --- /dev/null +++ b/node_modules/hasown/index.d.ts @@ -0,0 +1,3 @@ +declare function hasOwn(o: O, p: K): o is O & Record; + +export = hasOwn; diff --git a/node_modules/hasown/index.js b/node_modules/hasown/index.js new file mode 100644 index 0000000..34e6059 --- /dev/null +++ b/node_modules/hasown/index.js @@ -0,0 +1,8 @@ +'use strict'; + +var call = Function.prototype.call; +var $hasOwn = Object.prototype.hasOwnProperty; +var bind = require('function-bind'); + +/** @type {import('.')} */ +module.exports = bind.call(call, $hasOwn); diff --git a/node_modules/hasown/package.json b/node_modules/hasown/package.json new file mode 100644 index 0000000..8502e13 --- /dev/null +++ b/node_modules/hasown/package.json @@ -0,0 +1,92 @@ +{ + "name": "hasown", + "version": "2.0.2", + "description": "A robust, ES3 compatible, \"has own property\" predicate.", + "main": "index.js", + "exports": { + ".": "./index.js", + "./package.json": "./package.json" + }, + "types": "index.d.ts", + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublish": "not-in-publish || npm run prepublishOnly", + "prepublishOnly": "safe-publish-latest", + "prelint": "evalmd README.md", + "lint": "eslint --ext=js,mjs .", + "postlint": "npm run tsc", + "pretest": "npm run lint", + "tsc": "tsc -p .", + "posttsc": "attw -P", + "tests-only": "nyc tape 'test/**/*.js'", + "test": "npm run tests-only", + "posttest": "aud --production", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/inspect-js/hasOwn.git" + }, + "keywords": [ + "has", + "hasOwnProperty", + "hasOwn", + "has-own", + "own", + "has", + "property", + "in", + "javascript", + "ecmascript" + ], + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/inspect-js/hasOwn/issues" + }, + "homepage": "https://github.com/inspect-js/hasOwn#readme", + "dependencies": { + "function-bind": "^1.1.2" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.15.1", + "@ljharb/eslint-config": "^21.1.0", + "@ljharb/tsconfig": "^0.2.0", + "@types/function-bind": "^1.1.10", + "@types/mock-property": "^1.0.2", + "@types/tape": "^5.6.4", + "aud": "^2.0.4", + "auto-changelog": "^2.4.0", + "eslint": "=8.8.0", + "evalmd": "^0.0.19", + "in-publish": "^2.0.1", + "mock-property": "^1.0.3", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "safe-publish-latest": "^2.0.0", + "tape": "^5.7.5", + "typescript": "next" + }, + "engines": { + "node": ">= 0.4" + }, + "testling": { + "files": "test/index.js" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows", + "test" + ] + } +} diff --git a/node_modules/hasown/tsconfig.json b/node_modules/hasown/tsconfig.json new file mode 100644 index 0000000..0930c56 --- /dev/null +++ b/node_modules/hasown/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "@ljharb/tsconfig", + "exclude": [ + "coverage", + ], +} diff --git a/node_modules/htmlparser2/LICENSE b/node_modules/htmlparser2/LICENSE new file mode 100644 index 0000000..0a35e02 --- /dev/null +++ b/node_modules/htmlparser2/LICENSE @@ -0,0 +1,18 @@ +Copyright 2010, 2011, Chris Winberry . All rights reserved. +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. \ No newline at end of file diff --git a/node_modules/htmlparser2/README.md b/node_modules/htmlparser2/README.md new file mode 100644 index 0000000..311a4ea --- /dev/null +++ b/node_modules/htmlparser2/README.md @@ -0,0 +1,171 @@ +# htmlparser2 + +[![NPM version](https://img.shields.io/npm/v/htmlparser2.svg)](https://npmjs.org/package/htmlparser2) +[![Downloads](https://img.shields.io/npm/dm/htmlparser2.svg)](https://npmjs.org/package/htmlparser2) +[![Node.js CI](https://github.com/fb55/htmlparser2/actions/workflows/nodejs-test.yml/badge.svg)](https://github.com/fb55/htmlparser2/actions/workflows/nodejs-test.yml) +[![Coverage](https://img.shields.io/coveralls/fb55/htmlparser2.svg)](https://coveralls.io/r/fb55/htmlparser2) + +The fast & forgiving HTML/XML parser. + +_htmlparser2 is [the fastest HTML parser](#performance), and takes some shortcuts to get there. If you need strict HTML spec compliance, have a look at [parse5](https://github.com/inikulin/parse5)._ + +## Installation + + npm install htmlparser2 + +A live demo of `htmlparser2` is available [on AST Explorer](https://astexplorer.net/#/2AmVrGuGVJ). + +## Ecosystem + +| Name | Description | +| ------------------------------------------------------------- | ------------------------------------------------------- | +| [htmlparser2](https://github.com/fb55/htmlparser2) | Fast & forgiving HTML/XML parser | +| [domhandler](https://github.com/fb55/domhandler) | Handler for htmlparser2 that turns documents into a DOM | +| [domutils](https://github.com/fb55/domutils) | Utilities for working with domhandler's DOM | +| [css-select](https://github.com/fb55/css-select) | CSS selector engine, compatible with domhandler's DOM | +| [cheerio](https://github.com/cheeriojs/cheerio) | The jQuery API for domhandler's DOM | +| [dom-serializer](https://github.com/cheeriojs/dom-serializer) | Serializer for domhandler's DOM | + +## Usage + +`htmlparser2` itself provides a callback interface that allows consumption of documents with minimal allocations. +For a more ergonomic experience, read [Getting a DOM](#getting-a-dom) below. + +```js +import * as htmlparser2 from "htmlparser2"; + +const parser = new htmlparser2.Parser({ + onopentag(name, attributes) { + /* + * This fires when a new tag is opened. + * + * If you don't need an aggregated `attributes` object, + * have a look at the `onopentagname` and `onattribute` events. + */ + if (name === "script" && attributes.type === "text/javascript") { + console.log("JS! Hooray!"); + } + }, + ontext(text) { + /* + * Fires whenever a section of text was processed. + * + * Note that this can fire at any point within text and you might + * have to stitch together multiple pieces. + */ + console.log("-->", text); + }, + onclosetag(tagname) { + /* + * Fires when a tag is closed. + * + * You can rely on this event only firing when you have received an + * equivalent opening tag before. Closing tags without corresponding + * opening tags will be ignored. + */ + if (tagname === "script") { + console.log("That's it?!"); + } + }, +}); +parser.write( + "Xyz ", +); +parser.end(); +``` + +Output (with multiple text events combined): + +``` +--> Xyz +JS! Hooray! +--> const foo = '<>'; +That's it?! +``` + +This example only shows three of the possible events. +Read more about the parser, its events and options in the [wiki](https://github.com/fb55/htmlparser2/wiki/Parser-options). + +### Usage with streams + +While the `Parser` interface closely resembles Node.js streams, it's not a 100% match. +Use the `WritableStream` interface to process a streaming input: + +```js +import { WritableStream } from "htmlparser2/lib/WritableStream"; + +const parserStream = new WritableStream({ + ontext(text) { + console.log("Streaming:", text); + }, +}); + +const htmlStream = fs.createReadStream("./my-file.html"); +htmlStream.pipe(parserStream).on("finish", () => console.log("done")); +``` + +## Getting a DOM + +The `DomHandler` produces a DOM (document object model) that can be manipulated using the [`DomUtils`](https://github.com/fb55/DomUtils) helper. + +```js +import * as htmlparser2 from "htmlparser2"; + +const dom = htmlparser2.parseDocument(htmlString); +``` + +The `DomHandler`, while still bundled with this module, was moved to its [own module](https://github.com/fb55/domhandler). +Have a look at that for further information. + +## Parsing Feeds + +`htmlparser2` makes it easy to parse RSS, RDF and Atom feeds, by providing a `parseFeed` method: + +```javascript +const feed = htmlparser2.parseFeed(content, options); +``` + +## Performance + +After having some artificial benchmarks for some time, **@AndreasMadsen** published his [`htmlparser-benchmark`](https://github.com/AndreasMadsen/htmlparser-benchmark), which benchmarks HTML parses based on real-world websites. + +At the time of writing, the latest versions of all supported parsers show the following performance characteristics on GitHub Actions (sourced from [here](https://github.com/AndreasMadsen/htmlparser-benchmark/blob/e78cd8fc6c2adac08deedd4f274c33537451186b/stats.txt)): + +``` +htmlparser2 : 2.17215 ms/file ยฑ 3.81587 +node-html-parser : 2.35983 ms/file ยฑ 1.54487 +html5parser : 2.43468 ms/file ยฑ 2.81501 +neutron-html5parser: 2.61356 ms/file ยฑ 1.70324 +htmlparser2-dom : 3.09034 ms/file ยฑ 4.77033 +html-dom-parser : 3.56804 ms/file ยฑ 5.15621 +libxmljs : 4.07490 ms/file ยฑ 2.99869 +htmljs-parser : 6.15812 ms/file ยฑ 7.52497 +parse5 : 9.70406 ms/file ยฑ 6.74872 +htmlparser : 15.0596 ms/file ยฑ 89.0826 +html-parser : 28.6282 ms/file ยฑ 22.6652 +saxes : 45.7921 ms/file ยฑ 128.691 +html5 : 120.844 ms/file ยฑ 153.944 +``` + +## How does this module differ from [node-htmlparser](https://github.com/tautologistics/node-htmlparser)? + +In 2011, this module started as a fork of the `htmlparser` module. +`htmlparser2` was rewritten multiple times and, while it maintains an API that's mostly compatible with `htmlparser`, the projects don't share any code anymore. + +The parser now provides a callback interface inspired by [sax.js](https://github.com/isaacs/sax-js) (originally targeted at [readabilitySAX](https://github.com/fb55/readabilitysax)). +As a result, old handlers won't work anymore. + +The `DefaultHandler` was renamed to clarify its purpose (to `DomHandler`). The old name is still available when requiring `htmlparser2` and your code should work as expected. + +The `RssHandler` was replaced with a `getFeed` function that takes a `DomHandler` DOM and returns a feed object. There is a `parseFeed` helper function that can be used to parse a feed from a string. + +## Security contact information + +To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. + +## `htmlparser2` for enterprise + +Available as part of the Tidelift Subscription. + +The maintainers of `htmlparser2` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-htmlparser2?utm_source=npm-htmlparser2&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/htmlparser2/lib/Parser.d.ts b/node_modules/htmlparser2/lib/Parser.d.ts new file mode 100644 index 0000000..b617674 --- /dev/null +++ b/node_modules/htmlparser2/lib/Parser.d.ts @@ -0,0 +1,198 @@ +import Tokenizer, { type Callbacks, QuoteType } from "./Tokenizer.js"; +export interface ParserOptions { + /** + * Indicates whether special tags (``. + this.sequenceIndex = Number(c === CharCodes.Lt); + } + }; + Tokenizer.prototype.stateCDATASequence = function (c) { + if (c === Sequences.Cdata[this.sequenceIndex]) { + if (++this.sequenceIndex === Sequences.Cdata.length) { + this.state = State.InCommentLike; + this.currentSequence = Sequences.CdataEnd; + this.sequenceIndex = 0; + this.sectionStart = this.index + 1; + } + } + else { + this.sequenceIndex = 0; + this.state = State.InDeclaration; + this.stateInDeclaration(c); // Reconsume the character + } + }; + /** + * When we wait for one specific character, we can speed things up + * by skipping through the buffer until we find it. + * + * @returns Whether the character was found. + */ + Tokenizer.prototype.fastForwardTo = function (c) { + while (++this.index < this.buffer.length + this.offset) { + if (this.buffer.charCodeAt(this.index - this.offset) === c) { + return true; + } + } + /* + * We increment the index at the end of the `parse` loop, + * so set it to `buffer.length - 1` here. + * + * TODO: Refactor `parse` to increment index before calling states. + */ + this.index = this.buffer.length + this.offset - 1; + return false; + }; + /** + * Comments and CDATA end with `-->` and `]]>`. + * + * Their common qualities are: + * - Their end sequences have a distinct character they start with. + * - That character is then repeated, so we have to check multiple repeats. + * - All characters but the start character of the sequence can be skipped. + */ + Tokenizer.prototype.stateInCommentLike = function (c) { + if (c === this.currentSequence[this.sequenceIndex]) { + if (++this.sequenceIndex === this.currentSequence.length) { + if (this.currentSequence === Sequences.CdataEnd) { + this.cbs.oncdata(this.sectionStart, this.index, 2); + } + else { + this.cbs.oncomment(this.sectionStart, this.index, 2); + } + this.sequenceIndex = 0; + this.sectionStart = this.index + 1; + this.state = State.Text; + } + } + else if (this.sequenceIndex === 0) { + // Fast-forward to the first character of the sequence + if (this.fastForwardTo(this.currentSequence[0])) { + this.sequenceIndex = 1; + } + } + else if (c !== this.currentSequence[this.sequenceIndex - 1]) { + // Allow long sequences, eg. --->, ]]]> + this.sequenceIndex = 0; + } + }; + /** + * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name. + * + * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar). + * We allow anything that wouldn't end the tag. + */ + Tokenizer.prototype.isTagStartChar = function (c) { + return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c); + }; + Tokenizer.prototype.startSpecial = function (sequence, offset) { + this.isSpecial = true; + this.currentSequence = sequence; + this.sequenceIndex = offset; + this.state = State.SpecialStartSequence; + }; + Tokenizer.prototype.stateBeforeTagName = function (c) { + if (c === CharCodes.ExclamationMark) { + this.state = State.BeforeDeclaration; + this.sectionStart = this.index + 1; + } + else if (c === CharCodes.Questionmark) { + this.state = State.InProcessingInstruction; + this.sectionStart = this.index + 1; + } + else if (this.isTagStartChar(c)) { + var lower = c | 0x20; + this.sectionStart = this.index; + if (this.xmlMode) { + this.state = State.InTagName; + } + else if (lower === Sequences.ScriptEnd[2]) { + this.state = State.BeforeSpecialS; + } + else if (lower === Sequences.TitleEnd[2]) { + this.state = State.BeforeSpecialT; + } + else { + this.state = State.InTagName; + } + } + else if (c === CharCodes.Slash) { + this.state = State.BeforeClosingTagName; + } + else { + this.state = State.Text; + this.stateText(c); + } + }; + Tokenizer.prototype.stateInTagName = function (c) { + if (isEndOfTagSection(c)) { + this.cbs.onopentagname(this.sectionStart, this.index); + this.sectionStart = -1; + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + }; + Tokenizer.prototype.stateBeforeClosingTagName = function (c) { + if (isWhitespace(c)) { + // Ignore + } + else if (c === CharCodes.Gt) { + this.state = State.Text; + } + else { + this.state = this.isTagStartChar(c) + ? State.InClosingTagName + : State.InSpecialComment; + this.sectionStart = this.index; + } + }; + Tokenizer.prototype.stateInClosingTagName = function (c) { + if (c === CharCodes.Gt || isWhitespace(c)) { + this.cbs.onclosetag(this.sectionStart, this.index); + this.sectionStart = -1; + this.state = State.AfterClosingTagName; + this.stateAfterClosingTagName(c); + } + }; + Tokenizer.prototype.stateAfterClosingTagName = function (c) { + // Skip everything until ">" + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.state = State.Text; + this.sectionStart = this.index + 1; + } + }; + Tokenizer.prototype.stateBeforeAttributeName = function (c) { + if (c === CharCodes.Gt) { + this.cbs.onopentagend(this.index); + if (this.isSpecial) { + this.state = State.InSpecialTag; + this.sequenceIndex = 0; + } + else { + this.state = State.Text; + } + this.sectionStart = this.index + 1; + } + else if (c === CharCodes.Slash) { + this.state = State.InSelfClosingTag; + } + else if (!isWhitespace(c)) { + this.state = State.InAttributeName; + this.sectionStart = this.index; + } + }; + Tokenizer.prototype.stateInSelfClosingTag = function (c) { + if (c === CharCodes.Gt) { + this.cbs.onselfclosingtag(this.index); + this.state = State.Text; + this.sectionStart = this.index + 1; + this.isSpecial = false; // Reset special state, in case of self-closing special tags + } + else if (!isWhitespace(c)) { + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + }; + Tokenizer.prototype.stateInAttributeName = function (c) { + if (c === CharCodes.Eq || isEndOfTagSection(c)) { + this.cbs.onattribname(this.sectionStart, this.index); + this.sectionStart = this.index; + this.state = State.AfterAttributeName; + this.stateAfterAttributeName(c); + } + }; + Tokenizer.prototype.stateAfterAttributeName = function (c) { + if (c === CharCodes.Eq) { + this.state = State.BeforeAttributeValue; + } + else if (c === CharCodes.Slash || c === CharCodes.Gt) { + this.cbs.onattribend(QuoteType.NoValue, this.sectionStart); + this.sectionStart = -1; + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + else if (!isWhitespace(c)) { + this.cbs.onattribend(QuoteType.NoValue, this.sectionStart); + this.state = State.InAttributeName; + this.sectionStart = this.index; + } + }; + Tokenizer.prototype.stateBeforeAttributeValue = function (c) { + if (c === CharCodes.DoubleQuote) { + this.state = State.InAttributeValueDq; + this.sectionStart = this.index + 1; + } + else if (c === CharCodes.SingleQuote) { + this.state = State.InAttributeValueSq; + this.sectionStart = this.index + 1; + } + else if (!isWhitespace(c)) { + this.sectionStart = this.index; + this.state = State.InAttributeValueNq; + this.stateInAttributeValueNoQuotes(c); // Reconsume token + } + }; + Tokenizer.prototype.handleInAttributeValue = function (c, quote) { + if (c === quote || + (!this.decodeEntities && this.fastForwardTo(quote))) { + this.cbs.onattribdata(this.sectionStart, this.index); + this.sectionStart = -1; + this.cbs.onattribend(quote === CharCodes.DoubleQuote + ? QuoteType.Double + : QuoteType.Single, this.index + 1); + this.state = State.BeforeAttributeName; + } + else if (this.decodeEntities && c === CharCodes.Amp) { + this.startEntity(); + } + }; + Tokenizer.prototype.stateInAttributeValueDoubleQuotes = function (c) { + this.handleInAttributeValue(c, CharCodes.DoubleQuote); + }; + Tokenizer.prototype.stateInAttributeValueSingleQuotes = function (c) { + this.handleInAttributeValue(c, CharCodes.SingleQuote); + }; + Tokenizer.prototype.stateInAttributeValueNoQuotes = function (c) { + if (isWhitespace(c) || c === CharCodes.Gt) { + this.cbs.onattribdata(this.sectionStart, this.index); + this.sectionStart = -1; + this.cbs.onattribend(QuoteType.Unquoted, this.index); + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + else if (this.decodeEntities && c === CharCodes.Amp) { + this.startEntity(); + } + }; + Tokenizer.prototype.stateBeforeDeclaration = function (c) { + if (c === CharCodes.OpeningSquareBracket) { + this.state = State.CDATASequence; + this.sequenceIndex = 0; + } + else { + this.state = + c === CharCodes.Dash + ? State.BeforeComment + : State.InDeclaration; + } + }; + Tokenizer.prototype.stateInDeclaration = function (c) { + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.cbs.ondeclaration(this.sectionStart, this.index); + this.state = State.Text; + this.sectionStart = this.index + 1; + } + }; + Tokenizer.prototype.stateInProcessingInstruction = function (c) { + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.cbs.onprocessinginstruction(this.sectionStart, this.index); + this.state = State.Text; + this.sectionStart = this.index + 1; + } + }; + Tokenizer.prototype.stateBeforeComment = function (c) { + if (c === CharCodes.Dash) { + this.state = State.InCommentLike; + this.currentSequence = Sequences.CommentEnd; + // Allow short comments (eg. ) + this.sequenceIndex = 2; + this.sectionStart = this.index + 1; + } + else { + this.state = State.InDeclaration; + } + }; + Tokenizer.prototype.stateInSpecialComment = function (c) { + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.cbs.oncomment(this.sectionStart, this.index, 0); + this.state = State.Text; + this.sectionStart = this.index + 1; + } + }; + Tokenizer.prototype.stateBeforeSpecialS = function (c) { + var lower = c | 0x20; + if (lower === Sequences.ScriptEnd[3]) { + this.startSpecial(Sequences.ScriptEnd, 4); + } + else if (lower === Sequences.StyleEnd[3]) { + this.startSpecial(Sequences.StyleEnd, 4); + } + else { + this.state = State.InTagName; + this.stateInTagName(c); // Consume the token again + } + }; + Tokenizer.prototype.stateBeforeSpecialT = function (c) { + var lower = c | 0x20; + if (lower === Sequences.TitleEnd[3]) { + this.startSpecial(Sequences.TitleEnd, 4); + } + else if (lower === Sequences.TextareaEnd[3]) { + this.startSpecial(Sequences.TextareaEnd, 4); + } + else { + this.state = State.InTagName; + this.stateInTagName(c); // Consume the token again + } + }; + Tokenizer.prototype.startEntity = function () { + this.baseState = this.state; + this.state = State.InEntity; + this.entityStart = this.index; + this.entityDecoder.startEntity(this.xmlMode + ? decode_js_1.DecodingMode.Strict + : this.baseState === State.Text || + this.baseState === State.InSpecialTag + ? decode_js_1.DecodingMode.Legacy + : decode_js_1.DecodingMode.Attribute); + }; + Tokenizer.prototype.stateInEntity = function () { + var length = this.entityDecoder.write(this.buffer, this.index - this.offset); + // If `length` is positive, we are done with the entity. + if (length >= 0) { + this.state = this.baseState; + if (length === 0) { + this.index = this.entityStart; + } + } + else { + // Mark buffer as consumed. + this.index = this.offset + this.buffer.length - 1; + } + }; + /** + * Remove data that has already been consumed from the buffer. + */ + Tokenizer.prototype.cleanup = function () { + // If we are inside of text or attributes, emit what we already have. + if (this.running && this.sectionStart !== this.index) { + if (this.state === State.Text || + (this.state === State.InSpecialTag && this.sequenceIndex === 0)) { + this.cbs.ontext(this.sectionStart, this.index); + this.sectionStart = this.index; + } + else if (this.state === State.InAttributeValueDq || + this.state === State.InAttributeValueSq || + this.state === State.InAttributeValueNq) { + this.cbs.onattribdata(this.sectionStart, this.index); + this.sectionStart = this.index; + } + } + }; + Tokenizer.prototype.shouldContinue = function () { + return this.index < this.buffer.length + this.offset && this.running; + }; + /** + * Iterates through the buffer, calling the function corresponding to the current state. + * + * States that are more likely to be hit are higher up, as a performance improvement. + */ + Tokenizer.prototype.parse = function () { + while (this.shouldContinue()) { + var c = this.buffer.charCodeAt(this.index - this.offset); + switch (this.state) { + case State.Text: { + this.stateText(c); + break; + } + case State.SpecialStartSequence: { + this.stateSpecialStartSequence(c); + break; + } + case State.InSpecialTag: { + this.stateInSpecialTag(c); + break; + } + case State.CDATASequence: { + this.stateCDATASequence(c); + break; + } + case State.InAttributeValueDq: { + this.stateInAttributeValueDoubleQuotes(c); + break; + } + case State.InAttributeName: { + this.stateInAttributeName(c); + break; + } + case State.InCommentLike: { + this.stateInCommentLike(c); + break; + } + case State.InSpecialComment: { + this.stateInSpecialComment(c); + break; + } + case State.BeforeAttributeName: { + this.stateBeforeAttributeName(c); + break; + } + case State.InTagName: { + this.stateInTagName(c); + break; + } + case State.InClosingTagName: { + this.stateInClosingTagName(c); + break; + } + case State.BeforeTagName: { + this.stateBeforeTagName(c); + break; + } + case State.AfterAttributeName: { + this.stateAfterAttributeName(c); + break; + } + case State.InAttributeValueSq: { + this.stateInAttributeValueSingleQuotes(c); + break; + } + case State.BeforeAttributeValue: { + this.stateBeforeAttributeValue(c); + break; + } + case State.BeforeClosingTagName: { + this.stateBeforeClosingTagName(c); + break; + } + case State.AfterClosingTagName: { + this.stateAfterClosingTagName(c); + break; + } + case State.BeforeSpecialS: { + this.stateBeforeSpecialS(c); + break; + } + case State.BeforeSpecialT: { + this.stateBeforeSpecialT(c); + break; + } + case State.InAttributeValueNq: { + this.stateInAttributeValueNoQuotes(c); + break; + } + case State.InSelfClosingTag: { + this.stateInSelfClosingTag(c); + break; + } + case State.InDeclaration: { + this.stateInDeclaration(c); + break; + } + case State.BeforeDeclaration: { + this.stateBeforeDeclaration(c); + break; + } + case State.BeforeComment: { + this.stateBeforeComment(c); + break; + } + case State.InProcessingInstruction: { + this.stateInProcessingInstruction(c); + break; + } + case State.InEntity: { + this.stateInEntity(); + break; + } + } + this.index++; + } + this.cleanup(); + }; + Tokenizer.prototype.finish = function () { + if (this.state === State.InEntity) { + this.entityDecoder.end(); + this.state = this.baseState; + } + this.handleTrailingData(); + this.cbs.onend(); + }; + /** Handle any trailing data. */ + Tokenizer.prototype.handleTrailingData = function () { + var endIndex = this.buffer.length + this.offset; + // If there is no remaining data, we are done. + if (this.sectionStart >= endIndex) { + return; + } + if (this.state === State.InCommentLike) { + if (this.currentSequence === Sequences.CdataEnd) { + this.cbs.oncdata(this.sectionStart, endIndex, 0); + } + else { + this.cbs.oncomment(this.sectionStart, endIndex, 0); + } + } + else if (this.state === State.InTagName || + this.state === State.BeforeAttributeName || + this.state === State.BeforeAttributeValue || + this.state === State.AfterAttributeName || + this.state === State.InAttributeName || + this.state === State.InAttributeValueSq || + this.state === State.InAttributeValueDq || + this.state === State.InAttributeValueNq || + this.state === State.InClosingTagName) { + /* + * If we are currently in an opening or closing tag, us not calling the + * respective callback signals that the tag should be ignored. + */ + } + else { + this.cbs.ontext(this.sectionStart, endIndex); + } + }; + Tokenizer.prototype.emitCodePoint = function (cp, consumed) { + if (this.baseState !== State.Text && + this.baseState !== State.InSpecialTag) { + if (this.sectionStart < this.entityStart) { + this.cbs.onattribdata(this.sectionStart, this.entityStart); + } + this.sectionStart = this.entityStart + consumed; + this.index = this.sectionStart - 1; + this.cbs.onattribentity(cp); + } + else { + if (this.sectionStart < this.entityStart) { + this.cbs.ontext(this.sectionStart, this.entityStart); + } + this.sectionStart = this.entityStart + consumed; + this.index = this.sectionStart - 1; + this.cbs.ontextentity(cp, this.sectionStart); + } + }; + return Tokenizer; +}()); +exports.default = Tokenizer; +//# sourceMappingURL=Tokenizer.js.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/Tokenizer.js.map b/node_modules/htmlparser2/lib/Tokenizer.js.map new file mode 100644 index 0000000..59b8871 --- /dev/null +++ b/node_modules/htmlparser2/lib/Tokenizer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Tokenizer.js","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["Tokenizer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/WritableStream.d.ts b/node_modules/htmlparser2/lib/WritableStream.d.ts new file mode 100644 index 0000000..0459e27 --- /dev/null +++ b/node_modules/htmlparser2/lib/WritableStream.d.ts @@ -0,0 +1,17 @@ +/// +/// +import { type Handler, type ParserOptions } from "./Parser.js"; +import { Writable } from "node:stream"; +/** + * WritableStream makes the `Parser` interface available as a NodeJS stream. + * + * @see Parser + */ +export declare class WritableStream extends Writable { + private readonly _parser; + private readonly _decoder; + constructor(cbs: Partial, options?: ParserOptions); + _write(chunk: string | Buffer, encoding: string, callback: () => void): void; + _final(callback: () => void): void; +} +//# sourceMappingURL=WritableStream.d.ts.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/WritableStream.d.ts.map b/node_modules/htmlparser2/lib/WritableStream.d.ts.map new file mode 100644 index 0000000..dccb10e --- /dev/null +++ b/node_modules/htmlparser2/lib/WritableStream.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"WritableStream.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["WritableStream.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAU,KAAK,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAKvE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQvC;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;gBAEpC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa;IAKjD,MAAM,CACX,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,IAAI,GACrB,IAAI;IAOE,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;CAI9C"} \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/WritableStream.js b/node_modules/htmlparser2/lib/WritableStream.js new file mode 100644 index 0000000..3614c31 --- /dev/null +++ b/node_modules/htmlparser2/lib/WritableStream.js @@ -0,0 +1,54 @@ +"use strict"; +var __extends = (this && this.__extends) || (function () { + var extendStatics = function (d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + return function (d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + }; +})(); +Object.defineProperty(exports, "__esModule", { value: true }); +exports.WritableStream = void 0; +var Parser_js_1 = require("./Parser.js"); +/* + * NOTE: If either of these two imports produces a type error, + * please update your @types/node dependency! + */ +var node_stream_1 = require("node:stream"); +var node_string_decoder_1 = require("node:string_decoder"); +// Following the example in https://nodejs.org/api/stream.html#stream_decoding_buffers_in_a_writable_stream +function isBuffer(_chunk, encoding) { + return encoding === "buffer"; +} +/** + * WritableStream makes the `Parser` interface available as a NodeJS stream. + * + * @see Parser + */ +var WritableStream = /** @class */ (function (_super) { + __extends(WritableStream, _super); + function WritableStream(cbs, options) { + var _this = _super.call(this, { decodeStrings: false }) || this; + _this._decoder = new node_string_decoder_1.StringDecoder(); + _this._parser = new Parser_js_1.Parser(cbs, options); + return _this; + } + WritableStream.prototype._write = function (chunk, encoding, callback) { + this._parser.write(isBuffer(chunk, encoding) ? this._decoder.write(chunk) : chunk); + callback(); + }; + WritableStream.prototype._final = function (callback) { + this._parser.end(this._decoder.end()); + callback(); + }; + return WritableStream; +}(node_stream_1.Writable)); +exports.WritableStream = WritableStream; +//# sourceMappingURL=WritableStream.js.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/WritableStream.js.map b/node_modules/htmlparser2/lib/WritableStream.js.map new file mode 100644 index 0000000..a33c95d --- /dev/null +++ b/node_modules/htmlparser2/lib/WritableStream.js.map @@ -0,0 +1 @@ +{"version":3,"file":"WritableStream.js","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["WritableStream.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;AAAA,yCAAuE;AACvE;;;GAGG;AACH,2CAAuC;AACvC,2DAAoD;AAEpD,2GAA2G;AAC3G,SAAS,QAAQ,CAAC,MAAuB,EAAE,QAAgB;IACvD,OAAO,QAAQ,KAAK,QAAQ,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH;IAAoC,kCAAQ;IAIxC,wBAAY,GAAqB,EAAE,OAAuB;QACtD,YAAA,MAAK,YAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,SAAC;QAHnB,cAAQ,GAAG,IAAI,mCAAa,EAAE,CAAC;QAI5C,KAAI,CAAC,OAAO,GAAG,IAAI,kBAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;;IAC5C,CAAC;IAEQ,+BAAM,GAAf,UACI,KAAsB,EACtB,QAAgB,EAChB,QAAoB;QAEpB,IAAI,CAAC,OAAO,CAAC,KAAK,CACd,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CACjE,CAAC;QACF,QAAQ,EAAE,CAAC;IACf,CAAC;IAEQ,+BAAM,GAAf,UAAgB,QAAoB;QAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QACtC,QAAQ,EAAE,CAAC;IACf,CAAC;IACL,qBAAC;AAAD,CAAC,AAxBD,CAAoC,sBAAQ,GAwB3C;AAxBY,wCAAc"} \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/Parser.d.ts b/node_modules/htmlparser2/lib/esm/Parser.d.ts new file mode 100644 index 0000000..b617674 --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/Parser.d.ts @@ -0,0 +1,198 @@ +import Tokenizer, { type Callbacks, QuoteType } from "./Tokenizer.js"; +export interface ParserOptions { + /** + * Indicates whether special tags (``. + this.sequenceIndex = Number(c === CharCodes.Lt); + } + } + stateCDATASequence(c) { + if (c === Sequences.Cdata[this.sequenceIndex]) { + if (++this.sequenceIndex === Sequences.Cdata.length) { + this.state = State.InCommentLike; + this.currentSequence = Sequences.CdataEnd; + this.sequenceIndex = 0; + this.sectionStart = this.index + 1; + } + } + else { + this.sequenceIndex = 0; + this.state = State.InDeclaration; + this.stateInDeclaration(c); // Reconsume the character + } + } + /** + * When we wait for one specific character, we can speed things up + * by skipping through the buffer until we find it. + * + * @returns Whether the character was found. + */ + fastForwardTo(c) { + while (++this.index < this.buffer.length + this.offset) { + if (this.buffer.charCodeAt(this.index - this.offset) === c) { + return true; + } + } + /* + * We increment the index at the end of the `parse` loop, + * so set it to `buffer.length - 1` here. + * + * TODO: Refactor `parse` to increment index before calling states. + */ + this.index = this.buffer.length + this.offset - 1; + return false; + } + /** + * Comments and CDATA end with `-->` and `]]>`. + * + * Their common qualities are: + * - Their end sequences have a distinct character they start with. + * - That character is then repeated, so we have to check multiple repeats. + * - All characters but the start character of the sequence can be skipped. + */ + stateInCommentLike(c) { + if (c === this.currentSequence[this.sequenceIndex]) { + if (++this.sequenceIndex === this.currentSequence.length) { + if (this.currentSequence === Sequences.CdataEnd) { + this.cbs.oncdata(this.sectionStart, this.index, 2); + } + else { + this.cbs.oncomment(this.sectionStart, this.index, 2); + } + this.sequenceIndex = 0; + this.sectionStart = this.index + 1; + this.state = State.Text; + } + } + else if (this.sequenceIndex === 0) { + // Fast-forward to the first character of the sequence + if (this.fastForwardTo(this.currentSequence[0])) { + this.sequenceIndex = 1; + } + } + else if (c !== this.currentSequence[this.sequenceIndex - 1]) { + // Allow long sequences, eg. --->, ]]]> + this.sequenceIndex = 0; + } + } + /** + * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name. + * + * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar). + * We allow anything that wouldn't end the tag. + */ + isTagStartChar(c) { + return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c); + } + startSpecial(sequence, offset) { + this.isSpecial = true; + this.currentSequence = sequence; + this.sequenceIndex = offset; + this.state = State.SpecialStartSequence; + } + stateBeforeTagName(c) { + if (c === CharCodes.ExclamationMark) { + this.state = State.BeforeDeclaration; + this.sectionStart = this.index + 1; + } + else if (c === CharCodes.Questionmark) { + this.state = State.InProcessingInstruction; + this.sectionStart = this.index + 1; + } + else if (this.isTagStartChar(c)) { + const lower = c | 0x20; + this.sectionStart = this.index; + if (this.xmlMode) { + this.state = State.InTagName; + } + else if (lower === Sequences.ScriptEnd[2]) { + this.state = State.BeforeSpecialS; + } + else if (lower === Sequences.TitleEnd[2]) { + this.state = State.BeforeSpecialT; + } + else { + this.state = State.InTagName; + } + } + else if (c === CharCodes.Slash) { + this.state = State.BeforeClosingTagName; + } + else { + this.state = State.Text; + this.stateText(c); + } + } + stateInTagName(c) { + if (isEndOfTagSection(c)) { + this.cbs.onopentagname(this.sectionStart, this.index); + this.sectionStart = -1; + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + } + stateBeforeClosingTagName(c) { + if (isWhitespace(c)) { + // Ignore + } + else if (c === CharCodes.Gt) { + this.state = State.Text; + } + else { + this.state = this.isTagStartChar(c) + ? State.InClosingTagName + : State.InSpecialComment; + this.sectionStart = this.index; + } + } + stateInClosingTagName(c) { + if (c === CharCodes.Gt || isWhitespace(c)) { + this.cbs.onclosetag(this.sectionStart, this.index); + this.sectionStart = -1; + this.state = State.AfterClosingTagName; + this.stateAfterClosingTagName(c); + } + } + stateAfterClosingTagName(c) { + // Skip everything until ">" + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.state = State.Text; + this.sectionStart = this.index + 1; + } + } + stateBeforeAttributeName(c) { + if (c === CharCodes.Gt) { + this.cbs.onopentagend(this.index); + if (this.isSpecial) { + this.state = State.InSpecialTag; + this.sequenceIndex = 0; + } + else { + this.state = State.Text; + } + this.sectionStart = this.index + 1; + } + else if (c === CharCodes.Slash) { + this.state = State.InSelfClosingTag; + } + else if (!isWhitespace(c)) { + this.state = State.InAttributeName; + this.sectionStart = this.index; + } + } + stateInSelfClosingTag(c) { + if (c === CharCodes.Gt) { + this.cbs.onselfclosingtag(this.index); + this.state = State.Text; + this.sectionStart = this.index + 1; + this.isSpecial = false; // Reset special state, in case of self-closing special tags + } + else if (!isWhitespace(c)) { + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + } + stateInAttributeName(c) { + if (c === CharCodes.Eq || isEndOfTagSection(c)) { + this.cbs.onattribname(this.sectionStart, this.index); + this.sectionStart = this.index; + this.state = State.AfterAttributeName; + this.stateAfterAttributeName(c); + } + } + stateAfterAttributeName(c) { + if (c === CharCodes.Eq) { + this.state = State.BeforeAttributeValue; + } + else if (c === CharCodes.Slash || c === CharCodes.Gt) { + this.cbs.onattribend(QuoteType.NoValue, this.sectionStart); + this.sectionStart = -1; + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + else if (!isWhitespace(c)) { + this.cbs.onattribend(QuoteType.NoValue, this.sectionStart); + this.state = State.InAttributeName; + this.sectionStart = this.index; + } + } + stateBeforeAttributeValue(c) { + if (c === CharCodes.DoubleQuote) { + this.state = State.InAttributeValueDq; + this.sectionStart = this.index + 1; + } + else if (c === CharCodes.SingleQuote) { + this.state = State.InAttributeValueSq; + this.sectionStart = this.index + 1; + } + else if (!isWhitespace(c)) { + this.sectionStart = this.index; + this.state = State.InAttributeValueNq; + this.stateInAttributeValueNoQuotes(c); // Reconsume token + } + } + handleInAttributeValue(c, quote) { + if (c === quote || + (!this.decodeEntities && this.fastForwardTo(quote))) { + this.cbs.onattribdata(this.sectionStart, this.index); + this.sectionStart = -1; + this.cbs.onattribend(quote === CharCodes.DoubleQuote + ? QuoteType.Double + : QuoteType.Single, this.index + 1); + this.state = State.BeforeAttributeName; + } + else if (this.decodeEntities && c === CharCodes.Amp) { + this.startEntity(); + } + } + stateInAttributeValueDoubleQuotes(c) { + this.handleInAttributeValue(c, CharCodes.DoubleQuote); + } + stateInAttributeValueSingleQuotes(c) { + this.handleInAttributeValue(c, CharCodes.SingleQuote); + } + stateInAttributeValueNoQuotes(c) { + if (isWhitespace(c) || c === CharCodes.Gt) { + this.cbs.onattribdata(this.sectionStart, this.index); + this.sectionStart = -1; + this.cbs.onattribend(QuoteType.Unquoted, this.index); + this.state = State.BeforeAttributeName; + this.stateBeforeAttributeName(c); + } + else if (this.decodeEntities && c === CharCodes.Amp) { + this.startEntity(); + } + } + stateBeforeDeclaration(c) { + if (c === CharCodes.OpeningSquareBracket) { + this.state = State.CDATASequence; + this.sequenceIndex = 0; + } + else { + this.state = + c === CharCodes.Dash + ? State.BeforeComment + : State.InDeclaration; + } + } + stateInDeclaration(c) { + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.cbs.ondeclaration(this.sectionStart, this.index); + this.state = State.Text; + this.sectionStart = this.index + 1; + } + } + stateInProcessingInstruction(c) { + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.cbs.onprocessinginstruction(this.sectionStart, this.index); + this.state = State.Text; + this.sectionStart = this.index + 1; + } + } + stateBeforeComment(c) { + if (c === CharCodes.Dash) { + this.state = State.InCommentLike; + this.currentSequence = Sequences.CommentEnd; + // Allow short comments (eg. ) + this.sequenceIndex = 2; + this.sectionStart = this.index + 1; + } + else { + this.state = State.InDeclaration; + } + } + stateInSpecialComment(c) { + if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) { + this.cbs.oncomment(this.sectionStart, this.index, 0); + this.state = State.Text; + this.sectionStart = this.index + 1; + } + } + stateBeforeSpecialS(c) { + const lower = c | 0x20; + if (lower === Sequences.ScriptEnd[3]) { + this.startSpecial(Sequences.ScriptEnd, 4); + } + else if (lower === Sequences.StyleEnd[3]) { + this.startSpecial(Sequences.StyleEnd, 4); + } + else { + this.state = State.InTagName; + this.stateInTagName(c); // Consume the token again + } + } + stateBeforeSpecialT(c) { + const lower = c | 0x20; + if (lower === Sequences.TitleEnd[3]) { + this.startSpecial(Sequences.TitleEnd, 4); + } + else if (lower === Sequences.TextareaEnd[3]) { + this.startSpecial(Sequences.TextareaEnd, 4); + } + else { + this.state = State.InTagName; + this.stateInTagName(c); // Consume the token again + } + } + startEntity() { + this.baseState = this.state; + this.state = State.InEntity; + this.entityStart = this.index; + this.entityDecoder.startEntity(this.xmlMode + ? DecodingMode.Strict + : this.baseState === State.Text || + this.baseState === State.InSpecialTag + ? DecodingMode.Legacy + : DecodingMode.Attribute); + } + stateInEntity() { + const length = this.entityDecoder.write(this.buffer, this.index - this.offset); + // If `length` is positive, we are done with the entity. + if (length >= 0) { + this.state = this.baseState; + if (length === 0) { + this.index = this.entityStart; + } + } + else { + // Mark buffer as consumed. + this.index = this.offset + this.buffer.length - 1; + } + } + /** + * Remove data that has already been consumed from the buffer. + */ + cleanup() { + // If we are inside of text or attributes, emit what we already have. + if (this.running && this.sectionStart !== this.index) { + if (this.state === State.Text || + (this.state === State.InSpecialTag && this.sequenceIndex === 0)) { + this.cbs.ontext(this.sectionStart, this.index); + this.sectionStart = this.index; + } + else if (this.state === State.InAttributeValueDq || + this.state === State.InAttributeValueSq || + this.state === State.InAttributeValueNq) { + this.cbs.onattribdata(this.sectionStart, this.index); + this.sectionStart = this.index; + } + } + } + shouldContinue() { + return this.index < this.buffer.length + this.offset && this.running; + } + /** + * Iterates through the buffer, calling the function corresponding to the current state. + * + * States that are more likely to be hit are higher up, as a performance improvement. + */ + parse() { + while (this.shouldContinue()) { + const c = this.buffer.charCodeAt(this.index - this.offset); + switch (this.state) { + case State.Text: { + this.stateText(c); + break; + } + case State.SpecialStartSequence: { + this.stateSpecialStartSequence(c); + break; + } + case State.InSpecialTag: { + this.stateInSpecialTag(c); + break; + } + case State.CDATASequence: { + this.stateCDATASequence(c); + break; + } + case State.InAttributeValueDq: { + this.stateInAttributeValueDoubleQuotes(c); + break; + } + case State.InAttributeName: { + this.stateInAttributeName(c); + break; + } + case State.InCommentLike: { + this.stateInCommentLike(c); + break; + } + case State.InSpecialComment: { + this.stateInSpecialComment(c); + break; + } + case State.BeforeAttributeName: { + this.stateBeforeAttributeName(c); + break; + } + case State.InTagName: { + this.stateInTagName(c); + break; + } + case State.InClosingTagName: { + this.stateInClosingTagName(c); + break; + } + case State.BeforeTagName: { + this.stateBeforeTagName(c); + break; + } + case State.AfterAttributeName: { + this.stateAfterAttributeName(c); + break; + } + case State.InAttributeValueSq: { + this.stateInAttributeValueSingleQuotes(c); + break; + } + case State.BeforeAttributeValue: { + this.stateBeforeAttributeValue(c); + break; + } + case State.BeforeClosingTagName: { + this.stateBeforeClosingTagName(c); + break; + } + case State.AfterClosingTagName: { + this.stateAfterClosingTagName(c); + break; + } + case State.BeforeSpecialS: { + this.stateBeforeSpecialS(c); + break; + } + case State.BeforeSpecialT: { + this.stateBeforeSpecialT(c); + break; + } + case State.InAttributeValueNq: { + this.stateInAttributeValueNoQuotes(c); + break; + } + case State.InSelfClosingTag: { + this.stateInSelfClosingTag(c); + break; + } + case State.InDeclaration: { + this.stateInDeclaration(c); + break; + } + case State.BeforeDeclaration: { + this.stateBeforeDeclaration(c); + break; + } + case State.BeforeComment: { + this.stateBeforeComment(c); + break; + } + case State.InProcessingInstruction: { + this.stateInProcessingInstruction(c); + break; + } + case State.InEntity: { + this.stateInEntity(); + break; + } + } + this.index++; + } + this.cleanup(); + } + finish() { + if (this.state === State.InEntity) { + this.entityDecoder.end(); + this.state = this.baseState; + } + this.handleTrailingData(); + this.cbs.onend(); + } + /** Handle any trailing data. */ + handleTrailingData() { + const endIndex = this.buffer.length + this.offset; + // If there is no remaining data, we are done. + if (this.sectionStart >= endIndex) { + return; + } + if (this.state === State.InCommentLike) { + if (this.currentSequence === Sequences.CdataEnd) { + this.cbs.oncdata(this.sectionStart, endIndex, 0); + } + else { + this.cbs.oncomment(this.sectionStart, endIndex, 0); + } + } + else if (this.state === State.InTagName || + this.state === State.BeforeAttributeName || + this.state === State.BeforeAttributeValue || + this.state === State.AfterAttributeName || + this.state === State.InAttributeName || + this.state === State.InAttributeValueSq || + this.state === State.InAttributeValueDq || + this.state === State.InAttributeValueNq || + this.state === State.InClosingTagName) { + /* + * If we are currently in an opening or closing tag, us not calling the + * respective callback signals that the tag should be ignored. + */ + } + else { + this.cbs.ontext(this.sectionStart, endIndex); + } + } + emitCodePoint(cp, consumed) { + if (this.baseState !== State.Text && + this.baseState !== State.InSpecialTag) { + if (this.sectionStart < this.entityStart) { + this.cbs.onattribdata(this.sectionStart, this.entityStart); + } + this.sectionStart = this.entityStart + consumed; + this.index = this.sectionStart - 1; + this.cbs.onattribentity(cp); + } + else { + if (this.sectionStart < this.entityStart) { + this.cbs.ontext(this.sectionStart, this.entityStart); + } + this.sectionStart = this.entityStart + consumed; + this.index = this.sectionStart - 1; + this.cbs.ontextentity(cp, this.sectionStart); + } + } +} +//# sourceMappingURL=Tokenizer.js.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/Tokenizer.js.map b/node_modules/htmlparser2/lib/esm/Tokenizer.js.map new file mode 100644 index 0000000..01b7b49 --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/Tokenizer.js.map @@ -0,0 +1 @@ +{"version":3,"file":"Tokenizer.js","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["Tokenizer.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/WritableStream.d.ts b/node_modules/htmlparser2/lib/esm/WritableStream.d.ts new file mode 100644 index 0000000..0459e27 --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/WritableStream.d.ts @@ -0,0 +1,17 @@ +/// +/// +import { type Handler, type ParserOptions } from "./Parser.js"; +import { Writable } from "node:stream"; +/** + * WritableStream makes the `Parser` interface available as a NodeJS stream. + * + * @see Parser + */ +export declare class WritableStream extends Writable { + private readonly _parser; + private readonly _decoder; + constructor(cbs: Partial, options?: ParserOptions); + _write(chunk: string | Buffer, encoding: string, callback: () => void): void; + _final(callback: () => void): void; +} +//# sourceMappingURL=WritableStream.d.ts.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/WritableStream.d.ts.map b/node_modules/htmlparser2/lib/esm/WritableStream.d.ts.map new file mode 100644 index 0000000..dccb10e --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/WritableStream.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"WritableStream.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["WritableStream.ts"],"names":[],"mappings":";;AAAA,OAAO,EAAU,KAAK,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAKvE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQvC;;;;GAIG;AACH,qBAAa,cAAe,SAAQ,QAAQ;IACxC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAuB;gBAEpC,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,EAAE,aAAa;IAKjD,MAAM,CACX,KAAK,EAAE,MAAM,GAAG,MAAM,EACtB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,IAAI,GACrB,IAAI;IAOE,MAAM,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;CAI9C"} \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/WritableStream.js b/node_modules/htmlparser2/lib/esm/WritableStream.js new file mode 100644 index 0000000..bf6093e --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/WritableStream.js @@ -0,0 +1,32 @@ +import { Parser } from "./Parser.js"; +/* + * NOTE: If either of these two imports produces a type error, + * please update your @types/node dependency! + */ +import { Writable } from "node:stream"; +import { StringDecoder } from "node:string_decoder"; +// Following the example in https://nodejs.org/api/stream.html#stream_decoding_buffers_in_a_writable_stream +function isBuffer(_chunk, encoding) { + return encoding === "buffer"; +} +/** + * WritableStream makes the `Parser` interface available as a NodeJS stream. + * + * @see Parser + */ +export class WritableStream extends Writable { + constructor(cbs, options) { + super({ decodeStrings: false }); + this._decoder = new StringDecoder(); + this._parser = new Parser(cbs, options); + } + _write(chunk, encoding, callback) { + this._parser.write(isBuffer(chunk, encoding) ? this._decoder.write(chunk) : chunk); + callback(); + } + _final(callback) { + this._parser.end(this._decoder.end()); + callback(); + } +} +//# sourceMappingURL=WritableStream.js.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/WritableStream.js.map b/node_modules/htmlparser2/lib/esm/WritableStream.js.map new file mode 100644 index 0000000..22eba8e --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/WritableStream.js.map @@ -0,0 +1 @@ +{"version":3,"file":"WritableStream.js","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["WritableStream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAoC,MAAM,aAAa,CAAC;AACvE;;;GAGG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,2GAA2G;AAC3G,SAAS,QAAQ,CAAC,MAAuB,EAAE,QAAgB;IACvD,OAAO,QAAQ,KAAK,QAAQ,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,MAAM,OAAO,cAAe,SAAQ,QAAQ;IAIxC,YAAY,GAAqB,EAAE,OAAuB;QACtD,KAAK,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC,CAAC;QAHnB,aAAQ,GAAG,IAAI,aAAa,EAAE,CAAC;QAI5C,IAAI,CAAC,OAAO,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IAC5C,CAAC;IAEQ,MAAM,CACX,KAAsB,EACtB,QAAgB,EAChB,QAAoB;QAEpB,IAAI,CAAC,OAAO,CAAC,KAAK,CACd,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CACjE,CAAC;QACF,QAAQ,EAAE,CAAC;IACf,CAAC;IAEQ,MAAM,CAAC,QAAoB;QAChC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;QACtC,QAAQ,EAAE,CAAC;IACf,CAAC;CACJ"} \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/index.d.ts b/node_modules/htmlparser2/lib/esm/index.d.ts new file mode 100644 index 0000000..c906b7f --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/index.d.ts @@ -0,0 +1,54 @@ +import { Parser, type ParserOptions } from "./Parser.js"; +export type { Handler, ParserOptions } from "./Parser.js"; +export { Parser } from "./Parser.js"; +import { type DomHandlerOptions, type ChildNode, type Element, type Document } from "domhandler"; +export { DomHandler, DomHandler as DefaultHandler, type DomHandlerOptions, } from "domhandler"; +export type Options = ParserOptions & DomHandlerOptions; +/** + * Parses the data, returns the resulting document. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM handler. + */ +export declare function parseDocument(data: string, options?: Options): Document; +/** + * Parses data, returns an array of the root nodes. + * + * Note that the root nodes still have a `Document` node as their parent. + * Use `parseDocument` to get the `Document` node instead. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM handler. + * @deprecated Use `parseDocument` instead. + */ +export declare function parseDOM(data: string, options?: Options): ChildNode[]; +/** + * Creates a parser instance, with an attached DOM handler. + * + * @param callback A callback that will be called once parsing has been completed, with the resulting document. + * @param options Optional options for the parser and DOM handler. + * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM. + */ +export declare function createDocumentStream(callback: (error: Error | null, document: Document) => void, options?: Options, elementCallback?: (element: Element) => void): Parser; +/** + * Creates a parser instance, with an attached DOM handler. + * + * @param callback A callback that will be called once parsing has been completed, with an array of root nodes. + * @param options Optional options for the parser and DOM handler. + * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM. + * @deprecated Use `createDocumentStream` instead. + */ +export declare function createDomStream(callback: (error: Error | null, dom: ChildNode[]) => void, options?: Options, elementCallback?: (element: Element) => void): Parser; +export { default as Tokenizer, type Callbacks as TokenizerCallbacks, QuoteType, } from "./Tokenizer.js"; +export * as ElementType from "domelementtype"; +import { type Feed } from "domutils"; +export { getFeed, type Feed } from "domutils"; +/** + * Parse a feed. + * + * @param feed The feed that should be parsed, as a string. + * @param options Optionally, options for parsing. When using this, you should set `xmlMode` to `true`. + */ +export declare function parseFeed(feed: string, options?: Options): Feed | null; +export * as DomUtils from "domutils"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/index.d.ts.map b/node_modules/htmlparser2/lib/esm/index.d.ts.map new file mode 100644 index 0000000..a3745e3 --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAEH,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,QAAQ,EAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACH,UAAU,EAEV,UAAU,IAAI,cAAc,EAC5B,KAAK,iBAAiB,GACzB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,iBAAiB,CAAC;AAIxD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,CAIvE;AACD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,EAAE,CAErE;AACD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,EAC3D,OAAO,CAAC,EAAE,OAAO,EACjB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAC7C,MAAM,CAOR;AACD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,IAAI,EACzD,OAAO,CAAC,EAAE,OAAO,EACjB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAC7C,MAAM,CAGR;AAED,OAAO,EACH,OAAO,IAAI,SAAS,EACpB,KAAK,SAAS,IAAI,kBAAkB,EACpC,SAAS,GACZ,MAAM,gBAAgB,CAAC;AAMxB,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAW,KAAK,IAAI,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,UAAU,CAAC;AAI9C;;;;;GAKG;AACH,wBAAgB,SAAS,CACrB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,OAAiC,GAC3C,IAAI,GAAG,IAAI,CAEb;AAED,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC"} \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/index.js b/node_modules/htmlparser2/lib/esm/index.js new file mode 100644 index 0000000..38bfe96 --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/index.js @@ -0,0 +1,74 @@ +import { Parser } from "./Parser.js"; +export { Parser } from "./Parser.js"; +import { DomHandler, } from "domhandler"; +export { DomHandler, +// Old name for DomHandler +DomHandler as DefaultHandler, } from "domhandler"; +// Helper methods +/** + * Parses the data, returns the resulting document. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM handler. + */ +export function parseDocument(data, options) { + const handler = new DomHandler(undefined, options); + new Parser(handler, options).end(data); + return handler.root; +} +/** + * Parses data, returns an array of the root nodes. + * + * Note that the root nodes still have a `Document` node as their parent. + * Use `parseDocument` to get the `Document` node instead. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM handler. + * @deprecated Use `parseDocument` instead. + */ +export function parseDOM(data, options) { + return parseDocument(data, options).children; +} +/** + * Creates a parser instance, with an attached DOM handler. + * + * @param callback A callback that will be called once parsing has been completed, with the resulting document. + * @param options Optional options for the parser and DOM handler. + * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM. + */ +export function createDocumentStream(callback, options, elementCallback) { + const handler = new DomHandler((error) => callback(error, handler.root), options, elementCallback); + return new Parser(handler, options); +} +/** + * Creates a parser instance, with an attached DOM handler. + * + * @param callback A callback that will be called once parsing has been completed, with an array of root nodes. + * @param options Optional options for the parser and DOM handler. + * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM. + * @deprecated Use `createDocumentStream` instead. + */ +export function createDomStream(callback, options, elementCallback) { + const handler = new DomHandler(callback, options, elementCallback); + return new Parser(handler, options); +} +export { default as Tokenizer, QuoteType, } from "./Tokenizer.js"; +/* + * All of the following exports exist for backwards-compatibility. + * They should probably be removed eventually. + */ +export * as ElementType from "domelementtype"; +import { getFeed } from "domutils"; +export { getFeed } from "domutils"; +const parseFeedDefaultOptions = { xmlMode: true }; +/** + * Parse a feed. + * + * @param feed The feed that should be parsed, as a string. + * @param options Optionally, options for parsing. When using this, you should set `xmlMode` to `true`. + */ +export function parseFeed(feed, options = parseFeedDefaultOptions) { + return getFeed(parseDOM(feed, options)); +} +export * as DomUtils from "domutils"; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/index.js.map b/node_modules/htmlparser2/lib/esm/index.js.map new file mode 100644 index 0000000..e6c9566 --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAsB,MAAM,aAAa,CAAC;AAEzD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EACH,UAAU,GAKb,MAAM,YAAY,CAAC;AAEpB,OAAO,EACH,UAAU;AACV,0BAA0B;AAC1B,UAAU,IAAI,cAAc,GAE/B,MAAM,YAAY,CAAC;AAIpB,iBAAiB;AAEjB;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,OAAiB;IACzD,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACnD,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,OAAO,CAAC,IAAI,CAAC;AACxB,CAAC;AACD;;;;;;;;;GASG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY,EAAE,OAAiB;IACpD,OAAO,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC;AACjD,CAAC;AACD;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAChC,QAA2D,EAC3D,OAAiB,EACjB,eAA4C;IAE5C,MAAM,OAAO,GAAe,IAAI,UAAU,CACtC,CAAC,KAAmB,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EACtD,OAAO,EACP,eAAe,CAClB,CAAC;IACF,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AACD;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAC3B,QAAyD,EACzD,OAAiB,EACjB,eAA4C;IAE5C,MAAM,OAAO,GAAG,IAAI,UAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IACnE,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAED,OAAO,EACH,OAAO,IAAI,SAAS,EAEpB,SAAS,GACZ,MAAM,gBAAgB,CAAC;AAExB;;;GAGG;AACH,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAa,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAa,MAAM,UAAU,CAAC;AAE9C,MAAM,uBAAuB,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAElD;;;;;GAKG;AACH,MAAM,UAAU,SAAS,CACrB,IAAY,EACZ,UAAmB,uBAAuB;IAE1C,OAAO,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC"} \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/esm/package.json b/node_modules/htmlparser2/lib/esm/package.json new file mode 100644 index 0000000..089153b --- /dev/null +++ b/node_modules/htmlparser2/lib/esm/package.json @@ -0,0 +1 @@ +{"type":"module"} diff --git a/node_modules/htmlparser2/lib/index.d.ts b/node_modules/htmlparser2/lib/index.d.ts new file mode 100644 index 0000000..c906b7f --- /dev/null +++ b/node_modules/htmlparser2/lib/index.d.ts @@ -0,0 +1,54 @@ +import { Parser, type ParserOptions } from "./Parser.js"; +export type { Handler, ParserOptions } from "./Parser.js"; +export { Parser } from "./Parser.js"; +import { type DomHandlerOptions, type ChildNode, type Element, type Document } from "domhandler"; +export { DomHandler, DomHandler as DefaultHandler, type DomHandlerOptions, } from "domhandler"; +export type Options = ParserOptions & DomHandlerOptions; +/** + * Parses the data, returns the resulting document. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM handler. + */ +export declare function parseDocument(data: string, options?: Options): Document; +/** + * Parses data, returns an array of the root nodes. + * + * Note that the root nodes still have a `Document` node as their parent. + * Use `parseDocument` to get the `Document` node instead. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM handler. + * @deprecated Use `parseDocument` instead. + */ +export declare function parseDOM(data: string, options?: Options): ChildNode[]; +/** + * Creates a parser instance, with an attached DOM handler. + * + * @param callback A callback that will be called once parsing has been completed, with the resulting document. + * @param options Optional options for the parser and DOM handler. + * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM. + */ +export declare function createDocumentStream(callback: (error: Error | null, document: Document) => void, options?: Options, elementCallback?: (element: Element) => void): Parser; +/** + * Creates a parser instance, with an attached DOM handler. + * + * @param callback A callback that will be called once parsing has been completed, with an array of root nodes. + * @param options Optional options for the parser and DOM handler. + * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM. + * @deprecated Use `createDocumentStream` instead. + */ +export declare function createDomStream(callback: (error: Error | null, dom: ChildNode[]) => void, options?: Options, elementCallback?: (element: Element) => void): Parser; +export { default as Tokenizer, type Callbacks as TokenizerCallbacks, QuoteType, } from "./Tokenizer.js"; +export * as ElementType from "domelementtype"; +import { type Feed } from "domutils"; +export { getFeed, type Feed } from "domutils"; +/** + * Parse a feed. + * + * @param feed The feed that should be parsed, as a string. + * @param options Optionally, options for parsing. When using this, you should set `xmlMode` to `true`. + */ +export declare function parseFeed(feed: string, options?: Options): Feed | null; +export * as DomUtils from "domutils"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/index.d.ts.map b/node_modules/htmlparser2/lib/index.d.ts.map new file mode 100644 index 0000000..a3745e3 --- /dev/null +++ b/node_modules/htmlparser2/lib/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACzD,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC1D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAEH,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACd,KAAK,OAAO,EACZ,KAAK,QAAQ,EAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EACH,UAAU,EAEV,UAAU,IAAI,cAAc,EAC5B,KAAK,iBAAiB,GACzB,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,OAAO,GAAG,aAAa,GAAG,iBAAiB,CAAC;AAIxD;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,QAAQ,CAIvE;AACD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,EAAE,CAErE;AACD;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAChC,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,QAAQ,EAAE,QAAQ,KAAK,IAAI,EAC3D,OAAO,CAAC,EAAE,OAAO,EACjB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAC7C,MAAM,CAOR;AACD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC3B,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,IAAI,EACzD,OAAO,CAAC,EAAE,OAAO,EACjB,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,GAC7C,MAAM,CAGR;AAED,OAAO,EACH,OAAO,IAAI,SAAS,EACpB,KAAK,SAAS,IAAI,kBAAkB,EACpC,SAAS,GACZ,MAAM,gBAAgB,CAAC;AAMxB,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAE9C,OAAO,EAAW,KAAK,IAAI,EAAE,MAAM,UAAU,CAAC;AAE9C,OAAO,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,MAAM,UAAU,CAAC;AAI9C;;;;;GAKG;AACH,wBAAgB,SAAS,CACrB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,OAAiC,GAC3C,IAAI,GAAG,IAAI,CAEb;AAED,OAAO,KAAK,QAAQ,MAAM,UAAU,CAAC"} \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/index.js b/node_modules/htmlparser2/lib/index.js new file mode 100644 index 0000000..a56fb98 --- /dev/null +++ b/node_modules/htmlparser2/lib/index.js @@ -0,0 +1,114 @@ +"use strict"; +var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + var desc = Object.getOwnPropertyDescriptor(m, k); + if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { + desc = { enumerable: true, get: function() { return m[k]; } }; + } + Object.defineProperty(o, k2, desc); +}) : (function(o, m, k, k2) { + if (k2 === undefined) k2 = k; + o[k2] = m[k]; +})); +var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { + Object.defineProperty(o, "default", { enumerable: true, value: v }); +}) : function(o, v) { + o["default"] = v; +}); +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); + __setModuleDefault(result, mod); + return result; +}; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.DomUtils = exports.parseFeed = exports.getFeed = exports.ElementType = exports.QuoteType = exports.Tokenizer = exports.createDomStream = exports.createDocumentStream = exports.parseDOM = exports.parseDocument = exports.DefaultHandler = exports.DomHandler = exports.Parser = void 0; +var Parser_js_1 = require("./Parser.js"); +var Parser_js_2 = require("./Parser.js"); +Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return Parser_js_2.Parser; } }); +var domhandler_1 = require("domhandler"); +var domhandler_2 = require("domhandler"); +Object.defineProperty(exports, "DomHandler", { enumerable: true, get: function () { return domhandler_2.DomHandler; } }); +// Old name for DomHandler +Object.defineProperty(exports, "DefaultHandler", { enumerable: true, get: function () { return domhandler_2.DomHandler; } }); +// Helper methods +/** + * Parses the data, returns the resulting document. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM handler. + */ +function parseDocument(data, options) { + var handler = new domhandler_1.DomHandler(undefined, options); + new Parser_js_1.Parser(handler, options).end(data); + return handler.root; +} +exports.parseDocument = parseDocument; +/** + * Parses data, returns an array of the root nodes. + * + * Note that the root nodes still have a `Document` node as their parent. + * Use `parseDocument` to get the `Document` node instead. + * + * @param data The data that should be parsed. + * @param options Optional options for the parser and DOM handler. + * @deprecated Use `parseDocument` instead. + */ +function parseDOM(data, options) { + return parseDocument(data, options).children; +} +exports.parseDOM = parseDOM; +/** + * Creates a parser instance, with an attached DOM handler. + * + * @param callback A callback that will be called once parsing has been completed, with the resulting document. + * @param options Optional options for the parser and DOM handler. + * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM. + */ +function createDocumentStream(callback, options, elementCallback) { + var handler = new domhandler_1.DomHandler(function (error) { return callback(error, handler.root); }, options, elementCallback); + return new Parser_js_1.Parser(handler, options); +} +exports.createDocumentStream = createDocumentStream; +/** + * Creates a parser instance, with an attached DOM handler. + * + * @param callback A callback that will be called once parsing has been completed, with an array of root nodes. + * @param options Optional options for the parser and DOM handler. + * @param elementCallback An optional callback that will be called every time a tag has been completed inside of the DOM. + * @deprecated Use `createDocumentStream` instead. + */ +function createDomStream(callback, options, elementCallback) { + var handler = new domhandler_1.DomHandler(callback, options, elementCallback); + return new Parser_js_1.Parser(handler, options); +} +exports.createDomStream = createDomStream; +var Tokenizer_js_1 = require("./Tokenizer.js"); +Object.defineProperty(exports, "Tokenizer", { enumerable: true, get: function () { return __importDefault(Tokenizer_js_1).default; } }); +Object.defineProperty(exports, "QuoteType", { enumerable: true, get: function () { return Tokenizer_js_1.QuoteType; } }); +/* + * All of the following exports exist for backwards-compatibility. + * They should probably be removed eventually. + */ +exports.ElementType = __importStar(require("domelementtype")); +var domutils_1 = require("domutils"); +var domutils_2 = require("domutils"); +Object.defineProperty(exports, "getFeed", { enumerable: true, get: function () { return domutils_2.getFeed; } }); +var parseFeedDefaultOptions = { xmlMode: true }; +/** + * Parse a feed. + * + * @param feed The feed that should be parsed, as a string. + * @param options Optionally, options for parsing. When using this, you should set `xmlMode` to `true`. + */ +function parseFeed(feed, options) { + if (options === void 0) { options = parseFeedDefaultOptions; } + return (0, domutils_1.getFeed)(parseDOM(feed, options)); +} +exports.parseFeed = parseFeed; +exports.DomUtils = __importStar(require("domutils")); +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/htmlparser2/lib/index.js.map b/node_modules/htmlparser2/lib/index.js.map new file mode 100644 index 0000000..e8c2f54 --- /dev/null +++ b/node_modules/htmlparser2/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"https://raw.githubusercontent.com/fb55/htmlparser2/e2939a6c7b05d5c4845b4a2e458a4fc0a65a321d/src/","sources":["index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,yCAAyD;AAEzD,yCAAqC;AAA5B,mGAAA,MAAM,OAAA;AAEf,yCAMoB;AAEpB,yCAKoB;AAJhB,wGAAA,UAAU,OAAA;AACV,0BAA0B;AAC1B,4GAAA,UAAU,OAAkB;AAMhC,iBAAiB;AAEjB;;;;;GAKG;AACH,SAAgB,aAAa,CAAC,IAAY,EAAE,OAAiB;IACzD,IAAM,OAAO,GAAG,IAAI,uBAAU,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACnD,IAAI,kBAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACvC,OAAO,OAAO,CAAC,IAAI,CAAC;AACxB,CAAC;AAJD,sCAIC;AACD;;;;;;;;;GASG;AACH,SAAgB,QAAQ,CAAC,IAAY,EAAE,OAAiB;IACpD,OAAO,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC;AACjD,CAAC;AAFD,4BAEC;AACD;;;;;;GAMG;AACH,SAAgB,oBAAoB,CAChC,QAA2D,EAC3D,OAAiB,EACjB,eAA4C;IAE5C,IAAM,OAAO,GAAe,IAAI,uBAAU,CACtC,UAAC,KAAmB,IAAK,OAAA,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,EAA7B,CAA6B,EACtD,OAAO,EACP,eAAe,CAClB,CAAC;IACF,OAAO,IAAI,kBAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAXD,oDAWC;AACD;;;;;;;GAOG;AACH,SAAgB,eAAe,CAC3B,QAAyD,EACzD,OAAiB,EACjB,eAA4C;IAE5C,IAAM,OAAO,GAAG,IAAI,uBAAU,CAAC,QAAQ,EAAE,OAAO,EAAE,eAAe,CAAC,CAAC;IACnE,OAAO,IAAI,kBAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AACxC,CAAC;AAPD,0CAOC;AAED,+CAIwB;AAHpB,0HAAA,OAAO,OAAa;AAEpB,yGAAA,SAAS,OAAA;AAGb;;;GAGG;AACH,8DAA8C;AAE9C,qCAA8C;AAE9C,qCAA8C;AAArC,mGAAA,OAAO,OAAA;AAEhB,IAAM,uBAAuB,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAElD;;;;;GAKG;AACH,SAAgB,SAAS,CACrB,IAAY,EACZ,OAA0C;IAA1C,wBAAA,EAAA,iCAA0C;IAE1C,OAAO,IAAA,kBAAO,EAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5C,CAAC;AALD,8BAKC;AAED,qDAAqC"} \ No newline at end of file diff --git a/node_modules/htmlparser2/package.json b/node_modules/htmlparser2/package.json new file mode 100644 index 0000000..708f6a4 --- /dev/null +++ b/node_modules/htmlparser2/package.json @@ -0,0 +1,97 @@ +{ + "name": "htmlparser2", + "description": "Fast & forgiving HTML/XML parser", + "version": "9.1.0", + "author": "Felix Boehm ", + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "MIT", + "sideEffects": false, + "keywords": [ + "html", + "parser", + "streams", + "xml", + "dom", + "rss", + "feed", + "atom" + ], + "repository": { + "type": "git", + "url": "git://github.com/fb55/htmlparser2.git" + }, + "directories": { + "lib": "lib/" + }, + "main": "lib/index.js", + "types": "lib/index.d.ts", + "module": "lib/esm/index.js", + "exports": { + ".": { + "require": "./lib/index.js", + "import": "./lib/esm/index.js" + }, + "./lib/WritableStream": { + "require": "./lib/WritableStream.js", + "import": "./lib/esm/WritableStream.js" + } + }, + "files": [ + "lib/**/*" + ], + "scripts": { + "test": "npm run test:jest && npm run lint", + "test:jest": "jest", + "lint": "npm run lint:es && npm run lint:prettier", + "lint:es": "eslint src", + "lint:prettier": "npm run format:prettier:raw -- --check", + "format": "npm run format:es && npm run format:prettier", + "format:es": "npm run lint:es -- --fix", + "format:prettier": "npm run format:prettier:raw -- --write", + "format:prettier:raw": "prettier '**/*.{ts,md,json,yml}'", + "build": "npm run build:cjs && npm run build:esm", + "build:cjs": "tsc --sourceRoot https://raw.githubusercontent.com/fb55/htmlparser2/$(git rev-parse HEAD)/src/", + "build:esm": "npm run build:cjs -- --module esnext --target es2019 --outDir lib/esm && echo '{\"type\":\"module\"}' > lib/esm/package.json", + "prepare": "npm run build" + }, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.1.0", + "entities": "^4.5.0" + }, + "devDependencies": { + "@types/jest": "^29.5.11", + "@types/node": "^20.10.6", + "@typescript-eslint/eslint-plugin": "^6.17.0", + "@typescript-eslint/parser": "^6.17.0", + "eslint": "^8.56.0", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-n": "^16.6.1", + "eslint-plugin-unicorn": "^50.0.1", + "jest": "^29.7.0", + "prettier": "^3.1.1", + "ts-jest": "^29.1.1", + "typescript": "^5.3.3" + }, + "jest": { + "preset": "ts-jest", + "testEnvironment": "node", + "coverageProvider": "v8", + "moduleNameMapper": { + "^(.*)\\.js$": [ + "$1", + "$1.js" + ] + } + }, + "prettier": { + "tabWidth": 4 + } +} diff --git a/node_modules/iconv-lite/.github/dependabot.yml b/node_modules/iconv-lite/.github/dependabot.yml new file mode 100644 index 0000000..e4a0e0a --- /dev/null +++ b/node_modules/iconv-lite/.github/dependabot.yml @@ -0,0 +1,11 @@ +# Please see the documentation for all configuration options: +# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "daily" + allow: + - dependency-type: production diff --git a/node_modules/iconv-lite/Changelog.md b/node_modules/iconv-lite/Changelog.md new file mode 100644 index 0000000..464549b --- /dev/null +++ b/node_modules/iconv-lite/Changelog.md @@ -0,0 +1,212 @@ +## 0.6.3 / 2021-05-23 + * Fix HKSCS encoding to prefer Big5 codes if both Big5 and HKSCS codes are possible (#264) + + +## 0.6.2 / 2020-07-08 + * Support Uint8Array-s decoding without conversion to Buffers, plus fix an edge case. + + +## 0.6.1 / 2020-06-28 + * Support Uint8Array-s directly when decoding (#246, by @gyzerok) + * Unify package.json version ranges to be strictly semver-compatible (#241) + * Fix minor issue in UTF-32 decoder's endianness detection code. + + +## 0.6.0 / 2020-06-08 + * Updated 'gb18030' encoding to :2005 edition (see https://github.com/whatwg/encoding/issues/22). + * Removed `iconv.extendNodeEncodings()` mechanism. It was deprecated 5 years ago and didn't work + in recent Node versions. + * Reworked Streaming API behavior in browser environments to fix #204. Streaming API will be + excluded by default in browser packs, saving ~100Kb bundle size, unless enabled explicitly using + `iconv.enableStreamingAPI(require('stream'))`. + * Updates to development environment & tests: + * Added ./test/webpack private package to test complex new use cases that need custom environment. + It's tested as a separate job in Travis CI. + * Updated generation code for the new EUC-KR index file format from Encoding Standard. + * Removed Buffer() constructor in tests (#197 by @gabrielschulhof). + + +## 0.5.2 / 2020-06-08 + * Added `iconv.getEncoder()` and `iconv.getDecoder()` methods to typescript definitions (#229). + * Fixed semver version to 6.1.2 to support Node 8.x (by @tanandara). + * Capped iconv version to 2.x as 3.x has dropped support for older Node versions. + * Switched from instanbul to c8 for code coverage. + + +## 0.5.1 / 2020-01-18 + + * Added cp720 encoding (#221, by @kr-deps) + * (minor) Changed Changelog.md formatting to use h2. + + +## 0.5.0 / 2019-06-26 + + * Added UTF-32 encoding, both little-endian and big-endian variants (UTF-32LE, UTF32-BE). If endianness + is not provided for decoding, it's deduced automatically from the stream using a heuristic similar to + what we use in UTF-16. (great work in #216 by @kshetline) + * Several minor updates to README (#217 by @oldj, plus some more) + * Added Node versions 10 and 12 to Travis test harness. + + +## 0.4.24 / 2018-08-22 + + * Added MIK encoding (#196, by @Ivan-Kalatchev) + + +## 0.4.23 / 2018-05-07 + + * Fix deprecation warning in Node v10 due to the last usage of `new Buffer` (#185, by @felixbuenemann) + * Switched from NodeBuffer to Buffer in typings (#155 by @felixfbecker, #186 by @larssn) + + +## 0.4.22 / 2018-05-05 + + * Use older semver style for dependencies to be compatible with Node version 0.10 (#182, by @dougwilson) + * Fix tests to accomodate fixes in Node v10 (#182, by @dougwilson) + + +## 0.4.21 / 2018-04-06 + + * Fix encoding canonicalization (#156) + * Fix the paths in the "browser" field in package.json (#174 by @LMLB) + * Removed "contributors" section in package.json - see Git history instead. + + +## 0.4.20 / 2018-04-06 + + * Updated `new Buffer()` usages with recommended replacements as it's being deprecated in Node v10 (#176, #178 by @ChALkeR) + + +## 0.4.19 / 2017-09-09 + + * Fixed iso8859-1 codec regression in handling untranslatable characters (#162, caused by #147) + * Re-generated windows1255 codec, because it was updated in iconv project + * Fixed grammar in error message when iconv-lite is loaded with encoding other than utf8 + + +## 0.4.18 / 2017-06-13 + + * Fixed CESU-8 regression in Node v8. + + +## 0.4.17 / 2017-04-22 + + * Updated typescript definition file to support Angular 2 AoT mode (#153 by @larssn) + + +## 0.4.16 / 2017-04-22 + + * Added support for React Native (#150) + * Changed iso8859-1 encoding to usine internal 'binary' encoding, as it's the same thing (#147 by @mscdex) + * Fixed typo in Readme (#138 by @jiangzhuo) + * Fixed build for Node v6.10+ by making correct version comparison + * Added a warning if iconv-lite is loaded not as utf-8 (see #142) + + +## 0.4.15 / 2016-11-21 + + * Fixed typescript type definition (#137) + + +## 0.4.14 / 2016-11-20 + + * Preparation for v1.0 + * Added Node v6 and latest Node versions to Travis CI test rig + * Deprecated Node v0.8 support + * Typescript typings (@larssn) + * Fix encoding of Euro character in GB 18030 (inspired by @lygstate) + * Add ms prefix to dbcs windows encodings (@rokoroku) + + +## 0.4.13 / 2015-10-01 + + * Fix silly mistake in deprecation notice. + + +## 0.4.12 / 2015-09-26 + + * Node v4 support: + * Added CESU-8 decoding (#106) + * Added deprecation notice for `extendNodeEncodings` + * Added Travis tests for Node v4 and io.js latest (#105 by @Mithgol) + + +## 0.4.11 / 2015-07-03 + + * Added CESU-8 encoding. + + +## 0.4.10 / 2015-05-26 + + * Changed UTF-16 endianness heuristic to take into account any ASCII chars, not + just spaces. This should minimize the importance of "default" endianness. + + +## 0.4.9 / 2015-05-24 + + * Streamlined BOM handling: strip BOM by default, add BOM when encoding if + addBOM: true. Added docs to Readme. + * UTF16 now uses UTF16-LE by default. + * Fixed minor issue with big5 encoding. + * Added io.js testing on Travis; updated node-iconv version to test against. + Now we just skip testing SBCS encodings that node-iconv doesn't support. + * (internal refactoring) Updated codec interface to use classes. + * Use strict mode in all files. + + +## 0.4.8 / 2015-04-14 + + * added alias UNICODE-1-1-UTF-7 for UTF-7 encoding (#94) + + +## 0.4.7 / 2015-02-05 + + * stop official support of Node.js v0.8. Should still work, but no guarantees. + reason: Packages needed for testing are hard to get on Travis CI. + * work in environment where Object.prototype is monkey patched with enumerable + props (#89). + + +## 0.4.6 / 2015-01-12 + + * fix rare aliases of single-byte encodings (thanks @mscdex) + * double the timeout for dbcs tests to make them less flaky on travis + + +## 0.4.5 / 2014-11-20 + + * fix windows-31j and x-sjis encoding support (@nleush) + * minor fix: undefined variable reference when internal error happens + + +## 0.4.4 / 2014-07-16 + + * added encodings UTF-7 (RFC2152) and UTF-7-IMAP (RFC3501 Section 5.1.3) + * fixed streaming base64 encoding + + +## 0.4.3 / 2014-06-14 + + * added encodings UTF-16BE and UTF-16 with BOM + + +## 0.4.2 / 2014-06-12 + + * don't throw exception if `extendNodeEncodings()` is called more than once + + +## 0.4.1 / 2014-06-11 + + * codepage 808 added + + +## 0.4.0 / 2014-06-10 + + * code is rewritten from scratch + * all widespread encodings are supported + * streaming interface added + * browserify compatibility added + * (optional) extend core primitive encodings to make usage even simpler + * moved from vows to mocha as the testing framework + + diff --git a/node_modules/iconv-lite/LICENSE b/node_modules/iconv-lite/LICENSE new file mode 100644 index 0000000..d518d83 --- /dev/null +++ b/node_modules/iconv-lite/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) 2011 Alexander Shtuchkin + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + diff --git a/node_modules/iconv-lite/README.md b/node_modules/iconv-lite/README.md new file mode 100644 index 0000000..3c97f87 --- /dev/null +++ b/node_modules/iconv-lite/README.md @@ -0,0 +1,130 @@ +## iconv-lite: Pure JS character encoding conversion + + * No need for native code compilation. Quick to install, works on Windows and in sandboxed environments like [Cloud9](http://c9.io). + * Used in popular projects like [Express.js (body_parser)](https://github.com/expressjs/body-parser), + [Grunt](http://gruntjs.com/), [Nodemailer](http://www.nodemailer.com/), [Yeoman](http://yeoman.io/) and others. + * Faster than [node-iconv](https://github.com/bnoordhuis/node-iconv) (see below for performance comparison). + * Intuitive encode/decode API, including Streaming support. + * In-browser usage via [browserify](https://github.com/substack/node-browserify) or [webpack](https://webpack.js.org/) (~180kb gzip compressed with Buffer shim included). + * Typescript [type definition file](https://github.com/ashtuchkin/iconv-lite/blob/master/lib/index.d.ts) included. + * React Native is supported (need to install `stream` module to enable Streaming API). + * License: MIT. + +[![NPM Stats](https://nodei.co/npm/iconv-lite.png)](https://npmjs.org/package/iconv-lite/) +[![Build Status](https://travis-ci.org/ashtuchkin/iconv-lite.svg?branch=master)](https://travis-ci.org/ashtuchkin/iconv-lite) +[![npm](https://img.shields.io/npm/v/iconv-lite.svg)](https://npmjs.org/package/iconv-lite/) +[![npm downloads](https://img.shields.io/npm/dm/iconv-lite.svg)](https://npmjs.org/package/iconv-lite/) +[![npm bundle size](https://img.shields.io/bundlephobia/min/iconv-lite.svg)](https://npmjs.org/package/iconv-lite/) + +## Usage +### Basic API +```javascript +var iconv = require('iconv-lite'); + +// Convert from an encoded buffer to a js string. +str = iconv.decode(Buffer.from([0x68, 0x65, 0x6c, 0x6c, 0x6f]), 'win1251'); + +// Convert from a js string to an encoded buffer. +buf = iconv.encode("Sample input string", 'win1251'); + +// Check if encoding is supported +iconv.encodingExists("us-ascii") +``` + +### Streaming API +```javascript + +// Decode stream (from binary data stream to js strings) +http.createServer(function(req, res) { + var converterStream = iconv.decodeStream('win1251'); + req.pipe(converterStream); + + converterStream.on('data', function(str) { + console.log(str); // Do something with decoded strings, chunk-by-chunk. + }); +}); + +// Convert encoding streaming example +fs.createReadStream('file-in-win1251.txt') + .pipe(iconv.decodeStream('win1251')) + .pipe(iconv.encodeStream('ucs2')) + .pipe(fs.createWriteStream('file-in-ucs2.txt')); + +// Sugar: all encode/decode streams have .collect(cb) method to accumulate data. +http.createServer(function(req, res) { + req.pipe(iconv.decodeStream('win1251')).collect(function(err, body) { + assert(typeof body == 'string'); + console.log(body); // full request body string + }); +}); +``` + +## Supported encodings + + * All node.js native encodings: utf8, ucs2 / utf16-le, ascii, binary, base64, hex. + * Additional unicode encodings: utf16, utf16-be, utf-7, utf-7-imap, utf32, utf32-le, and utf32-be. + * All widespread singlebyte encodings: Windows 125x family, ISO-8859 family, + IBM/DOS codepages, Macintosh family, KOI8 family, all others supported by iconv library. + Aliases like 'latin1', 'us-ascii' also supported. + * All widespread multibyte encodings: CP932, CP936, CP949, CP950, GB2312, GBK, GB18030, Big5, Shift_JIS, EUC-JP. + +See [all supported encodings on wiki](https://github.com/ashtuchkin/iconv-lite/wiki/Supported-Encodings). + +Most singlebyte encodings are generated automatically from [node-iconv](https://github.com/bnoordhuis/node-iconv). Thank you Ben Noordhuis and libiconv authors! + +Multibyte encodings are generated from [Unicode.org mappings](http://www.unicode.org/Public/MAPPINGS/) and [WHATWG Encoding Standard mappings](http://encoding.spec.whatwg.org/). Thank you, respective authors! + + +## Encoding/decoding speed + +Comparison with node-iconv module (1000x256kb, on MacBook Pro, Core i5/2.6 GHz, Node v0.12.0). +Note: your results may vary, so please always check on your hardware. + + operation iconv@2.1.4 iconv-lite@0.4.7 + ---------------------------------------------------------- + encode('win1251') ~96 Mb/s ~320 Mb/s + decode('win1251') ~95 Mb/s ~246 Mb/s + +## BOM handling + + * Decoding: BOM is stripped by default, unless overridden by passing `stripBOM: false` in options + (f.ex. `iconv.decode(buf, enc, {stripBOM: false})`). + A callback might also be given as a `stripBOM` parameter - it'll be called if BOM character was actually found. + * If you want to detect UTF-8 BOM when decoding other encodings, use [node-autodetect-decoder-stream](https://github.com/danielgindi/node-autodetect-decoder-stream) module. + * Encoding: No BOM added, unless overridden by `addBOM: true` option. + +## UTF-16 Encodings + +This library supports UTF-16LE, UTF-16BE and UTF-16 encodings. First two are straightforward, but UTF-16 is trying to be +smart about endianness in the following ways: + * Decoding: uses BOM and 'spaces heuristic' to determine input endianness. Default is UTF-16LE, but can be + overridden with `defaultEncoding: 'utf-16be'` option. Strips BOM unless `stripBOM: false`. + * Encoding: uses UTF-16LE and writes BOM by default. Use `addBOM: false` to override. + +## UTF-32 Encodings + +This library supports UTF-32LE, UTF-32BE and UTF-32 encodings. Like the UTF-16 encoding above, UTF-32 defaults to UTF-32LE, but uses BOM and 'spaces heuristics' to determine input endianness. + * The default of UTF-32LE can be overridden with the `defaultEncoding: 'utf-32be'` option. Strips BOM unless `stripBOM: false`. + * Encoding: uses UTF-32LE and writes BOM by default. Use `addBOM: false` to override. (`defaultEncoding: 'utf-32be'` can also be used here to change encoding.) + +## Other notes + +When decoding, be sure to supply a Buffer to decode() method, otherwise [bad things usually happen](https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding). +Untranslatable characters are set to ๏ฟฝ or ?. No transliteration is currently supported. +Node versions 0.10.31 and 0.11.13 are buggy, don't use them (see #65, #77). + +## Testing + +```bash +$ git clone git@github.com:ashtuchkin/iconv-lite.git +$ cd iconv-lite +$ npm install +$ npm test + +$ # To view performance: +$ node test/performance.js + +$ # To view test coverage: +$ npm run coverage +$ open coverage/lcov-report/index.html +``` diff --git a/node_modules/iconv-lite/encodings/dbcs-codec.js b/node_modules/iconv-lite/encodings/dbcs-codec.js new file mode 100644 index 0000000..fa83917 --- /dev/null +++ b/node_modules/iconv-lite/encodings/dbcs-codec.js @@ -0,0 +1,597 @@ +"use strict"; +var Buffer = require("safer-buffer").Buffer; + +// Multibyte codec. In this scheme, a character is represented by 1 or more bytes. +// Our codec supports UTF-16 surrogates, extensions for GB18030 and unicode sequences. +// To save memory and loading time, we read table files only when requested. + +exports._dbcs = DBCSCodec; + +var UNASSIGNED = -1, + GB18030_CODE = -2, + SEQ_START = -10, + NODE_START = -1000, + UNASSIGNED_NODE = new Array(0x100), + DEF_CHAR = -1; + +for (var i = 0; i < 0x100; i++) + UNASSIGNED_NODE[i] = UNASSIGNED; + + +// Class DBCSCodec reads and initializes mapping tables. +function DBCSCodec(codecOptions, iconv) { + this.encodingName = codecOptions.encodingName; + if (!codecOptions) + throw new Error("DBCS codec is called without the data.") + if (!codecOptions.table) + throw new Error("Encoding '" + this.encodingName + "' has no data."); + + // Load tables. + var mappingTable = codecOptions.table(); + + + // Decode tables: MBCS -> Unicode. + + // decodeTables is a trie, encoded as an array of arrays of integers. Internal arrays are trie nodes and all have len = 256. + // Trie root is decodeTables[0]. + // Values: >= 0 -> unicode character code. can be > 0xFFFF + // == UNASSIGNED -> unknown/unassigned sequence. + // == GB18030_CODE -> this is the end of a GB18030 4-byte sequence. + // <= NODE_START -> index of the next node in our trie to process next byte. + // <= SEQ_START -> index of the start of a character code sequence, in decodeTableSeq. + this.decodeTables = []; + this.decodeTables[0] = UNASSIGNED_NODE.slice(0); // Create root node. + + // Sometimes a MBCS char corresponds to a sequence of unicode chars. We store them as arrays of integers here. + this.decodeTableSeq = []; + + // Actual mapping tables consist of chunks. Use them to fill up decode tables. + for (var i = 0; i < mappingTable.length; i++) + this._addDecodeChunk(mappingTable[i]); + + // Load & create GB18030 tables when needed. + if (typeof codecOptions.gb18030 === 'function') { + this.gb18030 = codecOptions.gb18030(); // Load GB18030 ranges. + + // Add GB18030 common decode nodes. + var commonThirdByteNodeIdx = this.decodeTables.length; + this.decodeTables.push(UNASSIGNED_NODE.slice(0)); + + var commonFourthByteNodeIdx = this.decodeTables.length; + this.decodeTables.push(UNASSIGNED_NODE.slice(0)); + + // Fill out the tree + var firstByteNode = this.decodeTables[0]; + for (var i = 0x81; i <= 0xFE; i++) { + var secondByteNode = this.decodeTables[NODE_START - firstByteNode[i]]; + for (var j = 0x30; j <= 0x39; j++) { + if (secondByteNode[j] === UNASSIGNED) { + secondByteNode[j] = NODE_START - commonThirdByteNodeIdx; + } else if (secondByteNode[j] > NODE_START) { + throw new Error("gb18030 decode tables conflict at byte 2"); + } + + var thirdByteNode = this.decodeTables[NODE_START - secondByteNode[j]]; + for (var k = 0x81; k <= 0xFE; k++) { + if (thirdByteNode[k] === UNASSIGNED) { + thirdByteNode[k] = NODE_START - commonFourthByteNodeIdx; + } else if (thirdByteNode[k] === NODE_START - commonFourthByteNodeIdx) { + continue; + } else if (thirdByteNode[k] > NODE_START) { + throw new Error("gb18030 decode tables conflict at byte 3"); + } + + var fourthByteNode = this.decodeTables[NODE_START - thirdByteNode[k]]; + for (var l = 0x30; l <= 0x39; l++) { + if (fourthByteNode[l] === UNASSIGNED) + fourthByteNode[l] = GB18030_CODE; + } + } + } + } + } + + this.defaultCharUnicode = iconv.defaultCharUnicode; + + + // Encode tables: Unicode -> DBCS. + + // `encodeTable` is array mapping from unicode char to encoded char. All its values are integers for performance. + // Because it can be sparse, it is represented as array of buckets by 256 chars each. Bucket can be null. + // Values: >= 0 -> it is a normal char. Write the value (if <=256 then 1 byte, if <=65536 then 2 bytes, etc.). + // == UNASSIGNED -> no conversion found. Output a default char. + // <= SEQ_START -> it's an index in encodeTableSeq, see below. The character starts a sequence. + this.encodeTable = []; + + // `encodeTableSeq` is used when a sequence of unicode characters is encoded as a single code. We use a tree of + // objects where keys correspond to characters in sequence and leafs are the encoded dbcs values. A special DEF_CHAR key + // means end of sequence (needed when one sequence is a strict subsequence of another). + // Objects are kept separately from encodeTable to increase performance. + this.encodeTableSeq = []; + + // Some chars can be decoded, but need not be encoded. + var skipEncodeChars = {}; + if (codecOptions.encodeSkipVals) + for (var i = 0; i < codecOptions.encodeSkipVals.length; i++) { + var val = codecOptions.encodeSkipVals[i]; + if (typeof val === 'number') + skipEncodeChars[val] = true; + else + for (var j = val.from; j <= val.to; j++) + skipEncodeChars[j] = true; + } + + // Use decode trie to recursively fill out encode tables. + this._fillEncodeTable(0, 0, skipEncodeChars); + + // Add more encoding pairs when needed. + if (codecOptions.encodeAdd) { + for (var uChar in codecOptions.encodeAdd) + if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar)) + this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]); + } + + this.defCharSB = this.encodeTable[0][iconv.defaultCharSingleByte.charCodeAt(0)]; + if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]['?']; + if (this.defCharSB === UNASSIGNED) this.defCharSB = "?".charCodeAt(0); +} + +DBCSCodec.prototype.encoder = DBCSEncoder; +DBCSCodec.prototype.decoder = DBCSDecoder; + +// Decoder helpers +DBCSCodec.prototype._getDecodeTrieNode = function(addr) { + var bytes = []; + for (; addr > 0; addr >>>= 8) + bytes.push(addr & 0xFF); + if (bytes.length == 0) + bytes.push(0); + + var node = this.decodeTables[0]; + for (var i = bytes.length-1; i > 0; i--) { // Traverse nodes deeper into the trie. + var val = node[bytes[i]]; + + if (val == UNASSIGNED) { // Create new node. + node[bytes[i]] = NODE_START - this.decodeTables.length; + this.decodeTables.push(node = UNASSIGNED_NODE.slice(0)); + } + else if (val <= NODE_START) { // Existing node. + node = this.decodeTables[NODE_START - val]; + } + else + throw new Error("Overwrite byte in " + this.encodingName + ", addr: " + addr.toString(16)); + } + return node; +} + + +DBCSCodec.prototype._addDecodeChunk = function(chunk) { + // First element of chunk is the hex mbcs code where we start. + var curAddr = parseInt(chunk[0], 16); + + // Choose the decoding node where we'll write our chars. + var writeTable = this._getDecodeTrieNode(curAddr); + curAddr = curAddr & 0xFF; + + // Write all other elements of the chunk to the table. + for (var k = 1; k < chunk.length; k++) { + var part = chunk[k]; + if (typeof part === "string") { // String, write as-is. + for (var l = 0; l < part.length;) { + var code = part.charCodeAt(l++); + if (0xD800 <= code && code < 0xDC00) { // Decode surrogate + var codeTrail = part.charCodeAt(l++); + if (0xDC00 <= codeTrail && codeTrail < 0xE000) + writeTable[curAddr++] = 0x10000 + (code - 0xD800) * 0x400 + (codeTrail - 0xDC00); + else + throw new Error("Incorrect surrogate pair in " + this.encodingName + " at chunk " + chunk[0]); + } + else if (0x0FF0 < code && code <= 0x0FFF) { // Character sequence (our own encoding used) + var len = 0xFFF - code + 2; + var seq = []; + for (var m = 0; m < len; m++) + seq.push(part.charCodeAt(l++)); // Simple variation: don't support surrogates or subsequences in seq. + + writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length; + this.decodeTableSeq.push(seq); + } + else + writeTable[curAddr++] = code; // Basic char + } + } + else if (typeof part === "number") { // Integer, meaning increasing sequence starting with prev character. + var charCode = writeTable[curAddr - 1] + 1; + for (var l = 0; l < part; l++) + writeTable[curAddr++] = charCode++; + } + else + throw new Error("Incorrect type '" + typeof part + "' given in " + this.encodingName + " at chunk " + chunk[0]); + } + if (curAddr > 0xFF) + throw new Error("Incorrect chunk in " + this.encodingName + " at addr " + chunk[0] + ": too long" + curAddr); +} + +// Encoder helpers +DBCSCodec.prototype._getEncodeBucket = function(uCode) { + var high = uCode >> 8; // This could be > 0xFF because of astral characters. + if (this.encodeTable[high] === undefined) + this.encodeTable[high] = UNASSIGNED_NODE.slice(0); // Create bucket on demand. + return this.encodeTable[high]; +} + +DBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) { + var bucket = this._getEncodeBucket(uCode); + var low = uCode & 0xFF; + if (bucket[low] <= SEQ_START) + this.encodeTableSeq[SEQ_START-bucket[low]][DEF_CHAR] = dbcsCode; // There's already a sequence, set a single-char subsequence of it. + else if (bucket[low] == UNASSIGNED) + bucket[low] = dbcsCode; +} + +DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) { + + // Get the root of character tree according to first character of the sequence. + var uCode = seq[0]; + var bucket = this._getEncodeBucket(uCode); + var low = uCode & 0xFF; + + var node; + if (bucket[low] <= SEQ_START) { + // There's already a sequence with - use it. + node = this.encodeTableSeq[SEQ_START-bucket[low]]; + } + else { + // There was no sequence object - allocate a new one. + node = {}; + if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low]; // If a char was set before - make it a single-char subsequence. + bucket[low] = SEQ_START - this.encodeTableSeq.length; + this.encodeTableSeq.push(node); + } + + // Traverse the character tree, allocating new nodes as needed. + for (var j = 1; j < seq.length-1; j++) { + var oldVal = node[uCode]; + if (typeof oldVal === 'object') + node = oldVal; + else { + node = node[uCode] = {} + if (oldVal !== undefined) + node[DEF_CHAR] = oldVal + } + } + + // Set the leaf to given dbcsCode. + uCode = seq[seq.length-1]; + node[uCode] = dbcsCode; +} + +DBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) { + var node = this.decodeTables[nodeIdx]; + var hasValues = false; + var subNodeEmpty = {}; + for (var i = 0; i < 0x100; i++) { + var uCode = node[i]; + var mbCode = prefix + i; + if (skipEncodeChars[mbCode]) + continue; + + if (uCode >= 0) { + this._setEncodeChar(uCode, mbCode); + hasValues = true; + } else if (uCode <= NODE_START) { + var subNodeIdx = NODE_START - uCode; + if (!subNodeEmpty[subNodeIdx]) { // Skip empty subtrees (they are too large in gb18030). + var newPrefix = (mbCode << 8) >>> 0; // NOTE: '>>> 0' keeps 32-bit num positive. + if (this._fillEncodeTable(subNodeIdx, newPrefix, skipEncodeChars)) + hasValues = true; + else + subNodeEmpty[subNodeIdx] = true; + } + } else if (uCode <= SEQ_START) { + this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode); + hasValues = true; + } + } + return hasValues; +} + + + +// == Encoder ================================================================== + +function DBCSEncoder(options, codec) { + // Encoder state + this.leadSurrogate = -1; + this.seqObj = undefined; + + // Static data + this.encodeTable = codec.encodeTable; + this.encodeTableSeq = codec.encodeTableSeq; + this.defaultCharSingleByte = codec.defCharSB; + this.gb18030 = codec.gb18030; +} + +DBCSEncoder.prototype.write = function(str) { + var newBuf = Buffer.alloc(str.length * (this.gb18030 ? 4 : 3)), + leadSurrogate = this.leadSurrogate, + seqObj = this.seqObj, nextChar = -1, + i = 0, j = 0; + + while (true) { + // 0. Get next character. + if (nextChar === -1) { + if (i == str.length) break; + var uCode = str.charCodeAt(i++); + } + else { + var uCode = nextChar; + nextChar = -1; + } + + // 1. Handle surrogates. + if (0xD800 <= uCode && uCode < 0xE000) { // Char is one of surrogates. + if (uCode < 0xDC00) { // We've got lead surrogate. + if (leadSurrogate === -1) { + leadSurrogate = uCode; + continue; + } else { + leadSurrogate = uCode; + // Double lead surrogate found. + uCode = UNASSIGNED; + } + } else { // We've got trail surrogate. + if (leadSurrogate !== -1) { + uCode = 0x10000 + (leadSurrogate - 0xD800) * 0x400 + (uCode - 0xDC00); + leadSurrogate = -1; + } else { + // Incomplete surrogate pair - only trail surrogate found. + uCode = UNASSIGNED; + } + + } + } + else if (leadSurrogate !== -1) { + // Incomplete surrogate pair - only lead surrogate found. + nextChar = uCode; uCode = UNASSIGNED; // Write an error, then current char. + leadSurrogate = -1; + } + + // 2. Convert uCode character. + var dbcsCode = UNASSIGNED; + if (seqObj !== undefined && uCode != UNASSIGNED) { // We are in the middle of the sequence + var resCode = seqObj[uCode]; + if (typeof resCode === 'object') { // Sequence continues. + seqObj = resCode; + continue; + + } else if (typeof resCode == 'number') { // Sequence finished. Write it. + dbcsCode = resCode; + + } else if (resCode == undefined) { // Current character is not part of the sequence. + + // Try default character for this sequence + resCode = seqObj[DEF_CHAR]; + if (resCode !== undefined) { + dbcsCode = resCode; // Found. Write it. + nextChar = uCode; // Current character will be written too in the next iteration. + + } else { + // TODO: What if we have no default? (resCode == undefined) + // Then, we should write first char of the sequence as-is and try the rest recursively. + // Didn't do it for now because no encoding has this situation yet. + // Currently, just skip the sequence and write current char. + } + } + seqObj = undefined; + } + else if (uCode >= 0) { // Regular character + var subtable = this.encodeTable[uCode >> 8]; + if (subtable !== undefined) + dbcsCode = subtable[uCode & 0xFF]; + + if (dbcsCode <= SEQ_START) { // Sequence start + seqObj = this.encodeTableSeq[SEQ_START-dbcsCode]; + continue; + } + + if (dbcsCode == UNASSIGNED && this.gb18030) { + // Use GB18030 algorithm to find character(s) to write. + var idx = findIdx(this.gb18030.uChars, uCode); + if (idx != -1) { + var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]); + newBuf[j++] = 0x81 + Math.floor(dbcsCode / 12600); dbcsCode = dbcsCode % 12600; + newBuf[j++] = 0x30 + Math.floor(dbcsCode / 1260); dbcsCode = dbcsCode % 1260; + newBuf[j++] = 0x81 + Math.floor(dbcsCode / 10); dbcsCode = dbcsCode % 10; + newBuf[j++] = 0x30 + dbcsCode; + continue; + } + } + } + + // 3. Write dbcsCode character. + if (dbcsCode === UNASSIGNED) + dbcsCode = this.defaultCharSingleByte; + + if (dbcsCode < 0x100) { + newBuf[j++] = dbcsCode; + } + else if (dbcsCode < 0x10000) { + newBuf[j++] = dbcsCode >> 8; // high byte + newBuf[j++] = dbcsCode & 0xFF; // low byte + } + else if (dbcsCode < 0x1000000) { + newBuf[j++] = dbcsCode >> 16; + newBuf[j++] = (dbcsCode >> 8) & 0xFF; + newBuf[j++] = dbcsCode & 0xFF; + } else { + newBuf[j++] = dbcsCode >>> 24; + newBuf[j++] = (dbcsCode >>> 16) & 0xFF; + newBuf[j++] = (dbcsCode >>> 8) & 0xFF; + newBuf[j++] = dbcsCode & 0xFF; + } + } + + this.seqObj = seqObj; + this.leadSurrogate = leadSurrogate; + return newBuf.slice(0, j); +} + +DBCSEncoder.prototype.end = function() { + if (this.leadSurrogate === -1 && this.seqObj === undefined) + return; // All clean. Most often case. + + var newBuf = Buffer.alloc(10), j = 0; + + if (this.seqObj) { // We're in the sequence. + var dbcsCode = this.seqObj[DEF_CHAR]; + if (dbcsCode !== undefined) { // Write beginning of the sequence. + if (dbcsCode < 0x100) { + newBuf[j++] = dbcsCode; + } + else { + newBuf[j++] = dbcsCode >> 8; // high byte + newBuf[j++] = dbcsCode & 0xFF; // low byte + } + } else { + // See todo above. + } + this.seqObj = undefined; + } + + if (this.leadSurrogate !== -1) { + // Incomplete surrogate pair - only lead surrogate found. + newBuf[j++] = this.defaultCharSingleByte; + this.leadSurrogate = -1; + } + + return newBuf.slice(0, j); +} + +// Export for testing +DBCSEncoder.prototype.findIdx = findIdx; + + +// == Decoder ================================================================== + +function DBCSDecoder(options, codec) { + // Decoder state + this.nodeIdx = 0; + this.prevBytes = []; + + // Static data + this.decodeTables = codec.decodeTables; + this.decodeTableSeq = codec.decodeTableSeq; + this.defaultCharUnicode = codec.defaultCharUnicode; + this.gb18030 = codec.gb18030; +} + +DBCSDecoder.prototype.write = function(buf) { + var newBuf = Buffer.alloc(buf.length*2), + nodeIdx = this.nodeIdx, + prevBytes = this.prevBytes, prevOffset = this.prevBytes.length, + seqStart = -this.prevBytes.length, // idx of the start of current parsed sequence. + uCode; + + for (var i = 0, j = 0; i < buf.length; i++) { + var curByte = (i >= 0) ? buf[i] : prevBytes[i + prevOffset]; + + // Lookup in current trie node. + var uCode = this.decodeTables[nodeIdx][curByte]; + + if (uCode >= 0) { + // Normal character, just use it. + } + else if (uCode === UNASSIGNED) { // Unknown char. + // TODO: Callback with seq. + uCode = this.defaultCharUnicode.charCodeAt(0); + i = seqStart; // Skip one byte ('i' will be incremented by the for loop) and try to parse again. + } + else if (uCode === GB18030_CODE) { + if (i >= 3) { + var ptr = (buf[i-3]-0x81)*12600 + (buf[i-2]-0x30)*1260 + (buf[i-1]-0x81)*10 + (curByte-0x30); + } else { + var ptr = (prevBytes[i-3+prevOffset]-0x81)*12600 + + (((i-2 >= 0) ? buf[i-2] : prevBytes[i-2+prevOffset])-0x30)*1260 + + (((i-1 >= 0) ? buf[i-1] : prevBytes[i-1+prevOffset])-0x81)*10 + + (curByte-0x30); + } + var idx = findIdx(this.gb18030.gbChars, ptr); + uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx]; + } + else if (uCode <= NODE_START) { // Go to next trie node. + nodeIdx = NODE_START - uCode; + continue; + } + else if (uCode <= SEQ_START) { // Output a sequence of chars. + var seq = this.decodeTableSeq[SEQ_START - uCode]; + for (var k = 0; k < seq.length - 1; k++) { + uCode = seq[k]; + newBuf[j++] = uCode & 0xFF; + newBuf[j++] = uCode >> 8; + } + uCode = seq[seq.length-1]; + } + else + throw new Error("iconv-lite internal error: invalid decoding table value " + uCode + " at " + nodeIdx + "/" + curByte); + + // Write the character to buffer, handling higher planes using surrogate pair. + if (uCode >= 0x10000) { + uCode -= 0x10000; + var uCodeLead = 0xD800 | (uCode >> 10); + newBuf[j++] = uCodeLead & 0xFF; + newBuf[j++] = uCodeLead >> 8; + + uCode = 0xDC00 | (uCode & 0x3FF); + } + newBuf[j++] = uCode & 0xFF; + newBuf[j++] = uCode >> 8; + + // Reset trie node. + nodeIdx = 0; seqStart = i+1; + } + + this.nodeIdx = nodeIdx; + this.prevBytes = (seqStart >= 0) + ? Array.prototype.slice.call(buf, seqStart) + : prevBytes.slice(seqStart + prevOffset).concat(Array.prototype.slice.call(buf)); + + return newBuf.slice(0, j).toString('ucs2'); +} + +DBCSDecoder.prototype.end = function() { + var ret = ''; + + // Try to parse all remaining chars. + while (this.prevBytes.length > 0) { + // Skip 1 character in the buffer. + ret += this.defaultCharUnicode; + var bytesArr = this.prevBytes.slice(1); + + // Parse remaining as usual. + this.prevBytes = []; + this.nodeIdx = 0; + if (bytesArr.length > 0) + ret += this.write(bytesArr); + } + + this.prevBytes = []; + this.nodeIdx = 0; + return ret; +} + +// Binary search for GB18030. Returns largest i such that table[i] <= val. +function findIdx(table, val) { + if (table[0] > val) + return -1; + + var l = 0, r = table.length; + while (l < r-1) { // always table[l] <= val < table[r] + var mid = l + ((r-l+1) >> 1); + if (table[mid] <= val) + l = mid; + else + r = mid; + } + return l; +} + diff --git a/node_modules/iconv-lite/encodings/dbcs-data.js b/node_modules/iconv-lite/encodings/dbcs-data.js new file mode 100644 index 0000000..0d17e58 --- /dev/null +++ b/node_modules/iconv-lite/encodings/dbcs-data.js @@ -0,0 +1,188 @@ +"use strict"; + +// Description of supported double byte encodings and aliases. +// Tables are not require()-d until they are needed to speed up library load. +// require()-s are direct to support Browserify. + +module.exports = { + + // == Japanese/ShiftJIS ==================================================== + // All japanese encodings are based on JIS X set of standards: + // JIS X 0201 - Single-byte encoding of ASCII + ยฅ + Kana chars at 0xA1-0xDF. + // JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes. + // Has several variations in 1978, 1983, 1990 and 1997. + // JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead. + // JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233. + // 2 planes, first is superset of 0208, second - revised 0212. + // Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx) + + // Byte encodings are: + // * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte + // encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC. + // Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI. + // * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes. + // 0x00-0x7F - lower part of 0201 + // 0x8E, 0xA1-0xDF - upper part of 0201 + // (0xA1-0xFE)x2 - 0208 plane (94x94). + // 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94). + // * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon. + // Used as-is in ISO2022 family. + // * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII, + // 0201-1976 Roman, 0208-1978, 0208-1983. + // * ISO2022-JP-1: Adds esc seq for 0212-1990. + // * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7. + // * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2. + // * ISO2022-JP-2004: Adds 0213-2004 Plane 1. + // + // After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes. + // + // Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html + + 'shiftjis': { + type: '_dbcs', + table: function() { return require('./tables/shiftjis.json') }, + encodeAdd: {'\u00a5': 0x5C, '\u203E': 0x7E}, + encodeSkipVals: [{from: 0xED40, to: 0xF940}], + }, + 'csshiftjis': 'shiftjis', + 'mskanji': 'shiftjis', + 'sjis': 'shiftjis', + 'windows31j': 'shiftjis', + 'ms31j': 'shiftjis', + 'xsjis': 'shiftjis', + 'windows932': 'shiftjis', + 'ms932': 'shiftjis', + '932': 'shiftjis', + 'cp932': 'shiftjis', + + 'eucjp': { + type: '_dbcs', + table: function() { return require('./tables/eucjp.json') }, + encodeAdd: {'\u00a5': 0x5C, '\u203E': 0x7E}, + }, + + // TODO: KDDI extension to Shift_JIS + // TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes. + // TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars. + + + // == Chinese/GBK ========================================================== + // http://en.wikipedia.org/wiki/GBK + // We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder + + // Oldest GB2312 (1981, ~7600 chars) is a subset of CP936 + 'gb2312': 'cp936', + 'gb231280': 'cp936', + 'gb23121980': 'cp936', + 'csgb2312': 'cp936', + 'csiso58gb231280': 'cp936', + 'euccn': 'cp936', + + // Microsoft's CP936 is a subset and approximation of GBK. + 'windows936': 'cp936', + 'ms936': 'cp936', + '936': 'cp936', + 'cp936': { + type: '_dbcs', + table: function() { return require('./tables/cp936.json') }, + }, + + // GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other. + 'gbk': { + type: '_dbcs', + table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) }, + }, + 'xgbk': 'gbk', + 'isoir58': 'gbk', + + // GB18030 is an algorithmic extension of GBK. + // Main source: https://www.w3.org/TR/encoding/#gbk-encoder + // http://icu-project.org/docs/papers/gb18030.html + // http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml + // http://www.khngai.com/chinese/charmap/tblgbk.php?page=0 + 'gb18030': { + type: '_dbcs', + table: function() { return require('./tables/cp936.json').concat(require('./tables/gbk-added.json')) }, + gb18030: function() { return require('./tables/gb18030-ranges.json') }, + encodeSkipVals: [0x80], + encodeAdd: {'โ‚ฌ': 0xA2E3}, + }, + + 'chinese': 'gb18030', + + + // == Korean =============================================================== + // EUC-KR, KS_C_5601 and KS X 1001 are exactly the same. + 'windows949': 'cp949', + 'ms949': 'cp949', + '949': 'cp949', + 'cp949': { + type: '_dbcs', + table: function() { return require('./tables/cp949.json') }, + }, + + 'cseuckr': 'cp949', + 'csksc56011987': 'cp949', + 'euckr': 'cp949', + 'isoir149': 'cp949', + 'korean': 'cp949', + 'ksc56011987': 'cp949', + 'ksc56011989': 'cp949', + 'ksc5601': 'cp949', + + + // == Big5/Taiwan/Hong Kong ================================================ + // There are lots of tables for Big5 and cp950. Please see the following links for history: + // http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html + // Variations, in roughly number of defined chars: + // * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT + // * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/ + // * Big5-2003 (Taiwan standard) almost superset of cp950. + // * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers. + // * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard. + // many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years. + // Plus, it has 4 combining sequences. + // Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299 + // because big5-hkscs is the only encoding to include astral characters in non-algorithmic way. + // Implementations are not consistent within browsers; sometimes labeled as just big5. + // MS Internet Explorer switches from big5 to big5-hkscs when a patch applied. + // Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31 + // In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s. + // Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt + // http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt + // + // Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder + // Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong. + + 'windows950': 'cp950', + 'ms950': 'cp950', + '950': 'cp950', + 'cp950': { + type: '_dbcs', + table: function() { return require('./tables/cp950.json') }, + }, + + // Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus. + 'big5': 'big5hkscs', + 'big5hkscs': { + type: '_dbcs', + table: function() { return require('./tables/cp950.json').concat(require('./tables/big5-added.json')) }, + encodeSkipVals: [ + // Although Encoding Standard says we should avoid encoding to HKSCS area (See Step 1 of + // https://encoding.spec.whatwg.org/#index-big5-pointer), we still do it to increase compatibility with ICU. + // But if a single unicode point can be encoded both as HKSCS and regular Big5, we prefer the latter. + 0x8e69, 0x8e6f, 0x8e7e, 0x8eab, 0x8eb4, 0x8ecd, 0x8ed0, 0x8f57, 0x8f69, 0x8f6e, 0x8fcb, 0x8ffe, + 0x906d, 0x907a, 0x90c4, 0x90dc, 0x90f1, 0x91bf, 0x92af, 0x92b0, 0x92b1, 0x92b2, 0x92d1, 0x9447, 0x94ca, + 0x95d9, 0x96fc, 0x9975, 0x9b76, 0x9b78, 0x9b7b, 0x9bc6, 0x9bde, 0x9bec, 0x9bf6, 0x9c42, 0x9c53, 0x9c62, + 0x9c68, 0x9c6b, 0x9c77, 0x9cbc, 0x9cbd, 0x9cd0, 0x9d57, 0x9d5a, 0x9dc4, 0x9def, 0x9dfb, 0x9ea9, 0x9eef, + 0x9efd, 0x9f60, 0x9fcb, 0xa077, 0xa0dc, 0xa0df, 0x8fcc, 0x92c8, 0x9644, 0x96ed, + + // Step 2 of https://encoding.spec.whatwg.org/#index-big5-pointer: Use last pointer for U+2550, U+255E, U+2561, U+256A, U+5341, or U+5345 + 0xa2a4, 0xa2a5, 0xa2a7, 0xa2a6, 0xa2cc, 0xa2ce, + ], + }, + + 'cnbig5': 'big5hkscs', + 'csbig5': 'big5hkscs', + 'xxbig5': 'big5hkscs', +}; diff --git a/node_modules/iconv-lite/encodings/index.js b/node_modules/iconv-lite/encodings/index.js new file mode 100644 index 0000000..d95c244 --- /dev/null +++ b/node_modules/iconv-lite/encodings/index.js @@ -0,0 +1,23 @@ +"use strict"; + +// Update this array if you add/rename/remove files in this directory. +// We support Browserify by skipping automatic module discovery and requiring modules directly. +var modules = [ + require("./internal"), + require("./utf32"), + require("./utf16"), + require("./utf7"), + require("./sbcs-codec"), + require("./sbcs-data"), + require("./sbcs-data-generated"), + require("./dbcs-codec"), + require("./dbcs-data"), +]; + +// Put all encoding/alias/codec definitions to single object and export it. +for (var i = 0; i < modules.length; i++) { + var module = modules[i]; + for (var enc in module) + if (Object.prototype.hasOwnProperty.call(module, enc)) + exports[enc] = module[enc]; +} diff --git a/node_modules/iconv-lite/encodings/internal.js b/node_modules/iconv-lite/encodings/internal.js new file mode 100644 index 0000000..dc1074f --- /dev/null +++ b/node_modules/iconv-lite/encodings/internal.js @@ -0,0 +1,198 @@ +"use strict"; +var Buffer = require("safer-buffer").Buffer; + +// Export Node.js internal encodings. + +module.exports = { + // Encodings + utf8: { type: "_internal", bomAware: true}, + cesu8: { type: "_internal", bomAware: true}, + unicode11utf8: "utf8", + + ucs2: { type: "_internal", bomAware: true}, + utf16le: "ucs2", + + binary: { type: "_internal" }, + base64: { type: "_internal" }, + hex: { type: "_internal" }, + + // Codec. + _internal: InternalCodec, +}; + +//------------------------------------------------------------------------------ + +function InternalCodec(codecOptions, iconv) { + this.enc = codecOptions.encodingName; + this.bomAware = codecOptions.bomAware; + + if (this.enc === "base64") + this.encoder = InternalEncoderBase64; + else if (this.enc === "cesu8") { + this.enc = "utf8"; // Use utf8 for decoding. + this.encoder = InternalEncoderCesu8; + + // Add decoder for versions of Node not supporting CESU-8 + if (Buffer.from('eda0bdedb2a9', 'hex').toString() !== '๐Ÿ’ฉ') { + this.decoder = InternalDecoderCesu8; + this.defaultCharUnicode = iconv.defaultCharUnicode; + } + } +} + +InternalCodec.prototype.encoder = InternalEncoder; +InternalCodec.prototype.decoder = InternalDecoder; + +//------------------------------------------------------------------------------ + +// We use node.js internal decoder. Its signature is the same as ours. +var StringDecoder = require('string_decoder').StringDecoder; + +if (!StringDecoder.prototype.end) // Node v0.8 doesn't have this method. + StringDecoder.prototype.end = function() {}; + + +function InternalDecoder(options, codec) { + this.decoder = new StringDecoder(codec.enc); +} + +InternalDecoder.prototype.write = function(buf) { + if (!Buffer.isBuffer(buf)) { + buf = Buffer.from(buf); + } + + return this.decoder.write(buf); +} + +InternalDecoder.prototype.end = function() { + return this.decoder.end(); +} + + +//------------------------------------------------------------------------------ +// Encoder is mostly trivial + +function InternalEncoder(options, codec) { + this.enc = codec.enc; +} + +InternalEncoder.prototype.write = function(str) { + return Buffer.from(str, this.enc); +} + +InternalEncoder.prototype.end = function() { +} + + +//------------------------------------------------------------------------------ +// Except base64 encoder, which must keep its state. + +function InternalEncoderBase64(options, codec) { + this.prevStr = ''; +} + +InternalEncoderBase64.prototype.write = function(str) { + str = this.prevStr + str; + var completeQuads = str.length - (str.length % 4); + this.prevStr = str.slice(completeQuads); + str = str.slice(0, completeQuads); + + return Buffer.from(str, "base64"); +} + +InternalEncoderBase64.prototype.end = function() { + return Buffer.from(this.prevStr, "base64"); +} + + +//------------------------------------------------------------------------------ +// CESU-8 encoder is also special. + +function InternalEncoderCesu8(options, codec) { +} + +InternalEncoderCesu8.prototype.write = function(str) { + var buf = Buffer.alloc(str.length * 3), bufIdx = 0; + for (var i = 0; i < str.length; i++) { + var charCode = str.charCodeAt(i); + // Naive implementation, but it works because CESU-8 is especially easy + // to convert from UTF-16 (which all JS strings are encoded in). + if (charCode < 0x80) + buf[bufIdx++] = charCode; + else if (charCode < 0x800) { + buf[bufIdx++] = 0xC0 + (charCode >>> 6); + buf[bufIdx++] = 0x80 + (charCode & 0x3f); + } + else { // charCode will always be < 0x10000 in javascript. + buf[bufIdx++] = 0xE0 + (charCode >>> 12); + buf[bufIdx++] = 0x80 + ((charCode >>> 6) & 0x3f); + buf[bufIdx++] = 0x80 + (charCode & 0x3f); + } + } + return buf.slice(0, bufIdx); +} + +InternalEncoderCesu8.prototype.end = function() { +} + +//------------------------------------------------------------------------------ +// CESU-8 decoder is not implemented in Node v4.0+ + +function InternalDecoderCesu8(options, codec) { + this.acc = 0; + this.contBytes = 0; + this.accBytes = 0; + this.defaultCharUnicode = codec.defaultCharUnicode; +} + +InternalDecoderCesu8.prototype.write = function(buf) { + var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, + res = ''; + for (var i = 0; i < buf.length; i++) { + var curByte = buf[i]; + if ((curByte & 0xC0) !== 0x80) { // Leading byte + if (contBytes > 0) { // Previous code is invalid + res += this.defaultCharUnicode; + contBytes = 0; + } + + if (curByte < 0x80) { // Single-byte code + res += String.fromCharCode(curByte); + } else if (curByte < 0xE0) { // Two-byte code + acc = curByte & 0x1F; + contBytes = 1; accBytes = 1; + } else if (curByte < 0xF0) { // Three-byte code + acc = curByte & 0x0F; + contBytes = 2; accBytes = 1; + } else { // Four or more are not supported for CESU-8. + res += this.defaultCharUnicode; + } + } else { // Continuation byte + if (contBytes > 0) { // We're waiting for it. + acc = (acc << 6) | (curByte & 0x3f); + contBytes--; accBytes++; + if (contBytes === 0) { + // Check for overlong encoding, but support Modified UTF-8 (encoding NULL as C0 80) + if (accBytes === 2 && acc < 0x80 && acc > 0) + res += this.defaultCharUnicode; + else if (accBytes === 3 && acc < 0x800) + res += this.defaultCharUnicode; + else + // Actually add character. + res += String.fromCharCode(acc); + } + } else { // Unexpected continuation byte + res += this.defaultCharUnicode; + } + } + } + this.acc = acc; this.contBytes = contBytes; this.accBytes = accBytes; + return res; +} + +InternalDecoderCesu8.prototype.end = function() { + var res = 0; + if (this.contBytes > 0) + res += this.defaultCharUnicode; + return res; +} diff --git a/node_modules/iconv-lite/encodings/sbcs-codec.js b/node_modules/iconv-lite/encodings/sbcs-codec.js new file mode 100644 index 0000000..abac5ff --- /dev/null +++ b/node_modules/iconv-lite/encodings/sbcs-codec.js @@ -0,0 +1,72 @@ +"use strict"; +var Buffer = require("safer-buffer").Buffer; + +// Single-byte codec. Needs a 'chars' string parameter that contains 256 or 128 chars that +// correspond to encoded bytes (if 128 - then lower half is ASCII). + +exports._sbcs = SBCSCodec; +function SBCSCodec(codecOptions, iconv) { + if (!codecOptions) + throw new Error("SBCS codec is called without the data.") + + // Prepare char buffer for decoding. + if (!codecOptions.chars || (codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256)) + throw new Error("Encoding '"+codecOptions.type+"' has incorrect 'chars' (must be of len 128 or 256)"); + + if (codecOptions.chars.length === 128) { + var asciiString = ""; + for (var i = 0; i < 128; i++) + asciiString += String.fromCharCode(i); + codecOptions.chars = asciiString + codecOptions.chars; + } + + this.decodeBuf = Buffer.from(codecOptions.chars, 'ucs2'); + + // Encoding buffer. + var encodeBuf = Buffer.alloc(65536, iconv.defaultCharSingleByte.charCodeAt(0)); + + for (var i = 0; i < codecOptions.chars.length; i++) + encodeBuf[codecOptions.chars.charCodeAt(i)] = i; + + this.encodeBuf = encodeBuf; +} + +SBCSCodec.prototype.encoder = SBCSEncoder; +SBCSCodec.prototype.decoder = SBCSDecoder; + + +function SBCSEncoder(options, codec) { + this.encodeBuf = codec.encodeBuf; +} + +SBCSEncoder.prototype.write = function(str) { + var buf = Buffer.alloc(str.length); + for (var i = 0; i < str.length; i++) + buf[i] = this.encodeBuf[str.charCodeAt(i)]; + + return buf; +} + +SBCSEncoder.prototype.end = function() { +} + + +function SBCSDecoder(options, codec) { + this.decodeBuf = codec.decodeBuf; +} + +SBCSDecoder.prototype.write = function(buf) { + // Strings are immutable in JS -> we use ucs2 buffer to speed up computations. + var decodeBuf = this.decodeBuf; + var newBuf = Buffer.alloc(buf.length*2); + var idx1 = 0, idx2 = 0; + for (var i = 0; i < buf.length; i++) { + idx1 = buf[i]*2; idx2 = i*2; + newBuf[idx2] = decodeBuf[idx1]; + newBuf[idx2+1] = decodeBuf[idx1+1]; + } + return newBuf.toString('ucs2'); +} + +SBCSDecoder.prototype.end = function() { +} diff --git a/node_modules/iconv-lite/encodings/sbcs-data-generated.js b/node_modules/iconv-lite/encodings/sbcs-data-generated.js new file mode 100644 index 0000000..9b48236 --- /dev/null +++ b/node_modules/iconv-lite/encodings/sbcs-data-generated.js @@ -0,0 +1,451 @@ +"use strict"; + +// Generated data for sbcs codec. Don't edit manually. Regenerate using generation/gen-sbcs.js script. +module.exports = { + "437": "cp437", + "737": "cp737", + "775": "cp775", + "850": "cp850", + "852": "cp852", + "855": "cp855", + "856": "cp856", + "857": "cp857", + "858": "cp858", + "860": "cp860", + "861": "cp861", + "862": "cp862", + "863": "cp863", + "864": "cp864", + "865": "cp865", + "866": "cp866", + "869": "cp869", + "874": "windows874", + "922": "cp922", + "1046": "cp1046", + "1124": "cp1124", + "1125": "cp1125", + "1129": "cp1129", + "1133": "cp1133", + "1161": "cp1161", + "1162": "cp1162", + "1163": "cp1163", + "1250": "windows1250", + "1251": "windows1251", + "1252": "windows1252", + "1253": "windows1253", + "1254": "windows1254", + "1255": "windows1255", + "1256": "windows1256", + "1257": "windows1257", + "1258": "windows1258", + "28591": "iso88591", + "28592": "iso88592", + "28593": "iso88593", + "28594": "iso88594", + "28595": "iso88595", + "28596": "iso88596", + "28597": "iso88597", + "28598": "iso88598", + "28599": "iso88599", + "28600": "iso885910", + "28601": "iso885911", + "28603": "iso885913", + "28604": "iso885914", + "28605": "iso885915", + "28606": "iso885916", + "windows874": { + "type": "_sbcs", + "chars": "โ‚ฌ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ€ฆ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ€˜โ€™โ€œโ€โ€ขโ€“โ€”๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝย เธเธ‚เธƒเธ„เธ…เธ†เธ‡เธˆเธ‰เธŠเธ‹เธŒเธเธŽเธเธเธ‘เธ’เธ“เธ”เธ•เธ–เธ—เธ˜เธ™เธšเธ›เธœเธเธžเธŸเธ เธกเธขเธฃเธคเธฅเธฆเธงเธจเธฉเธชเธซเธฌเธญเธฎเธฏเธฐเธฑเธฒเธณเธดเธตเธถเธทเธธเธนเธบ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝเธฟเน€เนเน‚เนƒเน„เน…เน†เน‡เนˆเน‰เนŠเน‹เนŒเนเนŽเนเนเน‘เน’เน“เน”เน•เน–เน—เน˜เน™เนšเน›๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ" + }, + "win874": "windows874", + "cp874": "windows874", + "windows1250": { + "type": "_sbcs", + "chars": "โ‚ฌ๏ฟฝโ€š๏ฟฝโ€žโ€ฆโ€ โ€ก๏ฟฝโ€ฐล โ€นลšลคลฝลน๏ฟฝโ€˜โ€™โ€œโ€โ€ขโ€“โ€”๏ฟฝโ„ขลกโ€บล›ลฅลพลบย ห‡ห˜ลยคฤ„ยฆยงยจยฉลžยซยฌยญยฎลปยฐยฑห›ล‚ยดยตยถยทยธฤ…ลŸยปฤฝหฤพลผล”รร‚ฤ‚ร„ฤนฤ†ร‡ฤŒร‰ฤ˜ร‹ฤšรรŽฤŽฤลƒล‡ร“ร”ลร–ร—ล˜ลฎรšลฐรœรลขรŸล•รกรขฤƒรคฤบฤ‡รงฤรฉฤ™รซฤ›รญรฎฤฤ‘ล„ลˆรณรดล‘รถรทล™ลฏรบลฑรผรฝลฃห™" + }, + "win1250": "windows1250", + "cp1250": "windows1250", + "windows1251": { + "type": "_sbcs", + "chars": "ะ‚ะƒโ€šั“โ€žโ€ฆโ€ โ€กโ‚ฌโ€ฐะ‰โ€นะŠะŒะ‹ะั’โ€˜โ€™โ€œโ€โ€ขโ€“โ€”๏ฟฝโ„ขั™โ€บัšัœั›ัŸย ะŽัžะˆยคายฆยงะยฉะ„ยซยฌยญยฎะ‡ยฐยฑะ†ั–า‘ยตยถยทั‘โ„–ั”ยปั˜ะ…ั•ั—ะะ‘ะ’ะ“ะ”ะ•ะ–ะ—ะ˜ะ™ะšะ›ะœะะžะŸะ ะกะขะฃะคะฅะฆะงะจะฉะชะซะฌะญะฎะฏะฐะฑะฒะณะดะตะถะทะธะนะบะปะผะฝะพะฟั€ัั‚ัƒั„ั…ั†ั‡ัˆั‰ัŠั‹ัŒััŽั" + }, + "win1251": "windows1251", + "cp1251": "windows1251", + "windows1252": { + "type": "_sbcs", + "chars": "โ‚ฌ๏ฟฝโ€šฦ’โ€žโ€ฆโ€ โ€กห†โ€ฐล โ€นล’๏ฟฝลฝ๏ฟฝ๏ฟฝโ€˜โ€™โ€œโ€โ€ขโ€“โ€”หœโ„ขลกโ€บล“๏ฟฝลพลธย ยกยขยฃยคยฅยฆยงยจยฉยชยซยฌยญยฎยฏยฐยฑยฒยณยดยตยถยทยธยนยบยปยผยฝยพยฟร€รร‚รƒร„ร…ร†ร‡รˆร‰รŠร‹รŒรรŽรรร‘ร’ร“ร”ร•ร–ร—ร˜ร™รšร›รœรรžรŸร รกรขรฃรครฅรฆรงรจรฉรชรซรฌรญรฎรฏรฐรฑรฒรณรดรตรถรทรธรนรบรปรผรฝรพรฟ" + }, + "win1252": "windows1252", + "cp1252": "windows1252", + "windows1253": { + "type": "_sbcs", + "chars": "โ‚ฌ๏ฟฝโ€šฦ’โ€žโ€ฆโ€ โ€ก๏ฟฝโ€ฐ๏ฟฝโ€น๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ€˜โ€™โ€œโ€โ€ขโ€“โ€”๏ฟฝโ„ข๏ฟฝโ€บ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝย ฮ…ฮ†ยฃยคยฅยฆยงยจยฉ๏ฟฝยซยฌยญยฎโ€•ยฐยฑยฒยณฮ„ยตยถยทฮˆฮ‰ฮŠยปฮŒยฝฮŽฮฮฮ‘ฮ’ฮ“ฮ”ฮ•ฮ–ฮ—ฮ˜ฮ™ฮšฮ›ฮœฮฮžฮŸฮ ฮก๏ฟฝฮฃฮคฮฅฮฆฮงฮจฮฉฮชฮซฮฌฮญฮฎฮฏฮฐฮฑฮฒฮณฮดฮตฮถฮทฮธฮนฮบฮปฮผฮฝฮพฮฟฯ€ฯฯ‚ฯƒฯ„ฯ…ฯ†ฯ‡ฯˆฯ‰ฯŠฯ‹ฯŒฯฯŽ๏ฟฝ" + }, + "win1253": "windows1253", + "cp1253": "windows1253", + "windows1254": { + "type": "_sbcs", + "chars": "โ‚ฌ๏ฟฝโ€šฦ’โ€žโ€ฆโ€ โ€กห†โ€ฐล โ€นล’๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ€˜โ€™โ€œโ€โ€ขโ€“โ€”หœโ„ขลกโ€บล“๏ฟฝ๏ฟฝลธย ยกยขยฃยคยฅยฆยงยจยฉยชยซยฌยญยฎยฏยฐยฑยฒยณยดยตยถยทยธยนยบยปยผยฝยพยฟร€รร‚รƒร„ร…ร†ร‡รˆร‰รŠร‹รŒรรŽรฤžร‘ร’ร“ร”ร•ร–ร—ร˜ร™รšร›รœฤฐลžรŸร รกรขรฃรครฅรฆรงรจรฉรชรซรฌรญรฎรฏฤŸรฑรฒรณรดรตรถรทรธรนรบรปรผฤฑลŸรฟ" + }, + "win1254": "windows1254", + "cp1254": "windows1254", + "windows1255": { + "type": "_sbcs", + "chars": "โ‚ฌ๏ฟฝโ€šฦ’โ€žโ€ฆโ€ โ€กห†โ€ฐ๏ฟฝโ€น๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ€˜โ€™โ€œโ€โ€ขโ€“โ€”หœโ„ข๏ฟฝโ€บ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝย ยกยขยฃโ‚ชยฅยฆยงยจยฉร—ยซยฌยญยฎยฏยฐยฑยฒยณยดยตยถยทยธยนรทยปยผยฝยพยฟึฐึฑึฒึณึดึตึถึทึธึนึบึปึผึฝึพึฟื€ืื‚ืƒืฐืฑืฒืณืด๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝืื‘ื’ื“ื”ื•ื–ื—ื˜ื™ืšื›ืœืืžืŸื ืกืขืฃืคืฅืฆืงืจืฉืช๏ฟฝ๏ฟฝโ€Žโ€๏ฟฝ" + }, + "win1255": "windows1255", + "cp1255": "windows1255", + "windows1256": { + "type": "_sbcs", + "chars": "โ‚ฌูพโ€šฦ’โ€žโ€ฆโ€ โ€กห†โ€ฐูนโ€นล’ฺ†ฺ˜ฺˆฺฏโ€˜โ€™โ€œโ€โ€ขโ€“โ€”ฺฉโ„ขฺ‘โ€บล“โ€Œโ€ฺบย ุŒยขยฃยคยฅยฆยงยจยฉฺพยซยฌยญยฎยฏยฐยฑยฒยณยดยตยถยทยธยนุ›ยปยผยฝยพุŸุกุขุฃุคุฅุฆุงุจุฉุชุซุฌุญุฎุฏุฐุฑุฒุณุดุตุถร—ุทุธุนุบู€ูู‚ูƒร ู„รขู…ู†ู‡ูˆรงรจรฉรชรซู‰ูŠรฎรฏู‹ูŒููŽรดููรทู‘รนู’รปรผโ€Žโ€’" + }, + "win1256": "windows1256", + "cp1256": "windows1256", + "windows1257": { + "type": "_sbcs", + "chars": "โ‚ฌ๏ฟฝโ€š๏ฟฝโ€žโ€ฆโ€ โ€ก๏ฟฝโ€ฐ๏ฟฝโ€น๏ฟฝยจห‡ยธ๏ฟฝโ€˜โ€™โ€œโ€โ€ขโ€“โ€”๏ฟฝโ„ข๏ฟฝโ€บ๏ฟฝยฏห›๏ฟฝย ๏ฟฝยขยฃยค๏ฟฝยฆยงร˜ยฉล–ยซยฌยญยฎร†ยฐยฑยฒยณยดยตยถยทรธยนล—ยปยผยฝยพรฆฤ„ฤฎฤ€ฤ†ร„ร…ฤ˜ฤ’ฤŒร‰ลนฤ–ฤขฤถฤชฤปล ลƒล…ร“ลŒร•ร–ร—ลฒลลšลชรœลปลฝรŸฤ…ฤฏฤฤ‡รครฅฤ™ฤ“ฤรฉลบฤ—ฤฃฤทฤซฤผลกล„ล†รณลรตรถรทลณล‚ล›ลซรผลผลพห™" + }, + "win1257": "windows1257", + "cp1257": "windows1257", + "windows1258": { + "type": "_sbcs", + "chars": "โ‚ฌ๏ฟฝโ€šฦ’โ€žโ€ฆโ€ โ€กห†โ€ฐ๏ฟฝโ€นล’๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ€˜โ€™โ€œโ€โ€ขโ€“โ€”หœโ„ข๏ฟฝโ€บล“๏ฟฝ๏ฟฝลธย ยกยขยฃยคยฅยฆยงยจยฉยชยซยฌยญยฎยฏยฐยฑยฒยณยดยตยถยทยธยนยบยปยผยฝยพยฟร€รร‚ฤ‚ร„ร…ร†ร‡รˆร‰รŠร‹ฬ€รรŽรฤร‘ฬ‰ร“ร”ฦ ร–ร—ร˜ร™รšร›รœฦฏฬƒรŸร รกรขฤƒรครฅรฆรงรจรฉรชรซฬรญรฎรฏฤ‘รฑฬฃรณรดฦกรถรทรธรนรบรปรผฦฐโ‚ซรฟ" + }, + "win1258": "windows1258", + "cp1258": "windows1258", + "iso88591": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย ยกยขยฃยคยฅยฆยงยจยฉยชยซยฌยญยฎยฏยฐยฑยฒยณยดยตยถยทยธยนยบยปยผยฝยพยฟร€รร‚รƒร„ร…ร†ร‡รˆร‰รŠร‹รŒรรŽรรร‘ร’ร“ร”ร•ร–ร—ร˜ร™รšร›รœรรžรŸร รกรขรฃรครฅรฆรงรจรฉรชรซรฌรญรฎรฏรฐรฑรฒรณรดรตรถรทรธรนรบรปรผรฝรพรฟ" + }, + "cp28591": "iso88591", + "iso88592": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย ฤ„ห˜ลยคฤฝลšยงยจล ลžลคลนยญลฝลปยฐฤ…ห›ล‚ยดฤพล›ห‡ยธลกลŸลฅลบหลพลผล”รร‚ฤ‚ร„ฤนฤ†ร‡ฤŒร‰ฤ˜ร‹ฤšรรŽฤŽฤลƒล‡ร“ร”ลร–ร—ล˜ลฎรšลฐรœรลขรŸล•รกรขฤƒรคฤบฤ‡รงฤรฉฤ™รซฤ›รญรฎฤฤ‘ล„ลˆรณรดล‘รถรทล™ลฏรบลฑรผรฝลฃห™" + }, + "cp28592": "iso88592", + "iso88593": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย ฤฆห˜ยฃยค๏ฟฝฤคยงยจฤฐลžฤžฤดยญ๏ฟฝลปยฐฤงยฒยณยดยตฤฅยทยธฤฑลŸฤŸฤตยฝ๏ฟฝลผร€รร‚๏ฟฝร„ฤŠฤˆร‡รˆร‰รŠร‹รŒรรŽร๏ฟฝร‘ร’ร“ร”ฤ ร–ร—ฤœร™รšร›รœลฌลœรŸร รกรข๏ฟฝรคฤ‹ฤ‰รงรจรฉรชรซรฌรญรฎรฏ๏ฟฝรฑรฒรณรดฤกรถรทฤรนรบรปรผลญลห™" + }, + "cp28593": "iso88593", + "iso88594": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย ฤ„ฤธล–ยคฤจฤปยงยจล ฤ’ฤขลฆยญลฝยฏยฐฤ…ห›ล—ยดฤฉฤผห‡ยธลกฤ“ฤฃลงลŠลพล‹ฤ€รร‚รƒร„ร…ร†ฤฎฤŒร‰ฤ˜ร‹ฤ–รรŽฤชฤล…ลŒฤถร”ร•ร–ร—ร˜ลฒรšร›รœลจลชรŸฤรกรขรฃรครฅรฆฤฏฤรฉฤ™รซฤ—รญรฎฤซฤ‘ล†ลฤทรดรตรถรทรธลณรบรปรผลฉลซห™" + }, + "cp28594": "iso88594", + "iso88595": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย ะะ‚ะƒะ„ะ…ะ†ะ‡ะˆะ‰ะŠะ‹ะŒยญะŽะะะ‘ะ’ะ“ะ”ะ•ะ–ะ—ะ˜ะ™ะšะ›ะœะะžะŸะ ะกะขะฃะคะฅะฆะงะจะฉะชะซะฌะญะฎะฏะฐะฑะฒะณะดะตะถะทะธะนะบะปะผะฝะพะฟั€ัั‚ัƒั„ั…ั†ั‡ัˆั‰ัŠั‹ัŒััŽัโ„–ั‘ั’ั“ั”ั•ั–ั—ั˜ั™ัšั›ัœยงัžัŸ" + }, + "cp28595": "iso88595", + "iso88596": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย ๏ฟฝ๏ฟฝ๏ฟฝยค๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝุŒยญ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝุ›๏ฟฝ๏ฟฝ๏ฟฝุŸ๏ฟฝุกุขุฃุคุฅุฆุงุจุฉุชุซุฌุญุฎุฏุฐุฑุฒุณุดุตุถุทุธุนุบ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝู€ูู‚ูƒู„ู…ู†ู‡ูˆู‰ูŠู‹ูŒููŽููู‘ู’๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ" + }, + "cp28596": "iso88596", + "iso88597": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย โ€˜โ€™ยฃโ‚ฌโ‚ฏยฆยงยจยฉอบยซยฌยญ๏ฟฝโ€•ยฐยฑยฒยณฮ„ฮ…ฮ†ยทฮˆฮ‰ฮŠยปฮŒยฝฮŽฮฮฮ‘ฮ’ฮ“ฮ”ฮ•ฮ–ฮ—ฮ˜ฮ™ฮšฮ›ฮœฮฮžฮŸฮ ฮก๏ฟฝฮฃฮคฮฅฮฆฮงฮจฮฉฮชฮซฮฌฮญฮฎฮฏฮฐฮฑฮฒฮณฮดฮตฮถฮทฮธฮนฮบฮปฮผฮฝฮพฮฟฯ€ฯฯ‚ฯƒฯ„ฯ…ฯ†ฯ‡ฯˆฯ‰ฯŠฯ‹ฯŒฯฯŽ๏ฟฝ" + }, + "cp28597": "iso88597", + "iso88598": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย ๏ฟฝยขยฃยคยฅยฆยงยจยฉร—ยซยฌยญยฎยฏยฐยฑยฒยณยดยตยถยทยธยนรทยปยผยฝยพ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ€—ืื‘ื’ื“ื”ื•ื–ื—ื˜ื™ืšื›ืœืืžืŸื ืกืขืฃืคืฅืฆืงืจืฉืช๏ฟฝ๏ฟฝโ€Žโ€๏ฟฝ" + }, + "cp28598": "iso88598", + "iso88599": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย ยกยขยฃยคยฅยฆยงยจยฉยชยซยฌยญยฎยฏยฐยฑยฒยณยดยตยถยทยธยนยบยปยผยฝยพยฟร€รร‚รƒร„ร…ร†ร‡รˆร‰รŠร‹รŒรรŽรฤžร‘ร’ร“ร”ร•ร–ร—ร˜ร™รšร›รœฤฐลžรŸร รกรขรฃรครฅรฆรงรจรฉรชรซรฌรญรฎรฏฤŸรฑรฒรณรดรตรถรทรธรนรบรปรผฤฑลŸรฟ" + }, + "cp28599": "iso88599", + "iso885910": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย ฤ„ฤ’ฤขฤชฤจฤถยงฤปฤล ลฆลฝยญลชลŠยฐฤ…ฤ“ฤฃฤซฤฉฤทยทฤผฤ‘ลกลงลพโ€•ลซล‹ฤ€รร‚รƒร„ร…ร†ฤฎฤŒร‰ฤ˜ร‹ฤ–รรŽรรล…ลŒร“ร”ร•ร–ลจร˜ลฒรšร›รœรรžรŸฤรกรขรฃรครฅรฆฤฏฤรฉฤ™รซฤ—รญรฎรฏรฐล†ลรณรดรตรถลฉรธลณรบรปรผรฝรพฤธ" + }, + "cp28600": "iso885910", + "iso885911": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย เธเธ‚เธƒเธ„เธ…เธ†เธ‡เธˆเธ‰เธŠเธ‹เธŒเธเธŽเธเธเธ‘เธ’เธ“เธ”เธ•เธ–เธ—เธ˜เธ™เธšเธ›เธœเธเธžเธŸเธ เธกเธขเธฃเธคเธฅเธฆเธงเธจเธฉเธชเธซเธฌเธญเธฎเธฏเธฐเธฑเธฒเธณเธดเธตเธถเธทเธธเธนเธบ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝเธฟเน€เนเน‚เนƒเน„เน…เน†เน‡เนˆเน‰เนŠเน‹เนŒเนเนŽเนเนเน‘เน’เน“เน”เน•เน–เน—เน˜เน™เนšเน›๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ" + }, + "cp28601": "iso885911", + "iso885913": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย โ€ยขยฃยคโ€žยฆยงร˜ยฉล–ยซยฌยญยฎร†ยฐยฑยฒยณโ€œยตยถยทรธยนล—ยปยผยฝยพรฆฤ„ฤฎฤ€ฤ†ร„ร…ฤ˜ฤ’ฤŒร‰ลนฤ–ฤขฤถฤชฤปล ลƒล…ร“ลŒร•ร–ร—ลฒลลšลชรœลปลฝรŸฤ…ฤฏฤฤ‡รครฅฤ™ฤ“ฤรฉลบฤ—ฤฃฤทฤซฤผลกล„ล†รณลรตรถรทลณล‚ล›ลซรผลผลพโ€™" + }, + "cp28603": "iso885913", + "iso885914": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย แธ‚แธƒยฃฤŠฤ‹แธŠยงแบ€ยฉแบ‚แธ‹แปฒยญยฎลธแธžแธŸฤ ฤกแน€แนยถแน–แบแน—แบƒแน แปณแบ„แบ…แนกร€รร‚รƒร„ร…ร†ร‡รˆร‰รŠร‹รŒรรŽรลดร‘ร’ร“ร”ร•ร–แนชร˜ร™รšร›รœรลถรŸร รกรขรฃรครฅรฆรงรจรฉรชรซรฌรญรฎรฏลตรฑรฒรณรดรตรถแนซรธรนรบรปรผรฝลทรฟ" + }, + "cp28604": "iso885914", + "iso885915": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย ยกยขยฃโ‚ฌยฅล ยงลกยฉยชยซยฌยญยฎยฏยฐยฑยฒยณลฝยตยถยทลพยนยบยปล’ล“ลธยฟร€รร‚รƒร„ร…ร†ร‡รˆร‰รŠร‹รŒรรŽรรร‘ร’ร“ร”ร•ร–ร—ร˜ร™รšร›รœรรžรŸร รกรขรฃรครฅรฆรงรจรฉรชรซรฌรญรฎรฏรฐรฑรฒรณรดรตรถรทรธรนรบรปรผรฝรพรฟ" + }, + "cp28605": "iso885915", + "iso885916": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย ฤ„ฤ…ลโ‚ฌโ€žล ยงลกยฉศ˜ยซลนยญลบลปยฐยฑฤŒล‚ลฝโ€ยถยทลพฤศ™ยปล’ล“ลธลผร€รร‚ฤ‚ร„ฤ†ร†ร‡รˆร‰รŠร‹รŒรรŽรฤลƒร’ร“ร”ลร–ลšลฐร™รšร›รœฤ˜ศšรŸร รกรขฤƒรคฤ‡รฆรงรจรฉรชรซรฌรญรฎรฏฤ‘ล„รฒรณรดล‘รถล›ลฑรนรบรปรผฤ™ศ›รฟ" + }, + "cp28606": "iso885916", + "cp437": { + "type": "_sbcs", + "chars": "ร‡รผรฉรขรคร รฅรงรชรซรจรฏรฎรฌร„ร…ร‰รฆร†รดรถรฒรปรนรฟร–รœยขยฃยฅโ‚งฦ’รกรญรณรบรฑร‘ยชยบยฟโŒยฌยฝยผยกยซยปโ–‘โ–’โ–“โ”‚โ”คโ•กโ•ขโ•–โ••โ•ฃโ•‘โ•—โ•โ•œโ•›โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผโ•žโ•Ÿโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ•งโ•จโ•คโ•ฅโ•™โ•˜โ•’โ•“โ•ซโ•ชโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ฮฑรŸฮ“ฯ€ฮฃฯƒยตฯ„ฮฆฮ˜ฮฉฮดโˆžฯ†ฮตโˆฉโ‰กยฑโ‰ฅโ‰คโŒ โŒกรทโ‰ˆยฐโˆ™ยทโˆšโฟยฒโ– ย " + }, + "ibm437": "cp437", + "csibm437": "cp437", + "cp737": { + "type": "_sbcs", + "chars": "ฮ‘ฮ’ฮ“ฮ”ฮ•ฮ–ฮ—ฮ˜ฮ™ฮšฮ›ฮœฮฮžฮŸฮ ฮกฮฃฮคฮฅฮฆฮงฮจฮฉฮฑฮฒฮณฮดฮตฮถฮทฮธฮนฮบฮปฮผฮฝฮพฮฟฯ€ฯฯƒฯ‚ฯ„ฯ…ฯ†ฯ‡ฯˆโ–‘โ–’โ–“โ”‚โ”คโ•กโ•ขโ•–โ••โ•ฃโ•‘โ•—โ•โ•œโ•›โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผโ•žโ•Ÿโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ•งโ•จโ•คโ•ฅโ•™โ•˜โ•’โ•“โ•ซโ•ชโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ฯ‰ฮฌฮญฮฎฯŠฮฏฯŒฯฯ‹ฯŽฮ†ฮˆฮ‰ฮŠฮŒฮŽฮยฑโ‰ฅโ‰คฮชฮซรทโ‰ˆยฐโˆ™ยทโˆšโฟยฒโ– ย " + }, + "ibm737": "cp737", + "csibm737": "cp737", + "cp775": { + "type": "_sbcs", + "chars": "ฤ†รผรฉฤรคฤฃรฅฤ‡ล‚ฤ“ล–ล—ฤซลนร„ร…ร‰รฆร†ลรถฤขยขลšล›ร–รœรธยฃร˜ร—ยคฤ€ฤชรณลปลผลบโ€ยฆยฉยฎยฌยฝยผลยซยปโ–‘โ–’โ–“โ”‚โ”คฤ„ฤŒฤ˜ฤ–โ•ฃโ•‘โ•—โ•ฤฎล โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผลฒลชโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌลฝฤ…ฤฤ™ฤ—ฤฏลกลณลซลพโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ร“รŸลŒลƒรตร•ยตล„ฤถฤทฤปฤผล†ฤ’ล…โ€™ยญยฑโ€œยพยถยงรทโ€žยฐโˆ™ยทยนยณยฒโ– ย " + }, + "ibm775": "cp775", + "csibm775": "cp775", + "cp850": { + "type": "_sbcs", + "chars": "ร‡รผรฉรขรคร รฅรงรชรซรจรฏรฎรฌร„ร…ร‰รฆร†รดรถรฒรปรนรฟร–รœรธยฃร˜ร—ฦ’รกรญรณรบรฑร‘ยชยบยฟยฎยฌยฝยผยกยซยปโ–‘โ–’โ–“โ”‚โ”ครร‚ร€ยฉโ•ฃโ•‘โ•—โ•ยขยฅโ”โ””โ”ดโ”ฌโ”œโ”€โ”ผรฃรƒโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌยครฐรรŠร‹รˆฤฑรรŽรโ”˜โ”Œโ–ˆโ–„ยฆรŒโ–€ร“รŸร”ร’รตร•ยตรพรžรšร›ร™รฝรยฏยดยญยฑโ€—ยพยถยงรทยธยฐยจยทยนยณยฒโ– ย " + }, + "ibm850": "cp850", + "csibm850": "cp850", + "cp852": { + "type": "_sbcs", + "chars": "ร‡รผรฉรขรคลฏฤ‡รงล‚รซลล‘รฎลนร„ฤ†ร‰ฤนฤบรดรถฤฝฤพลšล›ร–รœลคลฅลร—ฤรกรญรณรบฤ„ฤ…ลฝลพฤ˜ฤ™ยฌลบฤŒลŸยซยปโ–‘โ–’โ–“โ”‚โ”ครร‚ฤšลžโ•ฃโ•‘โ•—โ•ลปลผโ”โ””โ”ดโ”ฌโ”œโ”€โ”ผฤ‚ฤƒโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌยคฤ‘ฤฤŽร‹ฤล‡รรŽฤ›โ”˜โ”Œโ–ˆโ–„ลขลฎโ–€ร“รŸร”ลƒล„ลˆล ลกล”รšล•ลฐรฝรลฃยดยญหห›ห‡ห˜ยงรทยธยฐยจห™ลฑล˜ล™โ– ย " + }, + "ibm852": "cp852", + "csibm852": "cp852", + "cp855": { + "type": "_sbcs", + "chars": "ั’ะ‚ั“ะƒั‘ะั”ะ„ั•ะ…ั–ะ†ั—ะ‡ั˜ะˆั™ะ‰ัšะŠั›ะ‹ัœะŒัžะŽัŸะัŽะฎัŠะชะฐะะฑะ‘ั†ะฆะดะ”ะตะ•ั„ะคะณะ“ยซยปโ–‘โ–’โ–“โ”‚โ”คั…ะฅะธะ˜โ•ฃโ•‘โ•—โ•ะนะ™โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผะบะšโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌยคะปะ›ะผะœะฝะะพะžะฟโ”˜โ”Œโ–ˆโ–„ะŸัโ–€ะฏั€ะ ัะกั‚ะขัƒะฃะถะ–ะฒะ’ัŒะฌโ„–ยญั‹ะซะทะ—ัˆะจัะญั‰ะฉั‡ะงยงโ– ย " + }, + "ibm855": "cp855", + "csibm855": "cp855", + "cp856": { + "type": "_sbcs", + "chars": "ืื‘ื’ื“ื”ื•ื–ื—ื˜ื™ืšื›ืœืืžืŸื ืกืขืฃืคืฅืฆืงืจืฉืช๏ฟฝยฃ๏ฟฝร—๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝยฎยฌยฝยผ๏ฟฝยซยปโ–‘โ–’โ–“โ”‚โ”ค๏ฟฝ๏ฟฝ๏ฟฝยฉโ•ฃโ•‘โ•—โ•ยขยฅโ”โ””โ”ดโ”ฌโ”œโ”€โ”ผ๏ฟฝ๏ฟฝโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌยค๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ”˜โ”Œโ–ˆโ–„ยฆ๏ฟฝโ–€๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝยต๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝยฏยดยญยฑโ€—ยพยถยงรทยธยฐยจยทยนยณยฒโ– ย " + }, + "ibm856": "cp856", + "csibm856": "cp856", + "cp857": { + "type": "_sbcs", + "chars": "ร‡รผรฉรขรคร รฅรงรชรซรจรฏรฎฤฑร„ร…ร‰รฆร†รดรถรฒรปรนฤฐร–รœรธยฃร˜ลžลŸรกรญรณรบรฑร‘ฤžฤŸยฟยฎยฌยฝยผยกยซยปโ–‘โ–’โ–“โ”‚โ”ครร‚ร€ยฉโ•ฃโ•‘โ•—โ•ยขยฅโ”โ””โ”ดโ”ฌโ”œโ”€โ”ผรฃรƒโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌยคยบยชรŠร‹รˆ๏ฟฝรรŽรโ”˜โ”Œโ–ˆโ–„ยฆรŒโ–€ร“รŸร”ร’รตร•ยต๏ฟฝร—รšร›ร™รฌรฟยฏยดยญยฑ๏ฟฝยพยถยงรทยธยฐยจยทยนยณยฒโ– ย " + }, + "ibm857": "cp857", + "csibm857": "cp857", + "cp858": { + "type": "_sbcs", + "chars": "ร‡รผรฉรขรคร รฅรงรชรซรจรฏรฎรฌร„ร…ร‰รฆร†รดรถรฒรปรนรฟร–รœรธยฃร˜ร—ฦ’รกรญรณรบรฑร‘ยชยบยฟยฎยฌยฝยผยกยซยปโ–‘โ–’โ–“โ”‚โ”ครร‚ร€ยฉโ•ฃโ•‘โ•—โ•ยขยฅโ”โ””โ”ดโ”ฌโ”œโ”€โ”ผรฃรƒโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌยครฐรรŠร‹รˆโ‚ฌรรŽรโ”˜โ”Œโ–ˆโ–„ยฆรŒโ–€ร“รŸร”ร’รตร•ยตรพรžรšร›ร™รฝรยฏยดยญยฑโ€—ยพยถยงรทยธยฐยจยทยนยณยฒโ– ย " + }, + "ibm858": "cp858", + "csibm858": "cp858", + "cp860": { + "type": "_sbcs", + "chars": "ร‡รผรฉรขรฃร รรงรชรŠรจรร”รฌรƒร‚ร‰ร€รˆรดรตรฒรšรนรŒร•รœยขยฃร™โ‚งร“รกรญรณรบรฑร‘ยชยบยฟร’ยฌยฝยผยกยซยปโ–‘โ–’โ–“โ”‚โ”คโ•กโ•ขโ•–โ••โ•ฃโ•‘โ•—โ•โ•œโ•›โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผโ•žโ•Ÿโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ•งโ•จโ•คโ•ฅโ•™โ•˜โ•’โ•“โ•ซโ•ชโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ฮฑรŸฮ“ฯ€ฮฃฯƒยตฯ„ฮฆฮ˜ฮฉฮดโˆžฯ†ฮตโˆฉโ‰กยฑโ‰ฅโ‰คโŒ โŒกรทโ‰ˆยฐโˆ™ยทโˆšโฟยฒโ– ย " + }, + "ibm860": "cp860", + "csibm860": "cp860", + "cp861": { + "type": "_sbcs", + "chars": "ร‡รผรฉรขรคร รฅรงรชรซรจรรฐรžร„ร…ร‰รฆร†รดรถรพรปรรฝร–รœรธยฃร˜โ‚งฦ’รกรญรณรบรรร“รšยฟโŒยฌยฝยผยกยซยปโ–‘โ–’โ–“โ”‚โ”คโ•กโ•ขโ•–โ••โ•ฃโ•‘โ•—โ•โ•œโ•›โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผโ•žโ•Ÿโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ•งโ•จโ•คโ•ฅโ•™โ•˜โ•’โ•“โ•ซโ•ชโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ฮฑรŸฮ“ฯ€ฮฃฯƒยตฯ„ฮฆฮ˜ฮฉฮดโˆžฯ†ฮตโˆฉโ‰กยฑโ‰ฅโ‰คโŒ โŒกรทโ‰ˆยฐโˆ™ยทโˆšโฟยฒโ– ย " + }, + "ibm861": "cp861", + "csibm861": "cp861", + "cp862": { + "type": "_sbcs", + "chars": "ืื‘ื’ื“ื”ื•ื–ื—ื˜ื™ืšื›ืœืืžืŸื ืกืขืฃืคืฅืฆืงืจืฉืชยขยฃยฅโ‚งฦ’รกรญรณรบรฑร‘ยชยบยฟโŒยฌยฝยผยกยซยปโ–‘โ–’โ–“โ”‚โ”คโ•กโ•ขโ•–โ••โ•ฃโ•‘โ•—โ•โ•œโ•›โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผโ•žโ•Ÿโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ•งโ•จโ•คโ•ฅโ•™โ•˜โ•’โ•“โ•ซโ•ชโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ฮฑรŸฮ“ฯ€ฮฃฯƒยตฯ„ฮฆฮ˜ฮฉฮดโˆžฯ†ฮตโˆฉโ‰กยฑโ‰ฅโ‰คโŒ โŒกรทโ‰ˆยฐโˆ™ยทโˆšโฟยฒโ– ย " + }, + "ibm862": "cp862", + "csibm862": "cp862", + "cp863": { + "type": "_sbcs", + "chars": "ร‡รผรฉรขร‚ร ยถรงรชรซรจรฏรฎโ€—ร€ยงร‰รˆรŠรดร‹รรปรนยคร”รœยขยฃร™ร›ฦ’ยฆยดรณรบยจยธยณยฏรŽโŒยฌยฝยผยพยซยปโ–‘โ–’โ–“โ”‚โ”คโ•กโ•ขโ•–โ••โ•ฃโ•‘โ•—โ•โ•œโ•›โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผโ•žโ•Ÿโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ•งโ•จโ•คโ•ฅโ•™โ•˜โ•’โ•“โ•ซโ•ชโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ฮฑรŸฮ“ฯ€ฮฃฯƒยตฯ„ฮฆฮ˜ฮฉฮดโˆžฯ†ฮตโˆฉโ‰กยฑโ‰ฅโ‰คโŒ โŒกรทโ‰ˆยฐโˆ™ยทโˆšโฟยฒโ– ย " + }, + "ibm863": "cp863", + "csibm863": "cp863", + "cp864": { + "type": "_sbcs", + "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$ูช&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ยฐยทโˆ™โˆšโ–’โ”€โ”‚โ”ผโ”คโ”ฌโ”œโ”ดโ”โ”Œโ””โ”˜ฮฒโˆžฯ†ยฑยฝยผโ‰ˆยซยป๏ปท๏ปธ๏ฟฝ๏ฟฝ๏ปป๏ปผ๏ฟฝย ยญ๏บ‚ยฃยค๏บ„๏ฟฝ๏ฟฝ๏บŽ๏บ๏บ•๏บ™ุŒ๏บ๏บก๏บฅู ูกูขูฃูคูฅูฆูงูจูฉ๏ป‘ุ›๏บฑ๏บต๏บนุŸยข๏บ€๏บ๏บƒ๏บ…๏ปŠ๏บ‹๏บ๏บ‘๏บ“๏บ—๏บ›๏บŸ๏บฃ๏บง๏บฉ๏บซ๏บญ๏บฏ๏บณ๏บท๏บป๏บฟ๏ป๏ป…๏ป‹๏ปยฆยฌรทร—๏ป‰ู€๏ป“๏ป—๏ป›๏ปŸ๏ปฃ๏ปง๏ปซ๏ปญ๏ปฏ๏ปณ๏บฝ๏ปŒ๏ปŽ๏ป๏ปก๏นฝู‘๏ปฅ๏ปฉ๏ปฌ๏ปฐ๏ปฒ๏ป๏ป•๏ปต๏ปถ๏ป๏ป™๏ปฑโ– ๏ฟฝ" + }, + "ibm864": "cp864", + "csibm864": "cp864", + "cp865": { + "type": "_sbcs", + "chars": "ร‡รผรฉรขรคร รฅรงรชรซรจรฏรฎรฌร„ร…ร‰รฆร†รดรถรฒรปรนรฟร–รœรธยฃร˜โ‚งฦ’รกรญรณรบรฑร‘ยชยบยฟโŒยฌยฝยผยกยซยคโ–‘โ–’โ–“โ”‚โ”คโ•กโ•ขโ•–โ••โ•ฃโ•‘โ•—โ•โ•œโ•›โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผโ•žโ•Ÿโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ•งโ•จโ•คโ•ฅโ•™โ•˜โ•’โ•“โ•ซโ•ชโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ฮฑรŸฮ“ฯ€ฮฃฯƒยตฯ„ฮฆฮ˜ฮฉฮดโˆžฯ†ฮตโˆฉโ‰กยฑโ‰ฅโ‰คโŒ โŒกรทโ‰ˆยฐโˆ™ยทโˆšโฟยฒโ– ย " + }, + "ibm865": "cp865", + "csibm865": "cp865", + "cp866": { + "type": "_sbcs", + "chars": "ะะ‘ะ’ะ“ะ”ะ•ะ–ะ—ะ˜ะ™ะšะ›ะœะะžะŸะ ะกะขะฃะคะฅะฆะงะจะฉะชะซะฌะญะฎะฏะฐะฑะฒะณะดะตะถะทะธะนะบะปะผะฝะพะฟโ–‘โ–’โ–“โ”‚โ”คโ•กโ•ขโ•–โ••โ•ฃโ•‘โ•—โ•โ•œโ•›โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผโ•žโ•Ÿโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ•งโ•จโ•คโ•ฅโ•™โ•˜โ•’โ•“โ•ซโ•ชโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ั€ัั‚ัƒั„ั…ั†ั‡ัˆั‰ัŠั‹ัŒััŽัะั‘ะ„ั”ะ‡ั—ะŽัžยฐโˆ™ยทโˆšโ„–ยคโ– ย " + }, + "ibm866": "cp866", + "csibm866": "cp866", + "cp869": { + "type": "_sbcs", + "chars": "๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝฮ†๏ฟฝยทยฌยฆโ€˜โ€™ฮˆโ€•ฮ‰ฮŠฮชฮŒ๏ฟฝ๏ฟฝฮŽฮซยฉฮยฒยณฮฌยฃฮญฮฎฮฏฯŠฮฯŒฯฮ‘ฮ’ฮ“ฮ”ฮ•ฮ–ฮ—ยฝฮ˜ฮ™ยซยปโ–‘โ–’โ–“โ”‚โ”คฮšฮ›ฮœฮโ•ฃโ•‘โ•—โ•ฮžฮŸโ”โ””โ”ดโ”ฌโ”œโ”€โ”ผฮ ฮกโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌฮฃฮคฮฅฮฆฮงฮจฮฉฮฑฮฒฮณโ”˜โ”Œโ–ˆโ–„ฮดฮตโ–€ฮถฮทฮธฮนฮบฮปฮผฮฝฮพฮฟฯ€ฯฯƒฯ‚ฯ„ฮ„ยญยฑฯ…ฯ†ฯ‡ยงฯˆฮ…ยฐยจฯ‰ฯ‹ฮฐฯŽโ– ย " + }, + "ibm869": "cp869", + "csibm869": "cp869", + "cp922": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย ยกยขยฃยคยฅยฆยงยจยฉยชยซยฌยญยฎโ€พยฐยฑยฒยณยดยตยถยทยธยนยบยปยผยฝยพยฟร€รร‚รƒร„ร…ร†ร‡รˆร‰รŠร‹รŒรรŽรล ร‘ร’ร“ร”ร•ร–ร—ร˜ร™รšร›รœรลฝรŸร รกรขรฃรครฅรฆรงรจรฉรชรซรฌรญรฎรฏลกรฑรฒรณรดรตรถรทรธรนรบรปรผรฝลพรฟ" + }, + "ibm922": "cp922", + "csibm922": "cp922", + "cp1046": { + "type": "_sbcs", + "chars": "๏บˆร—รท๏ฃถ๏ฃต๏ฃด๏ฃท๏นฑยˆโ– โ”‚โ”€โ”โ”Œโ””โ”˜๏นน๏นป๏นฝ๏นฟ๏นท๏บŠ๏ปฐ๏ปณ๏ปฒ๏ปŽ๏ป๏ป๏ปถ๏ปธ๏ปบ๏ปผย ๏ฃบ๏ฃน๏ฃธยค๏ฃป๏บ‹๏บ‘๏บ—๏บ›๏บŸ๏บฃุŒยญ๏บง๏บณู ูกูขูฃูคูฅูฆูงูจูฉ๏บทุ›๏บป๏บฟ๏ปŠุŸ๏ป‹ุกุขุฃุคุฅุฆุงุจุฉุชุซุฌุญุฎุฏุฐุฑุฒุณุดุตุถุท๏ป‡ุนุบ๏ปŒ๏บ‚๏บ„๏บŽ๏ป“ู€ูู‚ูƒู„ู…ู†ู‡ูˆู‰ูŠู‹ูŒููŽููู‘ู’๏ป—๏ป›๏ปŸ๏ฃผ๏ปต๏ปท๏ปน๏ปป๏ปฃ๏ปง๏ปฌ๏ปฉ๏ฟฝ" + }, + "ibm1046": "cp1046", + "csibm1046": "cp1046", + "cp1124": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย ะะ‚าะ„ะ…ะ†ะ‡ะˆะ‰ะŠะ‹ะŒยญะŽะะะ‘ะ’ะ“ะ”ะ•ะ–ะ—ะ˜ะ™ะšะ›ะœะะžะŸะ ะกะขะฃะคะฅะฆะงะจะฉะชะซะฌะญะฎะฏะฐะฑะฒะณะดะตะถะทะธะนะบะปะผะฝะพะฟั€ัั‚ัƒั„ั…ั†ั‡ัˆั‰ัŠั‹ัŒััŽัโ„–ั‘ั’า‘ั”ั•ั–ั—ั˜ั™ัšั›ัœยงัžัŸ" + }, + "ibm1124": "cp1124", + "csibm1124": "cp1124", + "cp1125": { + "type": "_sbcs", + "chars": "ะะ‘ะ’ะ“ะ”ะ•ะ–ะ—ะ˜ะ™ะšะ›ะœะะžะŸะ ะกะขะฃะคะฅะฆะงะจะฉะชะซะฌะญะฎะฏะฐะฑะฒะณะดะตะถะทะธะนะบะปะผะฝะพะฟโ–‘โ–’โ–“โ”‚โ”คโ•กโ•ขโ•–โ••โ•ฃโ•‘โ•—โ•โ•œโ•›โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผโ•žโ•Ÿโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ•งโ•จโ•คโ•ฅโ•™โ•˜โ•’โ•“โ•ซโ•ชโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ั€ัั‚ัƒั„ั…ั†ั‡ัˆั‰ัŠั‹ัŒััŽัะั‘าา‘ะ„ั”ะ†ั–ะ‡ั—ยทโˆšโ„–ยคโ– ย " + }, + "ibm1125": "cp1125", + "csibm1125": "cp1125", + "cp1129": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย ยกยขยฃยคยฅยฆยงล“ยฉยชยซยฌยญยฎยฏยฐยฑยฒยณลธยตยถยทล’ยนยบยปยผยฝยพยฟร€รร‚ฤ‚ร„ร…ร†ร‡รˆร‰รŠร‹ฬ€รรŽรฤร‘ฬ‰ร“ร”ฦ ร–ร—ร˜ร™รšร›รœฦฏฬƒรŸร รกรขฤƒรครฅรฆรงรจรฉรชรซฬรญรฎรฏฤ‘รฑฬฃรณรดฦกรถรทรธรนรบรปรผฦฐโ‚ซรฟ" + }, + "ibm1129": "cp1129", + "csibm1129": "cp1129", + "cp1133": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย เบเบ‚เบ„เบ‡เบˆเบชเบŠเบเบ”เบ•เบ–เบ—เบ™เบšเบ›เบœเบเบžเบŸเบกเบขเบฃเบฅเบงเบซเบญเบฎ๏ฟฝ๏ฟฝ๏ฟฝเบฏเบฐเบฒเบณเบดเบตเบถเบทเบธเบนเบผเบฑเบปเบฝ๏ฟฝ๏ฟฝ๏ฟฝเป€เปเป‚เปƒเป„เปˆเป‰เปŠเป‹เปŒเปเป†๏ฟฝเปœเปโ‚ญ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝเปเป‘เป’เป“เป”เป•เป–เป—เป˜เป™๏ฟฝ๏ฟฝยขยฌยฆ๏ฟฝ" + }, + "ibm1133": "cp1133", + "csibm1133": "cp1133", + "cp1161": { + "type": "_sbcs", + "chars": "๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝเนˆเธเธ‚เธƒเธ„เธ…เธ†เธ‡เธˆเธ‰เธŠเธ‹เธŒเธเธŽเธเธเธ‘เธ’เธ“เธ”เธ•เธ–เธ—เธ˜เธ™เธšเธ›เธœเธเธžเธŸเธ เธกเธขเธฃเธคเธฅเธฆเธงเธจเธฉเธชเธซเธฌเธญเธฎเธฏเธฐเธฑเธฒเธณเธดเธตเธถเธทเธธเธนเธบเน‰เนŠเน‹โ‚ฌเธฟเน€เนเน‚เนƒเน„เน…เน†เน‡เนˆเน‰เนŠเน‹เนŒเนเนŽเนเนเน‘เน’เน“เน”เน•เน–เน—เน˜เน™เนšเน›ยขยฌยฆย " + }, + "ibm1161": "cp1161", + "csibm1161": "cp1161", + "cp1162": { + "type": "_sbcs", + "chars": "โ‚ฌยย‚ยƒย„โ€ฆย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยโ€˜โ€™โ€œโ€โ€ขโ€“โ€”ย˜ย™ยšย›ยœยยžยŸย เธเธ‚เธƒเธ„เธ…เธ†เธ‡เธˆเธ‰เธŠเธ‹เธŒเธเธŽเธเธเธ‘เธ’เธ“เธ”เธ•เธ–เธ—เธ˜เธ™เธšเธ›เธœเธเธžเธŸเธ เธกเธขเธฃเธคเธฅเธฆเธงเธจเธฉเธชเธซเธฌเธญเธฎเธฏเธฐเธฑเธฒเธณเธดเธตเธถเธทเธธเธนเธบ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝเธฟเน€เนเน‚เนƒเน„เน…เน†เน‡เนˆเน‰เนŠเน‹เนŒเนเนŽเนเนเน‘เน’เน“เน”เน•เน–เน—เน˜เน™เนšเน›๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ" + }, + "ibm1162": "cp1162", + "csibm1162": "cp1162", + "cp1163": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย ยกยขยฃโ‚ฌยฅยฆยงล“ยฉยชยซยฌยญยฎยฏยฐยฑยฒยณลธยตยถยทล’ยนยบยปยผยฝยพยฟร€รร‚ฤ‚ร„ร…ร†ร‡รˆร‰รŠร‹ฬ€รรŽรฤร‘ฬ‰ร“ร”ฦ ร–ร—ร˜ร™รšร›รœฦฏฬƒรŸร รกรขฤƒรครฅรฆรงรจรฉรชรซฬรญรฎรฏฤ‘รฑฬฃรณรดฦกรถรทรธรนรบรปรผฦฐโ‚ซรฟ" + }, + "ibm1163": "cp1163", + "csibm1163": "cp1163", + "maccroatian": { + "type": "_sbcs", + "chars": "ร„ร…ร‡ร‰ร‘ร–รœรกร รขรครฃรฅรงรฉรจรชรซรญรฌรฎรฏรฑรณรฒรดรถรตรบรนรปรผโ€ ยฐยขยฃยงโ€ขยถรŸยฎล โ„ขยดยจโ‰ ลฝร˜โˆžยฑโ‰คโ‰ฅโˆ†ยตโˆ‚โˆ‘โˆลกโˆซยชยบโ„ฆลพรธยฟยกยฌโˆšฦ’โ‰ˆฤ†ยซฤŒโ€ฆย ร€รƒร•ล’ล“ฤโ€”โ€œโ€โ€˜โ€™รทโ—Š๏ฟฝยฉโ„ยคโ€นโ€บร†ยปโ€“ยทโ€šโ€žโ€ฐร‚ฤ‡รฤรˆรรŽรรŒร“ร”ฤ‘ร’รšร›ร™ฤฑห†หœยฏฯ€ร‹หšยธรŠรฆห‡" + }, + "maccyrillic": { + "type": "_sbcs", + "chars": "ะะ‘ะ’ะ“ะ”ะ•ะ–ะ—ะ˜ะ™ะšะ›ะœะะžะŸะ ะกะขะฃะคะฅะฆะงะจะฉะชะซะฌะญะฎะฏโ€ ยฐยขยฃยงโ€ขยถะ†ยฎยฉโ„ขะ‚ั’โ‰ ะƒั“โˆžยฑโ‰คโ‰ฅั–ยตโˆ‚ะˆะ„ั”ะ‡ั—ะ‰ั™ะŠัšั˜ะ…ยฌโˆšฦ’โ‰ˆโˆ†ยซยปโ€ฆย ะ‹ั›ะŒัœั•โ€“โ€”โ€œโ€โ€˜โ€™รทโ€žะŽัžะัŸโ„–ะั‘ัะฐะฑะฒะณะดะตะถะทะธะนะบะปะผะฝะพะฟั€ัั‚ัƒั„ั…ั†ั‡ัˆั‰ัŠั‹ัŒััŽยค" + }, + "macgreek": { + "type": "_sbcs", + "chars": "ร„ยนยฒร‰ยณร–รœฮ…ร รขรคฮ„ยจรงรฉรจรชรซยฃโ„ขรฎรฏโ€ขยฝโ€ฐรดรถยฆยญรนรปรผโ€ ฮ“ฮ”ฮ˜ฮ›ฮžฮ รŸยฎยฉฮฃฮชยงโ‰ ยฐฮ‡ฮ‘ยฑโ‰คโ‰ฅยฅฮ’ฮ•ฮ–ฮ—ฮ™ฮšฮœฮฆฮซฮจฮฉฮฌฮยฌฮŸฮกโ‰ˆฮคยซยปโ€ฆย ฮฅฮงฮ†ฮˆล“โ€“โ€•โ€œโ€โ€˜โ€™รทฮ‰ฮŠฮŒฮŽฮญฮฎฮฏฯŒฮฯฮฑฮฒฯˆฮดฮตฯ†ฮณฮทฮนฮพฮบฮปฮผฮฝฮฟฯ€ฯŽฯฯƒฯ„ฮธฯ‰ฯ‚ฯ‡ฯ…ฮถฯŠฯ‹ฮฮฐ๏ฟฝ" + }, + "maciceland": { + "type": "_sbcs", + "chars": "ร„ร…ร‡ร‰ร‘ร–รœรกร รขรครฃรฅรงรฉรจรชรซรญรฌรฎรฏรฑรณรฒรดรถรตรบรนรปรผรยฐยขยฃยงโ€ขยถรŸยฎยฉโ„ขยดยจโ‰ ร†ร˜โˆžยฑโ‰คโ‰ฅยฅยตโˆ‚โˆ‘โˆฯ€โˆซยชยบโ„ฆรฆรธยฟยกยฌโˆšฦ’โ‰ˆโˆ†ยซยปโ€ฆย ร€รƒร•ล’ล“โ€“โ€”โ€œโ€โ€˜โ€™รทโ—Šรฟลธโ„ยครรฐรžรพรฝยทโ€šโ€žโ€ฐร‚รŠรร‹รˆรรŽรรŒร“ร”๏ฟฝร’รšร›ร™ฤฑห†หœยฏห˜ห™หšยธหห›ห‡" + }, + "macroman": { + "type": "_sbcs", + "chars": "ร„ร…ร‡ร‰ร‘ร–รœรกร รขรครฃรฅรงรฉรจรชรซรญรฌรฎรฏรฑรณรฒรดรถรตรบรนรปรผโ€ ยฐยขยฃยงโ€ขยถรŸยฎยฉโ„ขยดยจโ‰ ร†ร˜โˆžยฑโ‰คโ‰ฅยฅยตโˆ‚โˆ‘โˆฯ€โˆซยชยบโ„ฆรฆรธยฟยกยฌโˆšฦ’โ‰ˆโˆ†ยซยปโ€ฆย ร€รƒร•ล’ล“โ€“โ€”โ€œโ€โ€˜โ€™รทโ—Šรฟลธโ„ยคโ€นโ€บ๏ฌ๏ฌ‚โ€กยทโ€šโ€žโ€ฐร‚รŠรร‹รˆรรŽรรŒร“ร”๏ฟฝร’รšร›ร™ฤฑห†หœยฏห˜ห™หšยธหห›ห‡" + }, + "macromania": { + "type": "_sbcs", + "chars": "ร„ร…ร‡ร‰ร‘ร–รœรกร รขรครฃรฅรงรฉรจรชรซรญรฌรฎรฏรฑรณรฒรดรถรตรบรนรปรผโ€ ยฐยขยฃยงโ€ขยถรŸยฎยฉโ„ขยดยจโ‰ ฤ‚ลžโˆžยฑโ‰คโ‰ฅยฅยตโˆ‚โˆ‘โˆฯ€โˆซยชยบโ„ฆฤƒลŸยฟยกยฌโˆšฦ’โ‰ˆโˆ†ยซยปโ€ฆย ร€รƒร•ล’ล“โ€“โ€”โ€œโ€โ€˜โ€™รทโ—Šรฟลธโ„ยคโ€นโ€บลขลฃโ€กยทโ€šโ€žโ€ฐร‚รŠรร‹รˆรรŽรรŒร“ร”๏ฟฝร’รšร›ร™ฤฑห†หœยฏห˜ห™หšยธหห›ห‡" + }, + "macthai": { + "type": "_sbcs", + "chars": "ยซยปโ€ฆ๏ขŒ๏ข๏ข’๏ข•๏ข˜๏ข‹๏ขŽ๏ข‘๏ข”๏ข—โ€œโ€๏ข™๏ฟฝโ€ข๏ข„๏ข‰๏ข…๏ข†๏ข‡๏ขˆ๏ขŠ๏ข๏ข๏ข“๏ข–โ€˜โ€™๏ฟฝย เธเธ‚เธƒเธ„เธ…เธ†เธ‡เธˆเธ‰เธŠเธ‹เธŒเธเธŽเธเธเธ‘เธ’เธ“เธ”เธ•เธ–เธ—เธ˜เธ™เธšเธ›เธœเธเธžเธŸเธ เธกเธขเธฃเธคเธฅเธฆเธงเธจเธฉเธชเธซเธฌเธญเธฎเธฏเธฐเธฑเธฒเธณเธดเธตเธถเธทเธธเธนเธบ๏ปฟโ€‹โ€“โ€”เธฟเน€เนเน‚เนƒเน„เน…เน†เน‡เนˆเน‰เนŠเน‹เนŒเนโ„ขเนเนเน‘เน’เน“เน”เน•เน–เน—เน˜เน™ยฎยฉ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ" + }, + "macturkish": { + "type": "_sbcs", + "chars": "ร„ร…ร‡ร‰ร‘ร–รœรกร รขรครฃรฅรงรฉรจรชรซรญรฌรฎรฏรฑรณรฒรดรถรตรบรนรปรผโ€ ยฐยขยฃยงโ€ขยถรŸยฎยฉโ„ขยดยจโ‰ ร†ร˜โˆžยฑโ‰คโ‰ฅยฅยตโˆ‚โˆ‘โˆฯ€โˆซยชยบโ„ฆรฆรธยฟยกยฌโˆšฦ’โ‰ˆโˆ†ยซยปโ€ฆย ร€รƒร•ล’ล“โ€“โ€”โ€œโ€โ€˜โ€™รทโ—ŠรฟลธฤžฤŸฤฐฤฑลžลŸโ€กยทโ€šโ€žโ€ฐร‚รŠรร‹รˆรรŽรรŒร“ร”๏ฟฝร’รšร›ร™๏ฟฝห†หœยฏห˜ห™หšยธหห›ห‡" + }, + "macukraine": { + "type": "_sbcs", + "chars": "ะะ‘ะ’ะ“ะ”ะ•ะ–ะ—ะ˜ะ™ะšะ›ะœะะžะŸะ ะกะขะฃะคะฅะฆะงะจะฉะชะซะฌะญะฎะฏโ€ ยฐายฃยงโ€ขยถะ†ยฎยฉโ„ขะ‚ั’โ‰ ะƒั“โˆžยฑโ‰คโ‰ฅั–ยตา‘ะˆะ„ั”ะ‡ั—ะ‰ั™ะŠัšั˜ะ…ยฌโˆšฦ’โ‰ˆโˆ†ยซยปโ€ฆย ะ‹ั›ะŒัœั•โ€“โ€”โ€œโ€โ€˜โ€™รทโ€žะŽัžะัŸโ„–ะั‘ัะฐะฑะฒะณะดะตะถะทะธะนะบะปะผะฝะพะฟั€ัั‚ัƒั„ั…ั†ั‡ัˆั‰ัŠั‹ัŒััŽยค" + }, + "koi8r": { + "type": "_sbcs", + "chars": "โ”€โ”‚โ”Œโ”โ””โ”˜โ”œโ”คโ”ฌโ”ดโ”ผโ–€โ–„โ–ˆโ–Œโ–โ–‘โ–’โ–“โŒ โ– โˆ™โˆšโ‰ˆโ‰คโ‰ฅย โŒกยฐยฒยทรทโ•โ•‘โ•’ั‘โ•“โ•”โ••โ•–โ•—โ•˜โ•™โ•šโ•›โ•œโ•โ•žโ•Ÿโ• โ•กะโ•ขโ•ฃโ•คโ•ฅโ•ฆโ•งโ•จโ•ฉโ•ชโ•ซโ•ฌยฉัŽะฐะฑั†ะดะตั„ะณั…ะธะนะบะปะผะฝะพะฟัั€ัั‚ัƒะถะฒัŒั‹ะทัˆัั‰ั‡ัŠะฎะะ‘ะฆะ”ะ•ะคะ“ะฅะ˜ะ™ะšะ›ะœะะžะŸะฏะ ะกะขะฃะ–ะ’ะฌะซะ—ะจะญะฉะงะช" + }, + "koi8u": { + "type": "_sbcs", + "chars": "โ”€โ”‚โ”Œโ”โ””โ”˜โ”œโ”คโ”ฌโ”ดโ”ผโ–€โ–„โ–ˆโ–Œโ–โ–‘โ–’โ–“โŒ โ– โˆ™โˆšโ‰ˆโ‰คโ‰ฅย โŒกยฐยฒยทรทโ•โ•‘โ•’ั‘ั”โ•”ั–ั—โ•—โ•˜โ•™โ•šโ•›า‘โ•โ•žโ•Ÿโ• โ•กะะ„โ•ฃะ†ะ‡โ•ฆโ•งโ•จโ•ฉโ•ชาโ•ฌยฉัŽะฐะฑั†ะดะตั„ะณั…ะธะนะบะปะผะฝะพะฟัั€ัั‚ัƒะถะฒัŒั‹ะทัˆัั‰ั‡ัŠะฎะะ‘ะฆะ”ะ•ะคะ“ะฅะ˜ะ™ะšะ›ะœะะžะŸะฏะ ะกะขะฃะ–ะ’ะฌะซะ—ะจะญะฉะงะช" + }, + "koi8ru": { + "type": "_sbcs", + "chars": "โ”€โ”‚โ”Œโ”โ””โ”˜โ”œโ”คโ”ฌโ”ดโ”ผโ–€โ–„โ–ˆโ–Œโ–โ–‘โ–’โ–“โŒ โ– โˆ™โˆšโ‰ˆโ‰คโ‰ฅย โŒกยฐยฒยทรทโ•โ•‘โ•’ั‘ั”โ•”ั–ั—โ•—โ•˜โ•™โ•šโ•›า‘ัžโ•žโ•Ÿโ• โ•กะะ„โ•ฃะ†ะ‡โ•ฆโ•งโ•จโ•ฉโ•ชาะŽยฉัŽะฐะฑั†ะดะตั„ะณั…ะธะนะบะปะผะฝะพะฟัั€ัั‚ัƒะถะฒัŒั‹ะทัˆัั‰ั‡ัŠะฎะะ‘ะฆะ”ะ•ะคะ“ะฅะ˜ะ™ะšะ›ะœะะžะŸะฏะ ะกะขะฃะ–ะ’ะฌะซะ—ะจะญะฉะงะช" + }, + "koi8t": { + "type": "_sbcs", + "chars": "า›า“โ€šา’โ€žโ€ฆโ€ โ€ก๏ฟฝโ€ฐาณโ€นาฒาทาถ๏ฟฝาšโ€˜โ€™โ€œโ€โ€ขโ€“โ€”๏ฟฝโ„ข๏ฟฝโ€บ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝำฏำฎั‘ยคำฃยฆยง๏ฟฝ๏ฟฝ๏ฟฝยซยฌยญยฎ๏ฟฝยฐยฑยฒะ๏ฟฝำขยถยท๏ฟฝโ„–๏ฟฝยป๏ฟฝ๏ฟฝ๏ฟฝยฉัŽะฐะฑั†ะดะตั„ะณั…ะธะนะบะปะผะฝะพะฟัั€ัั‚ัƒะถะฒัŒั‹ะทัˆัั‰ั‡ัŠะฎะะ‘ะฆะ”ะ•ะคะ“ะฅะ˜ะ™ะšะ›ะœะะžะŸะฏะ ะกะขะฃะ–ะ’ะฌะซะ—ะจะญะฉะงะช" + }, + "armscii8": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย ๏ฟฝึ‡ึ‰)(ยปยซโ€”.ี,-ึŠโ€ฆีœี›ีžิฑีกิฒีขิณีฃิดีคิตีฅิถีฆิทีงิธีจินีฉิบีชิปีซิผีฌิฝีญิพีฎิฟีฏี€ีฐีีฑี‚ีฒีƒีณี„ีดี…ีตี†ีถี‡ีทีˆีธี‰ีนีŠีบี‹ีปีŒีผีีฝีŽีพีีฟีึ€ี‘ึี’ึ‚ี“ึƒี”ึ„ี•ึ…ี–ึ†ีš๏ฟฝ" + }, + "rk1048": { + "type": "_sbcs", + "chars": "ะ‚ะƒโ€šั“โ€žโ€ฆโ€ โ€กโ‚ฌโ€ฐะ‰โ€นะŠาšาบะั’โ€˜โ€™โ€œโ€โ€ขโ€“โ€”๏ฟฝโ„ขั™โ€บัšา›าปัŸย าฐาฑำ˜ยคำจยฆยงะยฉา’ยซยฌยญยฎาฎยฐยฑะ†ั–ำฉยตยถยทั‘โ„–า“ยปำ™าขาฃาฏะะ‘ะ’ะ“ะ”ะ•ะ–ะ—ะ˜ะ™ะšะ›ะœะะžะŸะ ะกะขะฃะคะฅะฆะงะจะฉะชะซะฌะญะฎะฏะฐะฑะฒะณะดะตะถะทะธะนะบะปะผะฝะพะฟั€ัั‚ัƒั„ั…ั†ั‡ัˆั‰ัŠั‹ัŒััŽั" + }, + "tcvn": { + "type": "_sbcs", + "chars": "\u0000รšแปค\u0003แปชแปฌแปฎ\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010แปจแปฐแปฒแปถแปธรแปด\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ร€แบขรƒรแบ แบถแบฌรˆแบบแบผร‰แบธแป†รŒแปˆฤจรแปŠร’แปŽร•ร“แปŒแป˜แปœแปžแป แปšแปขร™แปฆลจย ฤ‚ร‚รŠร”ฦ ฦฏฤฤƒรขรชรดฦกฦฐฤ‘แบฐฬ€ฬ‰ฬƒฬฬฃร แบฃรฃรกแบกแบฒแบฑแบณแบตแบฏแบดแบฎแบฆแบจแบชแบคแป€แบทแบงแบฉแบซแบฅแบญรจแป‚แบปแบฝรฉแบนแปแปƒแป…แบฟแป‡รฌแป‰แป„แบพแป’ฤฉรญแป‹รฒแป”แปรตรณแปแป“แป•แป—แป‘แป™แปแปŸแปกแป›แปฃรนแป–แปงลฉรบแปฅแปซแปญแปฏแปฉแปฑแปณแปทแปนรฝแปตแป" + }, + "georgianacademy": { + "type": "_sbcs", + "chars": "ย€ยโ€šฦ’โ€žโ€ฆโ€ โ€กห†โ€ฐล โ€นล’ยยŽยยโ€˜โ€™โ€œโ€โ€ขโ€“โ€”หœโ„ขลกโ€บล“ยยžลธย ยกยขยฃยคยฅยฆยงยจยฉยชยซยฌยญยฎยฏยฐยฑยฒยณยดยตยถยทยธยนยบยปยผยฝยพยฟแƒแƒ‘แƒ’แƒ“แƒ”แƒ•แƒ–แƒ—แƒ˜แƒ™แƒšแƒ›แƒœแƒแƒžแƒŸแƒ แƒกแƒขแƒฃแƒคแƒฅแƒฆแƒงแƒจแƒฉแƒชแƒซแƒฌแƒญแƒฎแƒฏแƒฐแƒฑแƒฒแƒณแƒดแƒตแƒถรงรจรฉรชรซรฌรญรฎรฏรฐรฑรฒรณรดรตรถรทรธรนรบรปรผรฝรพรฟ" + }, + "georgianps": { + "type": "_sbcs", + "chars": "ย€ยโ€šฦ’โ€žโ€ฆโ€ โ€กห†โ€ฐล โ€นล’ยยŽยยโ€˜โ€™โ€œโ€โ€ขโ€“โ€”หœโ„ขลกโ€บล“ยยžลธย ยกยขยฃยคยฅยฆยงยจยฉยชยซยฌยญยฎยฏยฐยฑยฒยณยดยตยถยทยธยนยบยปยผยฝยพยฟแƒแƒ‘แƒ’แƒ“แƒ”แƒ•แƒ–แƒฑแƒ—แƒ˜แƒ™แƒšแƒ›แƒœแƒฒแƒแƒžแƒŸแƒ แƒกแƒขแƒณแƒฃแƒคแƒฅแƒฆแƒงแƒจแƒฉแƒชแƒซแƒฌแƒญแƒฎแƒดแƒฏแƒฐแƒตรฆรงรจรฉรชรซรฌรญรฎรฏรฐรฑรฒรณรดรตรถรทรธรนรบรปรผรฝรพรฟ" + }, + "pt154": { + "type": "_sbcs", + "chars": "า–า’ำฎา“โ€žโ€ฆาถาฎาฒาฏา ำขาขาšาบาธา—โ€˜โ€™โ€œโ€โ€ขโ€“โ€”าณาทากำฃาฃา›าปานย ะŽัžะˆำจา˜าฐยงะยฉำ˜ยซยฌำฏยฎาœยฐาฑะ†ั–า™ำฉยถยทั‘โ„–ำ™ยปั˜าชาซาะะ‘ะ’ะ“ะ”ะ•ะ–ะ—ะ˜ะ™ะšะ›ะœะะžะŸะ ะกะขะฃะคะฅะฆะงะจะฉะชะซะฌะญะฎะฏะฐะฑะฒะณะดะตะถะทะธะนะบะปะผะฝะพะฟั€ัั‚ัƒั„ั…ั†ั‡ัˆั‰ัŠั‹ัŒััŽั" + }, + "viscii": { + "type": "_sbcs", + "chars": "\u0000\u0001แบฒ\u0003\u0004แบดแบช\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013แปถ\u0015\u0016\u0017\u0018แปธ\u001a\u001b\u001c\u001dแปด\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~แบ แบฎแบฐแบถแบคแบฆแบจแบฌแบผแบธแบพแป€แป‚แป„แป†แปแป’แป”แป–แป˜แปขแปšแปœแปžแปŠแปŽแปŒแปˆแปฆลจแปคแปฒร•แบฏแบฑแบทแบฅแบงแบฉแบญแบฝแบนแบฟแปแปƒแป…แป‡แป‘แป“แป•แป—แป ฦ แป™แปแปŸแป‹แปฐแปจแปชแปฌฦกแป›ฦฏร€รร‚รƒแบขฤ‚แบณแบตรˆร‰รŠแบบรŒรฤจแปณฤแปฉร’ร“ร”แบกแปทแปซแปญร™รšแปนแปตรแปกฦฐร รกรขรฃแบฃฤƒแปฏแบซรจรฉรชแบปรฌรญฤฉแป‰ฤ‘แปฑรฒรณรดรตแปแปแปฅรนรบลฉแปงรฝแปฃแปฎ" + }, + "iso646cn": { + "type": "_sbcs", + "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#ยฅ%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}โ€พ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ" + }, + "iso646jp": { + "type": "_sbcs", + "chars": "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[ยฅ]^_`abcdefghijklmnopqrstuvwxyz{|}โ€พ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ" + }, + "hproman8": { + "type": "_sbcs", + "chars": "ย€ยย‚ยƒย„ย…ย†ย‡ยˆย‰ยŠย‹ยŒยยŽยยย‘ย’ย“ย”ย•ย–ย—ย˜ย™ยšย›ยœยยžยŸย ร€ร‚รˆรŠร‹รŽรยดห‹ห†ยจหœร™ร›โ‚คยฏรรฝยฐร‡รงร‘รฑยกยฟยคยฃยฅยงฦ’ยขรขรชรดรปรกรฉรณรบร รจรฒรนรครซรถรผร…รฎร˜ร†รฅรญรธรฆร„รฌร–รœร‰รฏรŸร”รรƒรฃรรฐรรŒร“ร’ร•รตล ลกรšลธรฟรžรพยทยตยถยพโ€”ยผยฝยชยบยซโ– ยปยฑ๏ฟฝ" + }, + "macintosh": { + "type": "_sbcs", + "chars": "ร„ร…ร‡ร‰ร‘ร–รœรกร รขรครฃรฅรงรฉรจรชรซรญรฌรฎรฏรฑรณรฒรดรถรตรบรนรปรผโ€ ยฐยขยฃยงโ€ขยถรŸยฎยฉโ„ขยดยจโ‰ ร†ร˜โˆžยฑโ‰คโ‰ฅยฅยตโˆ‚โˆ‘โˆฯ€โˆซยชยบโ„ฆรฆรธยฟยกยฌโˆšฦ’โ‰ˆโˆ†ยซยปโ€ฆย ร€รƒร•ล’ล“โ€“โ€”โ€œโ€โ€˜โ€™รทโ—Šรฟลธโ„ยคโ€นโ€บ๏ฌ๏ฌ‚โ€กยทโ€šโ€žโ€ฐร‚รŠรร‹รˆรรŽรรŒร“ร”๏ฟฝร’รšร›ร™ฤฑห†หœยฏห˜ห™หšยธหห›ห‡" + }, + "ascii": { + "type": "_sbcs", + "chars": "๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ" + }, + "tis620": { + "type": "_sbcs", + "chars": "๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝเธเธ‚เธƒเธ„เธ…เธ†เธ‡เธˆเธ‰เธŠเธ‹เธŒเธเธŽเธเธเธ‘เธ’เธ“เธ”เธ•เธ–เธ—เธ˜เธ™เธšเธ›เธœเธเธžเธŸเธ เธกเธขเธฃเธคเธฅเธฆเธงเธจเธฉเธชเธซเธฌเธญเธฎเธฏเธฐเธฑเธฒเธณเธดเธตเธถเธทเธธเธนเธบ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝเธฟเน€เนเน‚เนƒเน„เน…เน†เน‡เนˆเน‰เนŠเน‹เนŒเนเนŽเนเนเน‘เน’เน“เน”เน•เน–เน—เน˜เน™เนšเน›๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ" + } +} \ No newline at end of file diff --git a/node_modules/iconv-lite/encodings/sbcs-data.js b/node_modules/iconv-lite/encodings/sbcs-data.js new file mode 100644 index 0000000..066f904 --- /dev/null +++ b/node_modules/iconv-lite/encodings/sbcs-data.js @@ -0,0 +1,179 @@ +"use strict"; + +// Manually added data to be used by sbcs codec in addition to generated one. + +module.exports = { + // Not supported by iconv, not sure why. + "10029": "maccenteuro", + "maccenteuro": { + "type": "_sbcs", + "chars": "ร„ฤ€ฤร‰ฤ„ร–รœรกฤ…ฤŒรคฤฤ†ฤ‡รฉลนลบฤŽรญฤฤ’ฤ“ฤ–รณฤ—รดรถรตรบฤšฤ›รผโ€ ยฐฤ˜ยฃยงโ€ขยถรŸยฎยฉโ„ขฤ™ยจโ‰ ฤฃฤฎฤฏฤชโ‰คโ‰ฅฤซฤถโˆ‚โˆ‘ล‚ฤปฤผฤฝฤพฤนฤบล…ล†ลƒยฌโˆšล„ล‡โˆ†ยซยปโ€ฆย ลˆลร•ล‘ลŒโ€“โ€”โ€œโ€โ€˜โ€™รทโ—Šลล”ล•ล˜โ€นโ€บล™ล–ล—ล โ€šโ€žลกลšล›รลคลฅรลฝลพลชร“ร”ลซลฎรšลฏลฐลฑลฒลณรรฝฤทลปลลผฤขห‡" + }, + + "808": "cp808", + "ibm808": "cp808", + "cp808": { + "type": "_sbcs", + "chars": "ะะ‘ะ’ะ“ะ”ะ•ะ–ะ—ะ˜ะ™ะšะ›ะœะะžะŸะ ะกะขะฃะคะฅะฆะงะจะฉะชะซะฌะญะฎะฏะฐะฑะฒะณะดะตะถะทะธะนะบะปะผะฝะพะฟโ–‘โ–’โ–“โ”‚โ”คโ•กโ•ขโ•–โ••โ•ฃโ•‘โ•—โ•โ•œโ•›โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผโ•žโ•Ÿโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ•งโ•จโ•คโ•ฅโ•™โ•˜โ•’โ•“โ•ซโ•ชโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ั€ัั‚ัƒั„ั…ั†ั‡ัˆั‰ัŠั‹ัŒััŽัะั‘ะ„ั”ะ‡ั—ะŽัžยฐโˆ™ยทโˆšโ„–โ‚ฌโ– ย " + }, + + "mik": { + "type": "_sbcs", + "chars": "ะะ‘ะ’ะ“ะ”ะ•ะ–ะ—ะ˜ะ™ะšะ›ะœะะžะŸะ ะกะขะฃะคะฅะฆะงะจะฉะชะซะฌะญะฎะฏะฐะฑะฒะณะดะตะถะทะธะนะบะปะผะฝะพะฟั€ัั‚ัƒั„ั…ั†ั‡ัˆั‰ัŠั‹ัŒััŽัโ””โ”ดโ”ฌโ”œโ”€โ”ผโ•ฃโ•‘โ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ”โ–‘โ–’โ–“โ”‚โ”คโ„–ยงโ•—โ•โ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ฮฑรŸฮ“ฯ€ฮฃฯƒยตฯ„ฮฆฮ˜ฮฉฮดโˆžฯ†ฮตโˆฉโ‰กยฑโ‰ฅโ‰คโŒ โŒกรทโ‰ˆยฐโˆ™ยทโˆšโฟยฒโ– ย " + }, + + "cp720": { + "type": "_sbcs", + "chars": "\x80\x81รฉรข\x84ร \x86รงรชรซรจรฏรฎ\x8d\x8e\x8f\x90\u0651\u0652รดยคู€รปรนุกุขุฃุคยฃุฅุฆุงุจุฉุชุซุฌุญุฎุฏุฐุฑุฒุณุดุตยซยปโ–‘โ–’โ–“โ”‚โ”คโ•กโ•ขโ•–โ••โ•ฃโ•‘โ•—โ•โ•œโ•›โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผโ•žโ•Ÿโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ•งโ•จโ•คโ•ฅโ•™โ•˜โ•’โ•“โ•ซโ•ชโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ุถุทุธุนุบูยตู‚ูƒู„ู…ู†ู‡ูˆู‰ูŠโ‰ก\u064b\u064c\u064d\u064e\u064f\u0650โ‰ˆยฐโˆ™ยทโˆšโฟยฒโ– \u00a0" + }, + + // Aliases of generated encodings. + "ascii8bit": "ascii", + "usascii": "ascii", + "ansix34": "ascii", + "ansix341968": "ascii", + "ansix341986": "ascii", + "csascii": "ascii", + "cp367": "ascii", + "ibm367": "ascii", + "isoir6": "ascii", + "iso646us": "ascii", + "iso646irv": "ascii", + "us": "ascii", + + "latin1": "iso88591", + "latin2": "iso88592", + "latin3": "iso88593", + "latin4": "iso88594", + "latin5": "iso88599", + "latin6": "iso885910", + "latin7": "iso885913", + "latin8": "iso885914", + "latin9": "iso885915", + "latin10": "iso885916", + + "csisolatin1": "iso88591", + "csisolatin2": "iso88592", + "csisolatin3": "iso88593", + "csisolatin4": "iso88594", + "csisolatincyrillic": "iso88595", + "csisolatinarabic": "iso88596", + "csisolatingreek" : "iso88597", + "csisolatinhebrew": "iso88598", + "csisolatin5": "iso88599", + "csisolatin6": "iso885910", + + "l1": "iso88591", + "l2": "iso88592", + "l3": "iso88593", + "l4": "iso88594", + "l5": "iso88599", + "l6": "iso885910", + "l7": "iso885913", + "l8": "iso885914", + "l9": "iso885915", + "l10": "iso885916", + + "isoir14": "iso646jp", + "isoir57": "iso646cn", + "isoir100": "iso88591", + "isoir101": "iso88592", + "isoir109": "iso88593", + "isoir110": "iso88594", + "isoir144": "iso88595", + "isoir127": "iso88596", + "isoir126": "iso88597", + "isoir138": "iso88598", + "isoir148": "iso88599", + "isoir157": "iso885910", + "isoir166": "tis620", + "isoir179": "iso885913", + "isoir199": "iso885914", + "isoir203": "iso885915", + "isoir226": "iso885916", + + "cp819": "iso88591", + "ibm819": "iso88591", + + "cyrillic": "iso88595", + + "arabic": "iso88596", + "arabic8": "iso88596", + "ecma114": "iso88596", + "asmo708": "iso88596", + + "greek" : "iso88597", + "greek8" : "iso88597", + "ecma118" : "iso88597", + "elot928" : "iso88597", + + "hebrew": "iso88598", + "hebrew8": "iso88598", + + "turkish": "iso88599", + "turkish8": "iso88599", + + "thai": "iso885911", + "thai8": "iso885911", + + "celtic": "iso885914", + "celtic8": "iso885914", + "isoceltic": "iso885914", + + "tis6200": "tis620", + "tis62025291": "tis620", + "tis62025330": "tis620", + + "10000": "macroman", + "10006": "macgreek", + "10007": "maccyrillic", + "10079": "maciceland", + "10081": "macturkish", + + "cspc8codepage437": "cp437", + "cspc775baltic": "cp775", + "cspc850multilingual": "cp850", + "cspcp852": "cp852", + "cspc862latinhebrew": "cp862", + "cpgr": "cp869", + + "msee": "cp1250", + "mscyrl": "cp1251", + "msansi": "cp1252", + "msgreek": "cp1253", + "msturk": "cp1254", + "mshebr": "cp1255", + "msarab": "cp1256", + "winbaltrim": "cp1257", + + "cp20866": "koi8r", + "20866": "koi8r", + "ibm878": "koi8r", + "cskoi8r": "koi8r", + + "cp21866": "koi8u", + "21866": "koi8u", + "ibm1168": "koi8u", + + "strk10482002": "rk1048", + + "tcvn5712": "tcvn", + "tcvn57121": "tcvn", + + "gb198880": "iso646cn", + "cn": "iso646cn", + + "csiso14jisc6220ro": "iso646jp", + "jisc62201969ro": "iso646jp", + "jp": "iso646jp", + + "cshproman8": "hproman8", + "r8": "hproman8", + "roman8": "hproman8", + "xroman8": "hproman8", + "ibm1051": "hproman8", + + "mac": "macintosh", + "csmacintosh": "macintosh", +}; + diff --git a/node_modules/iconv-lite/encodings/tables/big5-added.json b/node_modules/iconv-lite/encodings/tables/big5-added.json new file mode 100644 index 0000000..3c3d3c2 --- /dev/null +++ b/node_modules/iconv-lite/encodings/tables/big5-added.json @@ -0,0 +1,122 @@ +[ +["8740","ไฐไฐฒไ˜ƒไ–ฆไ•ธ๐ง‰งไตทไ–ณ๐งฒฑไณข๐งณ…ใฎ•ไœถไ„ไฑ‡ไฑ€๐คŠฟ๐ฃ˜—๐ง’๐ฆบ‹๐งƒ’ไฑ—๐ช‘ไไ—šไฒ…๐งฑฌได‡ไชคไšก๐ฆฌฃ็ˆฅ๐ฅฉ”๐กฉฃ๐ฃธ†๐ฃฝกๆ™ๅ›ป"], +["8767","็ถ•ๅค๐จฎนใทด้œด๐งฏฏๅฏ›๐กตžๅชคใ˜ฅ๐ฉบฐๅซ‘ๅฎทๅณผๆฎ่–“๐ฉฅ…็‘ก็’ใกต๐กต“๐ฃšž๐ฆ€กใปฌ"], +["87a1","๐ฅฃžใซต็ซผ้พ—๐ค…ก๐จค๐ฃ‡ช๐ ชŠ๐ฃ‰žไŒŠ่’„้พ–้ฏไคฐ่˜“ๅข–้Š้ˆ˜็ง็จฒๆ™ ๆจฉ่ข็‘Œ็ฏ…ๆž‚็จฌๅ‰้†ใ“ฆ็„๐ฅถน็“†้ฟ‡ๅžณไคฏๅ‘Œไ„ฑ๐ฃšŽๅ ˜็ฉฒ๐งญฅ่ฎไšฎ๐ฆบˆไ†๐ฅถ™็ฎฎ๐ข’ผ้ฟˆ๐ข“๐ข“‰๐ข“Œ้ฟ‰่”„๐ฃ–ปไ‚ด้ฟŠไ“ก๐ชทฟๆ‹็ฎ้ฟ‹"], +["8840","ใ‡€",4,"๐ „Œใ‡…๐ ƒ‘๐ ƒใ‡†ใ‡‡๐ ƒ‹๐กฟจใ‡ˆ๐ ƒŠใ‡‰ใ‡Šใ‡‹ใ‡Œ๐ „Žใ‡ใ‡Žฤ€รวร€ฤ’ร‰ฤšรˆลŒร“ว‘ร’เฟฟรŠฬ„แบพเฟฟรŠฬŒแป€รŠฤรกวŽร ษ‘ฤ“รฉฤ›รจฤซรญวรฌลรณว’รฒลซรบว”รนว–ว˜วš"], +["88a1","วœรผเฟฟรชฬ„แบฟเฟฟรชฬŒแปรชษกโšโ›"], +["8940","๐ชŽฉ๐ก……"], +["8943","ๆ”Š"], +["8946","ไธฝๆป้ตŽ้‡Ÿ"], +["894c","๐งœตๆ’‘ไผšไผจไพจๅ…–ๅ…ดๅ†œๅ‡คๅŠกๅŠจๅŒปๅŽๅ‘ๅ˜ๅ›ขๅฃฐๅค„ๅค‡ๅคฒๅคดๅญฆๅฎžๅฎŸๅฒšๅบ†ๆ€ปๆ–‰ๆŸพๆ „ๆกฅๆตŽ็‚ผ็”ต็บค็บฌ็บบ็ป‡็ป็ปŸ็ผ†็ผท่‰บ่‹่ฏ่ง†่ฎพ่ฏข่ฝฆ่ฝง่ฝฎ"], +["89a1","็‘็ณผ็ทๆฅ†็ซ‰ๅˆง"], +["89ab","้†Œ็ขธ้…ž่‚ผ"], +["89b0","่ด‹่ƒถ๐ งง"], +["89b5","่‚Ÿ้ป‡ไณ้ท‰้ธŒไฐพ๐ฉทถ๐ง€Ž้ธŠ๐ช„ณใ—"], +["89c1","ๆบš่ˆพ็”™"], +["89c5","ไค‘้ฉฌ้ช้พ™็ฆ‡๐จ‘ฌ๐กทŠ๐ —๐ขซฆไธคไบไบ€ไบ‡ไบฟไปซไผทใ‘Œไพฝในˆๅ€ƒๅ‚ˆใ‘ฝใ’“ใ’ฅๅ††ๅค…ๅ‡›ๅ‡ผๅˆ…ไบ‰ๅ‰นๅАๅŒงใ—‡ๅŽฉใ•‘ๅŽฐใ•“ๅ‚ๅฃใ•ญใ•ฒใšๅ’“ๅ’ฃๅ’ดๅ’นๅ“ๅ“ฏๅ”˜ๅ”ฃๅ”จใ–˜ๅ”ฟใ–ฅใ–ฟๅ——ใ—…"], +["8a40","๐งถ„ๅ”ฅ"], +["8a43","๐ ฑ‚๐ ด•๐ฅ„ซๅ–๐ขณ†ใงฌ๐ ่น†๐คถธ๐ฉ“ฅไ“๐จ‚พ็บ๐ขฐธใจดไŸ•๐จ…๐ฆงฒ๐คทชๆ“๐ ตผ๐ พด๐ ณ•๐กƒดๆ’่นพ๐ บ–๐ ฐ‹๐ ฝค๐ขฒฉ๐จ‰–๐ค““"], +["8a64","๐ ต†๐ฉฉ๐จƒฉไŸด๐คบง๐ขณ‚้ชฒใฉง๐ฉ—ดใฟญใ”†๐ฅ‹‡๐ฉŸ”๐งฃˆ๐ขต„้ตฎ้ •"], +["8a76","ไ™๐ฆ‚ฅๆ’ดๅ“ฃ๐ขตŒ๐ขฏŠ๐กทใงป๐กฏ"], +["8aa1","๐ฆ›š๐ฆœ–๐งฆ ๆ“ช๐ฅ’๐ ฑƒ่นจ๐ข†ก๐จญŒ๐ œฑ"], +["8aac","ไ ‹๐ †ฉใฟบๅกณ๐ขถ"], +["8ab2","๐ค—ˆ๐ “ผ๐ฆ‚—๐ ฝŒ๐ ถ–ๅ•นไ‚ปไŽบ"], +["8abb","ไชด๐ขฉฆ๐ก‚่†ช้ฃต๐ ถœๆนใงพ๐ขต่ท€ๅšกๆ‘ผในƒ"], +["8ac9","๐ช˜๐ ธ‰๐ขซ๐ขณ‰"], +["8ace","๐กƒˆ๐ฃง‚ใฆ’ใจ†๐จŠ›ใ•ธ๐ฅน‰๐ขƒ‡ๅ™’๐ ผฑ๐ขฒฒ๐ฉœ ใ’ผๆฐฝ๐คธป"], +["8adf","๐ง•ด๐ขบ‹๐ขˆˆ๐ช™›๐จณ๐ นบ๐ ฐด๐ฆ œ็พ“๐กƒ๐ข ƒ๐ขคนใ—ป๐ฅ‡ฃ๐ บŒ๐ พ๐ บชใพ“๐ ผฐ๐ ต‡๐ก…๐ นŒ"], +["8af6","๐ บซ๐ ฎฉ๐ ตˆ๐กƒ€๐ก„ฝใฟน๐ขš–ๆฒ๐ พญ"], +["8b40","๐ฃด๐ง˜น๐ขฏŽ๐ ตพ๐ ตฟ๐ขฑ‘๐ขฑ•ใจ˜๐ บ˜๐กƒ‡๐ ผฎ๐ช˜ฒ๐ฆญ๐จณ’๐จถ™๐จณŠ้–ชๅ“Œ่‹„ๅ–น"], +["8b55","๐ฉปƒ้ฐฆ้ชถ๐งž๐ขทฎ็…€่…ญ่ƒฌๅฐœ๐ฆ•ฒ่„ดใž—ๅŸ๐จ‚ฝ้†ถ๐ ปบ๐ ธ๐ นท๐ ปปใ—๐คทซใ˜‰๐ ณ–ๅšฏ๐ขžต๐กƒ‰๐ ธ๐ นธ๐กธ๐ก…ˆ๐จˆ‡๐ก‘•๐ นน๐คน๐ขถคๅฉ”๐ก€๐ก€ž๐กƒต๐กƒถๅžœ๐ ธ‘"], +["8ba1","๐งš”๐จ‹๐ พต๐ นป๐ฅ…พใœƒ๐ พถ๐ก†€๐ฅ‹˜๐ชŠฝ๐คงš๐ก บ๐ค…ท๐จ‰ผๅข™ๅ‰จใ˜š๐ฅœฝ็ฎฒๅญจไ €ไฌฌ้ผงไงง้ฐŸ้ฎ๐ฅญด๐ฃ„ฝๅ—ปใ—ฒๅš‰ไธจๅค‚๐กฏ๐ฏกธ้‘๐ ‚†ไน›ไบปใ”พๅฐฃๅฝ‘ๅฟ„ใฃบๆ‰Œๆ”ตๆญบๆฐตๆฐบ็ฌ็ˆซไธฌ็Šญ๐คฃฉ็ฝ’็คป็ณน็ฝ“๐ฆ‰ชใ“"], +["8bde","๐ฆ‹่€‚่‚€๐ฆ˜’๐ฆฅ‘ๅ่กค่ง๐งขฒ่ฎ ่ด้’…้•ธ้•ฟ้—จ๐จธ้Ÿฆ้กต้ฃŽ้ฃž้ฅฃ๐ฉ ้ฑผ้ธŸ้ป„ๆญฏ๏ค‡ไธท๐ ‚‡้˜ๆˆท้’ข"], +["8c40","ๅ€ปๆทพ๐ฉฑณ้พฆใท‰่ข๐ค…Ž็ทๅณตไฌ ๐ฅ‡ใ•™๐ฅดฐๆ„ข๐จจฒ่พง้‡ถ็†‘ๆœ™็Žบ๐ฃЁ๐ช„‡ใฒ‹๐กฆ€ไฌ็ฃค็‚ๅ†ฎ๐จœไ€‰ๆฉฃ๐ชŠบไˆฃ่˜๐ ฉฏ็จช๐ฉฅ‡๐จซช้•็ๅŒค๐ขพ้ด็›™๐จงฃ้พง็Ÿไบฃไฟฐๅ‚ผไธฏไผ—้พจๅด็ถ‹ๅข’ๅฃ๐กถถๅบ’ๅบ™ๅฟ‚๐ขœ’ๆ–‹"], +["8ca1","๐ฃนๆค™ๆฉƒ๐ฃฑฃๆณฟ"], +["8ca7","็ˆ€๐ค”…็ŽŒใป›๐คจ“ๅฌ•็’น่ฎƒ๐ฅฒค๐ฅš•็ช“็ฏฌ็ณƒ็นฌ่‹ธ่–—้พฉ่ข้พช่บน้พซ่ฟ่•Ÿ้ง ้ˆก้พฌ๐จถน๐กฟไฑไŠขๅจš"], +["8cc9","้กจๆซไ‰ถๅœฝ"], +["8cce","่—–๐คฅป่Šฟ๐ง„ไฒ๐ฆตดๅตป๐ฆฌ•๐ฆพพ้พญ้พฎๅฎ–้พฏๆ›ง็น›ๆน—็งŠใถˆไ“ƒ๐ฃ‰–๐ขž–ไŽšไ”ถ"], +["8ce6","ๅณ•๐ฃฌš่ซนๅฑธใด’๐ฃ•‘ๅตธ้พฒ็…—ไ•˜๐คƒฌ๐กธฃไฑทใฅธใ‘Š๐ †ค๐ฆฑ่ซŒไพด๐ ˆนๅฆฟ่…ฌ้ก–๐ฉฃบๅผป"], +["8d40","๐ ฎŸ"], +["8d42","๐ข‡๐จฅญไ„‚ไšป๐ฉนใผ‡้พณ๐ช†ตไƒธใŸ–ไ›ท๐ฆฑ†ไ…ผ๐จšฒ๐งฟไ•ญใฃ”๐ฅ’šไ•กไ”›ไถ‰ไฑปไตถไ—ชใฟˆ๐คฌใ™กไ“žไ’ฝไ‡ญๅดพๅตˆๅต–ใทผใ ๅถคๅถนใ  ใ ธๅน‚ๅบฝๅผฅๅพƒใคˆใค”ใคฟใฅๆƒ—ๆ„ฝๅณฅใฆ‰ๆ†ทๆ†นๆ‡ใฆธๆˆฌๆАๆ‹ฅๆŒ˜ใงธๅšฑ"], +["8da1","ใจƒๆขๆปๆ‡ๆ‘šใฉ‹ๆ“€ๅด•ๅ˜ก้พŸใช—ๆ–†ใชฝๆ—ฟๆ™“ใซฒๆš’ใฌขๆœ–ใญ‚ๆžคๆ €ใญ˜ๆกŠๆข„ใญฒใญฑใญปๆค‰ๆฅƒ็‰œๆฅคๆฆŸๆฆ…ใฎผๆง–ใฏๆฉฅๆฉดๆฉฑๆช‚ใฏฌๆช™ใฏฒๆชซๆชตๆซ”ๆซถๆฎๆฏๆฏชๆฑตๆฒชใณ‹ๆด‚ๆด†ๆดฆๆถใณฏๆถคๆถฑๆธ•ๆธ˜ๆธฉๆบ†๐จง€ๆบปๆปขๆปš้ฝฟๆปจๆปฉๆผคๆผดใต†๐ฃฝๆพๆพพใตชใตต็†ทๅฒ™ใถŠ็€ฌใถ‘็็”็ฏ็ฟ็‚‰๐ Œฅไใ—ฑ๐ ป˜"], +["8e40","๐ฃป—ๅžพ๐ฆป“็„พ๐ฅŸ ใ™Žๆฆข๐จฏฉๅญด็ฉ‰๐ฅฃก๐ฉ“™็ฉฅ็ฉฝ๐ฅฆฌ็ชป็ชฐ็ซ‚็ซƒ็‡‘๐ฆ’ไ‡Š็ซš็ซ็ซชไ‡ฏๅ’ฒ๐ฅฐ็ฌ‹็ญ•็ฌฉ๐ฅŒŽ๐ฅณพ็ฎข็ญฏ่Žœ๐ฅฎด๐ฆฑฟ็ฏ่ก็ฎ’็ฎธ๐ฅด ใถญ๐ฅฑฅ่’’็ฏบ็ฐ†็ฐต๐ฅณ็ฑ„็ฒƒ๐คข‚็ฒฆๆ™ฝ๐ค•ธ็ณ‰็ณ‡็ณฆ็ฑด็ณณ็ณต็ณŽ"], +["8ea1","็นงไ”๐ฆน„็ต๐ฆป–็’็ถ‰็ถซ็„ต็ถณ็ท’๐ค—๐ฆ€ฉ็ทคใด“็ทต๐กŸน็ทฅ๐จญ็ธ๐ฆ„ก๐ฆ…š็นฎ็บ’ไŒซ้‘ฌ็ธง็ฝ€็ฝ็ฝ‡็คถ๐ฆ‹้งก็พ—๐ฆ‘็พฃ๐ก™ก๐ จไ•œ๐ฃฆไ”ƒ๐จŒบ็ฟบ๐ฆ’‰่€…่€ˆ่€่€จ่€ฏ๐ช‚‡๐ฆณƒ่€ป่€ผ่ก๐ขœ”ไฆ‰๐ฆ˜ฆ๐ฃทฃ๐ฆ›จๆœฅ่‚ง๐จฉˆ่„‡่„šๅขฐ๐ข›ถๆฑฟ๐ฆ’˜๐คพธๆ“ง๐ก’Š่ˆ˜๐กกžๆฉ“๐คฉฅ๐คช•ไ‘บ่ˆฉ๐ ฌ๐ฆฉ’๐ฃตพไฟน๐ก“ฝ่“ข่ข๐ฆฌŠ๐คฆง๐ฃ”ฐ๐กณ๐ฃทธ่Šชๆค›๐ฏฆ”ไ‡›"], +["8f40","่•‹่‹่Œš๐ ธ–๐กžดใ›๐ฃ…ฝ๐ฃ•š่‰ป่‹ข่Œ˜๐ฃบ‹๐ฆถฃ๐ฆฌ…๐ฆฎ—๐ฃ—Žใถฟ่Œๅ—ฌ่Ž…ไ”‹๐ฆถฅ่Žฌ่่“ใ‘พ๐ฆป”ๆฉ—่•šใ’–๐ฆน‚๐ขปฏ่‘˜๐ฅฏค่‘ฑใท“ไ“คๆชง่‘Š๐ฃฒต็ฅ˜่’จ๐ฆฎ–๐ฆนท๐ฆนƒ่“ž่่Ž‘ไ’ ่’“่“ค๐ฅฒ‘ไ‰€๐ฅณ€ไ•ƒ่”ดๅซฒ๐ฆบ™ไ”ง่•ณไ”–ๆžฟ่˜–"], +["8fa1","๐จ˜ฅ๐จ˜ป่—๐ง‚ˆ่˜‚๐ก–‚๐งƒ๐ฏฆฒไ•ช่˜จใ™ˆ๐กขขๅท๐งŽš่™พ่ฑ๐ชƒธ่Ÿฎ๐ขฐง่žฑ่Ÿš่ ๅ™ก่™ฌๆก–ไ˜่ก…่ก†๐ง— ๐ฃถน๐ง—ค่กž่ขœไ™›่ขด่ขตๆ่ฃ…็ท๐งœ่ฆ‡่ฆŠ่ฆฆ่ฆฉ่ฆง่ฆผ๐จจฅ่งง๐งคค๐งชฝ่ชœ็ž“้‡พ่ช๐งฉ™็ซฉ๐งฌบ๐ฃพไœ“๐งฌธ็…ผ่ฌŒ่ฌŸ๐ฅฐ๐ฅ•ฅ่ฌฟ่ญŒ่ญ่ชฉ๐คฉบ่ฎ่ฎ›่ชฏ๐ก›Ÿไ˜•่ก่ฒ›๐งต”๐งถ๐ฏง”ใœฅ๐งต“่ณ–๐งถ˜๐งถฝ่ด’่ดƒ๐กค่ณ›็œ่ด‘๐คณ‰ใป่ตท"], +["9040","่ถฉ๐จ€‚๐ก€”๐คฆŠใญผ๐จ†ผ๐ง„Œ็ซง่บญ่บถ่ปƒ้‹”่ผ™่ผญ๐จฅ๐จ’่พฅ้Œƒ๐ชŠŸ๐ ฉ่พณไคช๐จงž๐จ”ฝ๐ฃถปๅปธ๐ฃ‰ข่ฟน๐ช€”๐จšผ๐จ”๐ขŒฅใฆ€๐ฆป—้€ท๐จ”ผ๐งชพ้ก๐จ•ฌ๐จ˜‹้‚จ๐จœ“้ƒ„๐จ›ฆ้‚ฎ้ƒฝ้…งใซฐ้†ฉ้‡„็ฒฌ๐จคณ๐กบ‰้ˆŽๆฒŸ้‰้‰ข๐ฅ–น้Šน๐จซ†๐ฃฒ›๐จฌŒ๐ฅ—›"], +["90a1","๐ ดฑ้Œฌ้ซ๐จซก๐จฏซ็‚ๅซƒ๐จซข๐จซฅไฅฅ้‰„๐จฏฌ๐จฐน๐จฏฟ้ณ้‘›่บผ้–…้–ฆ้ฆ้– ๆฟถไŠน๐ข™บ๐จ›˜๐ก‰ผ๐ฃธฎไงŸๆฐœ้™ป้š–ไ…ฌ้šฃ๐ฆป•ๆ‡š้šถ็ฃต๐จซ ้šฝๅŒไฆก๐ฆฒธ๐ ‰ด๐ฆ๐ฉ‚ฏ๐ฉƒฅ๐คซ‘๐กค•๐ฃŒŠ้œฑ่™‚้œถไจไ”ฝไ–…๐คซฉ็ตๅญ้œ›้œ๐ฉ‡•้—ๅญŠ๐ฉ‡ซ้Ÿ้ฅๅƒ๐ฃ‚ท๐ฃ‚ผ้ž‰้žŸ้žฑ้žพ้Ÿ€้Ÿ’้Ÿ ๐ฅ‘ฌ้Ÿฎ็œ๐ฉณ้Ÿฟ้Ÿต๐ฉ๐งฅบไซ‘้ ด้ ณ้ก‹้กฆใฌŽ๐ง…ตใต‘๐ ˜ฐ๐ค…œ"], +["9140","๐ฅœ†้ฃŠ้ขท้ฃˆ้ฃ‡ไซฟ๐ฆดง๐ก›“ๅ–ฐ้ฃก้ฃฆ้ฃฌ้ธ้คน๐คจฉไญฒ๐ฉก—๐ฉค…้งต้จŒ้จป้จ้ฉ˜๐ฅœฅใ›„๐ฉ‚ฑ๐ฉฏ•้ซ ้ซข๐ฉฌ…้ซดไฐŽ้ฌ”้ฌญ๐จ˜€ๅ€ด้ฌด๐ฆฆจใฃƒ๐ฃฝ้ญ้ญ€๐ฉดพๅฉ…๐กกฃ้ฎŽ๐ค‰‹้ฐ‚้ฏฟ้ฐŒ๐ฉนจ้ท”๐ฉพท๐ช†’๐ช†ซ๐ชƒก๐ช„ฃ๐ช‡Ÿ้ตพ้ถƒ๐ช„ด้ธŽๆขˆ"], +["91a1","้ท„๐ข…›๐ช†“๐ชˆ ๐กคป๐ชˆณ้ดน๐ช‚น๐ชŠด้บ้บ•้บž้บขไดด้บช้บฏ๐คค้ปใญ ใงฅใดไผฒใžพ๐จฐซ้ผ‚้ผˆไฎ–้ค๐ฆถข้ผ—้ผ–้ผนๅšŸๅšŠ้ฝ…้ฆธ๐ฉ‚‹้Ÿฒ่‘ฟ้ฝข้ฝฉ็ซœ้พŽ็ˆ–ไฎพ๐คฅต๐คฆป็…ท๐คงธ๐คˆ๐คฉ‘็Žž๐จฏš๐กฃบ็ฆŸ๐จฅพ๐จธถ้ฉ้ณ๐จฉ„้‹ฌ้ށ้‹๐จฅฌ๐ค’น็ˆ—ใปซ็ฒ็ฉƒ็ƒ๐ค‘ณ๐คธ็…พ๐กŸฏ็‚ฃ๐กขพ๐ฃ–™ใป‡๐กข…๐ฅฏ๐กŸธใœข๐ก›ป๐ก นใ›ก๐กด๐กฃ‘๐ฅฝ‹ใœฃ๐ก›€ๅ›๐คจฅ๐กพ๐กŠจ"], +["9240","๐ก†๐ก’ถ่”ƒ๐ฃšฆ่”ƒ่‘•๐คฆ”๐ง…ฅ๐ฃธฑ๐ฅ•œ๐ฃปป๐ง’ไ“ด๐ฃ›ฎ๐ฉฆ๐ฆผฆๆŸนใœณใฐ•ใทงๅกฌ๐กคขๆ ไ—๐ฃœฟ๐คƒก๐ค‚‹๐ค„๐ฆฐกๅ“‹ๅšž๐ฆšฑๅš’๐ ฟŸ๐ ฎจ๐ ธ้†๐จฌ“้Žœไปธๅ„ซใ ™๐คถไบผ๐ ‘ฅ๐ ฟไฝ‹ไพŠ๐ฅ™‘ๅฉจ๐ †ซ๐ ‹ใฆ™๐ ŒŠ๐ ”ใตไผฉ๐ ‹€๐จบณ๐ ‰ต่ซš๐ ˆŒไบ˜"], +["92a1","ๅƒๅ„ไพขไผƒ๐คจŽ๐ฃบŠไฝ‚ๅ€ฎๅฌๅ‚ไฟŒไฟฅๅ˜ๅƒผๅ…™ๅ…›ๅ…ๅ…žๆนถ๐ฃ–•๐ฃธน๐ฃบฟๆตฒ๐กข„๐ฃบ‰ๅ†จๅ‡ƒ๐ — ไ“๐ ’ฃ๐ ’’๐ ’‘่ตบ๐จชœ๐ œŽๅ‰™ๅŠค๐ กณๅ‹ก้ฎไ™บ็†Œ๐คŽŒ๐ ฐ ๐คฆฌ๐กƒคๆง‘๐ ธ็‘นใปž็’™็”็‘–็Ž˜ไฎŽ๐คชผ๐ค‚ๅใ–„็ˆ๐คƒ‰ๅ–ด๐ …ๅ“๐ ฏ†ๅœ้‰้›ด้ฆๅŸๅžๅฟใ˜พๅฃ‹ๅช™๐จฉ†๐ก›บ๐กฏ๐กœๅจฌๅฆธ้Šๅฉพๅซๅจ’๐ฅฅ†๐กงณ๐กกก๐คŠ•ใ›ตๆด…็‘ƒๅจก๐ฅบƒ"], +["9340","ๅช๐จฏ—๐ “้ ็’Œ๐กŒƒ็„…ไฅฒ้ˆ๐จงป้Žฝใž ๅฐžๅฒžๅนžๅนˆ๐กฆ–๐กฅผ๐ฃซฎๅปๅญ๐กคƒ๐กค„ใœ๐กข ใ›๐ก›พใ›“่„ช๐จฉ‡๐กถบ๐ฃ‘ฒ๐จฆจๅผŒๅผŽ๐กคง๐กžซๅฉซ๐กœปๅญ„่˜”๐ง—ฝ่ก ๆพ๐ขก ๐ข˜ซๅฟ›ใบธ๐ข–ฏ๐ข–พ๐ฉ‚ˆ๐ฆฝณๆ‡€๐ €พ๐ †๐ข˜›ๆ†™ๆ†˜ๆต๐ขฒ›๐ขด‡๐ค›”๐ฉ…"], +["93a1","ๆ‘ฑ๐ค™ฅ๐ขญชใจฉ๐ขฌข๐ฃ‘๐ฉฃช๐ขนธๆŒท๐ช‘›ๆ’ถๆŒฑๆ‘๐คงฃ๐ขตงๆŠค๐ขฒกๆปๆ•ซๆฅฒใฏด๐ฃ‚Ž๐ฃŠญ๐คฆ‰๐ฃŠซๅ”๐ฃ‹ ๐กฃ™๐ฉฟๆ›Ž๐ฃЉ๐ฃ†ณใซ ไ†๐ฅ–„๐จฌข๐ฅ–๐ก›ผ๐ฅ•›๐ฅฅ็ฃฎ๐ฃ„ƒ๐ก ช๐ฃˆดใ‘ค๐ฃˆ๐ฃ†‚๐ค‹‰ๆšŽ๐ฆดคๆ™ซไฎ“ๆ˜ฐ๐งกฐ๐กทซๆ™ฃ๐ฃ‹’๐ฃ‹กๆ˜ž๐ฅกฒใฃ‘๐ฃ บ๐ฃžผใฎ™๐ฃžข๐ฃพ็“ใฎ–ๆž๐ค˜ชๆขถๆ žใฏ„ๆชพใกฃ๐ฃŸ•๐ค’‡ๆจณๆฉ’ๆซ‰ๆฌ…๐กค’ๆ”‘ๆข˜ๆฉŒใฏ—ๆฉบๆญ—๐ฃฟ€๐ฃฒš้Ž ้‹ฒ๐จฏช๐จซ‹"], +["9440","้Љ๐จ€ž๐จงœ้‘งๆถฅๆผ‹๐คงฌๆตง๐ฃฝฟใถๆธ„๐ค€ผๅจฝๆธŠๅก‡ๆดค็ก‚็„ป๐คŒš๐ค‰ถ็ƒฑ็‰็Ї็Š”๐คž๐คœฅๅ…น๐คชค๐ —ซ็‘บ๐ฃปธ๐ฃ™Ÿ๐คฉŠ๐คค—๐ฅฟกใผ†ใบฑ๐คซŸ๐จฐฃ๐ฃผตๆ‚งใปณ็“Œ็ผ้އ็ทไ’Ÿ๐ฆทชไ•‘็–ƒใฝฃ๐คณ™๐คด†ใฝ˜็••็™ณ๐ช—†ใฌ™็‘จ๐จซŒ๐คฆซ๐คฆŽใซป"], +["94a1","ใท๐คฉŽใปฟ๐คง…๐คฃณ้‡บๅœฒ้‚๐จซฃ๐กกคๅƒŸ๐ฅˆก๐ฅ‡ง็ธ๐ฃˆฒ็œŽ็œ็ป๐คš—๐ฃžใฉž๐คฃฐ็ธ็’›ใบฟ๐คชบ๐คซ‡ไƒˆ๐คช–๐ฆ†ฎ้Œ‡๐ฅ–็ ž็ข็ขˆ็ฃ’็็ฅ™๐ง๐ฅ›ฃไ„Ž็ฆ›่’–็ฆฅๆจญ๐ฃปบ็จบ็งดไ…ฎ๐ก›ฆไ„ฒ้ˆต็งฑ๐ ตŒ๐คฆŒ๐ Š™๐ฃถบ๐กฎใ–—ๅ•ซใ•ฐใšช๐ ‡”๐ ฐ็ซขๅฉ™๐ข›ต๐ฅชฏ๐ฅชœๅจ๐ ‰›็ฃฐๅจช๐ฅฏ†็ซพไ‡น็ฑ็ฑญไˆ‘๐ฅฎณ๐ฅบผ๐ฅบฆ็ณ๐คงน๐กžฐ็ฒŽ็ฑผ็ฒฎๆชฒ็ทœ็ธ‡็ท“็ฝŽ๐ฆ‰ก"], +["9540","๐ฆ…œ๐งญˆ็ถ—๐ฅบ‚ไ‰ช๐ฆญต๐ ค–ๆŸ–๐ Ž๐ฃ—ๅŸ„๐ฆ’๐ฆธ๐คฅข็ฟ็ฌง๐  ฌ๐ฅซฉ๐ฅตƒ็ฌŒ๐ฅธŽ้งฆ่™…้ฉฃๆจœ๐ฃฟใงข๐คงท๐ฆ–ญ้จŸ๐ฆ– ่’€๐ง„ง๐ฆณ‘ไ“ช่„ทไ‚่ƒ†่„‰่…‚๐ฆžด้ฃƒ๐ฆฉ‚่‰ข่‰ฅ๐ฆฉ‘่‘“๐ฆถง่˜๐งˆ›ๅช†ไ…ฟ๐กก€ๅฌซ๐กขกๅซค๐กฃ˜่š ๐ฏฆผ๐ฃถ่ ญ๐งขๅจ‚"], +["95a1","่กฎไฝ…่ข‡่ขฟ่ฃฆ่ฅฅ่ฅ๐ฅšƒ่ฅ”๐งž…๐งž„๐จฏต๐จฏ™๐จฎœ๐จงนใบญ่’ฃไ›ตไ›ใŸฒ่จฝ่จœ๐ฉ‘ˆๅฝ้ˆซ๐คŠ„ๆ—”็„ฉ็ƒ„๐กก…้ตญ่ฒŸ่ณฉ๐งทœๅฆš็Ÿƒๅงฐไฎใ›”่ธช่บง๐คฐ‰่ผฐ่ฝŠไ‹ดๆฑ˜ๆพป๐ขŒกไข›ๆฝนๆบ‹๐กŸš้ฏฉใšต๐คคฏ้‚ป้‚—ๅ•ฑไค†้†ป้„๐จฉ‹ไข๐จซผ้ง๐จฐ๐จฐป่“ฅ่จซ้–™้–ง้–—้––๐จดด็‘…ใป‚๐คฃฟ๐คฉ‚๐คชใปง๐ฃˆฅ้š๐จปง๐จนฆ๐จนฅใปŒ๐คงญ๐คฉธ๐ฃฟฎ็’็‘ซใปผ้๐ฉ‚ฐ"], +["9640","ๆก‡ไจ๐ฉ‚“๐ฅŸŸ้้จ๐จฆ‰๐จฐฆ๐จฌฏ๐ฆŽพ้Šบๅฌ‘่ญฉไคผ็น๐คˆ›้ž›้ฑ้คธ๐ ผฆๅท๐จฏ…๐คชฒ้ Ÿ๐ฉ“š้‹ถ๐ฉ——้‡ฅไ“€๐จญ๐คฉง๐จญค้ฃœ๐จฉ…ใผ€้ˆชไคฅ่”้คป้ฅ๐งฌ†ใทฝ้ฆ›ไญฏ้ฆช้ฉœ๐จญฅ๐ฅฃˆๆช้จกๅซพ้จฏ๐ฉฃฑไฎ๐ฉฅˆ้ฆผไฎฝไฎ—้ฝๅกฒ๐กŒ‚ๅ ข๐คฆธ"], +["96a1","๐ก“จ็ก„๐ขœŸ๐ฃถธๆฃ…ใตฝ้‘˜ใคงๆ…๐ขž๐ขฅซๆ„‡้ฑ้ฑ“้ฑป้ฐต้ฐ้ญฟ้ฏ๐ฉธญ้ฎŸ๐ช‡ต๐ชƒพ้ดกไฒฎ๐ค„„้ธ˜ไฒฐ้ดŒ๐ช†ด๐ชƒญ๐ชƒณ๐ฉคฏ้ถฅ่’ฝ๐ฆธ’๐ฆฟŸ๐ฆฎ‚่—ผไ”ณ๐ฆถค๐ฆบ„๐ฆทฐ่ ่—ฎ๐ฆธ€๐ฃŸ—๐ฆค็งข๐ฃ–œ๐ฃ™€ไคญ๐คงžใตข้›้Šพ้ˆ๐ Šฟ็ขน้‰ท้‘ไฟคใ‘€้ค๐ฅ•็ ฝ็ก”็ขถ็ก‹๐ก—๐ฃ‡‰๐คฅใššไฝฒๆฟšๆฟ™็€ž็€žๅ”๐ค†ตๅžปๅฃณๅžŠ้ด–ๅŸ—็„ดใ’ฏ๐ค†ฌ็‡ซ๐ฆฑ€๐คพ—ๅฌจ๐กžต๐จฉ‰"], +["9740","ๆ„ŒๅซŽๅจ‹ไŠผ๐ค’ˆใœฌไญป๐จงผ้Žป้Žธ๐กฃ–๐ ผ่‘ฒ๐ฆณ€๐ก“๐ค‹บ๐ขฐฆ๐คๅฆ”๐ฃถท๐ฆ็ถจ๐ฆ…›๐ฆ‚ค๐คฆน๐คฆ‹๐จงบ้‹ฅ็ขใปฉ็’ด๐จญฃ๐กขŸใปก๐คชณๆซ˜็ณ็ปใป–๐คจพ๐คช”๐กŸ™๐คฉฆ๐ Žง๐กค๐คงฅ็‘ˆ๐คค–็‚ฅ๐คฅถ้Š„็ฆ้Ÿ๐ “พ้Œฑ๐จซŽ๐จจ–้ކ๐จฏง๐ฅ—•ไคต๐จช‚็…ซ"], +["97a1","๐คฅƒ๐ ณฟๅšค๐ ˜š๐ ฏซ๐ ฒธๅ”‚็ง„๐กŸบ็ทพ๐ก›‚๐คฉ๐กก’ไ”ฎ้ใœŠ๐จซ€๐คฆญๅฆฐ๐กขฟ๐กขƒ๐ง’„ๅชกใ›ข๐ฃต›ใšฐ้‰Ÿๅฉน๐จช๐กกข้ดใณ๐ ชดไช–ใฆŠๅƒดใตฉใตŒ๐กŽœ็…ตไ‹ป๐จˆ˜ๆธ๐ฉƒคไ“ซๆต—๐งน็งๆฒฏใณ–๐ฃฟญ๐ฃธญๆธ‚ๆผŒใตฏ๐ ต็•‘ใšผใ“ˆไš€ใปšไกฑๅง„้‰ฎไคพ่ฝ๐จฐœ๐ฆฏ€ๅ ’ๅŸˆใ›–๐ก‘’็ƒพ๐คข๐คฉฑ๐ขฟฃ๐กŠฐ๐ขŽฝๆขนๆฅง๐กŽ˜๐ฃ“ฅ๐งฏด๐ฃ›Ÿ๐จชƒ๐ฃŸ–๐ฃบ๐คฒŸๆจš๐ฃšญ๐ฆฒท่พไ“Ÿไ“Ž"], +["9840","๐ฆดฆ๐ฆต‘๐ฆฒ‚๐ฆฟžๆผ—๐ง„‰่Œฝ๐กœบ่ญ๐ฆฒ€๐ง“๐กŸ›ๅฆ‰ๅช‚๐กžณๅฉกๅฉฑ๐กค…๐ค‡ผใœญๅงฏ๐กœผใ›‡็†Ž้ސๆšš๐คŠฅๅฉฎๅจซ๐คŠ“ๆจซ๐ฃปน๐งœถ๐ค‘›๐ค‹Š็„๐ค‰™๐จงกไพฐ๐ฆดจๅณ‚๐ค“Ž๐งน๐คŽฝๆจŒ๐ค‰–๐กŒ„็‚ฆ็„ณ๐คฉใถฅๆณŸ๐ฏ ฅ๐คฉ็นฅๅงซๅดฏใทณๅฝœ๐คฉ๐กŸŸ็ถค่ฆ"], +["98a1","ๅ’…๐ฃซบ๐ฃŒ€๐ ˆ”ๅพ๐ ฃ•๐ ˜™ใฟฅ๐กพž๐ชŠถ็€ƒ๐ฉ…›ๅตฐ็Ž็ณ“๐จฉ™๐ฉ ไฟˆ็ฟง็‹็Œ๐งซด็Œธ็Œน๐ฅ›ถ็็ˆใบฉ๐งฌ˜้ฌ็‡ต๐คฃฒ็ก่‡ถใปŠ็œŒใป‘ๆฒขๅ›ฝ็™็ž็Ÿใปขใปฐใปดใปบ็““ใผŽใฝ“็•‚็•ญ็•ฒ็–ใฝผ็—ˆ็—œใฟ€็™ใฟ—็™ดใฟœ็™บ๐คฝœ็†ˆๅ˜ฃ่ฆ€ๅกฉไ€็ƒไ€นๆกไ…ใ—›็ž˜ไชไฏๅฑž็žพ็Ÿ‹ๅฃฒ็ ˜็‚น็ œไ‚จ็ น็ก‡็ก‘็กฆ่‘ˆ๐ฅ”ต็คณๆ ƒ็คฒไ„ƒ"], +["9940","ไ„‰็ฆ‘็ฆ™่พป็จ†่พผไ…ง็ช‘ไ†ฒ็ชผ่‰นไ‡„็ซ็ซ›ไ‡ไธก็ญข็ญฌ็ญป็ฐ’็ฐ›ไ‰ ไ‰บ็ฑป็ฒœไŠŒ็ฒธไŠ”็ณญ่พ“็ƒ€๐ ณ็ท็ท”็ท็ทฝ็พฎ็พด็ŠŸไŽ—่€ ่€ฅ็ฌน่€ฎ่€ฑ่”ใทŒๅžด็‚ ่‚ท่ƒฉไญ่„Œ็Œช่„Ž่„’็• ่„”ไใฌน่…–่…™่…š"], +["99a1","ไ“ๅ บ่…ผ่†„ไฅ่†“ไญ่†ฅๅŸฏ่‡่‡ค่‰”ไ’่Šฆ่‰ถ่‹Š่‹˜่‹ฟไ’ฐ่—้™ฉๆฆŠ่…็ƒต่‘คๆƒฃ่’ˆไ”„่’พ่“ก่“ธ่”่”ธ่•’ไ”ป่•ฏ่•ฐ่— ไ•ท่™ฒ่š’่šฒ่›ฏ้™…่ž‹ไ˜†ไ˜—่ขฎ่ฃฟ่คค่ฅ‡่ฆ‘๐งฅง่จฉ่จธ่ช”่ชด่ฑ‘่ณ”่ณฒ่ดœไž˜ๅกŸ่ทƒไŸญไปฎ่ธบๅ—˜ๅ”่นฑๅ—ต่บฐไ ท่ปŽ่ปข่ปค่ปญ่ปฒ่พท่ฟ่ฟŠ่ฟŒ้€ณ้ง„ไขญ้ฃ ้ˆ“ไคž้ˆจ้‰˜้‰ซ้Šฑ้Šฎ้Šฟ"], +["9a40","้‹ฃ้‹ซ้‹ณ้‹ด้‹ฝ้ƒ้Ž„้Žญไฅ…ไฅ‘้บฟ้—ๅŒ้้ญ้พไฅช้‘”้‘น้”ญ้–ขไฆง้—ด้˜ณไงฅๆž ไจค้€ไจต้žฒ้Ÿ‚ๅ™”ไซคๆƒจ้ขนไฌ™้ฃฑๅก„้คŽ้ค™ๅ†ด้คœ้คท้ฅ‚้ฅ้ฅขไญฐ้ง…ไฎ้จผ้ฌ็ชƒ้ญฉ้ฎ้ฏ้ฏฑ้ฏดไฑญ้ฐ ใฏ๐กฏ‚้ต‰้ฐบ"], +["9aa1","้ปพๅ™้ถ“้ถฝ้ท€้ทผ้“ถ่พถ้นป้บฌ้บฑ้บฝ้ป†้“œ้ปข้ปฑ้ปธ็ซˆ้ฝ„๐ ‚”๐ Šท๐ Ž ๆคš้“ƒๅฆฌ๐ “—ๅก€้“ใžน๐ —•๐ ˜•๐ ™ถ๐กšบๅ—็…ณ๐ ซ‚๐ ซ๐ ฎฟๅ‘ช๐ฏ ป๐ ฏ‹ๅ’ž๐ ฏป๐ ฐป๐ ฑ“๐ ฑฅ๐ ฑผๆƒง๐ ฒๅ™บ๐ ฒต๐ ณ๐ ณญ๐ ตฏ๐ ถฒ๐ ทˆๆฅ•้ฐฏ่žฅ๐ ธ„๐ ธŽ๐ ป—๐ พ๐ ผญ๐ นณๅฐ ๐ พผๅธ‹๐กœ๐ก๐กถๆœž๐กป๐ก‚ˆ๐ก‚–ใ™‡๐ก‚ฟ๐กƒ“๐ก„ฏ๐ก„ปๅค่’ญ๐ก‹ฃ๐กต๐กŒถ่ฎ๐ก•ท๐ก˜™๐กŸƒ๐กŸ‡ไนธ็‚ป๐ก ญ๐กฅช"], +["9b40","๐กจญ๐กฉ…๐กฐช๐กฑฐ๐กฒฌ๐กปˆๆ‹ƒ๐กป•๐กผ•็†˜ๆก•๐ข…ๆงฉใ›ˆ๐ข‰ผ๐ข—๐ขบ๐ขœช๐ขกฑ๐ขฅ่‹ฝ๐ขฅง๐ขฆ“๐ขซ•่ฆฅ๐ขซจ่พ ๐ขฌŽ้žธ๐ขฌฟ้ก‡้ชฝ๐ขฑŒ"], +["9b62","๐ขฒˆ๐ขฒท๐ฅฏจ๐ขดˆ๐ขด’๐ขถท๐ขถ•๐ขน‚๐ขฝด๐ขฟŒ๐ฃ€ณ๐ฃฆ๐ฃŒŸ๐ฃžๅพฑๆ™ˆๆšฟ๐งฉน๐ฃ•ง๐ฃ—ณ็ˆ๐คฆบ็Ÿ—๐ฃ˜š๐ฃœ–็บ‡๐ †ๅขตๆœŽ"], +["9ba1","ๆค˜๐ฃชง๐ง™—๐ฅฟข๐ฃธ‘๐ฃบน๐ง—พ๐ข‚šไฃไชธ๐ค„™๐จชš๐ค‹ฎ๐คŒ๐ค€ป๐คŒด๐คŽ–๐คฉ…๐ —Šๅ‡’๐ ˜‘ๅฆŸ๐กบจใฎพ๐ฃณฟ๐ค„๐ค“–ๅžˆ๐ค™ดใฆ›๐คœฏ๐จ—จ๐ฉง‰ใข๐ข‡ƒ่ญž๐จญŽ้ง–๐ค ’๐คฃป๐คจ•็ˆ‰๐คซ€๐ ฑธๅฅฅ๐คบฅ๐คพ†๐ น่ปš๐ฅ€ฌๅŠๅœฟ็…ฑ๐ฅŠ™๐ฅ™๐ฃฝŠ๐คชงๅ–ผ๐ฅ‘†๐ฅ‘ฎ๐ฆญ’้‡”ใ‘ณ๐ฅ”ฟ๐ง˜ฒ๐ฅ•žไœ˜๐ฅ•ข๐ฅ•ฆ๐ฅŸ‡๐คคฟ๐ฅกๅฆใ“ป๐ฃŒๆƒž๐ฅคƒไผ๐จฅˆ๐ฅชฎ๐ฅฎ‰๐ฅฐ†๐กถๅžก็…‘ๆพถ๐ฆ„‚๐งฐ’้–๐ฆ†ฒ๐คพš่ญข๐ฆ‚๐ฆ‘Š"], +["9c40","ๅต›๐ฆฏท่ผถ๐ฆ’„๐กคœ่ซช๐คงถ๐ฆ’ˆ๐ฃฟฏ๐ฆ”’ไฏ€๐ฆ–ฟ๐ฆšต๐ขœ›้‘ฅ๐ฅŸกๆ†•ๅจง๐ฏฃไพปๅšน๐ค”ก๐ฆ›ผไนช๐คคด้™–ๆถ๐ฆฒฝใ˜˜่ฅท๐ฆž™๐ฆกฎ๐ฆ‘๐ฆกž็‡Ÿ๐ฆฃ‡็ญ‚๐ฉƒ€๐ จ‘๐ฆคฆ้„„๐ฆคน็ฉ…้ทฐ๐ฆงบ้จฆ๐ฆจญใ™Ÿ๐ฆ‘ฉ๐ €ก็ฆƒ๐ฆจด๐ฆญ›ๅดฌ๐ฃ”™่๐ฆฎไ›๐ฆฒค็”ป่กฅ๐ฆถฎๅขถ"], +["9ca1","ใœœ๐ข–๐ง‹๐ง‡ใฑ”๐งŠ€๐งŠ…้Ё๐ข…บ๐งŠ‹้Œฐ๐ง‹ฆ๐คงๆฐน้’Ÿ๐ง‘๐ ปธ่ ง่ฃต๐ขคฆ๐จ‘ณ๐กžฑๆบธ๐คจช๐ก  ใฆคใšนๅฐ็งฃไ”ฟๆšถ๐ฉฒญ๐ฉขค่ฅƒ๐งŸŒ๐งก˜ๅ›–ไƒŸ๐ก˜Šใฆก๐ฃœฏ๐จƒจ๐ก…็†ญ่ฆ๐งง๐ฉ†จๅฉงไฒท๐ง‚ฏ๐จฆซ๐งงฝ๐งจŠ๐งฌ‹๐งตฆ๐ค…บ็ญƒ็ฅพ๐จ€‰ๆพต๐ช‹Ÿๆจƒ๐จŒ˜ๅŽข๐ฆธ‡้Žฟๆ ถ้๐จ…ฏ๐จ€ฃ๐ฆฆต๐กญ๐ฃˆฏ๐จˆๅถ…๐จฐฐ๐จ‚ƒๅœ•้ ฃ๐จฅ‰ๅถซ๐คฆˆๆ–พๆง•ๅ’๐คชฅ๐ฃพใฐ‘ๆœถ๐จ‚๐จƒด๐จ„ฎ๐กพก๐จ…"], +["9d40","๐จ†‰๐จ†ฏ๐จˆš๐จŒ†๐จŒฏ๐จŽŠใ—Š๐จ‘จ๐จšชไฃบๆฆ๐จฅ–็ ˆ้‰•๐จฆธไฒ๐จงงไŸ๐จงจ๐จญ†๐จฏ”ๅงธ๐จฐ‰่ผ‹๐จฟ…๐ฉƒฌ็ญ‘๐ฉ„๐ฉ„ผใทท๐ฉ…ž๐คซŠ่ฟ็Šๅš‹๐ฉ“ง๐ฉ—ฉ๐ฉ–ฐ๐ฉ–ธ๐ฉœฒ๐ฉฃ‘๐ฉฅ‰๐ฉฅช๐ฉงƒ๐ฉจจ๐ฉฌŽ๐ฉตš๐ฉถ›็บŸ๐ฉปธ๐ฉผฃไฒค้•‡๐ชŠ“็†ข๐ช‹ฟไถ‘้€’๐ช—‹ไถœ๐ ฒœ่พพๅ—"], +["9da1","่พบ๐ข’ฐ่พน๐คช“ไ”‰็นฟๆฝ–ๆชฑไปชใ“ค๐จฌฌ๐งขใœบ่บ€๐กŸต๐จ€ค๐จญฌ๐จฎ™๐งจพ๐ฆšฏใทซ๐ง™•๐ฃฒท๐ฅ˜ต๐ฅฅ–ไบš๐ฅบ๐ฆ‰˜ๅšฟ๐ นญ่ธŽๅญญ๐ฃบˆ๐คฒžๆžๆ‹๐กŸถ๐กกปๆ”ฐๅ˜ญ๐ฅฑŠๅš๐ฅŒ‘ใท†๐ฉถ˜ไฑฝๅ˜ขๅ˜ž็ฝ‰๐ฅป˜ๅฅต๐ฃต€่ฐไธœ๐ ฟช๐ ต‰๐ฃšบ่„—้ตž่ด˜็˜ป้ฑ…็™Ž็žน้…ๅฒ่…ˆ่‹ทๅ˜ฅ่„ฒ่˜่‚ฝๅ—ช็ฅขๅ™ƒๅ–๐ บใ—Žๅ˜…ๅ—ฑๆ›ฑ๐จ‹ขใ˜ญ็”ดๅ—ฐๅ–บๅ’—ๅ•ฒ๐ ฑ๐ ฒ–ๅป๐ฅ…ˆ๐ นถ๐ขฑข"], +["9e40","๐ บข้บซ็ตšๅ—ž๐กตๆŠ้ญๅ’”่ณ็‡ถ้…ถๆผๆŽนๆพๅ•ฉ๐ขญƒ้ฑฒ๐ขบณๅ†šใ“Ÿ๐ ถงๅ†งๅ‘ๅ”žๅ”“็™ฆ่ธญ๐ฆขŠ็–ฑ่‚ถ่ „่ž†่ฃ‡่†ถ่œ๐กƒไ“ฌ็Œ„๐คœ†ๅฎ่Œ‹๐ฆข“ๅ™ป๐ข›ด๐งดฏ๐ค†ฃ๐งตณ๐ฆป๐งŠถ้…ฐ๐ก‡™้ˆˆ๐ฃณผ๐ชšฉ๐ บฌ๐ ปน็‰ฆ๐กฒขไŽ๐คฟ‚๐งฟน๐ ฟซไƒบ"], +["9ea1","้ฑๆ”Ÿ๐ขถ ไฃณ๐คŸ ๐ฉตผ๐ ฟฌ๐ ธŠๆข๐ง–ฃ๐ ฟญ"], +["9ead","๐ฆˆ๐ก†‡็†ฃ็บŽ้ตไธšไธ„ใ•ทๅฌๆฒฒๅงใšฌใงœๅฝใšฅ๐ค˜˜ๅขš๐คญฎ่ˆญๅ‘‹ๅžช๐ฅช•๐ ฅน"], +["9ec5","ใฉ’๐ข‘ฅ็ด๐ฉบฌได‰้ฏญ๐ฃณพ๐ฉผฐไฑ›๐คพฉ๐ฉ–ž๐ฉฟž่‘œ๐ฃถถ๐งŠฒ๐ฆžณ๐ฃœ ๆŒฎ็ดฅ๐ฃปท๐ฃธฌใจช้€ˆๅ‹Œในดใ™บไ—ฉ๐ ’Ž็™€ๅซฐ๐ บถ็กบ๐งผฎๅขงไ‚ฟๅ™ผ้ฎ‹ๅตด็™”๐ชด้บ…ไณก็—นใŸปๆ„™๐ฃƒš๐คฒ"], +["9ef5","ๅ™๐กŠฉๅžง๐คฅฃ๐ฉธ†ๅˆด๐ง‚ฎใ–ญๆฑŠ้ตผ"], +["9f40","็ฑ–้ฌนๅŸž๐กฌๅฑ“ๆ““๐ฉ“๐ฆŒต๐ง…ค่šญ๐ ดจ๐ฆดข๐คซข๐ ตฑ"], +["9f4f","ๅ‡พ๐กผๅถŽ้œƒ๐กท‘้บ้Œ็ฌŸ้ฌ‚ๅณ‘็ฎฃๆ‰จๆŒต้ซฟ็ฏ้ฌช็ฑพ้ฌฎ็ฑ‚็ฒ†้ฐ•็ฏผ้ฌ‰้ผ—้ฐ›๐คคพ้ฝšๅ•ณๅฏƒไฟฝ้บ˜ไฟฒๅ‰ ใธ†ๅ‹‘ๅงๅ–ๅฆทๅธ’้Ÿˆ้ถซ่ฝœๅ‘ฉ้žด้ฅ€้žบๅŒฌๆ„ฐ"], +["9fa1","ๆคฌๅš้ฐŠ้ด‚ไฐป้™ๆฆ€ๅ‚ฆ็•†๐กญ้งšๅ‰ณ"], +["9fae","้…™้š้…œ"], +["9fb2","้…‘๐จบ—ๆฟ๐ฆดฃๆซŠๅ˜‘้†Ž็•บๆŠ…๐ ผ็็ฑฐ๐ฅฐก๐ฃณฝ"], +["9fc1","๐คค™็›–้ฎไธช๐ ณ”่Žพ่ก‚"], +["9fc9","ๅฑŠๆง€ๅƒญๅบๅˆŸๅทตไปŽๆฐฑ๐ ‡ฒไผนๅ’œๅ“šๅŠš่ถ‚ใ—พๅผŒใ—ณ"], +["9fdb","ๆญ’้…ผ้พฅ้ฎ—้ ฎ้ขด้ชบ้บจ้บ„็…บ็ฌ”"], +["9fe7","ๆฏบ่ ˜็ฝธ"], +["9feb","ๅ˜ ๐ช™Š่นท้ฝ“"], +["9ff0","่ท”่น้ธœ่ธๆŠ‚๐จฝ่ธจ่นต็ซ“๐คฉท็จพ็ฃ˜ๆณช่ฉง็˜‡"], +["a040","๐จฉš้ผฆๆณŽ่Ÿ–็—ƒ๐ชŠฒ็ก“๐ฏก€่ดŒ็‹ข็ฑ่ฌญ็Œ‚็“ฑ่ณซ๐คชป่˜ฏๅพบ่ข ไ’ท"], +["a055","๐ก ป๐ฆธ…"], +["a058","่ฉพ๐ข”›"], +["a05b","ๆƒฝ็™ง้ซ—้ต„้ฎ้ฎ่Ÿต"], +["a063","่ ่ณท็Œฌ้œก้ฎฐใ—–็Šฒไฐ‡็ฑ‘้ฅŠ๐ฆ…™ๆ…™ไฐ„้บ–ๆ…ฝ"], +["a073","ๅŸๆ…ฏๆŠฆๆˆนๆ‹Žใฉœๆ‡ขๅŽช๐ฃตๆคๆ ‚ใ—’"], +["a0a1","ๅต—๐จฏ‚่ฟš๐จธน"], +["a0a6","ๅƒ™๐กต†็ค†ๅŒฒ้˜ธ๐ ผปไฅ"], +["a0ae","็Ÿพ"], +["a0b0","็ณ‚๐ฅผš็ณš็จญ่ฆ่ฃ็ต็”…็“ฒ่ฆ”่ˆšๆœŒ่ข๐ง’†่›็“ฐ่„ƒ็œค่ฆ‰๐ฆŸŒ็•“๐ฆป‘่žฉ่ŸŽ่‡ˆ่žŒ่ฉ‰่ฒญ่ญƒ็œซ็“ธ่“šใ˜ตๆฆฒ่ถฆ"], +["a0d4","่ฆฉ็‘จๆถน่Ÿ๐ค€‘็“งใท›็…ถๆ‚คๆ†œใณ‘็…ขๆท"], +["a0e2","็ฝฑ๐จฌญ็‰ๆƒฉไญพๅˆ ใฐ˜๐ฃณ‡๐ฅป—๐ง™–๐ฅ”ฑ๐กฅ„๐ก‹พ๐ฉคƒ๐ฆทœ๐ง‚ญๅณ๐ฆ†ญ๐จจ๐ฃ™ท๐ ƒฎ๐ฆก†๐คผŽไ•ขๅฌŸ๐ฆŒ้ฝ้บฆ๐ฆ‰ซ"], +["a3c0","โ€",31,"โก"], +["c6a1","โ‘ ",9,"โ‘ด",9,"โ…ฐ",9,"ไธถไธฟไบ…ไบ ๅ†‚ๅ†–ๅ†ซๅ‹นๅŒธๅฉๅŽถๅคŠๅฎ€ๅท›โผณๅนฟๅปดๅฝๅฝกๆ”ดๆ— ็–’็™ถ่พต้šถยจห†ใƒฝใƒพใ‚ใ‚žใ€ƒไปใ€…ใ€†ใ€‡ใƒผ๏ผป๏ผฝโœฝใ",23], +["c740","ใ™",58,"ใ‚กใ‚ขใ‚ฃใ‚ค"], +["c7a1","ใ‚ฅ",81,"ะ",5,"ะะ–",4], +["c840","ะ›",26,"ั‘ะถ",25,"โ‡งโ†ธโ†นใ‡๐ ƒŒไนš๐ ‚Šๅˆ‚ไ’‘"], +["c8a1","้พฐๅ†ˆ้พฑ๐ง˜‡"], +["c8cd","๏ฟข๏ฟค๏ผ‡๏ผ‚ใˆฑโ„–โ„กใ‚›ใ‚œโบ€โบ„โบ†โบ‡โบˆโบŠโบŒโบโบ•โบœโบโบฅโบงโบชโบฌโบฎโบถโบผโบพโป†โปŠโปŒโปโปโป–โป—โปžโปฃ"], +["c8f5","สƒษษ›ษ”ษตล“รธล‹สŠษช"], +["f9fe","๏ฟญ"], +["fa40","๐ •‡้‹›๐ —Ÿ๐ฃฟ…่•ŒไŠต็ฏๅ†ตใ™‰๐คฅ‚๐จงค้„๐กง›่‹ฎ๐ฃณˆ็ ผๆ„ๆ‹Ÿ๐คคณ๐จฆช๐ Š ๐ฆฎณ๐กŒ…ไพซ๐ข“ญๅ€ˆ๐ฆดฉ๐งช„๐ฃ˜€๐คชฑ๐ข”“ๅ€ฉ๐ พๅพค๐ Ž€๐ ‡ๆป›๐ Ÿๅฝๅ„ใ‘บๅ„Ž้กฌใƒ่–๐คฆค๐ ’‡ๅ… ๐ฃŽดๅ…ช๐ ฏฟ๐ขƒผ๐ ‹ฅ๐ข”ฐ๐ –Ž๐ฃˆณ๐กฆƒๅฎ‚่ฝ๐ –ณ๐ฃฒ™ๅ†ฒๅ†ธ"], +["faa1","้ดดๅ‡‰ๅ‡ๅ‡‘ใณœๅ‡“๐คชฆๅ†ณๅ‡ขๅ‚ๅ‡ญ่ๆคพ๐ฃœญๅฝปๅˆ‹ๅˆฆๅˆผๅŠตๅ‰—ๅŠ”ๅŠนๅ‹…็ฐ•่•‚ๅ‹ ่˜๐ฆฌ“ๅŒ…๐จซžๅ•‰ๆป™๐ฃพ€๐ ฅ”๐ฃฟฌๅŒณๅ„๐ ฏขๆณ‹๐กœฆๆ ›็•ๆŠใบชใฃŒ๐ก›จ็‡ไ’ขๅญๅด๐จšซๅพๅฟ๐ก––๐ก˜“็ŸฆๅŽ“๐จช›ๅŽ ๅŽซๅŽฎ็Žง๐ฅฒใฝ™็Žœๅๅ…ๆฑ‰ไน‰ๅŸพๅ™ใชซ๐ ฎๅ ๐ฃฟซ๐ขถฃๅถ๐ ฑทๅ“็นๅ”ซๆ™—ๆต›ๅ‘ญ๐ฆญ“๐ ตดๅ•ๅ’ๅ’คไžฆ๐กœ๐ ปใถด๐ ต"], +["fb40","๐จฆผ๐ขš˜ๅ•‡ไณญๅฏ็—ๅ–†ๅ–ฉๅ˜…๐กฃ—๐ค€บไ•’๐คตๆšณ๐ก‚ดๅ˜ทๆ›๐ฃŠŠๆšคๆšญๅ™ๅ™็ฃฑๅ›ฑ้ž‡ๅพๅœ€ๅ›ฏๅ›ญ๐จญฆใ˜ฃ๐ก‰ๅ†๐ค†ฅๆฑฎ็‚‹ๅ‚ใšฑ๐ฆฑพๅŸฆ๐ก–ๅ ƒ๐ก‘”๐คฃๅ ฆ๐คฏตๅกœๅขชใ•กๅฃ ๅฃœ๐กˆผๅฃปๅฏฟๅƒ๐ช…๐ค‰ธ้“ใ–กๅคŸๆขฆใ›ƒๆน™"], +["fba1","๐ก˜พๅจคๅ•“๐กš’่”…ๅง‰๐ ตŽ๐ฆฒ๐ฆดช๐กŸœๅง™๐กŸป๐กžฒ๐ฆถฆๆตฑ๐ก จ๐ก›•ๅงน๐ฆน…ๅชซๅฉฃใ›ฆ๐คฆฉๅฉทใœˆๅช–็‘ฅๅซ“๐ฆพก๐ข•”ใถ…๐กค‘ใœฒ๐กšธๅบƒๅ‹ๅญถๆ–ˆๅญผ๐งจŽไ€„ไก๐ ˆ„ๅฏ•ๆ… ๐กจด๐ฅงŒ๐ –ฅๅฏณๅฎไดๅฐ…๐กญ„ๅฐ“็Žๅฐ”๐กฒฅ๐ฆฌจๅฑ‰ไฃๅฒ…ๅณฉๅณฏๅถ‹๐กทน๐กธทๅดๅด˜ๅต†๐กบคๅฒบๅท—่‹ผใ ญ๐คค๐ข‰๐ข…ณ่Їใ ถใฏ‚ๅธฎๆชŠๅนตๅนบ๐ค’ผ๐ ณ“ๅŽฆไบทๅปๅŽจ๐กฑๅธ‰ๅปด๐จ’‚"], +["fc40","ๅปนๅปปใข ๅปผๆ พ้›ๅผ๐ ‡๐ฏข”ใซžไขฎ๐กŒบๅผบ๐ฆขˆ๐ขๅฝ˜๐ข‘ฑๅฝฃ้žฝ๐ฆนฎๅฝฒ้€๐จจถๅพงๅถถใตŸ๐ฅ‰๐กฝช๐งƒธ๐ข™จ้‡–๐ Šž๐จจฉๆ€ฑๆš…๐กกทใฅฃใท‡ใ˜นๅž๐ขžด็ฅฑใน€ๆ‚žๆ‚คๆ‚ณ๐คฆ‚๐คฆ๐งฉ“็’คๅƒกๅช ๆ…ค่คๆ…‚๐ฏขฆ๐ฆป’ๆ†ๅ‡ด๐ ™–ๆ†‡ๅฎช๐ฃพท"], +["fca1","๐ขกŸๆ‡“๐จฎ๐ฉฅๆ‡ใคฒ๐ขฆ€๐ขฃๆ€ฃๆ…œๆ”žๆŽ‹๐ „˜ๆ‹…๐กฐๆ‹•๐ขธๆฌ๐คงŸใจ—ๆธๆธ๐กŽŽ๐กŸผๆ’ๆพŠ๐ขธถ้ ”๐ค‚Œ๐ฅœๆ“กๆ“ฅ้‘ปใฉฆๆบใฉ—ๆ•ๆผ–๐คจจ๐คจฃๆ–…ๆ•ญๆ•Ÿ๐ฃพๆ–ต๐คฅ€ไฌทๆ—‘ไƒ˜๐ก ฉๆ— ๆ—ฃๅฟŸ๐ฃ€ๆ˜˜๐ฃ‡ท๐ฃ‡ธๆ™„๐ฃ†ค๐ฃ†ฅๆ™‹๐ นตๆ™ง๐ฅ‡ฆๆ™ณๆ™ด๐กธฝ๐ฃˆฑ๐จ—ด๐ฃ‡ˆ๐ฅŒ“็Ÿ…๐ขฃท้ฆคๆœ‚๐คŽœ๐คจกใฌซๆงบ๐ฃŸ‚ๆžๆงๆข๐ค‡๐ฉƒญๆŸ—ไ“ฉๆ ขๆน้ˆผๆ ๐ฃฆ๐ฆถ ๆก"], +["fd40","๐ฃ‘ฏๆงกๆจ‹๐จซŸๆฅณๆฃƒ๐ฃ—ๆคๆค€ใดฒใจ๐ฃ˜ผใฎ€ๆžฌๆฅก๐จฉŠไ‹ผๆคถๆฆ˜ใฎก๐ ‰่ฃๅ‚ๆงน๐ฃ™™๐ข„ชๆฉ…๐ฃœƒๆชใฏณๆžฑๆซˆ๐ฉ†œใฐๆฌ๐ คฃๆƒžๆฌตๆญด๐ขŸๆบต๐ฃซ›๐ Žต๐กฅ˜ใ€ๅก๐ฃญšๆฏก๐ฃปผๆฏœๆฐท๐ข’‹๐คฃฑ๐ฆญ‘ๆฑš่ˆฆๆฑน๐ฃถผไ“…๐ฃถฝ๐ค†ค๐คคŒ๐คค€"], +["fda1","๐ฃณ‰ใ›ฅใณซ๐ ดฒ้ฎƒ๐ฃ‡น๐ข’‘็พๆ ท๐ฆดฅ๐ฆถก๐ฆทซๆถ–ๆตœๆนผๆผ„๐คฅฟ๐ค‚…๐ฆนฒ่”ณ๐ฆฝดๅ‡‡ๆฒœๆธ่ฎ๐จฌกๆธฏ๐ฃธฏ็‘“๐ฃพ‚็งŒๆนๅช‘๐ฃ‹ๆฟธใœๆพ๐ฃธฐๆปบ๐ก’—๐ค€ฝไ••้ฐๆฝ„ๆฝœใตŽๆฝด๐ฉ…ฐใดปๆพŸ๐ค…„ๆฟ“๐ค‚‘๐ค…•๐ค€น๐ฃฟฐ๐ฃพด๐ค„ฟๅ‡Ÿ๐ค…–๐ค…—๐ค…€๐ฆ‡็‹็พ็‚ง็‚็ƒŒ็ƒ•็ƒ–็ƒŸไ„„ใทจ็†ด็†–๐ค‰ท็„ซ็……ๅชˆ็…Š็…ฎๅฒœ๐คฅ็…้ข๐ค‹็„ฌ๐ค‘š๐คจง๐คจข็†บ๐จฏจ็‚ฝ็ˆŽ"], +["fe40","้‘‚็ˆ•ๅค‘้‘ƒ็ˆค้๐ฅ˜…็ˆฎ็‰€๐คฅดๆขฝ็‰•็‰—ใน•๐ฃ„ๆ ๆผฝ็Š‚็Œช็Œซ๐ค ฃ๐จ ซไฃญ๐จ „็Œจ็Œฎ็็Žช๐ ฐบ๐ฆจฎ็‰็‘‰๐ค‡ข๐ก›ง๐คจคๆ˜ฃใ›…๐คฆท๐คฆ๐คงป็ท็•ๆคƒ๐คจฆ็น๐ —ƒใป—็‘œ๐ขขญ็‘ ๐จบฒ็‘‡็ค็‘ถ่Žน็‘ฌใœฐ็‘ด้ฑๆจฌ็’‚ไฅ“๐คชŒ"], +["fea1","๐ค…Ÿ๐คฉน๐จฎๅญ†๐จฐƒ๐กขž็“ˆ๐กฆˆ็”Ž็“ฉ็”ž๐จป™๐กฉ‹ๅฏ—๐จบฌ้Ž…็•็•Š็•ง็•ฎ๐คพ‚ใผ„๐คด“็–Ž็‘็–ž็–ด็˜‚็˜ฌ็™‘็™็™ฏ็™ถ๐ฆต็š่‡ฏใŸธ๐ฆค‘๐ฆคŽ็šก็šฅ็šท็›Œ๐ฆพŸ่‘ข๐ฅ‚๐ฅ…ฝ๐กธœ็œž็œฆ็€ๆ’ฏ๐ฅˆ ็˜๐ฃŠฌ็žฏ๐จฅค๐จฅจ๐ก›็Ÿด็ ‰๐กถ๐คจ’ๆฃŠ็ขฏ็ฃ‡็ฃ“้šฅ็คฎ๐ฅ— ็ฃ—็คด็ขฑ๐ง˜Œ่พธ่ข„๐จฌซ๐ฆ‚ƒ๐ข˜œ็ฆ†่ค€ๆค‚็ฆ€๐ฅก—็ฆ๐งฌน็คผ็ฆฉๆธช๐ง„ฆใบจ็ง†๐ฉ„็ง”"] +] diff --git a/node_modules/iconv-lite/encodings/tables/cp936.json b/node_modules/iconv-lite/encodings/tables/cp936.json new file mode 100644 index 0000000..49ddb9a --- /dev/null +++ b/node_modules/iconv-lite/encodings/tables/cp936.json @@ -0,0 +1,264 @@ +[ +["0","\u0000",127,"โ‚ฌ"], +["8140","ไธ‚ไธ„ไธ…ไธ†ไธไธ’ไธ—ไธŸไธ ไธกไธฃไธฆไธฉไธฎไธฏไธฑไธณไธตไธทไธผไน€ไนไน‚ไน„ไน†ไนŠไน‘ไน•ไน—ไนšไน›ไนขไนฃไนคไนฅไนงไนจไนช",5,"ไนฒไนด",9,"ไนฟ",6,"ไบ‡ไบŠ"], +["8180","ไบไบ–ไบ—ไบ™ไบœไบไบžไบฃไบชไบฏไบฐไบฑไบดไบถไบทไบธไบนไบผไบฝไบพไปˆไปŒไปไปไป’ไปšไป›ไปœไป ไปขไปฆไปงไปฉไปญไปฎไปฏไปฑไปดไปธไปนไปบไปผไปพไผ€ไผ‚",6,"ไผ‹ไผŒไผ’",4,"ไผœไผไผกไผฃไผจไผฉไผฌไผญไผฎไผฑไผณไผตไผทไผนไผปไผพ",4,"ไฝ„ไฝ…ไฝ‡",5,"ไฝ’ไฝ”ไฝ–ไฝกไฝขไฝฆไฝจไฝชไฝซไฝญไฝฎไฝฑไฝฒไฝตไฝทไฝธไฝนไฝบไฝฝไพ€ไพไพ‚ไพ…ไพ†ไพ‡ไพŠไพŒไพŽไพไพ’ไพ“ไพ•ไพ–ไพ˜ไพ™ไพšไพœไพžไพŸไพกไพข"], +["8240","ไพคไพซไพญไพฐ",4,"ไพถ",8,"ไฟ€ไฟไฟ‚ไฟ†ไฟ‡ไฟˆไฟ‰ไฟ‹ไฟŒไฟไฟ’",4,"ไฟ™ไฟ›ไฟ ไฟขไฟคไฟฅไฟงไฟซไฟฌไฟฐไฟฒไฟดไฟตไฟถไฟทไฟนไฟปไฟผไฟฝไฟฟ",11], +["8280","ๅ€‹ๅ€Žๅ€ๅ€‘ๅ€“ๅ€•ๅ€–ๅ€—ๅ€›ๅ€ๅ€žๅ€ ๅ€ขๅ€ฃๅ€คๅ€งๅ€ซๅ€ฏ",10,"ๅ€ปๅ€ฝๅ€ฟๅ€ๅๅ‚ๅ„ๅ…ๅ†ๅ‰ๅŠๅ‹ๅๅ",4,"ๅ–ๅ—ๅ˜ๅ™ๅ›ๅ",7,"ๅฆ",5,"ๅญ",8,"ๅธๅนๅบๅผๅฝๅ‚ๅ‚‚ๅ‚ƒๅ‚„ๅ‚†ๅ‚‡ๅ‚‰ๅ‚Šๅ‚‹ๅ‚Œๅ‚Ž",20,"ๅ‚คๅ‚ฆๅ‚ชๅ‚ซๅ‚ญ",4,"ๅ‚ณ",6,"ๅ‚ผ"], +["8340","ๅ‚ฝ",17,"ๅƒ",5,"ๅƒ—ๅƒ˜ๅƒ™ๅƒ›",10,"ๅƒจๅƒฉๅƒชๅƒซๅƒฏๅƒฐๅƒฑๅƒฒๅƒดๅƒถ",4,"ๅƒผ",9,"ๅ„ˆ"], +["8380","ๅ„‰ๅ„Šๅ„Œ",5,"ๅ„“",13,"ๅ„ข",28,"ๅ…‚ๅ…‡ๅ…Šๅ…Œๅ…Žๅ…ๅ…ๅ…’ๅ…“ๅ…—ๅ…˜ๅ…™ๅ…›ๅ…",4,"ๅ…ฃๅ…คๅ…ฆๅ…งๅ…ฉๅ…ชๅ…ฏๅ…ฒๅ…บๅ…พๅ…ฟๅ†ƒๅ†„ๅ††ๅ†‡ๅ†Šๅ†‹ๅ†Žๅ†ๅ†ๅ†‘ๅ†“ๅ†”ๅ†˜ๅ†šๅ†ๅ†žๅ†Ÿๅ†กๅ†ฃๅ†ฆ",4,"ๅ†ญๅ†ฎๅ†ดๅ†ธๅ†นๅ†บๅ†พๅ†ฟๅ‡ๅ‡‚ๅ‡ƒๅ‡…ๅ‡ˆๅ‡Šๅ‡ๅ‡Žๅ‡ๅ‡’",5], +["8440","ๅ‡˜ๅ‡™ๅ‡šๅ‡œๅ‡žๅ‡Ÿๅ‡ขๅ‡ฃๅ‡ฅ",5,"ๅ‡ฌๅ‡ฎๅ‡ฑๅ‡ฒๅ‡ดๅ‡ทๅ‡พๅˆ„ๅˆ…ๅˆ‰ๅˆ‹ๅˆŒๅˆๅˆๅˆ“ๅˆ”ๅˆ•ๅˆœๅˆžๅˆŸๅˆกๅˆขๅˆฃๅˆฅๅˆฆๅˆงๅˆชๅˆฌๅˆฏๅˆฑๅˆฒๅˆดๅˆตๅˆผๅˆพๅ‰„",5,"ๅ‰‹ๅ‰Žๅ‰ๅ‰’ๅ‰“ๅ‰•ๅ‰—ๅ‰˜"], +["8480","ๅ‰™ๅ‰šๅ‰›ๅ‰ๅ‰Ÿๅ‰ ๅ‰ขๅ‰ฃๅ‰คๅ‰ฆๅ‰จๅ‰ซๅ‰ฌๅ‰ญๅ‰ฎๅ‰ฐๅ‰ฑๅ‰ณ",9,"ๅ‰พๅŠ€ๅŠƒ",4,"ๅЉ",6,"ๅŠ‘ๅŠ’ๅŠ”",6,"ๅŠœๅŠคๅŠฅๅŠฆๅŠงๅŠฎๅŠฏๅŠฐๅŠด",9,"ๅ‹€ๅ‹ๅ‹‚ๅ‹„ๅ‹…ๅ‹†ๅ‹ˆๅ‹Šๅ‹Œๅ‹ๅ‹Žๅ‹ๅ‹‘ๅ‹“ๅ‹”ๅ‹•ๅ‹—ๅ‹™",5,"ๅ‹ ๅ‹กๅ‹ขๅ‹ฃๅ‹ฅ",10,"ๅ‹ฑ",7,"ๅ‹ปๅ‹ผๅ‹ฝๅŒๅŒ‚ๅŒƒๅŒ„ๅŒ‡ๅŒ‰ๅŒŠๅŒ‹ๅŒŒๅŒŽ"], +["8540","ๅŒ‘ๅŒ’ๅŒ“ๅŒ”ๅŒ˜ๅŒ›ๅŒœๅŒžๅŒŸๅŒขๅŒคๅŒฅๅŒงๅŒจๅŒฉๅŒซๅŒฌๅŒญๅŒฏ",9,"ๅŒผๅŒฝๅ€ๅ‚ๅ„ๅ†ๅ‹ๅŒๅๅๅ”ๅ˜ๅ™ๅ›ๅๅฅๅจๅชๅฌๅญๅฒๅถๅนๅปๅผๅฝๅพๅŽ€ๅށๅŽƒๅއๅŽˆๅŽŠๅŽŽๅŽ"], +["8580","ๅސ",4,"ๅŽ–ๅŽ—ๅŽ™ๅŽ›ๅŽœๅŽžๅŽ ๅŽกๅŽคๅŽงๅŽชๅŽซๅŽฌๅŽญๅŽฏ",6,"ๅŽทๅŽธๅŽนๅŽบๅŽผๅŽฝๅŽพๅ€ๅƒ",4,"ๅŽๅๅๅ’ๅ“ๅ•ๅšๅœๅๅžๅกๅขๅงๅดๅบๅพๅฟๅ€ๅ‚ๅ…ๅ‡ๅ‹ๅ”ๅ˜ๅ™ๅšๅœๅขๅคๅฅๅชๅฐๅณๅถๅทๅบๅฝๅฟๅ‘ๅ‘‚ๅ‘„ๅ‘…ๅ‘‡ๅ‘‰ๅ‘Œๅ‘ๅ‘Žๅ‘ๅ‘‘ๅ‘šๅ‘",4,"ๅ‘ฃๅ‘ฅๅ‘งๅ‘ฉ",7,"ๅ‘ดๅ‘นๅ‘บๅ‘พๅ‘ฟๅ’ๅ’ƒๅ’…ๅ’‡ๅ’ˆๅ’‰ๅ’Šๅ’ๅ’‘ๅ’“ๅ’—ๅ’˜ๅ’œๅ’žๅ’Ÿๅ’ ๅ’ก"], +["8640","ๅ’ขๅ’ฅๅ’ฎๅ’ฐๅ’ฒๅ’ตๅ’ถๅ’ทๅ’นๅ’บๅ’ผๅ’พๅ“ƒๅ“…ๅ“Šๅ“‹ๅ“–ๅ“˜ๅ“›ๅ“ ",4,"ๅ“ซๅ“ฌๅ“ฏๅ“ฐๅ“ฑๅ“ด",5,"ๅ“ปๅ“พๅ”€ๅ”‚ๅ”ƒๅ”„ๅ”…ๅ”ˆๅ”Š",4,"ๅ”’ๅ”“ๅ”•",5,"ๅ”œๅ”ๅ”žๅ”Ÿๅ”กๅ”ฅๅ”ฆ"], +["8680","ๅ”จๅ”ฉๅ”ซๅ”ญๅ”ฒๅ”ดๅ”ตๅ”ถๅ”ธๅ”นๅ”บๅ”ปๅ”ฝๅ•€ๅ•‚ๅ•…ๅ•‡ๅ•ˆๅ•‹",4,"ๅ•‘ๅ•’ๅ•“ๅ•”ๅ•—",4,"ๅ•ๅ•žๅ•Ÿๅ• ๅ•ขๅ•ฃๅ•จๅ•ฉๅ•ซๅ•ฏ",5,"ๅ•นๅ•บๅ•ฝๅ•ฟๅ–…ๅ–†ๅ–Œๅ–ๅ–Žๅ–ๅ–’ๅ–“ๅ–•ๅ––ๅ–—ๅ–šๅ–›ๅ–žๅ– ",6,"ๅ–จ",8,"ๅ–ฒๅ–ดๅ–ถๅ–ธๅ–บๅ–ผๅ–ฟ",4,"ๅ—†ๅ—‡ๅ—ˆๅ—Šๅ—‹ๅ—Žๅ—ๅ—ๅ—•ๅ——",4,"ๅ—žๅ— ๅ—ขๅ—งๅ—ฉๅ—ญๅ—ฎๅ—ฐๅ—ฑๅ—ดๅ—ถๅ—ธ",4,"ๅ—ฟๅ˜‚ๅ˜ƒๅ˜„ๅ˜…"], +["8740","ๅ˜†ๅ˜‡ๅ˜Šๅ˜‹ๅ˜ๅ˜",7,"ๅ˜™ๅ˜šๅ˜œๅ˜ๅ˜ ๅ˜กๅ˜ขๅ˜ฅๅ˜ฆๅ˜จๅ˜ฉๅ˜ชๅ˜ซๅ˜ฎๅ˜ฏๅ˜ฐๅ˜ณๅ˜ตๅ˜ทๅ˜ธๅ˜บๅ˜ผๅ˜ฝๅ˜พๅ™€",11,"ๅ™",4,"ๅ™•ๅ™–ๅ™šๅ™›ๅ™",4], +["8780","ๅ™ฃๅ™ฅๅ™ฆๅ™งๅ™ญๅ™ฎๅ™ฏๅ™ฐๅ™ฒๅ™ณๅ™ดๅ™ตๅ™ทๅ™ธๅ™นๅ™บๅ™ฝ",7,"ๅš‡",6,"ๅšๅš‘ๅš’ๅš”",14,"ๅšค",10,"ๅšฐ",6,"ๅšธๅšนๅšบๅšปๅšฝ",12,"ๅ›‹",8,"ๅ›•ๅ›–ๅ›˜ๅ›™ๅ›œๅ›ฃๅ›ฅ",5,"ๅ›ฌๅ›ฎๅ›ฏๅ›ฒๅ›ณๅ›ถๅ›ทๅ›ธๅ›ปๅ›ผๅœ€ๅœๅœ‚ๅœ…ๅœ‡ๅœ‹",6], +["8840","ๅœ’",9,"ๅœๅœžๅœ ๅœกๅœขๅœคๅœฅๅœฆๅœงๅœซๅœฑๅœฒๅœด",4,"ๅœผๅœฝๅœฟๅๅƒๅ„ๅ…ๅ†ๅˆๅ‰ๅ‹ๅ’",4,"ๅ˜ๅ™ๅขๅฃๅฅๅงๅฌๅฎๅฐๅฑๅฒๅดๅตๅธๅนๅบๅฝๅพๅฟๅž€"], +["8880","ๅžๅž‡ๅžˆๅž‰ๅžŠๅž",4,"ๅž”",6,"ๅžœๅžๅžžๅžŸๅžฅๅžจๅžชๅžฌๅžฏๅžฐๅžฑๅžณๅžตๅžถๅžทๅžน",8,"ๅŸ„",6,"ๅŸŒๅŸๅŸๅŸ‘ๅŸ“ๅŸ–ๅŸ—ๅŸ›ๅŸœๅŸžๅŸกๅŸขๅŸฃๅŸฅ",7,"ๅŸฎๅŸฐๅŸฑๅŸฒๅŸณๅŸตๅŸถๅŸทๅŸปๅŸผๅŸพๅŸฟๅ ๅ ƒๅ „ๅ …ๅ ˆๅ ‰ๅ Šๅ Œๅ Žๅ ๅ ๅ ’ๅ “ๅ ”ๅ –ๅ —ๅ ˜ๅ šๅ ›ๅ œๅ ๅ Ÿๅ ขๅ ฃๅ ฅ",4,"ๅ ซ",4,"ๅ ฑๅ ฒๅ ณๅ ดๅ ถ",7], +["8940","ๅ พ",5,"ๅก…",6,"ๅกŽๅกๅกๅก’ๅก“ๅก•ๅก–ๅก—ๅก™",4,"ๅกŸ",5,"ๅกฆ",4,"ๅกญ",16,"ๅกฟๅข‚ๅข„ๅข†ๅข‡ๅขˆๅขŠๅข‹ๅขŒ"], +["8980","ๅข",4,"ๅข”",4,"ๅข›ๅขœๅขๅข ",7,"ๅขช",17,"ๅขฝๅขพๅขฟๅฃ€ๅฃ‚ๅฃƒๅฃ„ๅฃ†",10,"ๅฃ’ๅฃ“ๅฃ”ๅฃ–",13,"ๅฃฅ",5,"ๅฃญๅฃฏๅฃฑๅฃฒๅฃดๅฃตๅฃทๅฃธๅฃบ",7,"ๅคƒๅค…ๅค†ๅคˆ",4,"ๅคŽๅคๅค‘ๅค’ๅค“ๅค—ๅค˜ๅค›ๅคๅคžๅค ๅคกๅคขๅคฃๅคฆๅคจๅคฌๅคฐๅคฒๅคณๅคตๅคถๅคป"], +["8a40","ๅคฝๅคพๅคฟๅฅ€ๅฅƒๅฅ…ๅฅ†ๅฅŠๅฅŒๅฅๅฅๅฅ’ๅฅ“ๅฅ™ๅฅ›",4,"ๅฅกๅฅฃๅฅคๅฅฆ",12,"ๅฅตๅฅทๅฅบๅฅปๅฅผๅฅพๅฅฟๅฆ€ๅฆ…ๅฆ‰ๅฆ‹ๅฆŒๅฆŽๅฆๅฆๅฆ‘ๅฆ”ๅฆ•ๅฆ˜ๅฆšๅฆ›ๅฆœๅฆๅฆŸๅฆ ๅฆกๅฆขๅฆฆ"], +["8a80","ๅฆงๅฆฌๅฆญๅฆฐๅฆฑๅฆณ",5,"ๅฆบๅฆผๅฆฝๅฆฟ",6,"ๅง‡ๅงˆๅง‰ๅงŒๅงๅงŽๅงๅง•ๅง–ๅง™ๅง›ๅงž",4,"ๅงคๅงฆๅงงๅงฉๅงชๅงซๅงญ",11,"ๅงบๅงผๅงฝๅงพๅจ€ๅจ‚ๅจŠๅจ‹ๅจๅจŽๅจๅจๅจ’ๅจ”ๅจ•ๅจ–ๅจ—ๅจ™ๅจšๅจ›ๅจๅจžๅจกๅจขๅจคๅจฆๅจงๅจจๅจช",6,"ๅจณๅจตๅจท",4,"ๅจฝๅจพๅจฟๅฉ",4,"ๅฉ‡ๅฉˆๅฉ‹",9,"ๅฉ–ๅฉ—ๅฉ˜ๅฉ™ๅฉ›",5], +["8b40","ๅฉกๅฉฃๅฉคๅฉฅๅฉฆๅฉจๅฉฉๅฉซ",8,"ๅฉธๅฉนๅฉปๅฉผๅฉฝๅฉพๅช€",17,"ๅช“",6,"ๅชœ",13,"ๅชซๅชฌ"], +["8b80","ๅชญ",4,"ๅชดๅชถๅชทๅชน",4,"ๅชฟๅซ€ๅซƒ",5,"ๅซŠๅซ‹ๅซ",4,"ๅซ“ๅซ•ๅซ—ๅซ™ๅซšๅซ›ๅซๅซžๅซŸๅซขๅซคๅซฅๅซงๅซจๅซชๅซฌ",4,"ๅซฒ",22,"ๅฌŠ",11,"ๅฌ˜",25,"ๅฌณๅฌตๅฌถๅฌธ",7,"ๅญ",6], +["8c40","ๅญˆ",7,"ๅญ’ๅญ–ๅญžๅญ ๅญกๅญงๅญจๅญซๅญญๅญฎๅญฏๅญฒๅญดๅญถๅญทๅญธๅญนๅญปๅญผๅญพๅญฟๅฎ‚ๅฎ†ๅฎŠๅฎๅฎŽๅฎๅฎ‘ๅฎ’ๅฎ”ๅฎ–ๅฎŸๅฎงๅฎจๅฎฉๅฎฌๅฎญๅฎฎๅฎฏๅฎฑๅฎฒๅฎทๅฎบๅฎปๅฎผๅฏ€ๅฏๅฏƒๅฏˆๅฏ‰ๅฏŠๅฏ‹ๅฏๅฏŽๅฏ"], +["8c80","ๅฏ‘ๅฏ”",8,"ๅฏ ๅฏขๅฏฃๅฏฆๅฏงๅฏฉ",4,"ๅฏฏๅฏฑ",6,"ๅฏฝๅฏพๅฐ€ๅฐ‚ๅฐƒๅฐ…ๅฐ‡ๅฐˆๅฐ‹ๅฐŒๅฐๅฐŽๅฐๅฐ’ๅฐ“ๅฐ—ๅฐ™ๅฐ›ๅฐžๅฐŸๅฐ ๅฐกๅฐฃๅฐฆๅฐจๅฐฉๅฐชๅฐซๅฐญๅฐฎๅฐฏๅฐฐๅฐฒๅฐณๅฐตๅฐถๅฐทๅฑƒๅฑ„ๅฑ†ๅฑ‡ๅฑŒๅฑๅฑ’ๅฑ“ๅฑ”ๅฑ–ๅฑ—ๅฑ˜ๅฑšๅฑ›ๅฑœๅฑๅฑŸๅฑขๅฑคๅฑง",6,"ๅฑฐๅฑฒ",6,"ๅฑปๅฑผๅฑฝๅฑพๅฒ€ๅฒƒ",4,"ๅฒ‰ๅฒŠๅฒ‹ๅฒŽๅฒๅฒ’ๅฒ“ๅฒ•ๅฒ",4,"ๅฒค",4], +["8d40","ๅฒชๅฒฎๅฒฏๅฒฐๅฒฒๅฒดๅฒถๅฒนๅฒบๅฒปๅฒผๅฒพๅณ€ๅณ‚ๅณƒๅณ…",5,"ๅณŒ",5,"ๅณ“",5,"ๅณš",6,"ๅณขๅณฃๅณงๅณฉๅณซๅณฌๅณฎๅณฏๅณฑ",9,"ๅณผ",4], +["8d80","ๅดๅด„ๅด…ๅดˆ",5,"ๅด",4,"ๅด•ๅด—ๅด˜ๅด™ๅดšๅดœๅดๅดŸ",4,"ๅดฅๅดจๅดชๅดซๅดฌๅดฏ",4,"ๅดต",7,"ๅดฟ",7,"ๅตˆๅต‰ๅต",10,"ๅต™ๅตšๅตœๅตž",10,"ๅตชๅตญๅตฎๅตฐๅตฑๅตฒๅตณๅตต",12,"ๅถƒ",21,"ๅถšๅถ›ๅถœๅถžๅถŸๅถ "], +["8e40","ๅถก",21,"ๅถธ",12,"ๅท†",6,"ๅทŽ",12,"ๅทœๅทŸๅท ๅทฃๅทคๅทชๅทฌๅทญ"], +["8e80","ๅทฐๅทตๅทถๅทธ",4,"ๅทฟๅธ€ๅธ„ๅธ‡ๅธ‰ๅธŠๅธ‹ๅธๅธŽๅธ’ๅธ“ๅธ—ๅธž",7,"ๅธจ",4,"ๅธฏๅธฐๅธฒ",4,"ๅธนๅธบๅธพๅธฟๅน€ๅนๅนƒๅน†",5,"ๅน",6,"ๅน–",4,"ๅนœๅนๅนŸๅน ๅนฃ",14,"ๅนตๅนทๅนนๅนพๅบๅบ‚ๅบƒๅบ…ๅบˆๅบ‰ๅบŒๅบๅบŽๅบ’ๅบ˜ๅบ›ๅบๅบกๅบขๅบฃๅบคๅบจ",4,"ๅบฎ",4,"ๅบดๅบบๅบปๅบผๅบฝๅบฟ",6], +["8f40","ๅป†ๅป‡ๅปˆๅป‹",5,"ๅป”ๅป•ๅป—ๅป˜ๅป™ๅปšๅปœ",11,"ๅปฉๅปซ",8,"ๅปตๅปธๅปนๅปปๅปผๅปฝๅผ…ๅผ†ๅผ‡ๅผ‰ๅผŒๅผๅผŽๅผๅผ’ๅผ”ๅผ–ๅผ™ๅผšๅผœๅผๅผžๅผกๅผขๅผฃๅผค"], +["8f80","ๅผจๅผซๅผฌๅผฎๅผฐๅผฒ",6,"ๅผปๅผฝๅผพๅผฟๅฝ",14,"ๅฝ‘ๅฝ”ๅฝ™ๅฝšๅฝ›ๅฝœๅฝžๅฝŸๅฝ ๅฝฃๅฝฅๅฝงๅฝจๅฝซๅฝฎๅฝฏๅฝฒๅฝดๅฝตๅฝถๅฝธๅฝบๅฝฝๅฝพๅฝฟๅพƒๅพ†ๅพๅพŽๅพๅพ‘ๅพ“ๅพ”ๅพ–ๅพšๅพ›ๅพๅพžๅพŸๅพ ๅพข",5,"ๅพฉๅพซๅพฌๅพฏ",5,"ๅพถๅพธๅพนๅพบๅพปๅพพ",4,"ๅฟ‡ๅฟˆๅฟŠๅฟ‹ๅฟŽๅฟ“ๅฟ”ๅฟ•ๅฟšๅฟ›ๅฟœๅฟžๅฟŸๅฟขๅฟฃๅฟฅๅฟฆๅฟจๅฟฉๅฟฌๅฟฏๅฟฐๅฟฒๅฟณๅฟดๅฟถๅฟทๅฟนๅฟบๅฟผๆ€‡"], +["9040","ๆ€ˆๆ€‰ๆ€‹ๆ€Œๆ€ๆ€‘ๆ€“ๆ€—ๆ€˜ๆ€šๆ€žๆ€Ÿๆ€ขๆ€ฃๆ€คๆ€ฌๆ€ญๆ€ฎๆ€ฐ",4,"ๆ€ถ",4,"ๆ€ฝๆ€พๆ€ๆ„",6,"ๆŒๆŽๆๆ‘ๆ“ๆ”ๆ–ๆ—ๆ˜ๆ›ๆœๆžๆŸๆ ๆกๆฅๆฆๆฎๆฑๆฒๆดๆตๆทๆพๆ‚€"], +["9080","ๆ‚ๆ‚‚ๆ‚…ๆ‚†ๆ‚‡ๆ‚ˆๆ‚Šๆ‚‹ๆ‚Žๆ‚ๆ‚ๆ‚‘ๆ‚“ๆ‚•ๆ‚—ๆ‚˜ๆ‚™ๆ‚œๆ‚žๆ‚กๆ‚ขๆ‚คๆ‚ฅๆ‚งๆ‚ฉๆ‚ชๆ‚ฎๆ‚ฐๆ‚ณๆ‚ตๆ‚ถๆ‚ทๆ‚นๆ‚บๆ‚ฝ",7,"ๆƒ‡ๆƒˆๆƒ‰ๆƒŒ",4,"ๆƒ’ๆƒ“ๆƒ”ๆƒ–ๆƒ—ๆƒ™ๆƒ›ๆƒžๆƒก",4,"ๆƒชๆƒฑๆƒฒๆƒตๆƒทๆƒธๆƒป",4,"ๆ„‚ๆ„ƒๆ„„ๆ„…ๆ„‡ๆ„Šๆ„‹ๆ„Œๆ„",4,"ๆ„–ๆ„—ๆ„˜ๆ„™ๆ„›ๆ„œๆ„ๆ„žๆ„กๆ„ขๆ„ฅๆ„จๆ„ฉๆ„ชๆ„ฌ",18,"ๆ…€",6], +["9140","ๆ…‡ๆ…‰ๆ…‹ๆ…ๆ…ๆ…ๆ…’ๆ…“ๆ…”ๆ…–",6,"ๆ…žๆ…Ÿๆ… ๆ…กๆ…ฃๆ…คๆ…ฅๆ…ฆๆ…ฉ",6,"ๆ…ฑๆ…ฒๆ…ณๆ…ดๆ…ถๆ…ธ",18,"ๆ†Œๆ†ๆ†",4,"ๆ†•"], +["9180","ๆ†–",6,"ๆ†ž",8,"ๆ†ชๆ†ซๆ†ญ",9,"ๆ†ธ",5,"ๆ†ฟๆ‡€ๆ‡ๆ‡ƒ",4,"ๆ‡‰ๆ‡Œ",4,"ๆ‡“ๆ‡•",16,"ๆ‡ง",13,"ๆ‡ถ",8,"ๆˆ€",5,"ๆˆ‡ๆˆ‰ๆˆ“ๆˆ”ๆˆ™ๆˆœๆˆๆˆžๆˆ ๆˆฃๆˆฆๆˆงๆˆจๆˆฉๆˆซๆˆญๆˆฏๆˆฐๆˆฑๆˆฒๆˆตๆˆถๆˆธ",4,"ๆ‰‚ๆ‰„ๆ‰…ๆ‰†ๆ‰Š"], +["9240","ๆ‰ๆ‰ๆ‰•ๆ‰–ๆ‰—ๆ‰™ๆ‰šๆ‰œ",6,"ๆ‰คๆ‰ฅๆ‰จๆ‰ฑๆ‰ฒๆ‰ดๆ‰ตๆ‰ทๆ‰ธๆ‰บๆ‰ปๆ‰ฝๆЁๆŠ‚ๆŠƒๆŠ…ๆІๆЇๆŠˆๆŠ‹",5,"ๆŠ”ๆŠ™ๆŠœๆŠๆŠžๆŠฃๆŠฆๆŠงๆŠฉๆŠชๆŠญๆŠฎๆŠฏๆŠฐๆŠฒๆŠณๆŠดๆŠถๆŠทๆŠธๆŠบๆŠพๆ‹€ๆ‹"], +["9280","ๆ‹ƒๆ‹‹ๆ‹ๆ‹‘ๆ‹•ๆ‹ๆ‹žๆ‹ ๆ‹กๆ‹คๆ‹ชๆ‹ซๆ‹ฐๆ‹ฒๆ‹ตๆ‹ธๆ‹นๆ‹บๆ‹ปๆŒ€ๆŒƒๆŒ„ๆŒ…ๆŒ†ๆŒŠๆŒ‹ๆŒŒๆŒๆŒๆŒๆŒ’ๆŒ“ๆŒ”ๆŒ•ๆŒ—ๆŒ˜ๆŒ™ๆŒœๆŒฆๆŒงๆŒฉๆŒฌๆŒญๆŒฎๆŒฐๆŒฑๆŒณ",5,"ๆŒปๆŒผๆŒพๆŒฟๆ€ๆๆ„ๆ‡ๆˆๆŠๆ‘ๆ’ๆ“ๆ”ๆ–",7,"ๆ ๆคๆฅๆฆๆจๆชๆซๆฌๆฏๆฐๆฒๆณๆดๆตๆธๆนๆผๆฝๆพๆฟๆށๆŽƒๆŽ„ๆŽ…ๆކๆŽ‹ๆŽๆŽ‘ๆŽ“ๆŽ”ๆŽ•ๆŽ—ๆŽ™",6,"ๆŽกๆŽคๆŽฆๆŽซๆŽฏๆŽฑๆŽฒๆŽตๆŽถๆŽนๆŽปๆŽฝๆŽฟๆ€"], +["9340","ๆๆ‚ๆƒๆ…ๆ‡ๆˆๆŠๆ‹ๆŒๆ‘ๆ“ๆ”ๆ•ๆ—",6,"ๆŸๆขๆค",4,"ๆซๆฌๆฎๆฏๆฐๆฑๆณๆตๆทๆนๆบๆปๆผๆพๆƒๆ„ๆ†",4,"ๆๆŽๆ‘ๆ’ๆ•",5,"ๆๆŸๆขๆฃๆค"], +["9380","ๆฅๆงๆจๆฉๆซๆฎ",5,"ๆต",4,"ๆปๆผๆพๆ‘€ๆ‘‚ๆ‘ƒๆ‘‰ๆ‘‹",6,"ๆ‘“ๆ‘•ๆ‘–ๆ‘—ๆ‘™",4,"ๆ‘Ÿ",7,"ๆ‘จๆ‘ชๆ‘ซๆ‘ฌๆ‘ฎ",9,"ๆ‘ป",6,"ๆ’ƒๆ’†ๆ’ˆ",8,"ๆ’“ๆ’”ๆ’—ๆ’˜ๆ’šๆ’›ๆ’œๆ’ๆ’Ÿ",4,"ๆ’ฅๆ’ฆๆ’งๆ’จๆ’ชๆ’ซๆ’ฏๆ’ฑๆ’ฒๆ’ณๆ’ดๆ’ถๆ’นๆ’ปๆ’ฝๆ’พๆ’ฟๆ“ๆ“ƒๆ“„ๆ“†",6,"ๆ“ๆ“‘ๆ““ๆ“”ๆ“•ๆ“–ๆ“™ๆ“š"], +["9440","ๆ“›ๆ“œๆ“ๆ“Ÿๆ“ ๆ“กๆ“ฃๆ“ฅๆ“ง",24,"ๆ”",7,"ๆ”Š",7,"ๆ”“",4,"ๆ”™",8], +["9480","ๆ”ขๆ”ฃๆ”คๆ”ฆ",4,"ๆ”ฌๆ”ญๆ”ฐๆ”ฑๆ”ฒๆ”ณๆ”ทๆ”บๆ”ผๆ”ฝๆ•€",4,"ๆ•†ๆ•‡ๆ•Šๆ•‹ๆ•ๆ•Žๆ•ๆ•’ๆ•“ๆ•”ๆ•—ๆ•˜ๆ•šๆ•œๆ•Ÿๆ• ๆ•กๆ•คๆ•ฅๆ•งๆ•จๆ•ฉๆ•ชๆ•ญๆ•ฎๆ•ฏๆ•ฑๆ•ณๆ•ตๆ•ถๆ•ธ",14,"ๆ–ˆๆ–‰ๆ–Šๆ–ๆ–Žๆ–ๆ–’ๆ–”ๆ–•ๆ––ๆ–˜ๆ–šๆ–ๆ–žๆ– ๆ–ขๆ–ฃๆ–ฆๆ–จๆ–ชๆ–ฌๆ–ฎๆ–ฑ",7,"ๆ–บๆ–ปๆ–พๆ–ฟๆ—€ๆ—‚ๆ—‡ๆ—ˆๆ—‰ๆ—Šๆ—ๆ—ๆ—‘ๆ—“ๆ—”ๆ—•ๆ—˜",7,"ๆ—กๆ—ฃๆ—คๆ—ชๆ—ซ"], +["9540","ๆ—ฒๆ—ณๆ—ดๆ—ตๆ—ธๆ—นๆ—ป",4,"ๆ˜ๆ˜„ๆ˜…ๆ˜‡ๆ˜ˆๆ˜‰ๆ˜‹ๆ˜ๆ˜ๆ˜‘ๆ˜’ๆ˜–ๆ˜—ๆ˜˜ๆ˜šๆ˜›ๆ˜œๆ˜žๆ˜กๆ˜ขๆ˜ฃๆ˜คๆ˜ฆๆ˜ฉๆ˜ชๆ˜ซๆ˜ฌๆ˜ฎๆ˜ฐๆ˜ฒๆ˜ณๆ˜ท",4,"ๆ˜ฝๆ˜ฟๆ™€ๆ™‚ๆ™„",6,"ๆ™ๆ™Žๆ™ๆ™‘ๆ™˜"], +["9580","ๆ™™ๆ™›ๆ™œๆ™ๆ™žๆ™ ๆ™ขๆ™ฃๆ™ฅๆ™งๆ™ฉ",4,"ๆ™ฑๆ™ฒๆ™ณๆ™ตๆ™ธๆ™นๆ™ปๆ™ผๆ™ฝๆ™ฟๆš€ๆšๆšƒๆš…ๆš†ๆšˆๆš‰ๆšŠๆš‹ๆšๆšŽๆšๆšๆš’ๆš“ๆš”ๆš•ๆš˜",4,"ๆšž",8,"ๆšฉ",4,"ๆšฏ",4,"ๆšตๆšถๆšทๆšธๆšบๆšปๆšผๆšฝๆšฟ",25,"ๆ›šๆ›ž",7,"ๆ›งๆ›จๆ›ช",5,"ๆ›ฑๆ›ตๆ›ถๆ›ธๆ›บๆ›ปๆ›ฝๆœๆœ‚ๆœƒ"], +["9640","ๆœ„ๆœ…ๆœ†ๆœ‡ๆœŒๆœŽๆœๆœ‘ๆœ’ๆœ“ๆœ–ๆœ˜ๆœ™ๆœšๆœœๆœžๆœ ",5,"ๆœงๆœฉๆœฎๆœฐๆœฒๆœณๆœถๆœทๆœธๆœนๆœปๆœผๆœพๆœฟๆๆ„ๆ…ๆ‡ๆŠๆ‹ๆๆ’ๆ”ๆ•ๆ—",4,"ๆๆขๆฃๆคๆฆๆงๆซๆฌๆฎๆฑๆดๆถ"], +["9680","ๆธๆนๆบๆปๆฝๆž€ๆž‚ๆžƒๆž…ๆž†ๆžˆๆžŠๆžŒๆžๆžŽๆžๆž‘ๆž’ๆž“ๆž”ๆž–ๆž™ๆž›ๆžŸๆž ๆžกๆžคๆžฆๆžฉๆžฌๆžฎๆžฑๆžฒๆžดๆžน",7,"ๆŸ‚ๆŸ…",9,"ๆŸ•ๆŸ–ๆŸ—ๆŸ›ๆŸŸๆŸกๆŸฃๆŸคๆŸฆๆŸงๆŸจๆŸชๆŸซๆŸญๆŸฎๆŸฒๆŸต",7,"ๆŸพๆ ๆ ‚ๆ ƒๆ „ๆ †ๆ ๆ ๆ ’ๆ ”ๆ •ๆ ˜",4,"ๆ žๆ Ÿๆ  ๆ ข",6,"ๆ ซ",6,"ๆ ดๆ ตๆ ถๆ บๆ ปๆ ฟๆก‡ๆก‹ๆกๆกๆก’ๆก–",5], +["9740","ๆกœๆกๆกžๆกŸๆกชๆกฌ",7,"ๆกตๆกธ",8,"ๆข‚ๆข„ๆข‡",7,"ๆขๆข‘ๆข’ๆข”ๆข•ๆข–ๆข˜",9,"ๆขฃๆขคๆขฅๆขฉๆขชๆขซๆขฌๆขฎๆขฑๆขฒๆขดๆขถๆขทๆขธ"], +["9780","ๆขน",6,"ๆฃๆฃƒ",5,"ๆฃŠๆฃŒๆฃŽๆฃๆฃๆฃ‘ๆฃ“ๆฃ”ๆฃ–ๆฃ—ๆฃ™ๆฃ›",4,"ๆฃกๆฃขๆฃค",9,"ๆฃฏๆฃฒๆฃณๆฃดๆฃถๆฃทๆฃธๆฃปๆฃฝๆฃพๆฃฟๆค€ๆค‚ๆคƒๆค„ๆค†",4,"ๆคŒๆคๆค‘ๆค“",11,"ๆคกๆคขๆคฃๆคฅ",7,"ๆคฎๆคฏๆคฑๆคฒๆคณๆคตๆคถๆคทๆคธๆคบๆคปๆคผๆคพๆฅ€ๆฅๆฅƒ",16,"ๆฅ•ๆฅ–ๆฅ˜ๆฅ™ๆฅ›ๆฅœๆฅŸ"], +["9840","ๆฅกๆฅขๆฅคๆฅฅๆฅงๆฅจๆฅฉๆฅชๆฅฌๆฅญๆฅฏๆฅฐๆฅฒ",4,"ๆฅบๆฅปๆฅฝๆฅพๆฅฟๆฆๆฆƒๆฆ…ๆฆŠๆฆ‹ๆฆŒๆฆŽ",5,"ๆฆ–ๆฆ—ๆฆ™ๆฆšๆฆ",9,"ๆฆฉๆฆชๆฆฌๆฆฎๆฆฏๆฆฐๆฆฒๆฆณๆฆตๆฆถๆฆธๆฆนๆฆบๆฆผๆฆฝ"], +["9880","ๆฆพๆฆฟๆง€ๆง‚",7,"ๆง‹ๆงๆงๆง‘ๆง’ๆง“ๆง•",5,"ๆงœๆงๆงžๆงก",11,"ๆงฎๆงฏๆงฐๆงฑๆงณ",9,"ๆงพๆจ€",9,"ๆจ‹",11,"ๆจ™",5,"ๆจ ๆจข",5,"ๆจฉๆจซๆจฌๆจญๆจฎๆจฐๆจฒๆจณๆจดๆจถ",6,"ๆจฟ",4,"ๆฉ…ๆฉ†ๆฉˆ",7,"ๆฉ‘",6,"ๆฉš"], +["9940","ๆฉœ",4,"ๆฉขๆฉฃๆฉคๆฉฆ",10,"ๆฉฒ",6,"ๆฉบๆฉปๆฉฝๆฉพๆฉฟๆชๆช‚ๆชƒๆช…",8,"ๆชๆช’",4,"ๆช˜",7,"ๆชก",5], +["9980","ๆชงๆชจๆชชๆชญ",114,"ๆฌฅๆฌฆๆฌจ",6], +["9a40","ๆฌฏๆฌฐๆฌฑๆฌณๆฌดๆฌตๆฌถๆฌธๆฌปๆฌผๆฌฝๆฌฟๆญ€ๆญๆญ‚ๆญ„ๆญ…ๆญˆๆญŠๆญ‹ๆญ",11,"ๆญš",7,"ๆญจๆญฉๆญซ",13,"ๆญบๆญฝๆญพๆญฟๆฎ€ๆฎ…ๆฎˆ"], +["9a80","ๆฎŒๆฎŽๆฎๆฎๆฎ‘ๆฎ”ๆฎ•ๆฎ—ๆฎ˜ๆฎ™ๆฎœ",4,"ๆฎข",7,"ๆฎซ",7,"ๆฎถๆฎธ",6,"ๆฏ€ๆฏƒๆฏ„ๆฏ†",4,"ๆฏŒๆฏŽๆฏๆฏ‘ๆฏ˜ๆฏšๆฏœ",4,"ๆฏข",7,"ๆฏฌๆฏญๆฏฎๆฏฐๆฏฑๆฏฒๆฏดๆฏถๆฏทๆฏธๆฏบๆฏปๆฏผๆฏพ",6,"ๆฐˆ",4,"ๆฐŽๆฐ’ๆฐ—ๆฐœๆฐๆฐžๆฐ ๆฐฃๆฐฅๆฐซๆฐฌๆฐญๆฐฑๆฐณๆฐถๆฐทๆฐนๆฐบๆฐปๆฐผๆฐพๆฐฟๆฑƒๆฑ„ๆฑ…ๆฑˆๆฑ‹",4,"ๆฑ‘ๆฑ’ๆฑ“ๆฑ–ๆฑ˜"], +["9b40","ๆฑ™ๆฑšๆฑขๆฑฃๆฑฅๆฑฆๆฑงๆฑซ",4,"ๆฑฑๆฑณๆฑตๆฑทๆฑธๆฑบๆฑปๆฑผๆฑฟๆฒ€ๆฒ„ๆฒ‡ๆฒŠๆฒ‹ๆฒๆฒŽๆฒ‘ๆฒ’ๆฒ•ๆฒ–ๆฒ—ๆฒ˜ๆฒšๆฒœๆฒๆฒžๆฒ ๆฒขๆฒจๆฒฌๆฒฏๆฒฐๆฒดๆฒตๆฒถๆฒทๆฒบๆณ€ๆณๆณ‚ๆณƒๆณ†ๆณ‡ๆณˆๆณ‹ๆณๆณŽๆณๆณ‘ๆณ’ๆณ˜"], +["9b80","ๆณ™ๆณšๆณœๆณๆณŸๆณคๆณฆๆณงๆณฉๆณฌๆณญๆณฒๆณดๆณนๆณฟๆด€ๆด‚ๆดƒๆด…ๆด†ๆดˆๆด‰ๆดŠๆดๆดๆดๆด‘ๆด“ๆด”ๆด•ๆด–ๆด˜ๆดœๆดๆดŸ",5,"ๆดฆๆดจๆดฉๆดฌๆดญๆดฏๆดฐๆดดๆดถๆดทๆดธๆดบๆดฟๆต€ๆต‚ๆต„ๆต‰ๆตŒๆตๆต•ๆต–ๆต—ๆต˜ๆต›ๆตๆตŸๆตกๆตขๆตคๆตฅๆตงๆตจๆตซๆตฌๆตญๆตฐๆตฑๆตฒๆตณๆตตๆตถๆตนๆตบๆตปๆตฝ",4,"ๆถƒๆถ„ๆถ†ๆถ‡ๆถŠๆถ‹ๆถๆถๆถๆถ’ๆถ–",4,"ๆถœๆถขๆถฅๆถฌๆถญๆถฐๆถฑๆถณๆถดๆถถๆถทๆถน",5,"ๆทๆท‚ๆทƒๆทˆๆท‰ๆทŠ"], +["9c40","ๆทๆทŽๆทๆทๆท’ๆท“ๆท”ๆท•ๆท—ๆทšๆท›ๆทœๆทŸๆทขๆทฃๆทฅๆทงๆทจๆทฉๆทชๆทญๆทฏๆทฐๆทฒๆทดๆทตๆทถๆทธๆทบๆทฝ",7,"ๆธ†ๆธ‡ๆธˆๆธ‰ๆธ‹ๆธๆธ’ๆธ“ๆธ•ๆธ˜ๆธ™ๆธ›ๆธœๆธžๆธŸๆธขๆธฆๆธงๆธจๆธชๆธฌๆธฎๆธฐๆธฑๆธณๆธต"], +["9c80","ๆธถๆธทๆธนๆธป",7,"ๆน…",7,"ๆนๆนๆน‘ๆน’ๆน•ๆน—ๆน™ๆนšๆนœๆนๆนžๆน ",10,"ๆนฌๆนญๆนฏ",14,"ๆบ€ๆบๆบ‚ๆบ„ๆบ‡ๆบˆๆบŠ",4,"ๆบ‘",6,"ๆบ™ๆบšๆบ›ๆบๆบžๆบ ๆบกๆบฃๆบคๆบฆๆบจๆบฉๆบซๆบฌๆบญๆบฎๆบฐๆบณๆบตๆบธๆบนๆบผๆบพๆบฟๆป€ๆปƒๆป„ๆป…ๆป†ๆปˆๆป‰ๆปŠๆปŒๆปๆปŽๆปๆป’ๆป–ๆป˜ๆป™ๆป›ๆปœๆปๆปฃๆปงๆปช",5], +["9d40","ๆปฐๆปฑๆปฒๆปณๆปตๆปถๆปทๆปธๆปบ",7,"ๆผƒๆผ„ๆผ…ๆผ‡ๆผˆๆผŠ",4,"ๆผๆผ‘ๆผ’ๆผ–",9,"ๆผกๆผขๆผฃๆผฅๆผฆๆผงๆผจๆผฌๆผฎๆผฐๆผฒๆผดๆผตๆผท",6,"ๆผฟๆฝ€ๆฝๆฝ‚"], +["9d80","ๆฝƒๆฝ„ๆฝ…ๆฝˆๆฝ‰ๆฝŠๆฝŒๆฝŽ",9,"ๆฝ™ๆฝšๆฝ›ๆฝๆฝŸๆฝ ๆฝกๆฝฃๆฝคๆฝฅๆฝง",5,"ๆฝฏๆฝฐๆฝฑๆฝณๆฝตๆฝถๆฝทๆฝนๆฝปๆฝฝ",6,"ๆพ…ๆพ†ๆพ‡ๆพŠๆพ‹ๆพ",12,"ๆพๆพžๆพŸๆพ ๆพข",4,"ๆพจ",10,"ๆพดๆพตๆพทๆพธๆพบ",5,"ๆฟๆฟƒ",5,"ๆฟŠ",6,"ๆฟ“",10,"ๆฟŸๆฟขๆฟฃๆฟคๆฟฅ"], +["9e40","ๆฟฆ",7,"ๆฟฐ",32,"็€’",7,"็€œ",6,"็€ค",6], +["9e80","็€ซ",9,"็€ถ็€ท็€ธ็€บ",17,"็็Ž็",13,"็Ÿ",11,"็ฎ็ฑ็ฒ็ณ็ด็ท็น็บ็ป็ฝ็‚็‚‚็‚ƒ็‚„็‚†็‚‡็‚ˆ็‚‹็‚Œ็‚็‚็‚็‚‘็‚“็‚—็‚˜็‚š็‚›็‚ž",12,"็‚ฐ็‚ฒ็‚ด็‚ต็‚ถ็‚บ็‚พ็‚ฟ็ƒ„็ƒ…็ƒ†็ƒ‡็ƒ‰็ƒ‹",12,"็ƒš"], +["9f40","็ƒœ็ƒ็ƒž็ƒ ็ƒก็ƒข็ƒฃ็ƒฅ็ƒช็ƒฎ็ƒฐ",6,"็ƒธ็ƒบ็ƒป็ƒผ็ƒพ",10,"็„‹",4,"็„‘็„’็„”็„—็„›",10,"็„ง",7,"็„ฒ็„ณ็„ด"], +["9f80","็„ต็„ท",13,"็…†็…‡็…ˆ็…‰็…‹็…็…",12,"็…็…Ÿ",4,"็…ฅ็…ฉ",4,"็…ฏ็…ฐ็…ฑ็…ด็…ต็…ถ็…ท็…น็…ป็…ผ็…พ",5,"็†…",4,"็†‹็†Œ็†็†Ž็†็†‘็†’็†“็†•็†–็†—็†š",4,"็†ก",6,"็†ฉ็†ช็†ซ็†ญ",5,"็†ด็†ถ็†ท็†ธ็†บ",8,"็‡„",9,"็‡",4], +["a040","็‡–",9,"็‡ก็‡ข็‡ฃ็‡ค็‡ฆ็‡จ",5,"็‡ฏ",9,"็‡บ",11,"็ˆ‡",19], +["a080","็ˆ›็ˆœ็ˆž",9,"็ˆฉ็ˆซ็ˆญ็ˆฎ็ˆฏ็ˆฒ็ˆณ็ˆด็ˆบ็ˆผ็ˆพ็‰€",6,"็‰‰็‰Š็‰‹็‰Ž็‰็‰็‰‘็‰“็‰”็‰•็‰—็‰˜็‰š็‰œ็‰ž็‰ ็‰ฃ็‰ค็‰ฅ็‰จ็‰ช็‰ซ็‰ฌ็‰ญ็‰ฐ็‰ฑ็‰ณ็‰ด็‰ถ็‰ท็‰ธ็‰ป็‰ผ็‰ฝ็Š‚็Šƒ็Š…",4,"็ŠŒ็ŠŽ็А็Š‘็Š“",11,"็Š ",11,"็Šฎ็Šฑ็Šฒ็Šณ็Šต็Šบ",6,"็‹…็‹†็‹‡็‹‰็‹Š็‹‹็‹Œ็‹็‹‘็‹“็‹”็‹•็‹–็‹˜็‹š็‹›"], +["a1a1","ใ€€ใ€ใ€‚ยทห‰ห‡ยจใ€ƒใ€…โ€”๏ฝžโ€–โ€ฆโ€˜โ€™โ€œโ€ใ€”ใ€•ใ€ˆ",7,"ใ€–ใ€—ใ€ใ€‘ยฑร—รทโˆถโˆงโˆจโˆ‘โˆโˆชโˆฉโˆˆโˆทโˆšโŠฅโˆฅโˆ โŒ’โŠ™โˆซโˆฎโ‰กโ‰Œโ‰ˆโˆฝโˆโ‰ โ‰ฎโ‰ฏโ‰คโ‰ฅโˆžโˆตโˆดโ™‚โ™€ยฐโ€ฒโ€ณโ„ƒ๏ผ„ยค๏ฟ ๏ฟกโ€ฐยงโ„–โ˜†โ˜…โ—‹โ—โ—Žโ—‡โ—†โ–กโ– โ–ณโ–ฒโ€ปโ†’โ†โ†‘โ†“ใ€“"], +["a2a1","โ…ฐ",9], +["a2b1","โ’ˆ",19,"โ‘ด",19,"โ‘ ",9], +["a2e5","ใˆ ",9], +["a2f1","โ… ",11], +["a3a1","๏ผ๏ผ‚๏ผƒ๏ฟฅ๏ผ…",88,"๏ฟฃ"], +["a4a1","ใ",82], +["a5a1","ใ‚ก",85], +["a6a1","ฮ‘",16,"ฮฃ",6], +["a6c1","ฮฑ",16,"ฯƒ",6], +["a6e0","๏ธต๏ธถ๏ธน๏ธบ๏ธฟ๏น€๏ธฝ๏ธพ๏น๏น‚๏นƒ๏น„"], +["a6ee","๏ธป๏ธผ๏ธท๏ธธ๏ธฑ"], +["a6f4","๏ธณ๏ธด"], +["a7a1","ะ",5,"ะะ–",25], +["a7d1","ะฐ",5,"ั‘ะถ",25], +["a840","หŠห‹ห™โ€“โ€•โ€ฅโ€ตโ„…โ„‰โ†–โ†—โ†˜โ†™โˆ•โˆŸโˆฃโ‰’โ‰ฆโ‰งโŠฟโ•",35,"โ–",6], +["a880","โ–ˆ",7,"โ–“โ–”โ–•โ–ผโ–ฝโ—ขโ—ฃโ—คโ—ฅโ˜‰โŠ•ใ€’ใ€ใ€ž"], +["a8a1","ฤรกวŽร ฤ“รฉฤ›รจฤซรญวรฌลรณว’รฒลซรบว”รนว–ว˜วšวœรผรชษ‘"], +["a8bd","ล„ลˆ"], +["a8c0","ษก"], +["a8c5","ใ„…",36], +["a940","ใ€ก",8,"ใŠฃใŽŽใŽใŽœใŽใŽžใŽกใ„ใŽใ‘ใ’ใ•๏ธฐ๏ฟข๏ฟค"], +["a959","โ„กใˆฑ"], +["a95c","โ€"], +["a960","ใƒผใ‚›ใ‚œใƒฝใƒพใ€†ใ‚ใ‚ž๏น‰",9,"๏น”๏น•๏น–๏น—๏น™",8], +["a980","๏นข",4,"๏นจ๏นฉ๏นช๏นซ"], +["a996","ใ€‡"], +["a9a4","โ”€",75], +["aa40","็‹œ็‹็‹Ÿ็‹ข",5,"็‹ช็‹ซ็‹ต็‹ถ็‹น็‹ฝ็‹พ็‹ฟ็Œ€็Œ‚็Œ„",5,"็Œ‹็ŒŒ็Œ็Œ็Œ็Œ‘็Œ’็Œ”็Œ˜็Œ™็Œš็ŒŸ็Œ ็Œฃ็Œค็Œฆ็Œง็Œจ็Œญ็Œฏ็Œฐ็Œฒ็Œณ็Œต็Œถ็Œบ็Œป็Œผ็Œฝ็€",8], +["aa80","็‰็Š็‹็Œ็Ž็็‘็“็”็•็–็˜",7,"็ก",10,"็ฎ็ฐ็ฑ"], +["ab40","็ฒ",11,"็ฟ",4,"็Ž…็ކ็Žˆ็ŽŠ็ŽŒ็Ž็Ž็ސ็Ž’็Ž“็Ž”็Ž•็Ž—็Ž˜็Ž™็Žš็Žœ็Ž็Žž็Ž ็Žก็Žฃ",5,"็Žช็Žฌ็Žญ็Žฑ็Žด็Žต็Žถ็Žธ็Žน็Žผ็Žฝ็Žพ็Žฟ็็ƒ",4], +["ab80","็‹็Œ็Ž็’",6,"็š็›็œ็็Ÿ็ก็ข็ฃ็ค็ฆ็จ็ช็ซ็ฌ็ฎ็ฏ็ฐ็ฑ็ณ",4], +["ac40","็ธ",10,"็„็‡็ˆ็‹็Œ็็Ž็‘",8,"็œ",5,"็ฃ็ค็ง็ฉ็ซ็ญ็ฏ็ฑ็ฒ็ท",4,"็ฝ็พ็ฟ็‘€็‘‚",11], +["ac80","็‘Ž",6,"็‘–็‘˜็‘็‘ ",12,"็‘ฎ็‘ฏ็‘ฑ",4,"็‘ธ็‘น็‘บ"], +["ad40","็‘ป็‘ผ็‘ฝ็‘ฟ็’‚็’„็’…็’†็’ˆ็’‰็’Š็’Œ็’็’็’‘",10,"็’็’Ÿ",7,"็’ช",15,"็’ป",12], +["ad80","็“ˆ",9,"็““",8,"็“็“Ÿ็“ก็“ฅ็“ง",6,"็“ฐ็“ฑ็“ฒ"], +["ae40","็“ณ็“ต็“ธ",6,"็”€็”็”‚็”ƒ็”…",7,"็”Ž็”็”’็””็”•็”–็”—็”›็”็”ž็” ",4,"็”ฆ็”ง็”ช็”ฎ็”ด็”ถ็”น็”ผ็”ฝ็”ฟ็•็•‚็•ƒ็•„็•†็•‡็•‰็•Š็•็•็•‘็•’็•“็••็•–็•—็•˜"], +["ae80","็•",7,"็•ง็•จ็•ฉ็•ซ",6,"็•ณ็•ต็•ถ็•ท็•บ",4,"็–€็–็–‚็–„็–…็–‡"], +["af40","็–ˆ็–‰็–Š็–Œ็–็–Ž็–็–“็–•็–˜็–›็–œ็–ž็–ข็–ฆ",4,"็–ญ็–ถ็–ท็–บ็–ป็–ฟ็—€็—็—†็—‹็—Œ็—Ž็—็—็—‘็—“็——็—™็—š็—œ็—็—Ÿ็— ็—ก็—ฅ็—ฉ็—ฌ็—ญ็—ฎ็—ฏ็—ฒ็—ณ็—ต็—ถ็—ท็—ธ็—บ็—ป็—ฝ็—พ็˜‚็˜„็˜†็˜‡"], +["af80","็˜ˆ็˜‰็˜‹็˜็˜Ž็˜็˜‘็˜’็˜“็˜”็˜–็˜š็˜œ็˜็˜ž็˜ก็˜ฃ็˜ง็˜จ็˜ฌ็˜ฎ็˜ฏ็˜ฑ็˜ฒ็˜ถ็˜ท็˜น็˜บ็˜ป็˜ฝ็™็™‚็™„"], +["b040","็™…",6,"็™Ž",5,"็™•็™—",4,"็™็™Ÿ็™ ็™ก็™ข็™ค",6,"็™ฌ็™ญ็™ฎ็™ฐ",7,"็™น็™บ็™ผ็™ฟ็š€็š็šƒ็š…็š‰็šŠ็šŒ็š็š็š็š’็š”็š•็š—็š˜็šš็š›"], +["b080","็šœ",7,"็šฅ",8,"็šฏ็šฐ็šณ็šต",9,"็›€็›็›ƒๅ•Š้˜ฟๅŸƒๆŒจๅ“Žๅ”‰ๅ“€็š‘็™Œ่”ผ็Ÿฎ่‰พ็ข็ˆฑ้š˜้žๆฐจๅฎ‰ไฟบๆŒ‰ๆš—ๅฒธ่ƒบๆกˆ่‚ฎๆ˜‚็›Žๅ‡นๆ•–็†ฌ็ฟฑ่ข„ๅ‚ฒๅฅฅๆ‡Šๆพณ่ŠญๆŒๆ‰’ๅญๅง็ฌ†ๅ…ซ็–คๅทดๆ‹”่ท‹้ถๆŠŠ่€™ๅ้œธ็ฝข็ˆธ็™ฝๆŸ็™พๆ‘†ไฝฐ่ดฅๆ‹œ็จ—ๆ–‘็ญๆฌๆ‰ณ่ˆฌ้ขๆฟ็‰ˆๆ‰ฎๆ‹Œไผด็“ฃๅŠๅŠž็ปŠ้‚ฆๅธฎๆข†ๆฆœ่†€็ป‘ๆฃ’็ฃ…่šŒ้•‘ๅ‚่ฐค่‹ž่ƒžๅŒ…่ค’ๅ‰ฅ"], +["b140","็›„็›‡็›‰็›‹็›Œ็›“็›•็›™็›š็›œ็›็›ž็› ",4,"็›ฆ",7,"็›ฐ็›ณ็›ต็›ถ็›ท็›บ็›ป็›ฝ็›ฟ็œ€็œ‚็œƒ็œ…็œ†็œŠ็œŒ็œŽ",10,"็œ›็œœ็œ็œž็œก็œฃ็œค็œฅ็œง็œช็œซ"], +["b180","็œฌ็œฎ็œฐ",4,"็œน็œป็œฝ็œพ็œฟ็‚็„็…็†็ˆ",7,"็’",7,"็œ่–„้›นไฟๅ ก้ฅฑๅฎๆŠฑๆŠฅๆšด่ฑน้ฒ็ˆ†ๆฏ็ข‘ๆ‚ฒๅ‘ๅŒ—่พˆ่ƒŒ่ด้’กๅ€็‹ˆๅค‡ๆƒซ็„™่ขซๅฅ”่‹ฏๆœฌ็ฌจๅดฉ็ปท็”ญๆณต่นฆ่ฟธ้€ผ้ผปๆฏ”้„™็ฌ”ๅฝผ็ขง่“–่”ฝๆฏ•ๆฏ™ๆฏ–ๅธๅบ‡็—น้—ญๆ•ๅผŠๅฟ…่พŸๅฃ่‡‚้ฟ้™›้žญ่พน็ผ–่ดฌๆ‰ไพฟๅ˜ๅž่พจ่พฉ่พซ้ๆ ‡ๅฝช่†˜่กจ้ณ–ๆ†‹ๅˆซ็˜ชๅฝฌๆ–Œๆฟ’ๆปจๅฎพๆ‘ˆๅ…ตๅ†ฐๆŸ„ไธ™็ง‰้ฅผ็‚ณ"], +["b240","็็ž็Ÿ็ ็ค็ง็ฉ็ช็ญ",11,"็บ็ป็ผ็ž็ž‚็žƒ็ž†",5,"็ž็ž็ž“",11,"็žก็žฃ็žค็žฆ็žจ็žซ็žญ็žฎ็žฏ็žฑ็žฒ็žด็žถ",4], +["b280","็žผ็žพ็Ÿ€",12,"็ŸŽ",8,"็Ÿ˜็Ÿ™็Ÿš็Ÿ",4,"็Ÿค็—…ๅนถ็Žป่ ๆ’ญๆ‹จ้’ตๆณขๅšๅ‹ƒๆ้“‚็ฎ”ไผฏๅธ›่ˆถ่„–่†ŠๆธคๆณŠ้ฉณๆ•ๅœๅ“บ่กฅๅŸ ไธๅธƒๆญฅ็ฐฟ้ƒจๆ€–ๆ“ฆ็Œœ่ฃๆๆ‰่ดข็ฌ่ธฉ้‡‡ๅฝฉ่œ่”ก้คๅ‚่š•ๆฎ‹ๆƒญๆƒจ็ฟ่‹่ˆฑไป“ๆฒง่—ๆ“็ณ™ๆงฝๆ›น่‰ๅŽ•็ญ–ไพงๅ†Œๆต‹ๅฑ‚่นญๆ’ๅ‰่Œฌ่ŒถๆŸฅ็ขดๆฝๅฏŸๅฒ”ๅทฎ่ฏงๆ‹†ๆŸด่ฑบๆ€ๆŽบ่‰้ฆ‹่ฐ—็ผ ้“ฒไบง้˜้ขคๆ˜Œ็Œ–"], +["b340","็Ÿฆ็Ÿจ็Ÿช็Ÿฏ็Ÿฐ็Ÿฑ็Ÿฒ็Ÿด็Ÿต็Ÿท็Ÿน็Ÿบ็Ÿป็Ÿผ็ ƒ",5,"็ Š็ ‹็ Ž็ ็ ็ “็ •็ ™็ ›็ ž็  ็ ก็ ข็ ค็ จ็ ช็ ซ็ ฎ็ ฏ็ ฑ็ ฒ็ ณ็ ต็ ถ็ ฝ็ ฟ็ก็ก‚็กƒ็ก„็ก†็กˆ็ก‰็กŠ็ก‹็ก็ก็ก‘็ก“็ก”็ก˜็ก™็กš"], +["b380","็ก›็กœ็กž",11,"็กฏ",7,"็กธ็กน็กบ็กป็กฝ",6,"ๅœบๅฐๅธธ้•ฟๅฟ่‚ ๅŽ‚ๆ•ž็•…ๅ”ฑๅ€ก่ถ…ๆŠ„้’žๆœๅ˜ฒๆฝฎๅทขๅต็‚’่ฝฆๆ‰ฏๆ’คๆŽฃๅฝปๆพˆ้ƒด่‡ฃ่พฐๅฐ˜ๆ™จๅฟฑๆฒ‰้™ˆ่ถ่กฌๆ’‘็งฐๅŸŽๆฉ™ๆˆๅ‘ˆไน˜็จ‹ๆƒฉๆพ„่ฏšๆ‰ฟ้€ž้ช‹็งคๅƒ็—ดๆŒๅŒ™ๆฑ ่ฟŸๅผ›้ฉฐ่€ป้ฝฟไพˆๅฐบ่ตค็ฟ…ๆ–ฅ็‚ฝๅ……ๅ†ฒ่™ซๅด‡ๅฎ ๆŠฝ้…ฌ็•ด่ธŒ็จ ๆ„็ญนไป‡็ปธ็ž…ไธ‘่‡ญๅˆๅ‡บๆฉฑๅŽจ่บ‡้”„้›ๆป้™คๆฅš"], +["b440","็ข„็ข…็ข†็ขˆ็ขŠ็ข‹็ข็ข็ข’็ข”็ข•็ข–็ข™็ข็ขž็ข ็ขข็ขค็ขฆ็ขจ",7,"็ขต็ขถ็ขท็ขธ็ขบ็ขป็ขผ็ขฝ็ขฟ็ฃ€็ฃ‚็ฃƒ็ฃ„็ฃ†็ฃ‡็ฃˆ็ฃŒ็ฃ็ฃŽ็ฃ็ฃ‘็ฃ’็ฃ“็ฃ–็ฃ—็ฃ˜็ฃš",9], +["b480","็ฃค็ฃฅ็ฃฆ็ฃง็ฃฉ็ฃช็ฃซ็ฃญ",4,"็ฃณ็ฃต็ฃถ็ฃธ็ฃน็ฃป",5,"็ค‚็คƒ็ค„็ค†",6,"็ก€ๅ‚จ็Ÿ—ๆ่งฆๅค„ๆฃๅท็ฉฟๆคฝไผ ่ˆนๅ–˜ไธฒ็–ฎ็ช—ๅนขๅบŠ้—ฏๅˆ›ๅน็‚Šๆถ้”คๅž‚ๆ˜ฅๆคฟ้†‡ๅ”‡ๆทณ็บฏ่ ขๆˆณ็ปฐ็–ต่Œจ็ฃ้›Œ่พžๆ…ˆ็“ท่ฏๆญคๅˆบ่ตๆฌก่ช่‘ฑๅ›ฑๅŒ†ไปŽไธ›ๅ‡‘็ฒ—้†‹็ฐ‡ไฟƒ่นฟ็ฏก็ชœๆ‘งๅด”ๅ‚ฌ่„†็˜็ฒนๆทฌ็ฟ ๆ‘ๅญ˜ๅฏธ็ฃ‹ๆ’ฎๆ“ๆŽชๆŒซ้”™ๆญ่พพ็ญ”็˜ฉๆ‰“ๅคงๅ‘†ๆญนๅ‚ฃๆˆดๅธฆๆฎ†ไปฃ่ดท่ข‹ๅพ…้€ฎ"], +["b540","็ค",5,"็ค”",9,"็คŸ",4,"็คฅ",14,"็คต",4,"็คฝ็คฟ็ฅ‚็ฅƒ็ฅ„็ฅ…็ฅ‡็ฅŠ",8,"็ฅ”็ฅ•็ฅ˜็ฅ™็ฅก็ฅฃ"], +["b580","็ฅค็ฅฆ็ฅฉ็ฅช็ฅซ็ฅฌ็ฅฎ็ฅฐ",6,"็ฅน็ฅป",4,"็ฆ‚็ฆƒ็ฆ†็ฆ‡็ฆˆ็ฆ‰็ฆ‹็ฆŒ็ฆ็ฆŽ็ฆ็ฆ‘็ฆ’ๆ€ ่€ฝๆ‹…ไธนๅ•้ƒธๆŽธ่ƒ†ๆ—ฆๆฐฎไฝ†ๆƒฎๆทก่ฏžๅผน่›‹ๅฝ“ๆŒกๅ…š่กๆกฃๅˆ€ๆฃ่นˆๅ€’ๅฒ›็ฅทๅฏผๅˆฐ็จปๆ‚ผ้“็›—ๅพทๅพ—็š„่นฌ็ฏ็™ป็ญ‰็žชๅ‡ณ้‚“ๅ คไฝŽๆปด่ฟชๆ•Œ็ฌ›็‹„ๆถค็ฟŸๅซกๆŠตๅบ•ๅœฐ่’‚็ฌฌๅธๅผŸ้€’็ผ”้ข ๆŽ‚ๆป‡็ข˜็‚นๅ…ธ้›ๅžซ็”ตไฝƒ็”ธๅบ—ๆƒฆๅฅ ๆท€ๆฎฟ็ข‰ๅผ้›•ๅ‡‹ๅˆๆމๅŠ้’“่ฐƒ่ทŒ็ˆน็ขŸ่ถ่ฟญ่ฐๅ "], +["b640","็ฆ“",6,"็ฆ›",11,"็ฆจ",10,"็ฆด",4,"็ฆผ็ฆฟ็ง‚็ง„็ง…็ง‡็งˆ็งŠ็งŒ็งŽ็ง็ง็ง“็ง”็ง–็ง—็ง™",5,"็ง ็งก็งข็งฅ็งจ็งช"], +["b680","็งฌ็งฎ็งฑ",6,"็งน็งบ็งผ็งพ็งฟ็จ็จ„็จ…็จ‡็จˆ็จ‰็จŠ็จŒ็จ",4,"็จ•็จ–็จ˜็จ™็จ›็จœไธ็›ฏๅฎ้’‰้กถ้ผŽ้”ญๅฎš่ฎขไธขไธœๅ†ฌ่‘ฃๆ‡‚ๅŠจๆ ‹ไพ—ๆซๅ†ปๆดžๅ…œๆŠ–ๆ–—้™ก่ฑ†้€—็—˜้ƒฝ็ฃๆฏ’็ŠŠ็‹ฌ่ฏปๅ ต็น่ตŒๆœ้•€่‚šๅบฆๆธกๅฆ’็ซฏ็Ÿญ้”ปๆฎตๆ–ญ็ผŽๅ †ๅ…‘้˜Ÿๅฏนๅขฉๅจ่นฒๆ•ฆ้กฟๅ›ค้’็›พ้ๆއๅ“†ๅคšๅคบๅž›่บฒๆœต่ทบ่ˆตๅ‰ๆƒฐๅ •่›พๅณจ้น…ไฟ„้ข่ฎนๅจฅๆถๅŽ„ๆ‰ผ้้„‚้ฅฟๆฉ่€Œๅ„ฟ่€ณๅฐ”้ฅตๆดฑไบŒ"], +["b740","็จ็จŸ็จก็จข็จค",14,"็จด็จต็จถ็จธ็จบ็จพ็ฉ€",5,"็ฉ‡",9,"็ฉ’",4,"็ฉ˜",16], +["b780","็ฉฉ",6,"็ฉฑ็ฉฒ็ฉณ็ฉต็ฉป็ฉผ็ฉฝ็ฉพ็ช‚็ช…็ช‡็ช‰็ชŠ็ช‹็ชŒ็ชŽ็ช็ช็ช“็ช”็ช™็ชš็ช›็ชž็ชก็ชข่ดฐๅ‘็ฝš็ญไผไน้˜€ๆณ•็่—ฉๅธ†็•ช็ฟปๆจŠ็Ÿพ้’’็นๅ‡ก็ƒฆๅ่ฟ”่Œƒ่ดฉ็Šฏ้ฅญๆณ›ๅŠ่Šณๆ–น่‚ชๆˆฟ้˜ฒๅฆจไปฟ่ฎฟ็บบๆ”พ่ฒ้žๅ•ก้ฃž่‚ฅๅŒช่ฏฝๅ ่‚บๅบŸๆฒธ่ดน่Šฌ้…šๅฉๆฐ›ๅˆ†็บทๅŸ็„šๆฑพ็ฒ‰ๅฅ‹ไปฝๅฟฟๆ„ค็ฒชไธฐๅฐๆžซ่œ‚ๅณฐ้”‹้ฃŽ็–ฏ็ƒฝ้€ขๅ†ฏ็ผ่ฎฝๅฅ‰ๅ‡คไฝ›ๅฆๅคซๆ•ท่‚คๅญตๆ‰ถๆ‹‚่พๅน…ๆฐŸ็ฌฆไผไฟ˜ๆœ"], +["b840","็ชฃ็ชค็ชง็ชฉ็ชช็ชซ็ชฎ",4,"็ชด",10,"็ซ€",10,"็ซŒ",9,"็ซ—็ซ˜็ซš็ซ›็ซœ็ซ็ซก็ซข็ซค็ซง",5,"็ซฎ็ซฐ็ซฑ็ซฒ็ซณ"], +["b880","็ซด",4,"็ซป็ซผ็ซพ็ฌ€็ฌ็ฌ‚็ฌ…็ฌ‡็ฌ‰็ฌŒ็ฌ็ฌŽ็ฌ็ฌ’็ฌ“็ฌ–็ฌ—็ฌ˜็ฌš็ฌœ็ฌ็ฌŸ็ฌก็ฌข็ฌฃ็ฌง็ฌฉ็ฌญๆตฎๆถช็ฆ่ขฑๅผ—็”ซๆŠš่พ…ไฟฏ้‡œๆ–ง่„ฏ่…‘ๅบœ่…่ตดๅ‰ฏ่ฆ†่ต‹ๅคๅ‚…ไป˜้˜œ็ˆถ่…น่ดŸๅฏŒ่ฎฃ้™„ๅฆ‡็ผšๅ’ๅ™ถๅ˜Ž่ฏฅๆ”นๆฆ‚้’™็›–ๆบ‰ๅนฒ็”˜ๆ†ๆŸ‘็ซฟ่‚่ตถๆ„Ÿ็ง†ๆ•ข่ตฃๅ†ˆๅˆš้’ข็ผธ่‚›็บฒๅฒ—ๆธฏๆ ็ฏ™็š‹้ซ˜่†็พ”็ณ•ๆž้•็จฟๅ‘Šๅ“ฅๆญŒๆๆˆˆ้ธฝ่ƒณ็–™ๅ‰ฒ้ฉ่‘›ๆ ผ่›ค้˜้š”้“ฌไธชๅ„็ป™ๆ น่ทŸ่€•ๆ›ดๅบš็พน"], +["b940","็ฌฏ็ฌฐ็ฌฒ็ฌด็ฌต็ฌถ็ฌท็ฌน็ฌป็ฌฝ็ฌฟ",5,"็ญ†็ญˆ็ญŠ็ญ็ญŽ็ญ“็ญ•็ญ—็ญ™็ญœ็ญž็ญŸ็ญก็ญฃ",10,"็ญฏ็ญฐ็ญณ็ญด็ญถ็ญธ็ญบ็ญผ็ญฝ็ญฟ็ฎ็ฎ‚็ฎƒ็ฎ„็ฎ†",6,"็ฎŽ็ฎ"], +["b980","็ฎ‘็ฎ’็ฎ“็ฎ–็ฎ˜็ฎ™็ฎš็ฎ›็ฎž็ฎŸ็ฎ ็ฎฃ็ฎค็ฎฅ็ฎฎ็ฎฏ็ฎฐ็ฎฒ็ฎณ็ฎต็ฎถ็ฎท็ฎน",7,"็ฏ‚็ฏƒ็ฏ„ๅŸ‚่€ฟๆข—ๅทฅๆ”ปๅŠŸๆญ้พšไพ›่บฌๅ…ฌๅฎซๅผ“ๅทฉๆฑžๆ‹ฑ่ดกๅ…ฑ้’ฉๅ‹พๆฒŸ่‹Ÿ็‹—ๅžขๆž„่ดญๅคŸ่พœ่‡ๅ’•็ฎไผฐๆฒฝๅญคๅง‘้ผ“ๅค่›Š้ชจ่ฐท่‚กๆ•…้กพๅ›บ้›‡ๅˆฎ็“œๅ‰ๅฏกๆŒ‚่ค‚ไน–ๆ‹ๆ€ชๆฃบๅ…ณๅฎ˜ๅ† ่ง‚็ฎก้ฆ†็ฝๆƒฏ็Œ่ดฏๅ…‰ๅนฟ้€›็‘ฐ่ง„ๅœญ็ก…ๅฝ’้พŸ้—บ่ฝจ้ฌผ่ฏก็™ธๆก‚ๆŸœ่ทช่ดตๅˆฝ่พŠๆปšๆฃ้”…้ƒญๅ›ฝๆžœ่ฃน่ฟ‡ๅ“ˆ"], +["ba40","็ฏ…็ฏˆ็ฏ‰็ฏŠ็ฏ‹็ฏ็ฏŽ็ฏ็ฏ็ฏ’็ฏ”",4,"็ฏ›็ฏœ็ฏž็ฏŸ็ฏ ็ฏข็ฏฃ็ฏค็ฏง็ฏจ็ฏฉ็ฏซ็ฏฌ็ฏญ็ฏฏ็ฏฐ็ฏฒ",4,"็ฏธ็ฏน็ฏบ็ฏป็ฏฝ็ฏฟ",7,"็ฐˆ็ฐ‰็ฐŠ็ฐ็ฐŽ็ฐ",5,"็ฐ—็ฐ˜็ฐ™"], +["ba80","็ฐš",4,"็ฐ ",5,"็ฐจ็ฐฉ็ฐซ",12,"็ฐน",5,"็ฑ‚้ชธๅญฉๆตทๆฐฆไบฅๅฎณ้ช‡้…ฃๆ†จ้‚ฏ้Ÿฉๅซๆถตๅฏ’ๅ‡ฝๅ–Š็ฝ•็ฟฐๆ’ผๆๆ—ฑๆ†พๆ‚็„Šๆฑ—ๆฑ‰ๅคฏๆญ่ˆชๅฃ•ๅšŽ่ฑชๆฏซ้ƒๅฅฝ่€—ๅทๆตฉๅ‘ตๅ–่ท่ๆ ธ็ฆพๅ’Œไฝ•ๅˆ็›’่ฒ‰้˜‚ๆฒณๆถธ่ตซ่ค้นค่ดบๅ˜ฟ้ป‘็—•ๅพˆ็‹ ๆจๅ“ผไบจๆจช่กกๆ’่ฝฐๅ“„็ƒ˜่™น้ธฟๆดชๅฎๅผ˜็บขๅ–‰ไพฏ็ŒดๅผๅŽšๅ€™ๅŽๅ‘ผไนŽๅฟฝ็‘šๅฃถ่‘ซ่ƒก่ด็‹็ณŠๆน–"], +["bb40","็ฑƒ",9,"็ฑŽ",36,"็ฑต",5,"็ฑพ",9], +["bb80","็ฒˆ็ฒŠ",6,"็ฒ“็ฒ”็ฒ–็ฒ™็ฒš็ฒ›็ฒ ็ฒก็ฒฃ็ฒฆ็ฒง็ฒจ็ฒฉ็ฒซ็ฒฌ็ฒญ็ฒฏ็ฒฐ็ฒด",4,"็ฒบ็ฒปๅผง่™Žๅ”ฌๆŠคไบ’ๆฒชๆˆท่Šฑๅ“—ๅŽ็Œพๆป‘็”ปๅˆ’ๅŒ–่ฏๆงๅพŠๆ€€ๆทฎๅๆฌข็Žฏๆก“่ฟ˜็ผ“ๆขๆ‚ฃๅ”ค็—ช่ฑข็„•ๆถฃๅฎฆๅนป่’ๆ…Œ้ป„็ฃบ่—็ฐง็š‡ๅ‡ฐๆƒถ็…Œๆ™ƒๅนŒๆ่ฐŽ็ฐๆŒฅ่พ‰ๅพฝๆข่›”ๅ›žๆฏๆ‚”ๆ…งๅ‰ๆƒ ๆ™ฆ่ดฟ็งฝไผš็ƒฉๆฑ‡่ฎณ่ฏฒ็ป˜่คๆ˜ๅฉš้ญ‚ๆต‘ๆทท่ฑๆดปไผ™็ซ่Žทๆˆ–ๆƒ‘้œ่ดง็ฅธๅ‡ปๅœพๅŸบๆœบ็•ธ็จฝ็งฏ็ฎ•"], +["bc40","็ฒฟ็ณ€็ณ‚็ณƒ็ณ„็ณ†็ณ‰็ณ‹็ณŽ",6,"็ณ˜็ณš็ณ›็ณ็ณž็ณก",6,"็ณฉ",5,"็ณฐ",7,"็ณน็ณบ็ณผ",13,"็ด‹",5], +["bc80","็ด‘",14,"็ดก็ดฃ็ดค็ดฅ็ดฆ็ดจ็ดฉ็ดช็ดฌ็ดญ็ดฎ็ดฐ",6,"่‚Œ้ฅฅ่ฟนๆฟ€่ฎฅ้ธกๅงฌ็ปฉ็ผ‰ๅ‰ๆžๆฃ˜่พ‘็ฑ้›†ๅŠๆ€ฅ็–พๆฑฒๅณๅซ‰็บงๆŒคๅ‡ ่„Šๅทฑ่“ŸๆŠ€ๅ†€ๅญฃไผŽ็ฅญๅ‰‚ๆ‚ธๆตŽๅฏ„ๅฏ‚่ฎก่ฎฐๆ—ขๅฟŒ้™…ๅฆ“็ปง็บชๅ˜‰ๆžทๅคนไฝณๅฎถๅŠ ่š้ขŠ่ดพ็”ฒ้’พๅ‡็จผไปทๆžถ้ฉพๅซๆญผ็›‘ๅšๅฐ–็ฌบ้—ด็…Žๅ…ผ่‚ฉ่‰ฐๅฅธ็ผ„่Œงๆฃ€ๆŸฌ็ขฑ็กทๆ‹ฃๆก็ฎ€ไฟญๅ‰ชๅ‡่ๆง›้‰ด่ทต่ดฑ่ง้”ฎ็ฎญไปถ"], +["bd40","็ดท",54,"็ตฏ",7], +["bd80","็ตธ",32,"ๅฅ่ˆฐๅ‰‘้ฅฏๆธๆบ…ๆถงๅปบๅƒตๅงœๅฐ†ๆต†ๆฑŸ็–†่’‹ๆกจๅฅ–่ฎฒๅŒ ้…ฑ้™่•‰ๆค’็ค็„ฆ่ƒถไบค้ƒŠๆต‡้ช„ๅจ‡ๅšผๆ…้“ฐ็Ÿซไพฅ่„š็‹ก่ง’้ฅบ็ผด็ปžๅ‰ฟๆ•™้…ต่ฝฟ่พƒๅซ็ช–ๆญๆŽฅ็š†็งธ่ก—้˜ถๆˆชๅŠซ่Š‚ๆก”ๆฐๆท็ซ็ซญๆด็ป“่งฃๅงๆˆ’่—‰่Šฅ็•Œๅ€Ÿไป‹็–ฅ่ฏซๅฑŠๅทพ็ญ‹ๆ–ค้‡‘ไปŠๆดฅ่ฅŸ็ดง้”ฆไป…่ฐจ่ฟ›้ณๆ™‹็ฆ่ฟ‘็ƒฌๆตธ"], +["be40","็ถ™",12,"็ถง",6,"็ถฏ",42], +["be80","็ทš",32,"ๅฐฝๅŠฒ่†ๅ…ข่ŒŽ็›ๆ™ถ้ฒธไบฌๆƒŠ็ฒพ็ฒณ็ปไบ•่ญฆๆ™ฏ้ขˆ้™ๅขƒๆ•ฌ้•œๅพ„็—‰้–็ซŸ็ซžๅ‡€็‚ฏ็ช˜ๆช็ฉถ็บ ็Ž–้Ÿญไน…็ธไน้…’ๅŽฉๆ•‘ๆ—ง่‡ผ่ˆ…ๅ’Žๅฐฑ็–š้ž ๆ‹˜็‹™็–ฝๅฑ…้ฉน่Šๅฑ€ๅ’€็Ÿฉไธพๆฒฎ่šๆ‹’ๆฎๅทจๅ…ท่ท่ธž้”ฏไฟฑๅฅๆƒง็‚ฌๅ‰งๆ้นƒๅจŸๅ€ฆ็œทๅท็ปขๆ’…ๆ”ซๆЉๆŽ˜ๅ€”็ˆต่ง‰ๅ†ณ่ฏ€็ปๅ‡่Œ้’งๅ†›ๅ›ๅณป"], +["bf40","็ทป",62], +["bf80","็ธบ็ธผ",4,"็น‚",4,"็นˆ",21,"ไฟŠ็ซฃๆตš้ƒก้ชๅ–€ๅ’–ๅกๅ’ฏๅผ€ๆฉๆฅทๅ‡ฏๆ…จๅˆŠๅ ชๅ‹˜ๅŽ็ ็œ‹ๅบทๆ…ท็ณ ๆ‰›ๆŠ—ไบข็‚•่€ƒๆ‹ท็ƒค้ ๅท่‹›ๆŸฏๆฃต็ฃ•้ข—็ง‘ๅฃณๅ’ณๅฏๆธดๅ…‹ๅˆปๅฎข่ฏพ่‚ฏๅ•ƒๅžฆๆณๅ‘ๅญ็ฉบๆๅญ”ๆŽงๆŠ ๅฃๆ‰ฃๅฏ‡ๆžฏๅ“ญ็ชŸ่‹ฆ้…ทๅบ“่ฃคๅคธๅžฎๆŒŽ่ทจ่ƒฏๅ—็ญทไพฉๅฟซๅฎฝๆฌพๅŒก็ญ็‹‚ๆก†็Ÿฟ็œถๆ—ทๅ†ตไบ็›”ๅฒฟ็ชฅ่‘ตๅฅŽ้ญๅ‚€"], +["c040","็นž",35,"็บƒ",23,"็บœ็บ็บž"], +["c080","็บฎ็บด็บป็บผ็ป–็ปค็ปฌ็ปน็ผŠ็ผ็ผž็ผท็ผน็ผป",6,"็ฝƒ็ฝ†",9,"็ฝ’็ฝ“้ฆˆๆ„งๆบƒๅคๆ˜†ๆ†ๅ›ฐๆ‹ฌๆ‰ฉๅป“้˜”ๅžƒๆ‹‰ๅ–‡่œก่…Š่พฃๅ•ฆ่Žฑๆฅ่ต–่“ๅฉชๆ ๆ‹ฆ็ฏฎ้˜‘ๅ…ฐๆพœ่ฐฐๆฝ่งˆๆ‡’็ผ†็ƒ‚ๆปฅ็…ๆฆ”็‹ผๅปŠ้ƒŽๆœ—ๆตชๆžๅŠณ็‰ข่€ไฝฌๅงฅ้…ช็ƒ™ๆถๅ‹’ไน้›ท้•ญ่•พ็ฃŠ็ดฏๅ„กๅž’ๆ“‚่‚‹็ฑปๆณชๆฃฑๆฅžๅ†ทๅŽ˜ๆขจ็Ё้ปŽ็ฏฑ็‹ธ็ฆปๆผ“็†ๆŽ้‡Œ้ฒค็คผ่މ่”ๅๆ —ไธฝๅމๅŠฑ็ พๅކๅˆฉๅ‚ˆไพ‹ไฟ"], +["c140","็ฝ–็ฝ™็ฝ›็ฝœ็ฝ็ฝž็ฝ ็ฝฃ",4,"็ฝซ็ฝฌ็ฝญ็ฝฏ็ฝฐ็ฝณ็ฝต็ฝถ็ฝท็ฝธ็ฝบ็ฝป็ฝผ็ฝฝ็ฝฟ็พ€็พ‚",7,"็พ‹็พ็พ",4,"็พ•",4,"็พ›็พœ็พ ็พข็พฃ็พฅ็พฆ็พจ",6,"็พฑ"], +["c180","็พณ",4,"็พบ็พป็พพ็ฟ€็ฟ‚็ฟƒ็ฟ„็ฟ†็ฟ‡็ฟˆ็ฟ‰็ฟ‹็ฟ็ฟ",4,"็ฟ–็ฟ—็ฟ™",5,"็ฟข็ฟฃ็—ข็ซ‹็ฒ’ๆฒฅ้šถๅŠ›็’ƒๅ“ฉไฟฉ่”่Žฒ่ฟž้•ฐๅป‰ๆ€œๆถŸๅธ˜ๆ•›่„ธ้“พๆ‹็‚ผ็ปƒ็ฒฎๅ‡‰ๆข็ฒฑ่‰ฏไธค่พ†้‡ๆ™พไบฎ่ฐ…ๆ’ฉ่Šๅƒš็–—็‡Žๅฏฅ่พฝๆฝฆไบ†ๆ’‚้•ฃๅป–ๆ–™ๅˆ—่ฃ‚็ƒˆๅŠฃ็ŒŽ็ณๆž—็ฃท้œ–ไธด้‚ป้ณžๆท‹ๅ‡›่ตๅๆ‹Ž็Žฒ่ฑ้›ถ้พ„้“ƒไผถ็พšๅ‡Œ็ต้™ตๅฒญ้ข†ๅฆไปคๆบœ็‰ๆฆด็กซ้ฆ็•™ๅˆ˜็˜คๆตๆŸณๅ…ญ้พ™่‹ๅ’™็ฌผ็ชฟ"], +["c240","็ฟค็ฟง็ฟจ็ฟช็ฟซ็ฟฌ็ฟญ็ฟฏ็ฟฒ็ฟด",6,"็ฟฝ็ฟพ็ฟฟ่€‚่€‡่€ˆ่€‰่€Š่€Ž่€่€‘่€“่€š่€›่€่€ž่€Ÿ่€ก่€ฃ่€ค่€ซ",5,"่€ฒ่€ด่€น่€บ่€ผ่€พ่€่่„่…่‡่ˆ่‰่Ž่่่‘่“่•่–่—"], +["c280","่™่›",13,"่ซ",5,"่ฒ",11,"้š†ๅž„ๆ‹ข้™‡ๆฅผๅจ„ๆ‚็ฏ“ๆผ้™‹่Šฆๅข้ข…ๅบ็‚‰ๆŽณๅค่™้ฒ้บ“็ขŒ้œฒ่ทฏ่ต‚้นฟๆฝž็ฆ„ๅฝ•้™†ๆˆฎ้ฉดๅ•้“ไพฃๆ—…ๅฑฅๅฑก็ผ•่™‘ๆฐฏๅพ‹็އๆปค็ปฟๅณฆๆŒ›ๅญชๆปฆๅตไนฑๆŽ ็•ฅๆŠก่ฝฎไผฆไป‘ๆฒฆ็บถ่ฎบ่่žบ็ฝ—้€ป้”ฃ็ฎฉ้ชก่ฃธ่ฝๆด›้ช†็ปœๅฆˆ้บป็Ž›็ ่š‚้ฉฌ้ช‚ๅ˜›ๅ—ๅŸ‹ไนฐ้บฆๅ–่ฟˆ่„‰็ž’้ฆ’่›ฎๆปก่”“ๆ›ผๆ…ขๆผซ"], +["c340","่พ่‚่‚‚่‚…่‚ˆ่‚Š่‚",5,"่‚”่‚•่‚—่‚™่‚ž่‚ฃ่‚ฆ่‚ง่‚จ่‚ฌ่‚ฐ่‚ณ่‚ต่‚ถ่‚ธ่‚น่‚ป่ƒ…่ƒ‡",4,"่ƒ",6,"่ƒ˜่ƒŸ่ƒ ่ƒข่ƒฃ่ƒฆ่ƒฎ่ƒต่ƒท่ƒน่ƒป่ƒพ่ƒฟ่„€่„่„ƒ่„„่„…่„‡่„ˆ่„‹"], +["c380","่„Œ่„•่„—่„™่„›่„œ่„่„Ÿ",12,"่„ญ่„ฎ่„ฐ่„ณ่„ด่„ต่„ท่„น",4,"่„ฟ่ฐฉ่Š’่Œซ็›ฒๆฐ“ๅฟ™่Žฝ็Œซ่Œ…้”šๆฏ›็Ÿ›้“†ๅฏ่Œ‚ๅ†’ๅธฝ่ฒŒ่ดธไนˆ็Žซๆžšๆข…้…ถ้œ‰็…คๆฒก็œ‰ๅช’้•ๆฏ็พŽๆ˜งๅฏๅฆนๅชš้—จ้—ทไปฌ่Œ่’™ๆชฌ็›Ÿ้”ฐ็Œ›ๆขฆๅญŸ็œฏ้†š้ก็ณœ่ฟท่ฐœๅผฅ็ฑณ็ง˜่ง…ๆณŒ่œœๅฏ†ๅน‚ๆฃ‰็œ ็ปตๅ†•ๅ…ๅ‹‰ๅจฉ็ผ…้ข่‹—ๆ็ž„่—็ง’ๆธบๅบ™ๅฆ™่”‘็ญๆฐ‘ๆŠฟ็šฟๆ•ๆ‚ฏ้—ฝๆ˜Ž่žŸ้ธฃ้“ญๅๅ‘ฝ่ฐฌๆ‘ธ"], +["c440","่…€",5,"่…‡่…‰่…่…Ž่…่…’่…–่…—่…˜่…›",4,"่…ก่…ข่…ฃ่…ค่…ฆ่…จ่…ช่…ซ่…ฌ่…ฏ่…ฒ่…ณ่…ต่…ถ่…ท่…ธ่†่†ƒ",4,"่†‰่†‹่†Œ่†่†Ž่†่†’",5,"่†™่†š่†ž",4,"่†ค่†ฅ"], +["c480","่†ง่†ฉ่†ซ",7,"่†ด",5,"่†ผ่†ฝ่†พ่†ฟ่‡„่‡…่‡‡่‡ˆ่‡‰่‡‹่‡",6,"ๆ‘น่˜‘ๆจก่†œ็ฃจๆ‘ฉ้ญ”ๆŠนๆœซ่Žซๅขจ้ป˜ๆฒซๆผ ๅฏž้™Œ่ฐ‹็‰ŸๆŸๆ‹‡็‰กไบฉๅง†ๆฏๅข“ๆšฎๅน•ๅ‹Ÿๆ…•ๆœจ็›ฎ็ฆ็‰ง็ฉ†ๆ‹ฟๅ“ชๅ‘้’ ้‚ฃๅจœ็บณๆฐ–ไนƒๅฅถ่€ๅฅˆๅ—็”ท้šพๅ›ŠๆŒ ่„‘ๆผ้—นๆท–ๅ‘ข้ฆๅ†…ๅซฉ่ƒฝๅฆฎ้œ“ๅ€ชๆณฅๅฐผๆ‹Ÿไฝ ๅŒฟ่…ป้€†ๆบบ่”ซๆ‹ˆๅนด็ขพๆ’ตๆปๅฟตๅจ˜้…ฟ้ธŸๅฐฟๆ่‚ๅญฝๅ•ฎ้•Š้•ๆถ…ๆ‚จๆŸ ็‹žๅ‡ๅฎ"], +["c540","่‡”",14,"่‡ค่‡ฅ่‡ฆ่‡จ่‡ฉ่‡ซ่‡ฎ",4,"่‡ต",5,"่‡ฝ่‡ฟ่ˆƒ่ˆ‡",4,"่ˆŽ่ˆ่ˆ‘่ˆ“่ˆ•",5,"่ˆ่ˆ ่ˆค่ˆฅ่ˆฆ่ˆง่ˆฉ่ˆฎ่ˆฒ่ˆบ่ˆผ่ˆฝ่ˆฟ"], +["c580","่‰€่‰่‰‚่‰ƒ่‰…่‰†่‰ˆ่‰Š่‰Œ่‰่‰Ž่‰",7,"่‰™่‰›่‰œ่‰่‰ž่‰ ",7,"่‰ฉๆ‹งๆณž็‰›ๆ‰ญ้’ฎ็บฝ่„“ๆต“ๅ†œๅผ„ๅฅดๅŠชๆ€’ๅฅณๆš–่™็–ŸๆŒชๆ‡ฆ็ณฏ่ฏบๅ“ฆๆฌง้ธฅๆฎด่—•ๅ‘•ๅถๆฒคๅ•ช่ถด็ˆฌๅธ•ๆ€•็ถๆ‹ๆŽ’็‰Œๅพ˜ๆนƒๆดพๆ”€ๆฝ˜็›˜็ฃ็›ผ็•”ๅˆคๅ›ไน“ๅบžๆ—่€ช่ƒ–ๆŠ›ๅ’†ๅˆจ็‚ฎ่ข่ท‘ๆณกๅ‘ธ่ƒšๅŸน่ฃด่ต”้™ช้…ไฝฉๆฒ›ๅ–ท็›†็ ฐๆŠจ็ƒนๆพŽๅฝญ่“ฌๆฃš็กผ็ฏท่†จๆœ‹้นๆง็ขฐๅฏ็ ’้œนๆ‰นๆŠซๅŠˆ็ตๆฏ—"], +["c640","่‰ช่‰ซ่‰ฌ่‰ญ่‰ฑ่‰ต่‰ถ่‰ท่‰ธ่‰ป่‰ผ่Š€่Ё่Šƒ่Š…่І่Ї่Љ่ŠŒ่А่Š“่Š”่Š•่Š–่Šš่Š›่Šž่Š ่Šข่Šฃ่Šง่Šฒ่Šต่Šถ่Šบ่Šป่Šผ่Šฟ่‹€่‹‚่‹ƒ่‹…่‹†่‹‰่‹่‹–่‹™่‹š่‹่‹ข่‹ง่‹จ่‹ฉ่‹ช่‹ฌ่‹ญ่‹ฎ่‹ฐ่‹ฒ่‹ณ่‹ต่‹ถ่‹ธ"], +["c680","่‹บ่‹ผ",4,"่ŒŠ่Œ‹่Œ่Œ่Œ’่Œ“่Œ–่Œ˜่Œ™่Œ",9,"่Œฉ่Œช่Œฎ่Œฐ่Œฒ่Œท่Œป่Œฝๅ•ค่„พ็–ฒ็šฎๅŒน็—žๅƒปๅฑ่ญฌ็ฏ‡ๅ็‰‡้ช—้ฃ˜ๆผ‚็“ข็ฅจๆ’‡็žฅๆ‹ผ้ข‘่ดซๅ“่˜ไน’ๅช่‹น่ๅนณๅ‡ญ็“ถ่ฏ„ๅฑๅกๆณผ้ข‡ๅฉ†็ ด้ญ„่ฟซ็ฒ•ๅ‰–ๆ‰‘้“บไป†่ކ่‘ก่ฉ่’ฒๅŸ”ๆœดๅœƒๆ™ฎๆตฆ่ฐฑๆ›็€‘ๆœŸๆฌบๆ –ๆˆšๅฆปไธƒๅ‡„ๆผ†ๆŸ’ๆฒๅ…ถๆฃ‹ๅฅ‡ๆญง็•ฆๅดŽ่„้ฝๆ——็ฅˆ็ฅ้ช‘่ตทๅฒ‚ไนžไผๅฏๅฅ‘็ Œๅ™จๆฐ”่ฟ„ๅผƒๆฑฝๆณฃ่ฎซๆސ"], +["c740","่Œพ่Œฟ่่‚่„่…่ˆ่Š",4,"่“่•",4,"่่ข่ฐ",6,"่น่บ่พ",6,"่އ่Žˆ่ŽŠ่Ž‹่ŽŒ่Ž่Ž่ސ่Ž‘่Ž”่Ž•่Ž–่Ž—่Ž™่Žš่Ž่ŽŸ่Žก",6,"่Žฌ่Žญ่Žฎ"], +["c780","่Žฏ่Žต่Žป่Žพ่Žฟ่‚่ƒ่„่†่ˆ่‰่‹่่Ž่่‘่’่“่•่—่™่š่›่ž่ข่ฃ่ค่ฆ่ง่จ่ซ่ฌ่ญๆฐๆดฝ็‰ตๆ‰ฆ้’Ž้“…ๅƒ่ฟ็ญพไปŸ่ฐฆไนพ้ป”้’ฑ้’ณๅ‰ๆฝœ้ฃๆต…่ฐดๅ ‘ๅตŒๆฌ ๆญ‰ๆžชๅ‘›่…”็พŒๅข™่”ทๅผบๆŠขๆฉ‡้”นๆ•ฒๆ‚„ๆกฅ็žงไน”ไพจๅทง้ž˜ๆ’ฌ็ฟ˜ๅณญไฟ็ชๅˆ‡่Œ„ไธ”ๆ€ฏ็ชƒ้’ฆไพตไบฒ็งฆ็ดๅ‹ค่Šนๆ“’็ฆฝๅฏๆฒ้’่ฝปๆฐขๅ€พๅฟๆธ…ๆ“Žๆ™ดๆฐฐๆƒ…้กท่ฏทๅบ†็ผ็ฉท็ง‹ไธ˜้‚ฑ็ƒๆฑ‚ๅ›š้…‹ๆณ…่ถ‹ๅŒบ่›†ๆ›ฒ่บฏๅฑˆ้ฉฑๆธ "], +["c840","่ฎ่ฏ่ณ",4,"่บ่ป่ผ่พ่ฟ่€่‚่…่‡่ˆ่‰่Š่่’",5,"่™่š่›่ž",5,"่ฉ",7,"่ฒ",5,"่น่บ่ป่พ",7,"่‘‡่‘ˆ่‘‰"], +["c880","่‘Š",6,"่‘’",4,"่‘˜่‘่‘ž่‘Ÿ่‘ ่‘ข่‘ค",4,"่‘ช่‘ฎ่‘ฏ่‘ฐ่‘ฒ่‘ด่‘ท่‘น่‘ป่‘ผๅ–ๅจถ้พ‹่ถฃๅŽปๅœˆ้ขงๆƒ้†›ๆณ‰ๅ…จ็—Šๆ‹ณ็ŠฌๅˆธๅŠ็ผบ็‚”็˜ธๅด้นŠๆฆท็กฎ้›€่ฃ™็พค็„ถ็‡ƒๅ†‰ๆŸ“็“คๅฃคๆ”˜ๅšท่ฎฉ้ฅถๆ‰ฐ็ป•ๆƒน็ƒญๅฃฌไปไบบๅฟ้Ÿงไปป่ฎคๅˆƒๅฆŠ็บซๆ‰”ไปๆ—ฅๆˆŽ่Œธ่“‰่ฃ่ž็†”ๆบถๅฎน็ป’ๅ†—ๆ‰ๆŸ”่‚‰่Œน่ •ๅ„’ๅญบๅฆ‚่พฑไนณๆฑๅ…ฅ่คฅ่ฝฏ้˜ฎ่•Š็‘ž้”้—ฐๆถฆ่‹ฅๅผฑๆ’’ๆด’่จ่…ฎ้ณƒๅกž่ต›ไธ‰ๅ"], +["c940","่‘ฝ",4,"่’ƒ่’„่’…่’†่’Š่’่’",7,"่’˜่’š่’›่’่’ž่’Ÿ่’ ่’ข",12,"่’ฐ่’ฑ่’ณ่’ต่’ถ่’ท่’ป่’ผ่’พ่“€่“‚่“ƒ่“…่“†่“‡่“ˆ่“‹่“Œ่“Ž่“่“’่“”่“•่“—"], +["c980","่“˜",4,"่“ž่“ก่“ข่“ค่“ง",4,"่“ญ่“ฎ่“ฏ่“ฑ",10,"่“ฝ่“พ่”€่”่”‚ไผžๆ•ฃๆก‘ๅ—“ไธงๆ”้ชšๆ‰ซๅซ‚็‘Ÿ่‰ฒๆถฉๆฃฎๅƒง่ŽŽ็ ‚ๆ€ๅˆนๆฒ™็บฑๅ‚ปๅ•ฅ็…ž็ญ›ๆ™’็Š่‹ซๆ‰ๅฑฑๅˆ ็…ฝ่กซ้—ช้™•ๆ“…่ตก่†ณๅ–„ๆฑ•ๆ‰‡็ผฎๅข’ไผคๅ•†่ตๆ™ŒไธŠๅฐš่ฃณๆขขๆŽ็จ็ƒง่Šๅ‹บ้Ÿถๅฐ‘ๅ“จ้‚ต็ปๅฅข่ตŠ่›‡่ˆŒ่ˆ่ตฆๆ‘„ๅฐ„ๆ…‘ๆถ‰็คพ่ฎพ็ ท็”ณๅ‘ปไผธ่บซๆทฑๅจ ็ป…็ฅžๆฒˆๅฎกๅฉถ็”š่‚พๆ…Žๆธ—ๅฃฐ็”Ÿ็”ฅ็‰ฒๅ‡็ปณ"], +["ca40","่”ƒ",8,"่”่”Ž่”่”่”’่””่”•่”–่”˜่”™่”›่”œ่”่”ž่” ่”ข",8,"่”ญ",9,"่”พ",4,"่•„่•…่•†่•‡่•‹",10], +["ca80","่•—่•˜่•š่•›่•œ่•่•Ÿ",4,"่•ฅ่•ฆ่•ง่•ฉ",8,"่•ณ่•ต่•ถ่•ท่•ธ่•ผ่•ฝ่•ฟ่–€่–็œ็››ๅ‰ฉ่ƒœๅœฃๅธˆๅคฑ็‹ฎๆ–ฝๆนฟ่ฏ—ๅฐธ่™ฑๅ็Ÿณๆ‹พๆ—ถไป€้ฃŸ่š€ๅฎž่ฏ†ๅฒ็ŸขไฝฟๅฑŽ้ฉถๅง‹ๅผ็คบๅฃซไธ–ๆŸฟไบ‹ๆ‹ญ่ช“้€ๅŠฟๆ˜ฏๅ—œๅ™ฌ้€‚ไป•ไพ้‡Š้ฅฐๆฐๅธ‚ๆƒๅฎค่ง†่ฏ•ๆ”ถๆ‰‹้ฆ–ๅฎˆๅฏฟๆŽˆๅ”ฎๅ—็˜ฆๅ…ฝ่”ฌๆžขๆขณๆฎŠๆŠ’่พ“ๅ”่ˆ’ๆท‘็–ไนฆ่ตŽๅญฐ็†Ÿ่–ฏๆš‘ๆ›™็ฝฒ่œ€้ป้ผ ๅฑžๆœฏ่ฟฐๆ ‘ๆŸๆˆ็ซ–ๅข…ๅบถๆ•ฐๆผฑ"], +["cb40","่–‚่–ƒ่–†่–ˆ",6,"่–",10,"่–",6,"่–ฅ่–ฆ่–ง่–ฉ่–ซ่–ฌ่–ญ่–ฑ",5,"่–ธ่–บ",6,"่—‚",6,"่—Š",4,"่—‘่—’"], +["cb80","่—”่—–",5,"่—",6,"่—ฅ่—ฆ่—ง่—จ่—ช",14,"ๆ•ๅˆท่€ๆ‘”่กฐ็”ฉๅธ…ๆ “ๆ‹ด้œœๅŒ็ˆฝ่ฐๆฐด็ก็จŽๅฎ็žฌ้กบ่ˆœ่ฏด็ก•ๆœ”็ƒๆ–ฏๆ’•ๅ˜ถๆ€็งๅธไธๆญป่‚†ๅฏบๅ—ฃๅ››ไผบไผผ้ฅฒๅทณๆพ่€ธๆ€‚้ข‚้€ๅฎ‹่ฎผ่ฏตๆœ่‰˜ๆ“žๅ—ฝ่‹้…ฅไฟ—็ด ้€Ÿ็ฒŸๅƒณๅก‘ๆบฏๅฎฟ่ฏ‰่‚ƒ้…ธ่’œ็ฎ—่™ฝ้š‹้š็ปฅ้ซ“็ขŽๅฒ็ฉ—้‚้šง็ฅŸๅญ™ๆŸ็ฌ‹่“‘ๆขญๅ”†็ผฉ็็ดข้”ๆ‰€ๅกŒไป–ๅฎƒๅฅนๅก”"], +["cc40","่—น่—บ่—ผ่—ฝ่—พ่˜€",4,"่˜†",10,"่˜’่˜“่˜”่˜•่˜—",15,"่˜จ่˜ช",13,"่˜น่˜บ่˜ป่˜ฝ่˜พ่˜ฟ่™€"], +["cc80","่™",11,"่™’่™“่™•",4,"่™›่™œ่™่™Ÿ่™ ่™ก่™ฃ",7,"็ญๆŒž่น‹่ธ่ƒŽ่‹”ๆŠฌๅฐๆณฐ้…žๅคชๆ€ๆฑฐๅๆ‘Š่ดช็˜ซๆปฉๅ›ๆช€็—ฐๆฝญ่ฐญ่ฐˆๅฆๆฏฏ่ข’็ขณๆŽขๅน็‚ญๆฑคๅก˜ๆชๅ ‚ๆฃ ่†›ๅ”็ณ–ๅ€˜่บบๆทŒ่ถŸ็ƒซๆŽๆถ›ๆป”็ปฆ่„ๆกƒ้€ƒๆท˜้™ถ่ฎจๅฅ—็‰น่—ค่…พ็–ผ่ชŠๆขฏๅ‰”่ธข้”‘ๆ้ข˜่น„ๅ•ผไฝ“ๆ›ฟๅšๆƒ•ๆถ•ๅ‰ƒๅฑ‰ๅคฉๆทปๅกซ็”ฐ็”œๆฌ่ˆ”่…†ๆŒ‘ๆก่ฟข็œบ่ทณ่ดด้“ๅธ–ๅŽ…ๅฌ็ƒƒ"], +["cd40","่™ญ่™ฏ่™ฐ่™ฒ",6,"่šƒ",6,"่šŽ",4,"่š”่š–",5,"่šž",4,"่šฅ่šฆ่šซ่šญ่šฎ่šฒ่šณ่šท่šธ่šน่šป",4,"่›่›‚่›ƒ่›…่›ˆ่›Œ่›่›’่›“่›•่›–่›—่›š่›œ"], +["cd80","่›่› ่›ก่›ข่›ฃ่›ฅ่›ฆ่›ง่›จ่›ช่›ซ่›ฌ่›ฏ่›ต่›ถ่›ท่›บ่›ป่›ผ่›ฝ่›ฟ่œ่œ„่œ…่œ†่œ‹่œŒ่œŽ่œ่œ่œ‘่œ”่œ–ๆฑ€ๅปทๅœไบญๅบญๆŒบ่‰‡้€šๆก้…ฎ็žณๅŒ้“œๅฝค็ซฅๆกถๆ…็ญ’็ปŸ็—›ๅทๆŠ•ๅคด้€ๅ‡ธ็งƒ็ชๅ›พๅพ’้€”ๆถ‚ๅฑ ๅœŸๅๅ…”ๆนๅ›ขๆŽจ้ข“่…ฟ่œ•่คช้€€ๅžๅฑฏ่‡€ๆ‹–ๆ‰˜่„ฑ้ธต้™€้ฉฎ้ฉผๆคญๅฆฅๆ‹“ๅ”พๆŒ–ๅ“‡่›™ๆดผๅจƒ็“ฆ่ขœๆญชๅค–่ฑŒๅผฏๆนพ็Žฉ้กฝไธธ็ƒทๅฎŒ็ข—ๆŒฝๆ™š็š–ๆƒ‹ๅฎ›ๅฉ‰ไธ‡่…•ๆฑช็Ž‹ไบกๆž‰็ฝ‘ๅพ€ๆ—บๆœ›ๅฟ˜ๅฆ„ๅจ"], +["ce40","่œ™่œ›่œ่œŸ่œ ่œค่œฆ่œง่œจ่œช่œซ่œฌ่œญ่œฏ่œฐ่œฒ่œณ่œต่œถ่œธ่œน่œบ่œผ่œฝ่€",6,"่Š่‹่่่่‘่’่”่•่–่˜่š",5,"่ก่ข่ฆ",7,"่ฏ่ฑ่ฒ่ณ่ต"], +["ce80","่ท่ธ่น่บ่ฟ่ž€่ž่ž„่ž†่ž‡่ž‰่žŠ่žŒ่žŽ",4,"่ž”่ž•่ž–่ž˜",6,"่ž ",4,"ๅทๅพฎๅฑ้Ÿฆ่ฟๆก…ๅ›ดๅ”ฏๆƒŸไธบๆฝ็ปด่‹‡่Žๅง”ไผŸไผชๅฐพ็บฌๆœช่”šๅ‘ณ็•่ƒƒๅ–‚้ญไฝๆธญ่ฐ“ๅฐ‰ๆ…ฐๅซ็˜Ÿๆธฉ่šŠๆ–‡้—ป็บนๅป็จณ็ดŠ้—ฎๅ—ก็ฟ็“ฎๆŒ่œ—ๆถก็ชๆˆ‘ๆ–กๅงๆกๆฒƒๅทซๅ‘œ้’จไนŒๆฑก่ฏฌๅฑ‹ๆ— ่Šœๆขงๅพๅดๆฏ‹ๆญฆไบ”ๆ‚ๅˆ่ˆžไผไพฎๅžๆˆŠ้›พๆ™ค็‰ฉๅ‹ฟๅŠกๆ‚Ÿ่ฏฏๆ˜”็†™ๆž่ฅฟ็ก’็Ÿฝๆ™ฐๅ˜ปๅธ้”ก็‰บ"], +["cf40","่žฅ่žฆ่žง่žฉ่žช่žฎ่žฐ่žฑ่žฒ่žด่žถ่žท่žธ่žน่žป่žผ่žพ่žฟ่Ÿ",4,"่Ÿ‡่Ÿˆ่Ÿ‰่ŸŒ",4,"่Ÿ”",6,"่Ÿœ่Ÿ่Ÿž่ŸŸ่Ÿก่Ÿข่Ÿฃ่Ÿค่Ÿฆ่Ÿง่Ÿจ่Ÿฉ่Ÿซ่Ÿฌ่Ÿญ่Ÿฏ",9], +["cf80","่Ÿบ่Ÿป่Ÿผ่Ÿฝ่Ÿฟ่ €่ ่ ‚่ „",5,"่ ‹",7,"่ ”่ —่ ˜่ ™่ š่ œ",4,"่ ฃ็จ€ๆฏๅธŒๆ‚‰่†ๅค•ๆƒœ็†„็ƒฏๆบชๆฑ็Š€ๆช„่ขญๅธญไน ๅชณๅ–œ้“ฃๆด—็ณป้š™ๆˆ็ป†็žŽ่™พๅŒฃ้œž่พ–ๆš‡ๅณกไพ ็‹ญไธ‹ๅŽฆๅคๅ“ๆŽ€้”จๅ…ˆไป™้ฒœ็บคๅ’ธ่ดค่ก”่ˆท้—ฒๆถŽๅผฆๅซŒๆ˜พ้™ฉ็Žฐ็ŒฎๅŽฟ่…บ้ฆ…็พกๅฎช้™ท้™็บฟ็›ธๅŽข้•ถ้ฆ™็ฎฑ่ฅ„ๆน˜ไนก็ฟ”็ฅฅ่ฏฆๆƒณๅ“ไบซ้กนๅททๆฉกๅƒๅ‘่ฑก่ง็ก้œ„ๅ‰Šๅ“ฎๅšฃ้”€ๆถˆๅฎตๆท†ๆ™“"], +["d040","่ ค",13,"่ ณ",5,"่ บ่ ป่ ฝ่ พ่ ฟ่ก่ก‚่กƒ่ก†",5,"่กŽ",5,"่ก•่ก–่ก˜่กš",6,"่กฆ่กง่กช่กญ่กฏ่กฑ่กณ่กด่กต่กถ่กธ่กน่กบ"], +["d080","่กป่กผ่ข€่ขƒ่ข†่ข‡่ข‰่ขŠ่ขŒ่ขŽ่ข่ข่ข‘่ข“่ข”่ข•่ข—",4,"่ข",4,"่ขฃ่ขฅ",5,"ๅฐๅญๆ ก่‚–ๅ•ธ็ฌ‘ๆ•ˆๆฅ”ไบ›ๆญ‡่Ž้ž‹ๅๆŒŸๆบ้‚ชๆ–œ่ƒ่ฐๅ†™ๆขฐๅธ่Ÿนๆ‡ˆๆณ„ๆณป่ฐขๅฑ‘่–ช่Šฏ้”Œๆฌฃ่พ›ๆ–ฐๅฟปๅฟƒไฟก่ก…ๆ˜Ÿ่…ฅ็Œฉๆƒบๅ…ดๅˆ‘ๅž‹ๅฝข้‚ข่กŒ้†’ๅนธๆๆ€งๅง“ๅ…„ๅ‡ถ่ƒธๅŒˆๆฑน้›„็†Šไผ‘ไฟฎ็พžๆœฝๅ—…้”ˆ็ง€่ข–็ปฃๅขŸๆˆŒ้œ€่™šๅ˜˜้กปๅพ่ฎธ่“„้…—ๅ™ๆ—ญๅบ็•œๆค็ตฎๅฉฟ็ปช็ปญ่ฝฉๅ–งๅฎฃๆ‚ฌๆ—‹็Ž„"], +["d140","่ขฌ่ขฎ่ขฏ่ขฐ่ขฒ",4,"่ขธ่ขน่ขบ่ขป่ขฝ่ขพ่ขฟ่ฃ€่ฃƒ่ฃ„่ฃ‡่ฃˆ่ฃŠ่ฃ‹่ฃŒ่ฃ่ฃ่ฃ่ฃ‘่ฃ“่ฃ–่ฃ—่ฃš",4,"่ฃ ่ฃก่ฃฆ่ฃง่ฃฉ",6,"่ฃฒ่ฃต่ฃถ่ฃท่ฃบ่ฃป่ฃฝ่ฃฟ่ค€่ค่คƒ",5], +["d180","่ค‰่ค‹",4,"่ค‘่ค”",4,"่คœ",4,"่คข่คฃ่คค่คฆ่คง่คจ่คฉ่คฌ่คญ่คฎ่คฏ่คฑ่คฒ่คณ่คต่คท้€‰็™ฃ็œฉ็ปš้ด่–›ๅญฆ็ฉด้›ช่ก€ๅ‹‹็†ๅพชๆ—ฌ่ฏขๅฏป้ฉฏๅทกๆฎ‰ๆฑ›่ฎญ่ฎฏ้€Š่ฟ…ๅŽ‹ๆŠผ้ธฆ้ธญๅ‘€ไธซ่Šฝ็‰™่šœๅด–่ก™ๆถฏ้›…ๅ“‘ไบš่ฎถ็„‰ๅ’ฝ้˜‰็ƒŸๆทน็›ไธฅ็ ”่œ’ๅฒฉๅปถ่จ€้ขœ้˜Ž็‚Žๆฒฟๅฅ„ๆŽฉ็œผ่กๆผ”่‰ณๅ ฐ็‡•ๅŽŒ็ š้›ๅ”ๅฝฆ็„ฐๅฎด่ฐš้ชŒๆฎƒๅคฎ้ธฏ็งงๆจๆ‰ฌไฝฏ็–ก็พŠๆด‹้˜ณๆฐงไปฐ็—’ๅ…ปๆ ทๆผพ้‚€่…ฐๅฆ–็‘ถ"], +["d240","่คธ",8,"่ฅ‚่ฅƒ่ฅ…",24,"่ฅ ",5,"่ฅง",19,"่ฅผ"], +["d280","่ฅฝ่ฅพ่ฆ€่ฆ‚่ฆ„่ฆ…่ฆ‡",26,"ๆ‘‡ๅฐง้ฅ็ช‘่ฐฃๅงšๅ’ฌ่ˆ€่ฏ่ฆ่€€ๆคฐๅ™Ž่€ถ็ˆท้‡Žๅ†ถไนŸ้กตๆŽ–ไธšๅถๆ›ณ่…‹ๅคœๆถฒไธ€ๅฃนๅŒปๆ–้“ฑไพไผŠ่กฃ้ขๅคท้—็งปไปช่ƒฐ็–‘ๆฒ‚ๅฎœๅงจๅฝๆค…่šๅ€šๅทฒไน™็Ÿฃไปฅ่‰บๆŠ‘ๆ˜“้‚‘ๅฑนไบฟๅฝน่‡†้€ธ่‚„็–ซไบฆ่ฃ”ๆ„ๆฏ…ๅฟ†ไน‰็›Šๆบข่ฏฃ่ฎฎ่ฐŠ่ฏ‘ๅผ‚็ฟผ็ฟŒ็ปŽ่Œต่ซๅ› ๆฎท้Ÿณ้˜ดๅงปๅŸ้“ถๆทซๅฏ…้ฅฎๅฐนๅผ•้š"], +["d340","่ฆข",30,"่งƒ่ง่ง“่ง”่ง•่ง—่ง˜่ง™่ง›่ง่งŸ่ง ่งก่งข่งค่งง่งจ่งฉ่งช่งฌ่งญ่งฎ่งฐ่งฑ่งฒ่งด",6], +["d380","่งป",4,"่จ",5,"่จˆ",21,"ๅฐ่‹ฑๆจฑๅฉด้นฐๅบ”็ผจ่Žน่ค่ฅ่ง่‡่ฟŽ่ตข็›ˆๅฝฑ้ข–็กฌๆ˜ ๅ“Ÿๆ‹ฅไฝฃ่‡ƒ็—ˆๅบธ้›่ธŠ่›นๅ’ๆณณๆถŒๆฐธๆฟๅ‹‡็”จๅนฝไผ˜ๆ‚ ๅฟงๅฐค็”ฑ้‚ฎ้“€็Šนๆฒนๆธธ้…‰ๆœ‰ๅ‹ๅณไฝ‘้‡‰่ฏฑๅˆๅนผ่ฟ‚ๆทคไบŽ็›‚ๆฆ†่™žๆ„š่ˆ†ไฝ™ไฟž้€พ้ฑผๆ„‰ๆธๆธ”้š…ไบˆๅจฑ้›จไธŽๅฑฟ็ฆนๅฎ‡่ฏญ็พฝ็މๅŸŸ่Š‹้ƒๅ้‡ๅ–ปๅณชๅพกๆ„ˆๆฌฒ็‹ฑ่‚ฒ่ช‰"], +["d440","่จž",31,"่จฟ",8,"่ฉ‰",21], +["d480","่ฉŸ",25,"่ฉบ",6,"ๆตดๅฏ“่ฃ•้ข„่ฑซ้ฉญ้ธณๆธŠๅ†คๅ…ƒๅžฃ่ขๅŽŸๆด่พ•ๅ›ญๅ‘˜ๅœ†็Œฟๆบ็ผ˜่ฟœ่‹‘ๆ„ฟๆ€จ้™ขๆ›ฐ็บฆ่ถŠ่ทƒ้’ฅๅฒณ็ฒคๆœˆๆ‚ฆ้˜…่€˜ไบ‘้ƒงๅŒ€้™จๅ…่ฟ่•ด้…ๆ™•้Ÿตๅญ•ๅŒ็ ธๆ‚ๆ ฝๅ“‰็พๅฎฐ่ฝฝๅ†ๅœจๅ’ฑๆ”’ๆš‚่ตž่ตƒ่„่‘ฌ้ญ็ณŸๅ‡ฟ่—ปๆžฃๆ—ฉๆพก่šค่บๅ™ช้€ ็š‚็ถ็‡ฅ่ดฃๆ‹ฉๅˆ™ๆณฝ่ดผๆ€Žๅขžๆ†Žๆ›พ่ต ๆ‰Žๅ–ณๆธฃๆœญ่ฝง"], +["d540","่ช",7,"่ช‹",7,"่ช”",46], +["d580","่ซƒ",32,"้“ก้—ธ็œจๆ …ๆฆจๅ’‹ไน็‚ธ่ฏˆๆ‘˜ๆ–‹ๅฎ…็ช„ๅ€บๅฏจ็žปๆฏก่ฉน็ฒ˜ๆฒพ็›ๆ–ฉ่พ—ๅดญๅฑ•่˜ธๆ ˆๅ ๆˆ˜็ซ™ๆน›็ปฝๆจŸ็ซ ๅฝฐๆผณๅผ ๆŽŒๆถจๆ–ไธˆๅธ่ดฆไป—่ƒ€็˜ด้šœๆ‹›ๆ˜ญๆ‰พๆฒผ่ตต็…ง็ฝฉๅ…†่‚‡ๅฌ้ฎๆŠ˜ๅ“ฒ่›ฐ่พ™่€…้”—่”—่ฟ™ๆต™็ๆ–Ÿ็œŸ็”„็ ง่‡ป่ดž้’ˆไพฆๆž•็–น่ฏŠ้œ‡ๆŒฏ้•‡้˜ต่’ธๆŒฃ็ๅพ็‹ฐไบ‰ๆ€”ๆ•ดๆ‹ฏๆญฃๆ”ฟ"], +["d640","่ซค",34,"่ฌˆ",27], +["d680","่ฌค่ฌฅ่ฌง",30,"ๅธง็—‡้ƒ‘่ฏ่Šๆžๆ”ฏๅฑ่œ˜็Ÿฅ่‚ข่„‚ๆฑไน‹็ป‡่Œ็›ดๆคๆฎ–ๆ‰งๅ€ผไพ„ๅ€ๆŒ‡ๆญข่ถพๅชๆ—จ็บธๅฟ—ๆŒšๆŽท่‡ณ่‡ด็ฝฎๅธœๅณ™ๅˆถๆ™บ็งฉ็จš่ดจ็‚™็—”ๆปžๆฒป็ช’ไธญ็›…ๅฟ ้’Ÿ่กท็ปˆ็ง่‚ฟ้‡ไปฒไผ—่ˆŸๅ‘จๅทžๆดฒ่ฏŒ็ฒฅ่ฝด่‚˜ๅธšๅ’’็šฑๅฎ™ๆ˜ผ้ชค็ ๆ ช่››ๆœฑ็Œช่ฏธ่ฏ›้€็ซน็ƒ›็…ฎๆ‹„็žฉๅ˜ฑไธป่‘—ๆŸฑๅŠฉ่›€่ดฎ้“ธ็ญ‘"], +["d740","่ญ†",31,"่ญง",4,"่ญญ",25], +["d780","่ฎ‡",24,"่ฎฌ่ฎฑ่ฎป่ฏ‡่ฏ่ฏช่ฐ‰่ฐžไฝๆณจ็ฅ้ฉปๆŠ“็ˆชๆ‹ฝไธ“็ –่ฝฌๆ’ฐ่ตš็ฏ†ๆกฉๅบ„่ฃ…ๅฆ†ๆ’žๅฃฎ็ŠถๆคŽ้”ฅ่ฟฝ่ต˜ๅ ็ผ€่ฐ†ๅ‡†ๆ‰ๆ‹™ๅ“ๆกŒ็ข่Œ้…Œๅ•„็€็ผๆตŠๅ…นๅ’จ่ต„ๅงฟๆป‹ๆท„ๅญœ็ดซไป”็ฑฝๆป“ๅญ่‡ชๆธๅญ—้ฌƒๆฃ•่ธชๅฎ—็ปผๆ€ป็บต้‚น่ตฐๅฅๆ็งŸ่ถณๅ’ๆ—็ฅ–่ฏ…้˜ป็ป„้’ป็บ‚ๅ˜ด้†‰ๆœ€็ฝชๅฐŠ้ตๆ˜จๅทฆไฝๆŸžๅšไฝœๅๅบง"], +["d840","่ฐธ",8,"่ฑ‚่ฑƒ่ฑ„่ฑ…่ฑˆ่ฑŠ่ฑ‹่ฑ",7,"่ฑ–่ฑ—่ฑ˜่ฑ™่ฑ›",5,"่ฑฃ",6,"่ฑฌ",6,"่ฑด่ฑต่ฑถ่ฑท่ฑป",6,"่ฒƒ่ฒ„่ฒ†่ฒ‡"], +["d880","่ฒˆ่ฒ‹่ฒ",6,"่ฒ•่ฒ–่ฒ—่ฒ™",20,"ไบไธŒๅ…€ไธๅปฟๅ…ไธ•ไบ˜ไธž้ฌฒๅญฌๅ™ฉไธจ็ฆบไธฟๅŒ•ไน‡ๅคญ็ˆปๅฎๆฐๅ›Ÿ่ƒค้ฆ—ๆฏ“็พ้ผ—ไธถไบŸ้ผไนœไนฉไบ“่Šˆๅญ›ๅ•ฌๅ˜ไป„ๅŽๅŽๅŽฃๅŽฅๅŽฎ้ฅ่ตๅŒšๅตๅŒฆๅŒฎๅŒพ่ตœๅฆๅฃๅˆ‚ๅˆˆๅˆŽๅˆญๅˆณๅˆฟๅ‰€ๅ‰Œๅ‰žๅ‰กๅ‰œ่’ฏๅ‰ฝๅŠ‚ๅЁๅАๅŠ“ๅ†‚็ฝ”ไบปไปƒไป‰ไป‚ไปจไปกไปซไปžไผ›ไปณไผขไฝคไปตไผฅไผงไผ‰ไผซไฝžไฝงๆ”ธไฝšไฝ"], +["d940","่ฒฎ",62], +["d980","่ณญ",32,"ไฝŸไฝ—ไผฒไผฝไฝถไฝดไพ‘ไพ‰ไพƒไพไฝพไฝปไพชไฝผไพฌไพ”ไฟฆไฟจไฟชไฟ…ไฟšไฟฃไฟœไฟ‘ไฟŸไฟธๅ€ฉๅŒไฟณๅ€ฌๅ€ๅ€ฎๅ€ญไฟพๅ€œๅ€Œๅ€ฅๅ€จๅพๅƒๅ•ๅˆๅŽๅฌๅปๅ‚ฅๅ‚งๅ‚ฉๅ‚บๅƒ–ๅ„†ๅƒญๅƒฌๅƒฆๅƒฎๅ„‡ๅ„‹ไปๆฐฝไฝ˜ไฝฅไฟŽ้พ ๆฑ†็ฑดๅ…ฎๅทฝ้ป‰้ฆ˜ๅ†ๅค”ๅ‹นๅŒ่จ‡ๅŒๅ‡ซๅค™ๅ…•ไบ ๅ…–ไบณ่กฎ่ขคไบต่„”่ฃ’็ฆ€ๅฌด่ ƒ็พธๅ†ซๅ†ฑๅ†ฝๅ†ผ"], +["da40","่ดŽ",14,"่ด ่ต‘่ต’่ต—่ตŸ่ตฅ่ตจ่ตฉ่ตช่ตฌ่ตฎ่ตฏ่ตฑ่ตฒ่ตธ",8,"่ถ‚่ถƒ่ถ†่ถ‡่ถˆ่ถ‰่ถŒ",4,"่ถ’่ถ“่ถ•",9,"่ถ ่ถก"], +["da80","่ถข่ถค",12,"่ถฒ่ถถ่ถท่ถน่ถป่ถฝ่ท€่ท่ท‚่ท…่ท‡่ทˆ่ท‰่ทŠ่ท่ท่ท’่ท“่ท”ๅ‡‡ๅ†–ๅ†ขๅ†ฅ่ฎ ่ฎฆ่ฎง่ฎช่ฎด่ฎต่ฎท่ฏ‚่ฏƒ่ฏ‹่ฏ่ฏŽ่ฏ’่ฏ“่ฏ”่ฏ–่ฏ˜่ฏ™่ฏœ่ฏŸ่ฏ ่ฏค่ฏจ่ฏฉ่ฏฎ่ฏฐ่ฏณ่ฏถ่ฏน่ฏผ่ฏฟ่ฐ€่ฐ‚่ฐ„่ฐ‡่ฐŒ่ฐ่ฐ‘่ฐ’่ฐ”่ฐ•่ฐ–่ฐ™่ฐ›่ฐ˜่ฐ่ฐŸ่ฐ ่ฐก่ฐฅ่ฐง่ฐช่ฐซ่ฐฎ่ฐฏ่ฐฒ่ฐณ่ฐต่ฐถๅฉๅบ้˜้˜ข้˜ก้˜ฑ้˜ช้˜ฝ้˜ผ้™‚้™‰้™”้™Ÿ้™ง้™ฌ้™ฒ้™ด้šˆ้š้š—้šฐ้‚—้‚›้‚้‚™้‚ฌ้‚ก้‚ด้‚ณ้‚ถ้‚บ"], +["db40","่ท•่ท˜่ท™่ทœ่ท ่ทก่ทข่ทฅ่ทฆ่ทง่ทฉ่ทญ่ทฎ่ทฐ่ทฑ่ทฒ่ทด่ทถ่ทผ่ทพ",6,"่ธ†่ธ‡่ธˆ่ธ‹่ธ่ธŽ่ธ่ธ‘่ธ’่ธ“่ธ•",7,"่ธ ่ธก่ธค",4,"่ธซ่ธญ่ธฐ่ธฒ่ธณ่ธด่ธถ่ธท่ธธ่ธป่ธผ่ธพ"], +["db80","่ธฟ่นƒ่น…่น†่นŒ",4,"่น“",5,"่นš",11,"่นง่นจ่นช่นซ่นฎ่นฑ้‚ธ้‚ฐ้ƒ้ƒ…้‚พ้ƒ้ƒ„้ƒ‡้ƒ“้ƒฆ้ƒข้ƒœ้ƒ—้ƒ›้ƒซ้ƒฏ้ƒพ้„„้„ข้„ž้„ฃ้„ฑ้„ฏ้„น้…ƒ้…†ๅˆๅฅ‚ๅŠขๅŠฌๅŠญๅŠพๅ“ฟๅ‹ๅ‹–ๅ‹ฐๅŸ็‡ฎ็Ÿๅปดๅ‡ตๅ‡ผ้ฌฏๅŽถๅผ็•šๅทฏๅŒๅžฉๅžกๅกพๅขผๅฃ…ๅฃ‘ๅœฉๅœฌๅœชๅœณๅœนๅœฎๅœฏๅœๅœปๅ‚ๅฉๅž…ๅซๅž†ๅผๅปๅจๅญๅถๅณๅžญๅžคๅžŒๅžฒๅŸๅžงๅžดๅž“ๅž ๅŸ•ๅŸ˜ๅŸšๅŸ™ๅŸ’ๅžธๅŸดๅŸฏๅŸธๅŸคๅŸ"], +["dc40","่นณ่นต่นท",4,"่นฝ่นพ่บ€่บ‚่บƒ่บ„่บ†่บˆ",6,"่บ‘่บ’่บ“่บ•",6,"่บ่บŸ",11,"่บญ่บฎ่บฐ่บฑ่บณ",6,"่บป",7], +["dc80","่ปƒ",10,"่ป",21,"ๅ ‹ๅ ๅŸฝๅŸญๅ €ๅ žๅ ™ๅก„ๅ  ๅกฅๅกฌๅขๅข‰ๅขšๅข€้ฆจ้ผ™ๆ‡ฟ่‰น่‰ฝ่‰ฟ่Š่ŠŠ่Šจ่Š„่ŠŽ่Š‘่Š—่Š™่Šซ่Šธ่Šพ่Šฐ่‹ˆ่‹Š่‹ฃ่Š˜่Šท่Šฎ่‹‹่‹Œ่‹่Šฉ่Šด่Šก่Šช่ŠŸ่‹„่‹Ž่Šค่‹ก่Œ‰่‹ท่‹ค่Œ่Œ‡่‹œ่‹ด่‹’่‹˜่ŒŒ่‹ป่‹“่Œ‘่Œš่Œ†่Œ”่Œ•่‹ ่‹•่Œœ่‘่›่œ่Œˆ่Ž’่Œผ่Œด่Œฑ่Ž›่ž่Œฏ่่‡่ƒ่Ÿ่€่Œ—่ ่Œญ่Œบ่Œณ่ฆ่ฅ"], +["dd40","่ปฅ",62], +["dd80","่ผค",32,"่จ่Œ›่ฉ่ฌ่ช่ญ่ฎ่Žฐ่ธ่Žณ่Žด่Ž ่Žช่Ž“่Žœ่Ž…่ผ่Žถ่Žฉ่ฝ่Žธ่ป่Ž˜่Žž่Žจ่Žบ่Žผ่่่ฅ่˜ๅ ‡่˜่‹่่ฝ่–่œ่ธ่‘่†่”่Ÿ่่ƒ่ธ่น่ช่…่€่ฆ่ฐ่ก่‘œ่‘‘่‘š่‘™่‘ณ่’‡่’ˆ่‘บ่’‰่‘ธ่ผ่‘†่‘ฉ่‘ถ่’Œ่’Ž่ฑ่‘ญ่“่“่“่“ฆ่’ฝ่““่“Š่’ฟ่’บ่“ ่’ก่’น่’ด่’—่“ฅ่“ฃ่”Œ็”่”ธ่“ฐ่”น่”Ÿ่”บ"], +["de40","่ฝ…",32,"่ฝช่พ€่พŒ่พ’่พ่พ ่พก่พข่พค่พฅ่พฆ่พง่พช่พฌ่พญ่พฎ่พฏ่พฒ่พณ่พด่พต่พท่พธ่พบ่พป่พผ่พฟ่ฟ€่ฟƒ่ฟ†"], +["de80","่ฟ‰",4,"่ฟ่ฟ’่ฟ–่ฟ—่ฟš่ฟ ่ฟก่ฟฃ่ฟง่ฟฌ่ฟฏ่ฟฑ่ฟฒ่ฟด่ฟต่ฟถ่ฟบ่ฟป่ฟผ่ฟพ่ฟฟ้€‡้€ˆ้€Œ้€Ž้€“้€•้€˜่•–่”ป่“ฟ่“ผ่•™่•ˆ่•จ่•ค่•ž่•บ็žข่•ƒ่•ฒ่•ป่–ค่–จ่–‡่–่•น่–ฎ่–œ่–…่–น่–ท่–ฐ่—“่—่—œ่—ฟ่˜ง่˜…่˜ฉ่˜–่˜ผๅปพๅผˆๅคผๅฅ่€ทๅฅ•ๅฅšๅฅ˜ๅŒๅฐขๅฐฅๅฐฌๅฐดๆ‰Œๆ‰ชๆŠŸๆŠปๆ‹Šๆ‹šๆ‹—ๆ‹ฎๆŒขๆ‹ถๆŒนๆ‹ๆƒๆŽญๆถๆฑๆบๆŽŽๆŽดๆญๆŽฌๆŽŠๆฉๆŽฎๆŽผๆฒๆธๆ ๆฟๆ„ๆžๆŽๆ‘’ๆ†ๆŽพๆ‘…ๆ‘ๆ‹ๆ›ๆ ๆŒๆฆๆกๆ‘žๆ’„ๆ‘ญๆ’–"], +["df40","้€™้€œ้€ฃ้€ค้€ฅ้€ง",5,"้€ฐ",4,"้€ท้€น้€บ้€ฝ้€ฟ้€้ƒ้…้†้ˆ",4,"้Ž้”้•้–้™้š้œ",5,"้ค้ฆ้ง้ฉ้ช้ซ้ฌ้ฏ",4,"้ถ",6,"้พ้‚"], +["df80","้‚„้‚…้‚†้‚‡้‚‰้‚Š้‚Œ",4,"้‚’้‚”้‚–้‚˜้‚š้‚œ้‚ž้‚Ÿ้‚ ้‚ค้‚ฅ้‚ง้‚จ้‚ฉ้‚ซ้‚ญ้‚ฒ้‚ท้‚ผ้‚ฝ้‚ฟ้ƒ€ๆ‘บๆ’ทๆ’ธๆ’™ๆ’บๆ“€ๆ“ๆ“—ๆ“คๆ“ขๆ”‰ๆ”ฅๆ”ฎๅผ‹ๅฟ’็”™ๅผ‘ๅŸๅฑๅฝๅฉๅจๅปๅ’ๅ–ๅ†ๅ‘‹ๅ‘’ๅ‘“ๅ‘”ๅ‘–ๅ‘ƒๅกๅ‘—ๅ‘™ๅฃๅฒๅ’‚ๅ’”ๅ‘ทๅ‘ฑๅ‘คๅ’šๅ’›ๅ’„ๅ‘ถๅ‘ฆๅ’ๅ“ๅ’ญๅ“‚ๅ’ดๅ“’ๅ’งๅ’ฆๅ““ๅ“”ๅ‘ฒๅ’ฃๅ“•ๅ’ปๅ’ฟๅ“Œๅ“™ๅ“šๅ“œๅ’ฉๅ’ชๅ’คๅ“ๅ“ๅ“žๅ”›ๅ“งๅ” ๅ“ฝๅ””ๅ“ณๅ”ขๅ”ฃๅ”ๅ”‘ๅ”งๅ”ชๅ•งๅ–ๅ–ตๅ•‰ๅ•ญๅ•ๅ••ๅ”ฟๅ•ๅ”ผ"], +["e040","้ƒ‚้ƒƒ้ƒ†้ƒˆ้ƒ‰้ƒ‹้ƒŒ้ƒ้ƒ’้ƒ”้ƒ•้ƒ–้ƒ˜้ƒ™้ƒš้ƒž้ƒŸ้ƒ ้ƒฃ้ƒค้ƒฅ้ƒฉ้ƒช้ƒฌ้ƒฎ้ƒฐ้ƒฑ้ƒฒ้ƒณ้ƒต้ƒถ้ƒท้ƒน้ƒบ้ƒป้ƒผ้ƒฟ้„€้„้„ƒ้„…",19,"้„š้„›้„œ"], +["e080","้„้„Ÿ้„ ้„ก้„ค",10,"้„ฐ้„ฒ",6,"้„บ",8,"้…„ๅ”ทๅ•–ๅ•ตๅ•ถๅ•ทๅ”ณๅ”ฐๅ•œๅ–‹ๅ—’ๅ–ƒๅ–ฑๅ–นๅ–ˆๅ–ๅ–Ÿๅ•พๅ—–ๅ–‘ๅ•ปๅ—Ÿๅ–ฝๅ–พๅ–”ๅ–™ๅ—ชๅ—ทๅ—‰ๅ˜Ÿๅ—‘ๅ—ซๅ—ฌๅ—”ๅ—ฆๅ—ๅ—„ๅ—ฏๅ—ฅๅ—ฒๅ—ณๅ—Œๅ—ๅ—จๅ—ตๅ—ค่พ”ๅ˜žๅ˜ˆๅ˜Œๅ˜ๅ˜คๅ˜ฃๅ—พๅ˜€ๅ˜งๅ˜ญๅ™˜ๅ˜นๅ™—ๅ˜ฌๅ™ๅ™ขๅ™™ๅ™œๅ™Œๅ™”ๅš†ๅ™คๅ™ฑๅ™ซๅ™ปๅ™ผๅš…ๅš“ๅšฏๅ›”ๅ›—ๅ›ๅ›กๅ›ตๅ›ซๅ›นๅ›ฟๅœ„ๅœŠๅœ‰ๅœœๅธๅธ™ๅธ”ๅธ‘ๅธฑๅธปๅธผ"], +["e140","้……้…‡้…ˆ้…‘้…“้…”้…•้…–้…˜้…™้…›้…œ้…Ÿ้… ้…ฆ้…ง้…จ้…ซ้…ญ้…ณ้…บ้…ป้…ผ้†€",4,"้††้†ˆ้†Š้†Ž้†้†“",6,"้†œ",5,"้†ค",5,"้†ซ้†ฌ้†ฐ้†ฑ้†ฒ้†ณ้†ถ้†ท้†ธ้†น้†ป"], +["e180","้†ผ",10,"้‡ˆ้‡‹้‡้‡’",9,"้‡",8,"ๅธทๅน„ๅน”ๅน›ๅนžๅนกๅฒŒๅฑบๅฒๅฒๅฒ–ๅฒˆๅฒ˜ๅฒ™ๅฒ‘ๅฒšๅฒœๅฒตๅฒขๅฒฝๅฒฌๅฒซๅฒฑๅฒฃๅณๅฒทๅณ„ๅณ’ๅณคๅณ‹ๅณฅๅด‚ๅดƒๅดงๅดฆๅดฎๅดคๅดžๅด†ๅด›ๅต˜ๅดพๅดดๅดฝๅตฌๅต›ๅตฏๅตๅตซๅต‹ๅตŠๅตฉๅตดๅถ‚ๅถ™ๅถ่ฑณๅถทๅท…ๅฝณๅฝทๅพ‚ๅพ‡ๅพ‰ๅพŒๅพ•ๅพ™ๅพœๅพจๅพญๅพตๅพผ่กขๅฝก็Šญ็Šฐ็Šด็Šท็Šธ็‹ƒ็‹็‹Ž็‹็‹’็‹จ็‹ฏ็‹ฉ็‹ฒ็‹ด็‹ท็Œ็‹ณ็Œƒ็‹บ"], +["e240","้‡ฆ",62], +["e280","้ˆฅ",32,"็‹ป็Œ—็Œ“็Œก็ŒŠ็Œž็Œ็Œ•็Œข็Œน็Œฅ็Œฌ็Œธ็Œฑ็็็—็ ็ฌ็ฏ็พ่ˆ›ๅคฅ้ฃงๅคคๅค‚้ฅฃ้ฅง",5,"้ฅด้ฅท้ฅฝ้ฆ€้ฆ„้ฆ‡้ฆŠ้ฆ้ฆ้ฆ‘้ฆ“้ฆ”้ฆ•ๅบ€ๅบ‘ๅบ‹ๅบ–ๅบฅๅบ ๅบนๅบตๅบพๅบณ่ต“ๅป’ๅป‘ๅป›ๅปจๅปช่†บๅฟ„ๅฟ‰ๅฟ–ๅฟๆ€ƒๅฟฎๆ€„ๅฟกๅฟคๅฟพๆ€…ๆ€†ๅฟชๅฟญๅฟธๆ€™ๆ€ตๆ€ฆๆ€›ๆ€ๆ€ๆ€ฉๆ€ซๆ€Šๆ€ฟๆ€กๆธๆนๆปๆบๆ‚"], +["e340","้‰†",45,"้‰ต",16], +["e380","้І",7,"้Š",24,"ๆชๆฝๆ‚–ๆ‚šๆ‚ญๆ‚ๆ‚ƒๆ‚’ๆ‚Œๆ‚›ๆƒฌๆ‚ปๆ‚ฑๆƒๆƒ˜ๆƒ†ๆƒšๆ‚ดๆ„ ๆ„ฆๆ„•ๆ„ฃๆƒดๆ„€ๆ„Žๆ„ซๆ…Šๆ…ตๆ†ฌๆ†”ๆ†งๆ†ทๆ‡”ๆ‡ตๅฟ้šณ้—ฉ้—ซ้—ฑ้—ณ้—ต้—ถ้—ผ้—พ้˜ƒ้˜„้˜†้˜ˆ้˜Š้˜‹้˜Œ้˜้˜้˜’้˜•้˜–้˜—้˜™้˜šไธฌ็ˆฟๆˆ•ๆฐตๆฑ”ๆฑœๆฑŠๆฒฃๆฒ…ๆฒๆฒ”ๆฒŒๆฑจๆฑฉๆฑดๆฑถๆฒ†ๆฒฉๆณๆณ”ๆฒญๆณทๆณธๆณฑๆณ—ๆฒฒๆณ ๆณ–ๆณบๆณซๆณฎๆฒฑๆณ“ๆณฏๆณพ"], +["e440","้Šจ",5,"้Šฏ",24,"้‹‰",31], +["e480","้‹ฉ",32,"ๆดนๆดงๆดŒๆตƒๆตˆๆด‡ๆด„ๆด™ๆดŽๆดซๆตๆดฎๆดตๆดšๆตๆต’ๆต”ๆดณๆถ‘ๆตฏๆถžๆถ ๆตžๆถ“ๆถ”ๆตœๆต ๆตผๆตฃๆธšๆท‡ๆท…ๆทžๆธŽๆถฟๆท ๆธ‘ๆทฆๆทๆท™ๆธ–ๆถซๆธŒๆถฎๆธซๆนฎๆนŽๆนซๆบฒๆนŸๆบ†ๆน“ๆน”ๆธฒๆธฅๆน„ๆปŸๆบฑๆบ˜ๆป ๆผญๆปขๆบฅๆบงๆบฝๆบปๆบทๆป—ๆบดๆปๆบๆป‚ๆบŸๆฝขๆฝ†ๆฝ‡ๆผคๆผ•ๆปนๆผฏๆผถๆฝ‹ๆฝดๆผชๆผ‰ๆผฉๆพ‰ๆพๆพŒๆฝธๆฝฒๆฝผๆฝบๆฟ‘"], +["e540","้ŒŠ",51,"้Œฟ",10], +["e580","้Š",31,"้ซๆฟ‰ๆพงๆพนๆพถๆฟ‚ๆฟกๆฟฎๆฟžๆฟ ๆฟฏ็€š็€ฃ็€›็€น็€ต็็žๅฎ€ๅฎ„ๅฎ•ๅฎ“ๅฎฅๅฎธ็”ฏ้ชžๆดๅฏคๅฏฎ่คฐๅฏฐ่น‡่ฌ‡่พถ่ฟ“่ฟ•่ฟฅ่ฟฎ่ฟค่ฟฉ่ฟฆ่ฟณ่ฟจ้€…้€„้€‹้€ฆ้€‘้€้€–้€ก้€ต้€ถ้€ญ้€ฏ้„้‘้’้้จ้˜้ข้›ๆšน้ด้ฝ้‚‚้‚ˆ้‚ƒ้‚‹ๅฝๅฝ—ๅฝ–ๅฝ˜ๅฐปๅ’ซๅฑๅฑ™ๅญฑๅฑฃๅฑฆ็พผๅผชๅผฉๅผญ่‰ดๅผผ้ฌปๅฑฎๅฆๅฆƒๅฆๅฆฉๅฆชๅฆฃ"], +["e640","้ฌ",34,"้ސ",27], +["e680","้Žฌ",29,"้‹้Œ้ๅฆ—ๅงŠๅฆซๅฆžๅฆคๅง’ๅฆฒๅฆฏๅง—ๅฆพๅจ…ๅจ†ๅงๅจˆๅงฃๅง˜ๅงนๅจŒๅจ‰ๅจฒๅจดๅจ‘ๅจฃๅจ“ๅฉ€ๅฉงๅฉŠๅฉ•ๅจผๅฉขๅฉต่ƒฌๅชชๅช›ๅฉทๅฉบๅชพๅซซๅชฒๅซ’ๅซ”ๅชธๅซ ๅซฃๅซฑๅซ–ๅซฆๅซ˜ๅซœๅฌ‰ๅฌ—ๅฌ–ๅฌฒๅฌทๅญ€ๅฐ•ๅฐœๅญšๅญฅๅญณๅญ‘ๅญ“ๅญข้ฉต้ฉท้ฉธ้ฉบ้ฉฟ้ฉฝ้ช€้ช้ช…้ชˆ้ชŠ้ช้ช’้ช“้ช–้ช˜้ช›้ชœ้ช้ชŸ้ช ้ชข้ชฃ้ชฅ้ชง็บŸ็บก็บฃ็บฅ็บจ็บฉ"], +["e740","้Ž",7,"้—",54], +["e780","้Ž",32,"็บญ็บฐ็บพ็ป€็ป็ป‚็ป‰็ป‹็ปŒ็ป็ป”็ป—็ป›็ป ็ปก็ปจ็ปซ็ปฎ็ปฏ็ปฑ็ปฒ็ผ็ปถ็ปบ็ปป็ปพ็ผ็ผ‚็ผƒ็ผ‡็ผˆ็ผ‹็ผŒ็ผ็ผ‘็ผ’็ผ—็ผ™็ผœ็ผ›็ผŸ็ผก",6,"็ผช็ผซ็ผฌ็ผญ็ผฏ",4,"็ผตๅนบ็•ฟๅท›็”พ้‚•็ŽŽ็Ž‘็Žฎ็Žข็ŽŸ็็‚็‘็Žท็Žณ็€็‰็ˆ็ฅ็™้กผ็Š็ฉ็ง็ž็Žบ็ฒ็็ช็‘›็ฆ็ฅ็จ็ฐ็ฎ็ฌ"], +["e840","้ฏ",14,"้ฟ",43,"้‘ฌ้‘ญ้‘ฎ้‘ฏ"], +["e880","้‘ฐ",20,"้’‘้’–้’˜้“‡้“้““้“”้“š้“ฆ้“ป้”œ้” ็›็š็‘็‘œ็‘—็‘•็‘™็‘ท็‘ญ็‘พ็’œ็’Ž็’€็’็’‡็’‹็’ž็’จ็’ฉ็’็’ง็“’็’บ้Ÿช้Ÿซ้ŸฌๆŒๆ“ๆžๆˆๆฉๆžฅๆž‡ๆชๆณๆž˜ๆžงๆตๆžจๆžžๆžญๆž‹ๆทๆผๆŸฐๆ ‰ๆŸ˜ๆ ŠๆŸฉๆžฐๆ ŒๆŸ™ๆžตๆŸšๆžณๆŸๆ €ๆŸƒๆžธๆŸขๆ ŽๆŸๆŸฝๆ ฒๆ ณๆก ๆกกๆกŽๆกขๆก„ๆกคๆขƒๆ ๆก•ๆกฆๆกๆกงๆก€ๆ พๆกŠๆก‰ๆ ฉๆขตๆขๆกดๆกทๆข“ๆกซๆฃ‚ๆฅฎๆฃผๆคŸๆค ๆฃน"], +["e940","้”ง้”ณ้”ฝ้•ƒ้•ˆ้•‹้••้•š้• ้•ฎ้•ด้•ต้•ท",7,"้–€",42], +["e980","้–ซ",32,"ๆคคๆฃฐๆค‹ๆคๆฅ—ๆฃฃๆคๆฅฑๆคนๆฅ ๆฅ‚ๆฅๆฆ„ๆฅซๆฆ€ๆฆ˜ๆฅธๆคดๆงŒๆฆ‡ๆฆˆๆงŽๆฆ‰ๆฅฆๆฅฃๆฅนๆฆ›ๆฆงๆฆปๆฆซๆฆญๆง”ๆฆฑๆงๆงŠๆงŸๆฆ•ๆง ๆฆๆงฟๆจฏๆงญๆจ—ๆจ˜ๆฉฅๆงฒๆฉ„ๆจพๆช ๆฉๆฉ›ๆจตๆชŽๆฉนๆจฝๆจจๆฉ˜ๆฉผๆช‘ๆชๆชฉๆช—ๆชซ็Œท็’ๆฎๆฎ‚ๆฎ‡ๆฎ„ๆฎ’ๆฎ“ๆฎๆฎšๆฎ›ๆฎกๆฎช่ฝซ่ฝญ่ฝฑ่ฝฒ่ฝณ่ฝต่ฝถ่ฝธ่ฝท่ฝน่ฝบ่ฝผ่ฝพ่พ่พ‚่พ„่พ‡่พ‹"], +["ea40","้—Œ",27,"้—ฌ้—ฟ้˜‡้˜“้˜˜้˜›้˜ž้˜ ้˜ฃ",6,"้˜ซ้˜ฌ้˜ญ้˜ฏ้˜ฐ้˜ท้˜ธ้˜น้˜บ้˜พ้™้™ƒ้™Š้™Ž้™้™‘้™’้™“้™–้™—"], +["ea80","้™˜้™™้™š้™œ้™้™ž้™ ้™ฃ้™ฅ้™ฆ้™ซ้™ญ",4,"้™ณ้™ธ",12,"้š‡้š‰้šŠ่พ่พŽ่พ่พ˜่พš่ปŽๆˆ‹ๆˆ—ๆˆ›ๆˆŸๆˆขๆˆกๆˆฅๆˆคๆˆฌ่‡ง็“ฏ็“ด็“ฟ็”็”‘็”“ๆ”ดๆ—ฎๆ—ฏๆ—ฐๆ˜Šๆ˜™ๆฒๆ˜ƒๆ˜•ๆ˜€็‚…ๆ›ทๆ˜ๆ˜ดๆ˜ฑๆ˜ถๆ˜ต่€†ๆ™Ÿๆ™”ๆ™ๆ™ๆ™–ๆ™กๆ™—ๆ™ทๆš„ๆšŒๆšงๆšๆšพๆ››ๆ›œๆ›ฆๆ›ฉ่ดฒ่ดณ่ดถ่ดป่ดฝ่ต€่ต…่ต†่ตˆ่ต‰่ต‡่ต่ต•่ต™่ง‡่งŠ่ง‹่งŒ่งŽ่ง่ง่ง‘็‰ฎ็ŠŸ็‰็‰ฆ็‰ฏ็‰พ็‰ฟ็Š„็Š‹็Š็Š็Š’ๆŒˆๆŒฒๆŽฐ"], +["eb40","้šŒ้šŽ้š‘้š’้š“้š•้š–้šš้š›้š",9,"้šจ",7,"้šฑ้šฒ้šด้šต้šท้šธ้šบ้šป้šฟ้›‚้›ƒ้›ˆ้›Š้›‹้›้›‘้›“้›”้›–",9,"้›ก",6,"้›ซ"], +["eb80","้›ฌ้›ญ้›ฎ้›ฐ้›ฑ้›ฒ้›ด้›ต้›ธ้›บ้›ป้›ผ้›ฝ้›ฟ้œ‚้œƒ้œ…้œŠ้œ‹้œŒ้œ้œ‘้œ’้œ”้œ•้œ—",4,"้œ้œŸ้œ ๆฟๆ“˜่€„ๆฏชๆฏณๆฏฝๆฏตๆฏนๆฐ…ๆฐ‡ๆฐ†ๆฐๆฐ•ๆฐ˜ๆฐ™ๆฐšๆฐกๆฐฉๆฐคๆฐชๆฐฒๆ”ตๆ••ๆ•ซ็‰็‰’็‰–็ˆฐ่™ขๅˆ–่‚Ÿ่‚œ่‚“่‚ผๆœŠ่‚ฝ่‚ฑ่‚ซ่‚ญ่‚ด่‚ท่ƒง่ƒจ่ƒฉ่ƒช่ƒ›่ƒ‚่ƒ„่ƒ™่ƒ่ƒ—ๆœ่ƒ่ƒซ่ƒฑ่ƒด่ƒญ่„่„Ž่ƒฒ่ƒผๆœ•่„’่ฑš่„ถ่„ž่„ฌ่„˜่„ฒ่…ˆ่…Œ่…“่…ด่…™่…š่…ฑ่… ่…ฉ่…ผ่…ฝ่…ญ่…งๅกๅชต่†ˆ่†‚่†‘ๆป•่†ฃ่†ช่‡Œๆœฆ่‡Š่†ป"], +["ec40","้œก",8,"้œซ้œฌ้œฎ้œฏ้œฑ้œณ",4,"้œบ้œป้œผ้œฝ้œฟ",18,"้”้•้—้˜้š้œ้้Ÿ้ฃ้ค้ฆ้ง้จ้ช",7], +["ec80","้ฒ้ต้ท",4,"้ฝ",7,"้ž†",4,"้žŒ้žŽ้ž้ž้ž“้ž•้ž–้ž—้ž™",4,"่‡่†ฆๆฌคๆฌทๆฌนๆญƒๆญ†ๆญ™้ฃ‘้ฃ’้ฃ“้ฃ•้ฃ™้ฃšๆฎณๅฝ€ๆฏ‚่งณๆ–้ฝ‘ๆ–“ๆ–ผๆ—†ๆ—„ๆ—ƒๆ—Œๆ—Žๆ—’ๆ—–็‚€็‚œ็‚–็‚็‚ป็ƒ€็‚ท็‚ซ็‚ฑ็ƒจ็ƒŠ็„็„“็„–็„ฏ็„ฑ็…ณ็…œ็…จ็……็…ฒ็…Š็…ธ็…บ็†˜็†ณ็†ต็†จ็† ็‡ ็‡”็‡ง็‡น็ˆ็ˆจ็ฌ็„˜็…ฆ็†นๆˆพๆˆฝๆ‰ƒๆ‰ˆๆ‰‰็คป็ฅ€็ฅ†็ฅ‰็ฅ›็ฅœ็ฅ“็ฅš็ฅข็ฅ—็ฅ ็ฅฏ็ฅง็ฅบ็ฆ…็ฆŠ็ฆš็ฆง็ฆณๅฟ‘ๅฟ"], +["ed40","้žž้žŸ้žก้žข้žค",6,"้žฌ้žฎ้žฐ้žฑ้žณ้žต",46], +["ed80","้Ÿค้Ÿฅ้Ÿจ้Ÿฎ",4,"้Ÿด้Ÿท",23,"ๆ€ผๆๆšๆงๆๆ™ๆฃๆ‚ซๆ„†ๆ„ๆ…ๆ†ฉๆ†ๆ‡‹ๆ‡‘ๆˆ†่‚€่ฟๆฒ“ๆณถๆทผ็Ÿถ็Ÿธ็ €็ ‰็ —็ ˜็ ‘ๆ–ซ็ ญ็ œ็ ็ น็ บ็ ป็ Ÿ็ ผ็ ฅ็ ฌ็ ฃ็ ฉ็กŽ็กญ็ก–็ก—็ ฆ็ก็ก‡็กŒ็กช็ข›็ข“็ขš็ข‡็ขœ็ขก็ขฃ็ขฒ็ขน็ขฅ็ฃ”็ฃ™็ฃ‰็ฃฌ็ฃฒ็ค…็ฃด็ค“็คค็คž็คด้พ›้ปน้ปป้ปผ็›ฑ็œ„็œ็›น็œ‡็œˆ็œš็œข็œ™็œญ็œฆ็œต็œธ็็‘็‡็ƒ็š็จ"], +["ee40","้ ",62], +["ee80","้กŽ",32,"็ข็ฅ็ฟ็ž็ฝ็ž€็žŒ็ž‘็žŸ็ž ็žฐ็žต็žฝ็”บ็•€็•Ž็•‹็•ˆ็•›็•ฒ็•น็–ƒ็ฝ˜็ฝก็ฝŸ่ฉˆ็ฝจ็ฝด็ฝฑ็ฝน็พ็ฝพ็›็›ฅ่ ฒ้’…้’†้’‡้’‹้’Š้’Œ้’้’้’้’”้’—้’•้’š้’›้’œ้’ฃ้’ค้’ซ้’ช้’ญ้’ฌ้’ฏ้’ฐ้’ฒ้’ด้’ถ",4,"้’ผ้’ฝ้’ฟ้“„้“ˆ",6,"้“้“‘้“’้“•้“–้“—้“™้“˜้“›้“ž้“Ÿ้“ ้“ข้“ค้“ฅ้“ง้“จ้“ช"], +["ef40","้กฏ",5,"้ข‹้ขŽ้ข’้ข•้ข™้ขฃ้ขจ",37,"้ฃ้ฃ้ฃ”้ฃ–้ฃ—้ฃ›้ฃœ้ฃ้ฃ ",4], +["ef80","้ฃฅ้ฃฆ้ฃฉ",30,"้“ฉ้“ซ้“ฎ้“ฏ้“ณ้“ด้“ต้“ท้“น้“ผ้“ฝ้“ฟ้”ƒ้”‚้”†้”‡้”‰้”Š้”้”Ž้”้”’",4,"้”˜้”›้”้”ž้”Ÿ้”ข้”ช้”ซ้”ฉ้”ฌ้”ฑ้”ฒ้”ด้”ถ้”ท้”ธ้”ผ้”พ้”ฟ้•‚้”ต้•„้•…้•†้•‰้•Œ้•Ž้•้•’้•“้•”้•–้•—้•˜้•™้•›้•ž้•Ÿ้•้•ก้•ข้•ค",8,"้•ฏ้•ฑ้•ฒ้•ณ้”บ็Ÿง็Ÿฌ้›‰็ง•็งญ็งฃ็งซ็จ†ๅต‡็จƒ็จ‚็จž็จ”"], +["f040","้คˆ",4,"้คŽ้ค้ค‘",28,"้คฏ",26], +["f080","้ฅŠ",9,"้ฅ–",12,"้ฅค้ฅฆ้ฅณ้ฅธ้ฅน้ฅป้ฅพ้ฆ‚้ฆƒ้ฆ‰็จน็จท็ฉ‘้ป้ฆฅ็ฉฐ็šˆ็šŽ็š“็š™็šค็“ž็“ ็”ฌ้ธ ้ธข้ธจ",4,"้ธฒ้ธฑ้ธถ้ธธ้ธท้ธน้ธบ้ธพ้น้น‚้น„้น†้น‡้นˆ้น‰้น‹้นŒ้นŽ้น‘้น•้น—้นš้น›้นœ้นž้นฃ้นฆ",6,"้นฑ้นญ้นณ็–’็–”็––็– ็–็–ฌ็–ฃ็–ณ็–ด็–ธ็—„็–ฑ็–ฐ็—ƒ็—‚็—–็—็—ฃ็—จ็—ฆ็—ค็—ซ็—ง็˜ƒ็—ฑ็—ผ็—ฟ็˜็˜€็˜…็˜Œ็˜—็˜Š็˜ฅ็˜˜็˜•็˜™"], +["f140","้ฆŒ้ฆŽ้ฆš",10,"้ฆฆ้ฆง้ฆฉ",47], +["f180","้ง™",32,"็˜›็˜ผ็˜ข็˜ ็™€็˜ญ็˜ฐ็˜ฟ็˜ต็™ƒ็˜พ็˜ณ็™็™ž็™”็™œ็™–็™ซ็™ฏ็ฟŠ็ซฆ็ฉธ็ฉน็ช€็ช†็ชˆ็ช•็ชฆ็ช ็ชฌ็ชจ็ชญ็ชณ่กค่กฉ่กฒ่กฝ่กฟ่ข‚่ขข่ฃ†่ขท่ขผ่ฃ‰่ฃข่ฃŽ่ฃฃ่ฃฅ่ฃฑ่คš่ฃผ่ฃจ่ฃพ่ฃฐ่คก่ค™่ค“่ค›่คŠ่คด่คซ่คถ่ฅ่ฅฆ่ฅป็–‹่ƒฅ็šฒ็šด็Ÿœ่€’่€”่€–่€œ่€ ่€ข่€ฅ่€ฆ่€ง่€ฉ่€จ่€ฑ่€‹่€ต่ƒ่†่่’่ฉ่ฑ่ฆƒ้กธ้ข€้ขƒ"], +["f240","้งบ",62], +["f280","้จน",32,"้ข‰้ขŒ้ข้ข้ข”้ขš้ข›้ขž้ขŸ้ขก้ขข้ขฅ้ขฆ่™่™”่™ฌ่™ฎ่™ฟ่™บ่™ผ่™ป่šจ่š่š‹่šฌ่š่šง่šฃ่šช่š“่šฉ่šถ่›„่šต่›Ž่šฐ่šบ่šฑ่šฏ่›‰่›่šด่›ฉ่›ฑ่›ฒ่›ญ่›ณ่›่œ“่›ž่›ด่›Ÿ่›˜่›‘่œƒ่œ‡่›ธ่œˆ่œŠ่œ่œ‰่œฃ่œป่œž่œฅ่œฎ่œš่œพ่ˆ่œด่œฑ่œฉ่œท่œฟ่ž‚่œข่ฝ่พ่ป่ ่ฐ่Œ่ฎ่ž‹่“่ฃ่ผ่ค่™่ฅ่ž“่žฏ่žจ่Ÿ’"], +["f340","้ฉš",17,"้ฉฒ้ชƒ้ช‰้ช้ชŽ้ช”้ช•้ช™้ชฆ้ชฉ",6,"้ชฒ้ชณ้ชด้ชต้ชน้ชป้ชฝ้ชพ้ชฟ้ซƒ้ซ„้ซ†",4,"้ซ้ซŽ้ซ้ซ้ซ’้ซ”้ซ•้ซ–้ซ—้ซ™้ซš้ซ›้ซœ"], +["f380","้ซ้ซž้ซ ้ซข้ซฃ้ซค้ซฅ้ซง้ซจ้ซฉ้ซช้ซฌ้ซฎ้ซฐ",8,"้ซบ้ซผ",6,"้ฌ„้ฌ…้ฌ†่Ÿ†่žˆ่ž…่žญ่ž—่žƒ่žซ่Ÿฅ่žฌ่žต่žณ่Ÿ‹่Ÿ“่žฝ่Ÿ‘่Ÿ€่ŸŠ่Ÿ›่Ÿช่Ÿ ่Ÿฎ่ –่ “่Ÿพ่ Š่ ›่ ก่ น่ ผ็ผถ็ฝ‚็ฝ„็ฝ…่ˆ็ซบ็ซฝ็ฌˆ็ฌƒ็ฌ„็ฌ•็ฌŠ็ฌซ็ฌ็ญ‡็ฌธ็ฌช็ฌ™็ฌฎ็ฌฑ็ฌ ็ฌฅ็ฌค็ฌณ็ฌพ็ฌž็ญ˜็ญš็ญ…็ญต็ญŒ็ญ็ญ ็ญฎ็ญป็ญข็ญฒ็ญฑ็ฎ็ฎฆ็ฎง็ฎธ็ฎฌ็ฎ็ฎจ็ฎ…็ฎช็ฎœ็ฎข็ฎซ็ฎด็ฏ‘็ฏ็ฏŒ็ฏ็ฏš็ฏฅ็ฏฆ็ฏช็ฐŒ็ฏพ็ฏผ็ฐ็ฐ–็ฐ‹"], +["f440","้ฌ‡้ฌ‰",5,"้ฌ้ฌ‘้ฌ’้ฌ”",10,"้ฌ ้ฌก้ฌข้ฌค",10,"้ฌฐ้ฌฑ้ฌณ",7,"้ฌฝ้ฌพ้ฌฟ้ญ€้ญ†้ญŠ้ญ‹้ญŒ้ญŽ้ญ้ญ’้ญ“้ญ•",5], +["f480","้ญ›",32,"็ฐŸ็ฐช็ฐฆ็ฐธ็ฑ็ฑ€่‡พ่ˆ่ˆ‚่ˆ„่‡ฌ่ก„่ˆก่ˆข่ˆฃ่ˆญ่ˆฏ่ˆจ่ˆซ่ˆธ่ˆป่ˆณ่ˆด่ˆพ่‰„่‰‰่‰‹่‰่‰š่‰Ÿ่‰จ่กพ่ข…่ขˆ่ฃ˜่ฃŸ่ฅž็พ็พŸ็พง็พฏ็พฐ็พฒ็ฑผๆ•‰็ฒ‘็ฒ็ฒœ็ฒž็ฒข็ฒฒ็ฒผ็ฒฝ็ณ็ณ‡็ณŒ็ณ็ณˆ็ณ…็ณ—็ณจ่‰ฎๆšจ็พฟ็ฟŽ็ฟ•็ฟฅ็ฟก็ฟฆ็ฟฉ็ฟฎ็ฟณ็ณธ็ตท็ถฆ็ถฎ็น‡็บ›้บธ้บด่ตณ่ถ„่ถ”่ถ‘่ถฑ่ตง่ตญ่ฑ‡่ฑ‰้…Š้…้…Ž้…้…ค"], +["f540","้ญผ",62], +["f580","้ฎป",32,"้…ข้…ก้…ฐ้…ฉ้…ฏ้…ฝ้…พ้…ฒ้…ด้…น้†Œ้†…้†้†้†‘้†ข้†ฃ้†ช้†ญ้†ฎ้†ฏ้†ต้†ด้†บ่ฑ•้นพ่ถธ่ทซ่ธ…่น™่นฉ่ถต่ถฟ่ถผ่ถบ่ท„่ท–่ท—่ทš่ทž่ทŽ่ท่ท›่ท†่ทฌ่ทท่ทธ่ทฃ่ทน่ทป่ทค่ธ‰่ทฝ่ธ”่ธ่ธŸ่ธฌ่ธฎ่ธฃ่ธฏ่ธบ่น€่ธน่ธต่ธฝ่ธฑ่น‰่น่น‚่น‘่น’่นŠ่นฐ่นถ่นผ่นฏ่นด่บ…่บ่บ”่บ่บœ่บž่ฑธ่ฒ‚่ฒŠ่ฒ…่ฒ˜่ฒ”ๆ–›่ง–่งž่งš่งœ"], +["f640","้ฏœ",62], +["f680","้ฐ›",32,"่งฅ่งซ่งฏ่จพ่ฌฆ้“้›ฉ้›ณ้›ฏ้œ†้œ้œˆ้œ้œŽ้œช้œญ้œฐ้œพ้พ€้พƒ้พ…",5,"้พŒ้ปพ้ผ‹้ผ้šน้šผ้šฝ้›Ž้›’็žฟ้› ้ŠŽ้Šฎ้‹ˆ้Œพ้ช้Š้Ž้พ้‘ซ้ฑฟ้ฒ‚้ฒ…้ฒ†้ฒ‡้ฒˆ็จฃ้ฒ‹้ฒŽ้ฒ้ฒ‘้ฒ’้ฒ”้ฒ•้ฒš้ฒ›้ฒž",5,"้ฒฅ",4,"้ฒซ้ฒญ้ฒฎ้ฒฐ",7,"้ฒบ้ฒป้ฒผ้ฒฝ้ณ„้ณ…้ณ†้ณ‡้ณŠ้ณ‹"], +["f740","้ฐผ",62], +["f780","้ฑป้ฑฝ้ฑพ้ฒ€้ฒƒ้ฒ„้ฒ‰้ฒŠ้ฒŒ้ฒ้ฒ“้ฒ–้ฒ—้ฒ˜้ฒ™้ฒ้ฒช้ฒฌ้ฒฏ้ฒน้ฒพ",4,"้ณˆ้ณ‰้ณ‘้ณ’้ณš้ณ›้ณ ้ณก้ณŒ",4,"้ณ“้ณ”้ณ•้ณ—้ณ˜้ณ™้ณœ้ณ้ณŸ้ณข้ผ้ž…้ž‘้ž’้ž”้žฏ้žซ้žฃ้žฒ้žด้ชฑ้ชฐ้ชท้น˜้ชถ้ชบ้ชผ้ซ้ซ€้ซ…้ซ‚้ซ‹้ซŒ้ซ‘้ญ…้ญƒ้ญ‡้ญ‰้ญˆ้ญ้ญ‘้ฃจ้ค้คฎ้ฅ•้ฅ”้ซŸ้ซก้ซฆ้ซฏ้ซซ้ซป้ซญ้ซน้ฌˆ้ฌ้ฌ“้ฌŸ้ฌฃ้บฝ้บพ็ธป้บ‚้บ‡้บˆ้บ‹้บ’้–้บ้บŸ้ป›้ปœ้ป้ป ้ปŸ้ปข้ปฉ้ปง้ปฅ้ปช้ปฏ้ผข้ผฌ้ผฏ้ผน้ผท้ผฝ้ผพ้ฝ„"], +["f840","้ณฃ",62], +["f880","้ดข",32], +["f940","้ตƒ",62], +["f980","้ถ‚",32], +["fa40","้ถฃ",62], +["fa80","้ทข",32], +["fb40","้ธƒ",27,"้ธค้ธง้ธฎ้ธฐ้ธด้ธป้ธผ้น€้น้น้น’้น“้น”้น–้น™้น้นŸ้น ้นก้นข้นฅ้นฎ้นฏ้นฒ้นด",9,"้บ€"], +["fb80","้บ้บƒ้บ„้บ…้บ†้บ‰้บŠ้บŒ",5,"้บ”",8,"้บž้บ ",5,"้บง้บจ้บฉ้บช"], +["fc40","้บซ",8,"้บต้บถ้บท้บน้บบ้บผ้บฟ",4,"้ป…้ป†้ป‡้ปˆ้ปŠ้ป‹้ปŒ้ป้ป’้ป“้ป•้ป–้ป—้ป™้ปš้ปž้ปก้ปฃ้ปค้ปฆ้ปจ้ปซ้ปฌ้ปญ้ปฎ้ปฐ",8,"้ปบ้ปฝ้ปฟ",6], +["fc80","้ผ†",4,"้ผŒ้ผ้ผ‘้ผ’้ผ”้ผ•้ผ–้ผ˜้ผš",5,"้ผก้ผฃ",8,"้ผญ้ผฎ้ผฐ้ผฑ"], +["fd40","้ผฒ",4,"้ผธ้ผบ้ผผ้ผฟ",4,"้ฝ…",10,"้ฝ’",38], +["fd80","้ฝน",5,"้พ้พ‚้พ",11,"้พœ้พ้พž้พก",4,"๏คฌ๏ฅน๏ฆ•๏งง๏งฑ"], +["fe40","๏จŒ๏จ๏จŽ๏จ๏จ‘๏จ“๏จ”๏จ˜๏จŸ๏จ ๏จก๏จฃ๏จค๏จง๏จจ๏จฉ"] +] diff --git a/node_modules/iconv-lite/encodings/tables/cp949.json b/node_modules/iconv-lite/encodings/tables/cp949.json new file mode 100644 index 0000000..2022a00 --- /dev/null +++ b/node_modules/iconv-lite/encodings/tables/cp949.json @@ -0,0 +1,273 @@ +[ +["0","\u0000",127], +["8141","๊ฐ‚๊ฐƒ๊ฐ…๊ฐ†๊ฐ‹",4,"๊ฐ˜๊ฐž๊ฐŸ๊ฐก๊ฐข๊ฐฃ๊ฐฅ",6,"๊ฐฎ๊ฐฒ๊ฐณ๊ฐด"], +["8161","๊ฐต๊ฐถ๊ฐท๊ฐบ๊ฐป๊ฐฝ๊ฐพ๊ฐฟ๊ฑ",9,"๊ฑŒ๊ฑŽ",5,"๊ฑ•"], +["8181","๊ฑ–๊ฑ—๊ฑ™๊ฑš๊ฑ›๊ฑ",18,"๊ฑฒ๊ฑณ๊ฑต๊ฑถ๊ฑน๊ฑป",4,"๊ฒ‚๊ฒ‡๊ฒˆ๊ฒ๊ฒŽ๊ฒ๊ฒ‘๊ฒ’๊ฒ“๊ฒ•",6,"๊ฒž๊ฒข",5,"๊ฒซ๊ฒญ๊ฒฎ๊ฒฑ",6,"๊ฒบ๊ฒพ๊ฒฟ๊ณ€๊ณ‚๊ณƒ๊ณ…๊ณ†๊ณ‡๊ณ‰๊ณŠ๊ณ‹๊ณ",7,"๊ณ–๊ณ˜",7,"๊ณข๊ณฃ๊ณฅ๊ณฆ๊ณฉ๊ณซ๊ณญ๊ณฎ๊ณฒ๊ณด๊ณท",4,"๊ณพ๊ณฟ๊ด๊ด‚๊ดƒ๊ด…๊ด‡",4,"๊ดŽ๊ด๊ด’๊ด“"], +["8241","๊ด”๊ด•๊ด–๊ด—๊ด™๊ดš๊ด›๊ด๊ดž๊ดŸ๊ดก",7,"๊ดช๊ดซ๊ดฎ",5], +["8261","๊ดถ๊ดท๊ดน๊ดบ๊ดป๊ดฝ",6,"๊ต†๊ตˆ๊ตŠ",5,"๊ต‘๊ต’๊ต“๊ต•๊ต–๊ต—"], +["8281","๊ต™",7,"๊ตข๊ตค",7,"๊ตฎ๊ตฏ๊ตฑ๊ตฒ๊ตท๊ตธ๊ตน๊ตบ๊ตพ๊ถ€๊ถƒ",4,"๊ถŠ๊ถ‹๊ถ๊ถŽ๊ถ๊ถ‘",10,"๊ถž",5,"๊ถฅ",17,"๊ถธ",7,"๊ท‚๊ทƒ๊ท…๊ท†๊ท‡๊ท‰",6,"๊ท’๊ท”",7,"๊ท๊ทž๊ทŸ๊ทก๊ทข๊ทฃ๊ทฅ",18], +["8341","๊ทบ๊ทป๊ทฝ๊ทพ๊ธ‚",5,"๊ธŠ๊ธŒ๊ธŽ",5,"๊ธ•",7], +["8361","๊ธ",18,"๊ธฒ๊ธณ๊ธต๊ธถ๊ธน๊ธป๊ธผ"], +["8381","๊ธฝ๊ธพ๊ธฟ๊น‚๊น„๊น‡๊นˆ๊น‰๊น‹๊น๊น‘๊น’๊น“๊น•๊น—",4,"๊นž๊นข๊นฃ๊นค๊นฆ๊นง๊นช๊นซ๊นญ๊นฎ๊นฏ๊นฑ",6,"๊นบ๊นพ",5,"๊บ†",5,"๊บ",46,"๊บฟ๊ป๊ป‚๊ปƒ๊ป…",6,"๊ปŽ๊ป’",5,"๊ปš๊ป›๊ป",8], +["8441","๊ปฆ๊ปง๊ปฉ๊ปช๊ปฌ๊ปฎ",5,"๊ปต๊ปถ๊ปท๊ปน๊ปบ๊ปป๊ปฝ",8], +["8461","๊ผ†๊ผ‰๊ผŠ๊ผ‹๊ผŒ๊ผŽ๊ผ๊ผ‘",18], +["8481","๊ผค",7,"๊ผฎ๊ผฏ๊ผฑ๊ผณ๊ผต",6,"๊ผพ๊ฝ€๊ฝ„๊ฝ…๊ฝ†๊ฝ‡๊ฝŠ",5,"๊ฝ‘",10,"๊ฝž",5,"๊ฝฆ",18,"๊ฝบ",5,"๊พ๊พ‚๊พƒ๊พ…๊พ†๊พ‡๊พ‰",6,"๊พ’๊พ“๊พ”๊พ–",5,"๊พ",26,"๊พบ๊พป๊พฝ๊พพ"], +["8541","๊พฟ๊ฟ",5,"๊ฟŠ๊ฟŒ๊ฟ",4,"๊ฟ•",6,"๊ฟ",4], +["8561","๊ฟข",5,"๊ฟช",5,"๊ฟฒ๊ฟณ๊ฟต๊ฟถ๊ฟท๊ฟน",6,"๋€‚๋€ƒ"], +["8581","๋€…",6,"๋€๋€Ž๋€๋€‘๋€’๋€“๋€•",6,"๋€ž",9,"๋€ฉ",26,"๋†๋‡๋‰๋‹๋๋๋๋‘๋’๋–๋˜๋š๋›๋œ๋ž",29,"๋พ๋ฟ๋‚๋‚‚๋‚ƒ๋‚…",6,"๋‚Ž๋‚๋‚’",5,"๋‚›๋‚๋‚ž๋‚ฃ๋‚ค"], +["8641","๋‚ฅ๋‚ฆ๋‚ง๋‚ช๋‚ฐ๋‚ฒ๋‚ถ๋‚ท๋‚น๋‚บ๋‚ป๋‚ฝ",6,"๋ƒ†๋ƒŠ",5,"๋ƒ’"], +["8661","๋ƒ“๋ƒ•๋ƒ–๋ƒ—๋ƒ™",6,"๋ƒก๋ƒข๋ƒฃ๋ƒค๋ƒฆ",10], +["8681","๋ƒฑ",22,"๋„Š๋„๋„Ž๋„๋„‘๋„”๋„•๋„–๋„—๋„š๋„ž",4,"๋„ฆ๋„ง๋„ฉ๋„ช๋„ซ๋„ญ",6,"๋„ถ๋„บ",5,"๋…‚๋…ƒ๋……๋…†๋…‡๋…‰",6,"๋…’๋…“๋…–๋…—๋…™๋…š๋…›๋…๋…ž๋…Ÿ๋…ก",22,"๋…บ๋…ป๋…ฝ๋…พ๋…ฟ๋†๋†ƒ",4,"๋†Š๋†Œ๋†Ž๋†๋†๋†‘๋†•๋†–๋†—๋†™๋†š๋†›๋†"], +["8741","๋†ž",9,"๋†ฉ",15], +["8761","๋†น",18,"๋‡๋‡Ž๋‡๋‡‘๋‡’๋‡“๋‡•"], +["8781","๋‡–",5,"๋‡ž๋‡ ",7,"๋‡ช๋‡ซ๋‡ญ๋‡ฎ๋‡ฏ๋‡ฑ",7,"๋‡บ๋‡ผ๋‡พ",5,"๋ˆ†๋ˆ‡๋ˆ‰๋ˆŠ๋ˆ",6,"๋ˆ–๋ˆ˜๋ˆš",5,"๋ˆก",18,"๋ˆต",6,"๋ˆฝ",26,"๋‰™๋‰š๋‰›๋‰๋‰ž๋‰Ÿ๋‰ก",6,"๋‰ช",4], +["8841","๋‰ฏ",4,"๋‰ถ",5,"๋‰ฝ",6,"๋І๋Ї๋Šˆ๋ŠŠ",4], +["8861","๋Š๋Š’๋Š“๋Š•๋Š–๋Š—๋Š›",4,"๋Šข๋Šค๋Šง๋Šจ๋Šฉ๋Šซ๋Šญ๋Šฎ๋Šฏ๋Šฑ๋Šฒ๋Šณ๋Šต๋Šถ๋Šท"], +["8881","๋Šธ",15,"๋‹Š๋‹‹๋‹๋‹Ž๋‹๋‹‘๋‹“",4,"๋‹š๋‹œ๋‹ž๋‹Ÿ๋‹ ๋‹ก๋‹ฃ๋‹ง๋‹ฉ๋‹ช๋‹ฐ๋‹ฑ๋‹ฒ๋‹ถ๋‹ผ๋‹ฝ๋‹พ๋Œ‚๋Œƒ๋Œ…๋Œ†๋Œ‡๋Œ‰",6,"๋Œ’๋Œ–",5,"๋Œ",54,"๋—๋™๋š๋๋ ๋ก๋ข๋ฃ"], +["8941","๋ฆ๋จ๋ช๋ฌ๋ญ๋ฏ๋ฒ๋ณ๋ต๋ถ๋ท๋น",6,"๋Ž‚๋ކ",5,"๋Ž"], +["8961","๋ŽŽ๋Ž๋Ž‘๋Ž’๋Ž“๋Ž•",10,"๋Žข",5,"๋Žฉ๋Žช๋Žซ๋Žญ"], +["8981","๋Žฎ",21,"๋†๋‡๋‰๋Š๋๋๋‘๋’๋“๋–๋˜๋š๋œ๋ž๋Ÿ๋ก๋ข๋ฃ๋ฅ๋ฆ๋ง๋ฉ",18,"๋ฝ",18,"๋‘",6,"๋™๋š๋›๋๋ž๋Ÿ๋ก",6,"๋ช๋ฌ",7,"๋ต",15], +["8a41","๋‘…",10,"๋‘’๋‘“๋‘•๋‘–๋‘—๋‘™",6,"๋‘ข๋‘ค๋‘ฆ"], +["8a61","๋‘ง",4,"๋‘ญ",18,"๋’๋’‚"], +["8a81","๋’ƒ",4,"๋’‰",19,"๋’ž",5,"๋’ฅ๋’ฆ๋’ง๋’ฉ๋’ช๋’ซ๋’ญ",7,"๋’ถ๋’ธ๋’บ",5,"๋“๋“‚๋“ƒ๋“…๋“†๋“‡๋“‰",6,"๋“‘๋“’๋““๋“”๋“–",5,"๋“ž๋“Ÿ๋“ก๋“ข๋“ฅ๋“ง",4,"๋“ฎ๋“ฐ๋“ฒ",5,"๋“น",26,"๋”–๋”—๋”™๋”š๋”"], +["8b41","๋”ž",5,"๋”ฆ๋”ซ",4,"๋”ฒ๋”ณ๋”ต๋”ถ๋”ท๋”น",6,"๋•‚๋•†"], +["8b61","๋•‡๋•ˆ๋•‰๋•Š๋•Ž๋•๋•‘๋•’๋•“๋••",6,"๋•ž๋•ข",8], +["8b81","๋•ซ",52,"๋–ข๋–ฃ๋–ฅ๋–ฆ๋–ง๋–ฉ๋–ฌ๋–ญ๋–ฎ๋–ฏ๋–ฒ๋–ถ",4,"๋–พ๋–ฟ๋—๋—‚๋—ƒ๋—…",6,"๋—Ž๋—’",5,"๋—™",18,"๋—ญ",18], +["8c41","๋˜€",15,"๋˜’๋˜“๋˜•๋˜–๋˜—๋˜™",4], +["8c61","๋˜ž",6,"๋˜ฆ",5,"๋˜ญ",6,"๋˜ต",5], +["8c81","๋˜ป",12,"๋™‰",26,"๋™ฅ๋™ฆ๋™ง๋™ฉ",50,"๋šž๋šŸ๋šก๋šข๋šฃ๋šฅ",5,"๋šญ๋šฎ๋šฏ๋šฐ๋šฒ",16], +["8d41","๋›ƒ",16,"๋›•",8], +["8d61","๋›ž",17,"๋›ฑ๋›ฒ๋›ณ๋›ต๋›ถ๋›ท๋›น๋›บ"], +["8d81","๋›ป",4,"๋œ‚๋œƒ๋œ„๋œ†",33,"๋œช๋œซ๋œญ๋œฎ๋œฑ",6,"๋œบ๋œผ",7,"๋…๋†๋‡๋‰๋Š๋‹๋",6,"๋–",9,"๋ก๋ข๋ฃ๋ฅ๋ฆ๋ง๋ฉ",6,"๋ฒ๋ด๋ถ",5,"๋พ๋ฟ๋ž๋ž‚๋žƒ๋ž…",6,"๋žŽ๋ž“๋ž”๋ž•๋žš๋ž›๋ž๋žž"], +["8e41","๋žŸ๋žก",6,"๋žช๋žฎ",5,"๋žถ๋žท๋žน",8], +["8e61","๋Ÿ‚",4,"๋Ÿˆ๋ŸŠ",19], +["8e81","๋Ÿž",13,"๋Ÿฎ๋Ÿฏ๋Ÿฑ๋Ÿฒ๋Ÿณ๋Ÿต",6,"๋Ÿพ๋ ‚",4,"๋ Š๋ ‹๋ ๋ Ž๋ ๋ ‘",6,"๋ š๋ œ๋ ž",5,"๋ ฆ๋ ง๋ ฉ๋ ช๋ ซ๋ ญ",6,"๋ ถ๋ บ",5,"๋ก๋ก‚๋กƒ๋ก…",11,"๋ก’๋ก”",7,"๋กž๋กŸ๋กก๋กข๋กฃ๋กฅ",6,"๋กฎ๋กฐ๋กฒ",5,"๋กน๋กบ๋กป๋กฝ",7], +["8f41","๋ข…",7,"๋ขŽ",17], +["8f61","๋ข ",7,"๋ขฉ",6,"๋ขฑ๋ขฒ๋ขณ๋ขต๋ขถ๋ขท๋ขน",4], +["8f81","๋ขพ๋ขฟ๋ฃ‚๋ฃ„๋ฃ†",5,"๋ฃ๋ฃŽ๋ฃ๋ฃ‘๋ฃ’๋ฃ“๋ฃ•",7,"๋ฃž๋ฃ ๋ฃข",5,"๋ฃช๋ฃซ๋ฃญ๋ฃฎ๋ฃฏ๋ฃฑ",6,"๋ฃบ๋ฃผ๋ฃพ",5,"๋ค…",18,"๋ค™",6,"๋คก",26,"๋คพ๋คฟ๋ฅ๋ฅ‚๋ฅƒ๋ฅ…",6,"๋ฅ๋ฅŽ๋ฅ๋ฅ’",5], +["9041","๋ฅš๋ฅ›๋ฅ๋ฅž๋ฅŸ๋ฅก",6,"๋ฅช๋ฅฌ๋ฅฎ",5,"๋ฅถ๋ฅท๋ฅน๋ฅบ๋ฅป๋ฅฝ"], +["9061","๋ฅพ",5,"๋ฆ†๋ฆˆ๋ฆ‹๋ฆŒ๋ฆ",15], +["9081","๋ฆŸ",12,"๋ฆฎ๋ฆฏ๋ฆฑ๋ฆฒ๋ฆณ๋ฆต",6,"๋ฆพ๋ง€๋ง‚",5,"๋งŠ๋ง‹๋ง๋ง“",4,"๋งš๋งœ๋งŸ๋ง ๋งข๋งฆ๋งง๋งฉ๋งช๋งซ๋งญ",6,"๋งถ๋งป",4,"๋จ‚",5,"๋จ‰",11,"๋จ–",33,"๋จบ๋จป๋จฝ๋จพ๋จฟ๋ฉ๋ฉƒ๋ฉ„๋ฉ…๋ฉ†"], +["9141","๋ฉ‡๋ฉŠ๋ฉŒ๋ฉ๋ฉ๋ฉ‘๋ฉ’๋ฉ–๋ฉ—๋ฉ™๋ฉš๋ฉ›๋ฉ",6,"๋ฉฆ๋ฉช",5], +["9161","๋ฉฒ๋ฉณ๋ฉต๋ฉถ๋ฉท๋ฉน",9,"๋ช†๋ชˆ๋ช‰๋ชŠ๋ช‹๋ช",5], +["9181","๋ช“",20,"๋ชช๋ชญ๋ชฎ๋ชฏ๋ชฑ๋ชณ",4,"๋ชบ๋ชผ๋ชพ",5,"๋ซ…๋ซ†๋ซ‡๋ซ‰",14,"๋ซš",33,"๋ซฝ๋ซพ๋ซฟ๋ฌ๋ฌ‚๋ฌƒ๋ฌ…",7,"๋ฌŽ๋ฌ๋ฌ’",5,"๋ฌ™๋ฌš๋ฌ›๋ฌ๋ฌž๋ฌŸ๋ฌก",6], +["9241","๋ฌจ๋ฌช๋ฌฌ",7,"๋ฌท๋ฌน๋ฌบ๋ฌฟ",4,"๋ญ†๋ญˆ๋ญŠ๋ญ‹๋ญŒ๋ญŽ๋ญ‘๋ญ’"], +["9261","๋ญ“๋ญ•๋ญ–๋ญ—๋ญ™",7,"๋ญข๋ญค",7,"๋ญญ",4], +["9281","๋ญฒ",21,"๋ฎ‰๋ฎŠ๋ฎ‹๋ฎ๋ฎŽ๋ฎ๋ฎ‘",18,"๋ฎฅ๋ฎฆ๋ฎง๋ฎฉ๋ฎช๋ฎซ๋ฎญ",6,"๋ฎต๋ฎถ๋ฎธ",7,"๋ฏ๋ฏ‚๋ฏƒ๋ฏ…๋ฏ†๋ฏ‡๋ฏ‰",6,"๋ฏ‘๋ฏ’๋ฏ”",35,"๋ฏบ๋ฏป๋ฏฝ๋ฏพ๋ฐ"], +["9341","๋ฐƒ",4,"๋ฐŠ๋ฐŽ๋ฐ๋ฐ’๋ฐ“๋ฐ™๋ฐš๋ฐ ๋ฐก๋ฐข๋ฐฃ๋ฐฆ๋ฐจ๋ฐช๋ฐซ๋ฐฌ๋ฐฎ๋ฐฏ๋ฐฒ๋ฐณ๋ฐต"], +["9361","๋ฐถ๋ฐท๋ฐน",6,"๋ฑ‚๋ฑ†๋ฑ‡๋ฑˆ๋ฑŠ๋ฑ‹๋ฑŽ๋ฑ๋ฑ‘",8], +["9381","๋ฑš๋ฑ›๋ฑœ๋ฑž",37,"๋ฒ†๋ฒ‡๋ฒ‰๋ฒŠ๋ฒ๋ฒ",4,"๋ฒ–๋ฒ˜๋ฒ›",4,"๋ฒข๋ฒฃ๋ฒฅ๋ฒฆ๋ฒฉ",6,"๋ฒฒ๋ฒถ",5,"๋ฒพ๋ฒฟ๋ณ๋ณ‚๋ณƒ๋ณ…",7,"๋ณŽ๋ณ’๋ณ“๋ณ”๋ณ–๋ณ—๋ณ™๋ณš๋ณ›๋ณ",22,"๋ณท๋ณน๋ณบ๋ณป๋ณฝ"], +["9441","๋ณพ",5,"๋ด†๋ดˆ๋ดŠ",5,"๋ด‘๋ด’๋ด“๋ด•",8], +["9461","๋ดž",5,"๋ดฅ",6,"๋ดญ",12], +["9481","๋ดบ",5,"๋ต",6,"๋ตŠ๋ต‹๋ต๋ตŽ๋ต๋ต‘",6,"๋ตš",9,"๋ตฅ๋ตฆ๋ตง๋ตฉ",22,"๋ถ‚๋ถƒ๋ถ…๋ถ†๋ถ‹",4,"๋ถ’๋ถ”๋ถ–๋ถ—๋ถ˜๋ถ›๋ถ",6,"๋ถฅ",10,"๋ถฑ",6,"๋ถน",24], +["9541","๋ท’๋ท“๋ท–๋ท—๋ท™๋ทš๋ท›๋ท",11,"๋ทช",5,"๋ทฑ"], +["9561","๋ทฒ๋ทณ๋ทต๋ทถ๋ทท๋ทน",6,"๋ธ๋ธ‚๋ธ„๋ธ†",5,"๋ธŽ๋ธ๋ธ‘๋ธ’๋ธ“"], +["9581","๋ธ•",6,"๋ธž๋ธ ",35,"๋น†๋น‡๋น‰๋นŠ๋น‹๋น๋น",4,"๋น–๋น˜๋นœ๋น๋นž๋นŸ๋นข๋นฃ๋นฅ๋นฆ๋นง๋นฉ๋นซ",4,"๋นฒ๋นถ",4,"๋นพ๋นฟ๋บ๋บ‚๋บƒ๋บ…",6,"๋บŽ๋บ’",5,"๋บš",13,"๋บฉ",14], +["9641","๋บธ",23,"๋ป’๋ป“"], +["9661","๋ป•๋ป–๋ป™",6,"๋ปก๋ปข๋ปฆ",5,"๋ปญ",8], +["9681","๋ปถ",10,"๋ผ‚",5,"๋ผŠ",13,"๋ผš๋ผž",33,"๋ฝ‚๋ฝƒ๋ฝ…๋ฝ†๋ฝ‡๋ฝ‰",6,"๋ฝ’๋ฝ“๋ฝ”๋ฝ–",44], +["9741","๋พƒ",16,"๋พ•",8], +["9761","๋พž",17,"๋พฑ",7], +["9781","๋พน",11,"๋ฟ†",5,"๋ฟŽ๋ฟ๋ฟ‘๋ฟ’๋ฟ“๋ฟ•",6,"๋ฟ๋ฟž๋ฟ ๋ฟข",89,"์€ฝ์€พ์€ฟ"], +["9841","์€",16,"์’",5,"์™์š์›"], +["9861","์์ž์Ÿ์ก",6,"์ช",15], +["9881","์บ",21,"์‚’์‚“์‚•์‚–์‚—์‚™",6,"์‚ข์‚ค์‚ฆ",5,"์‚ฎ์‚ฑ์‚ฒ์‚ท",4,"์‚พ์ƒ‚์ƒƒ์ƒ„์ƒ†์ƒ‡์ƒŠ์ƒ‹์ƒ์ƒŽ์ƒ์ƒ‘",6,"์ƒš์ƒž",5,"์ƒฆ์ƒง์ƒฉ์ƒช์ƒซ์ƒญ",6,"์ƒถ์ƒธ์ƒบ",5,"์„์„‚์„ƒ์„…์„†์„‡์„‰",6,"์„‘์„’์„“์„”์„–",5,"์„ก์„ข์„ฅ์„จ์„ฉ์„ช์„ซ์„ฎ"], +["9941","์„ฒ์„ณ์„ด์„ต์„ท์„บ์„ป์„ฝ์„พ์„ฟ์…",6,"์…Š์…Ž",5,"์…–์…—"], +["9961","์…™์…š์…›์…",6,"์…ฆ์…ช",5,"์…ฑ์…ฒ์…ณ์…ต์…ถ์…ท์…น์…บ์…ป"], +["9981","์…ผ",8,"์††",5,"์†์†‘์†’์†“์†•์†—",4,"์†ž์† ์†ข์†ฃ์†ค์†ฆ์†ง์†ช์†ซ์†ญ์†ฎ์†ฏ์†ฑ",11,"์†พ",5,"์‡…์‡†์‡‡์‡‰์‡Š์‡‹์‡",6,"์‡•์‡–์‡™",6,"์‡ก์‡ข์‡ฃ์‡ฅ์‡ฆ์‡ง์‡ฉ",6,"์‡ฒ์‡ด",7,"์‡พ์‡ฟ์ˆ์ˆ‚์ˆƒ์ˆ…",6,"์ˆŽ์ˆ์ˆ’",5,"์ˆš์ˆ›์ˆ์ˆž์ˆก์ˆข์ˆฃ"], +["9a41","์ˆค์ˆฅ์ˆฆ์ˆง์ˆช์ˆฌ์ˆฎ์ˆฐ์ˆณ์ˆต",16], +["9a61","์‰†์‰‡์‰‰",6,"์‰’์‰“์‰•์‰–์‰—์‰™",6,"์‰ก์‰ข์‰ฃ์‰ค์‰ฆ"], +["9a81","์‰ง",4,"์‰ฎ์‰ฏ์‰ฑ์‰ฒ์‰ณ์‰ต",6,"์‰พ์Š€์Š‚",5,"์ŠŠ",5,"์Š‘",6,"์Š™์Šš์Šœ์Šž",5,"์Šฆ์Šง์Šฉ์Šช์Šซ์Šฎ",5,"์Šถ์Šธ์Šบ",33,"์‹ž์‹Ÿ์‹ก์‹ข์‹ฅ",5,"์‹ฎ์‹ฐ์‹ฒ์‹ณ์‹ด์‹ต์‹ท์‹บ์‹ฝ์‹พ์‹ฟ์Œ",6,"์ŒŠ์Œ‹์ŒŽ์Œ"], +["9b41","์Œ์Œ‘์Œ’์Œ–์Œ—์Œ™์Œš์Œ›์Œ",6,"์Œฆ์Œง์Œช",8], +["9b61","์Œณ",17,"์†",7], +["9b81","์Ž",25,"์ช์ซ์ญ์ฎ์ฏ์ฑ์ณ",4,"์บ์ป์พ",5,"์Ž…์ކ์އ์މ์ŽŠ์Ž‹์Ž",50,"์",22,"์š"], +["9c41","์›์์ž์ก์ฃ",4,"์ช์ซ์ฌ์ฎ",5,"์ถ์ท์น",5], +["9c61","์ฟ",8,"์‰",6,"์‘",9], +["9c81","์›",8,"์ฅ",6,"์ญ์ฎ์ฏ์ฑ์ฒ์ณ์ต",6,"์พ",9,"์‘‰",26,"์‘ฆ์‘ง์‘ฉ์‘ช์‘ซ์‘ญ",6,"์‘ถ์‘ท์‘ธ์‘บ",5,"์’",18,"์’•",6,"์’",12], +["9d41","์’ช",13,"์’น์’บ์’ป์’ฝ",8], +["9d61","์“†",25], +["9d81","์“ ",8,"์“ช",5,"์“ฒ์“ณ์“ต์“ถ์“ท์“น์“ป์“ผ์“ฝ์“พ์”‚",9,"์”์”Ž์”์”‘์”’์”“์”•",6,"์”",10,"์”ช์”ซ์”ญ์”ฎ์”ฏ์”ฑ",6,"์”บ์”ผ์”พ",5,"์•†์•‡์•‹์•์•์•‘์•’์•–์•š์•›์•œ์•Ÿ์•ข์•ฃ์•ฅ์•ฆ์•ง์•ฉ",6,"์•ฒ์•ถ",5,"์•พ์•ฟ์–์–‚์–ƒ์–…์–†์–ˆ์–‰์–Š์–‹์–Ž์–์–’์–“์–”"], +["9e41","์––์–™์–š์–›์–์–ž์–Ÿ์–ก",7,"์–ช",9,"์–ถ"], +["9e61","์–ท์–บ์–ฟ",4,"์—‹์—์—์—’์—“์—•์—–์——์—™",6,"์—ข์—ค์—ฆ์—ง"], +["9e81","์—จ์—ฉ์—ช์—ซ์—ฏ์—ฑ์—ฒ์—ณ์—ต์—ธ์—น์—บ์—ป์˜‚์˜ƒ์˜„์˜‰์˜Š์˜‹์˜์˜Ž์˜์˜‘",6,"์˜š์˜",6,"์˜ฆ์˜ง์˜ฉ์˜ช์˜ซ์˜ฏ์˜ฑ์˜ฒ์˜ถ์˜ธ์˜บ์˜ผ์˜ฝ์˜พ์˜ฟ์™‚์™ƒ์™…์™†์™‡์™‰",6,"์™’์™–",5,"์™ž์™Ÿ์™ก",10,"์™ญ์™ฎ์™ฐ์™ฒ",5,"์™บ์™ป์™ฝ์™พ์™ฟ์š",6,"์šŠ์šŒ์šŽ",5,"์š–์š—์š™์šš์š›์š",6,"์šฆ"], +["9f41","์šจ์šช",5,"์šฒ์šณ์šต์šถ์šท์šป",4,"์›‚์›„์›†",5,"์›Ž"], +["9f61","์›์›‘์›’์›“์›•",6,"์›ž์›Ÿ์›ข",5,"์›ช์›ซ์›ญ์›ฎ์›ฏ์›ฑ์›ฒ"], +["9f81","์›ณ",4,"์›บ์›ป์›ผ์›พ",5,"์œ†์œ‡์œ‰์œŠ์œ‹์œ",6,"์œ–์œ˜์œš",5,"์œข์œฃ์œฅ์œฆ์œง์œฉ",6,"์œฒ์œด์œถ์œธ์œน์œบ์œป์œพ์œฟ์์‚์ƒ์…",4,"์‹์Ž์์™์š์›์์ž์Ÿ์ก",6,"์ฉ์ช์ฌ",7,"์ถ์ท์น์บ์ป์ฟ์ž€์ž์ž‚์ž†์ž‹์žŒ์ž์ž์ž’์ž“์ž•์ž™์ž›",4,"์žข์žง",4,"์žฎ์žฏ์žฑ์žฒ์žณ์žต์žถ์žท"], +["a041","์žธ์žน์žบ์žป์žพ์Ÿ‚",5,"์ŸŠ์Ÿ‹์Ÿ์Ÿ์Ÿ‘",6,"์Ÿ™์Ÿš์Ÿ›์Ÿœ"], +["a061","์Ÿž",5,"์Ÿฅ์Ÿฆ์Ÿง์Ÿฉ์Ÿช์Ÿซ์Ÿญ",13], +["a081","์Ÿป",4,"์ ‚์ ƒ์ …์ †์ ‡์ ‰์ ‹",4,"์ ’์ ”์ —",4,"์ ž์ Ÿ์ ก์ ข์ ฃ์ ฅ",6,"์ ฎ์ ฐ์ ฒ",5,"์ น์ บ์ ป์ ฝ์ พ์ ฟ์ก",6,"์กŠ์ก‹์กŽ",5,"์ก•",26,"์กฒ์กณ์กต์กถ์กท์กน์กป",4,"์ข‚์ข„์ขˆ์ข‰์ขŠ์ขŽ",5,"์ข•",7,"์ขž์ข ์ขข์ขฃ์ขค"], +["a141","์ขฅ์ขฆ์ขง์ขฉ",18,"์ขพ์ขฟ์ฃ€์ฃ"], +["a161","์ฃ‚์ฃƒ์ฃ…์ฃ†์ฃ‡์ฃ‰์ฃŠ์ฃ‹์ฃ",6,"์ฃ–์ฃ˜์ฃš",5,"์ฃข์ฃฃ์ฃฅ"], +["a181","์ฃฆ",14,"์ฃถ",5,"์ฃพ์ฃฟ์ค์ค‚์คƒ์ค‡",4,"์คŽใ€€ใ€ใ€‚ยทโ€ฅโ€ฆยจใ€ƒยญโ€•โˆฅ๏ผผโˆผโ€˜โ€™โ€œโ€ใ€”ใ€•ใ€ˆ",9,"ยฑร—รทโ‰ โ‰คโ‰ฅโˆžโˆดยฐโ€ฒโ€ณโ„ƒโ„ซ๏ฟ ๏ฟก๏ฟฅโ™‚โ™€โˆ โŠฅโŒ’โˆ‚โˆ‡โ‰กโ‰’ยงโ€ปโ˜†โ˜…โ—‹โ—โ—Žโ—‡โ—†โ–กโ– โ–ณโ–ฒโ–ฝโ–ผโ†’โ†โ†‘โ†“โ†”ใ€“โ‰ชโ‰ซโˆšโˆฝโˆโˆตโˆซโˆฌโˆˆโˆ‹โІโЇโŠ‚โŠƒโˆชโˆฉโˆงโˆจ๏ฟข"], +["a241","์ค์ค’",5,"์ค™",18], +["a261","์คญ",6,"์คต",18], +["a281","์ฅˆ",7,"์ฅ’์ฅ“์ฅ•์ฅ–์ฅ—์ฅ™",6,"์ฅข์ฅค",7,"์ฅญ์ฅฎ์ฅฏโ‡’โ‡”โˆ€โˆƒยด๏ฝžห‡ห˜หหšห™ยธห›ยกยฟหโˆฎโˆ‘โˆยคโ„‰โ€ฐโ—โ—€โ–ทโ–ถโ™คโ™ โ™กโ™ฅโ™งโ™ฃโŠ™โ—ˆโ–ฃโ—โ—‘โ–’โ–คโ–ฅโ–จโ–งโ–ฆโ–ฉโ™จโ˜โ˜Žโ˜œโ˜žยถโ€ โ€กโ†•โ†—โ†™โ†–โ†˜โ™ญโ™ฉโ™ชโ™ฌใ‰ฟใˆœโ„–ใ‡โ„ขใ‚ใ˜โ„กโ‚ฌยฎ"], +["a341","์ฅฑ์ฅฒ์ฅณ์ฅต",6,"์ฅฝ",10,"์ฆŠ์ฆ‹์ฆ์ฆŽ์ฆ"], +["a361","์ฆ‘",6,"์ฆš์ฆœ์ฆž",16], +["a381","์ฆฏ",16,"์ง‚์งƒ์ง…์ง†์ง‰์ง‹",4,"์ง’์ง”์ง—์ง˜์ง›๏ผ",58,"๏ฟฆ๏ผฝ",32,"๏ฟฃ"], +["a441","์งž์งŸ์งก์งฃ์งฅ์งฆ์งจ์งฉ์งช์งซ์งฎ์งฒ",5,"์งบ์งป์งฝ์งพ์งฟ์จ์จ‚์จƒ์จ„"], +["a461","์จ…์จ†์จ‡์จŠ์จŽ",5,"์จ•์จ–์จ—์จ™",12], +["a481","์จฆ์จง์จจ์จช",28,"ใ„ฑ",93], +["a541","์ฉ‡",4,"์ฉŽ์ฉ์ฉ‘์ฉ’์ฉ“์ฉ•",6,"์ฉž์ฉข",5,"์ฉฉ์ฉช"], +["a561","์ฉซ",17,"์ฉพ",5,"์ช…์ช†"], +["a581","์ช‡",16,"์ช™",14,"โ…ฐ",9], +["a5b0","โ… ",9], +["a5c1","ฮ‘",16,"ฮฃ",6], +["a5e1","ฮฑ",16,"ฯƒ",6], +["a641","์ชจ",19,"์ชพ์ชฟ์ซ์ซ‚์ซƒ์ซ…"], +["a661","์ซ†",5,"์ซŽ์ซ์ซ’์ซ”์ซ•์ซ–์ซ—์ซš",5,"์ซก",6], +["a681","์ซจ์ซฉ์ซช์ซซ์ซญ",6,"์ซต",18,"์ฌ‰์ฌŠโ”€โ”‚โ”Œโ”โ”˜โ””โ”œโ”ฌโ”คโ”ดโ”ผโ”โ”ƒโ”โ”“โ”›โ”—โ”ฃโ”ณโ”ซโ”ปโ•‹โ” โ”ฏโ”จโ”ทโ”ฟโ”โ”ฐโ”ฅโ”ธโ•‚โ”’โ”‘โ”šโ”™โ”–โ”•โ”Žโ”โ”žโ”Ÿโ”กโ”ขโ”ฆโ”งโ”ฉโ”ชโ”ญโ”ฎโ”ฑโ”ฒโ”ตโ”ถโ”นโ”บโ”ฝโ”พโ•€โ•โ•ƒ",7], +["a741","์ฌ‹",4,"์ฌ‘์ฌ’์ฌ“์ฌ•์ฌ–์ฌ—์ฌ™",6,"์ฌข",7], +["a761","์ฌช",22,"์ญ‚์ญƒ์ญ„"], +["a781","์ญ…์ญ†์ญ‡์ญŠ์ญ‹์ญ์ญŽ์ญ์ญ‘",6,"์ญš์ญ›์ญœ์ญž",5,"์ญฅ",7,"ใŽ•ใŽ–ใŽ—โ„“ใŽ˜ใ„ใŽฃใŽคใŽฅใŽฆใŽ™",9,"ใŠใŽใŽŽใŽใใŽˆใމใˆใŽงใŽจใŽฐ",9,"ใŽ€",4,"ใŽบ",5,"ใސ",4,"โ„ฆใ€ใใŽŠใŽ‹ใŽŒใ–ใ…ใŽญใŽฎใŽฏใ›ใŽฉใŽชใŽซใŽฌใใใ“ใƒใ‰ใœใ†"], +["a841","์ญญ",10,"์ญบ",14], +["a861","์ฎ‰",18,"์ฎ",6], +["a881","์ฎค",19,"์ฎน",11,"ร†รยชฤฆ"], +["a8a6","ฤฒ"], +["a8a8","ฤฟลร˜ล’ยบรžลฆลŠ"], +["a8b1","ใ‰ ",27,"โ“",25,"โ‘ ",14,"ยฝโ…“โ…”ยผยพโ…›โ…œโ…โ…ž"], +["a941","์ฏ…",14,"์ฏ•",10], +["a961","์ฏ ์ฏก์ฏข์ฏฃ์ฏฅ์ฏฆ์ฏจ์ฏช",18], +["a981","์ฏฝ",14,"์ฐŽ์ฐ์ฐ‘์ฐ’์ฐ“์ฐ•",6,"์ฐž์ฐŸ์ฐ ์ฐฃ์ฐครฆฤ‘รฐฤงฤฑฤณฤธล€ล‚รธล“รŸรพลงล‹ล‰ใˆ€",27,"โ’œ",25,"โ‘ด",14,"ยนยฒยณโดโฟโ‚โ‚‚โ‚ƒโ‚„"], +["aa41","์ฐฅ์ฐฆ์ฐช์ฐซ์ฐญ์ฐฏ์ฐฑ",6,"์ฐบ์ฐฟ",4,"์ฑ†์ฑ‡์ฑ‰์ฑŠ์ฑ‹์ฑ์ฑŽ"], +["aa61","์ฑ",4,"์ฑ–์ฑš",5,"์ฑก์ฑข์ฑฃ์ฑฅ์ฑง์ฑฉ",6,"์ฑฑ์ฑฒ"], +["aa81","์ฑณ์ฑด์ฑถ",29,"ใ",82], +["ab41","์ฒ”์ฒ•์ฒ–์ฒ—์ฒš์ฒ›์ฒ์ฒž์ฒŸ์ฒก",6,"์ฒช์ฒฎ",5,"์ฒถ์ฒท์ฒน"], +["ab61","์ฒบ์ฒป์ฒฝ",6,"์ณ†์ณˆ์ณŠ",5,"์ณ‘์ณ’์ณ“์ณ•",5], +["ab81","์ณ›",8,"์ณฅ",6,"์ณญ์ณฎ์ณฏ์ณฑ",12,"ใ‚ก",85], +["ac41","์ณพ์ณฟ์ด€์ด‚",5,"์ดŠ์ด‹์ด์ดŽ์ด์ด‘",6,"์ดš์ดœ์ดž์ดŸ์ด "], +["ac61","์ดก์ดข์ดฃ์ดฅ์ดฆ์ดง์ดฉ์ดช์ดซ์ดญ",11,"์ดบ",4], +["ac81","์ดฟ",28,"์ต์ตž์ตŸะ",5,"ะะ–",25], +["acd1","ะฐ",5,"ั‘ะถ",25], +["ad41","์ตก์ตข์ตฃ์ตฅ",6,"์ตฎ์ตฐ์ตฒ",5,"์ตน",7], +["ad61","์ถ",6,"์ถ‰",10,"์ถ–์ถ—์ถ™์ถš์ถ›์ถ์ถž์ถŸ"], +["ad81","์ถ ์ถก์ถข์ถฃ์ถฆ์ถจ์ถช",5,"์ถฑ",18,"์ท…"], +["ae41","์ท†",5,"์ท์ทŽ์ท์ท‘",16], +["ae61","์ทข",5,"์ทฉ์ทช์ทซ์ทญ์ทฎ์ทฏ์ทฑ",6,"์ทบ์ทผ์ทพ",4], +["ae81","์ธƒ์ธ…์ธ†์ธ‡์ธ‰์ธŠ์ธ‹์ธ",6,"์ธ•์ธ–์ธ—์ธ˜์ธš",5,"์ธข์ธฃ์ธฅ์ธฆ์ธง์ธฉ์ธช์ธซ"], +["af41","์ธฌ์ธญ์ธฎ์ธฏ์ธฒ์ธด์ธถ",19], +["af61","์นŠ",13,"์นš์น›์น์นž์นข",5,"์นช์นฌ"], +["af81","์นฎ",5,"์นถ์นท์นน์นบ์นป์นฝ",6,"์บ†์บˆ์บŠ",5,"์บ’์บ“์บ•์บ–์บ—์บ™"], +["b041","์บš",5,"์บข์บฆ",5,"์บฎ",12], +["b061","์บป",5,"์ป‚",19], +["b081","์ป–",13,"์ปฆ์ปง์ปฉ์ปช์ปญ",6,"์ปถ์ปบ",5,"๊ฐ€๊ฐ๊ฐ„๊ฐ‡๊ฐˆ๊ฐ‰๊ฐŠ๊ฐ",7,"๊ฐ™",4,"๊ฐ ๊ฐค๊ฐฌ๊ฐญ๊ฐฏ๊ฐฐ๊ฐฑ๊ฐธ๊ฐน๊ฐผ๊ฑ€๊ฑ‹๊ฑ๊ฑ”๊ฑ˜๊ฑœ๊ฑฐ๊ฑฑ๊ฑด๊ฑท๊ฑธ๊ฑบ๊ฒ€๊ฒ๊ฒƒ๊ฒ„๊ฒ…๊ฒ†๊ฒ‰๊ฒŠ๊ฒ‹๊ฒŒ๊ฒ๊ฒ”๊ฒœ๊ฒ๊ฒŸ๊ฒ ๊ฒก๊ฒจ๊ฒฉ๊ฒช๊ฒฌ๊ฒฏ๊ฒฐ๊ฒธ๊ฒน๊ฒป๊ฒผ๊ฒฝ๊ณ๊ณ„๊ณˆ๊ณŒ๊ณ•๊ณ—๊ณ ๊ณก๊ณค๊ณง๊ณจ๊ณช๊ณฌ๊ณฏ๊ณฐ๊ณฑ๊ณณ๊ณต๊ณถ๊ณผ๊ณฝ๊ด€๊ด„๊ด†"], +["b141","์ผ‚์ผƒ์ผ…์ผ†์ผ‡์ผ‰",6,"์ผ’์ผ”์ผ–",5,"์ผ์ผž์ผŸ์ผก์ผข์ผฃ"], +["b161","์ผฅ",6,"์ผฎ์ผฒ",5,"์ผน",11], +["b181","์ฝ…",14,"์ฝ–์ฝ—์ฝ™์ฝš์ฝ›์ฝ",6,"์ฝฆ์ฝจ์ฝช์ฝซ์ฝฌ๊ดŒ๊ด๊ด๊ด‘๊ด˜๊ดœ๊ด ๊ดฉ๊ดฌ๊ดญ๊ดด๊ดต๊ดธ๊ดผ๊ต„๊ต…๊ต‡๊ต‰๊ต๊ต”๊ต˜๊ตก๊ตฃ๊ตฌ๊ตญ๊ตฐ๊ตณ๊ตด๊ตต๊ตถ๊ตป๊ตผ๊ตฝ๊ตฟ๊ถ๊ถ‚๊ถˆ๊ถ‰๊ถŒ๊ถ๊ถœ๊ถ๊ถค๊ถท๊ท€๊ท๊ท„๊ทˆ๊ท๊ท‘๊ท“๊ทœ๊ท ๊ทค๊ทธ๊ทน๊ทผ๊ทฟ๊ธ€๊ธ๊ธˆ๊ธ‰๊ธ‹๊ธ๊ธ”๊ธฐ๊ธฑ๊ธด๊ธท๊ธธ๊ธบ๊น€๊น๊นƒ๊น…๊น†๊นŠ๊นŒ๊น๊นŽ๊น๊น”๊น–๊นœ๊น๊นŸ๊น ๊นก๊นฅ๊นจ๊นฉ๊นฌ๊นฐ๊นธ"], +["b241","์ฝญ์ฝฎ์ฝฏ์ฝฒ์ฝณ์ฝต์ฝถ์ฝท์ฝน",6,"์พ์พ‚์พƒ์พ„์พ†",5,"์พ"], +["b261","์พŽ",18,"์พข",5,"์พฉ"], +["b281","์พช",5,"์พฑ",18,"์ฟ…",6,"๊นน๊นป๊นผ๊นฝ๊บ„๊บ…๊บŒ๊บผ๊บฝ๊บพ๊ป€๊ป„๊ปŒ๊ป๊ป๊ป๊ป‘๊ป˜๊ป™๊ปœ๊ปจ๊ปซ๊ปญ๊ปด๊ปธ๊ปผ๊ผ‡๊ผˆ๊ผ๊ผ๊ผฌ๊ผญ๊ผฐ๊ผฒ๊ผด๊ผผ๊ผฝ๊ผฟ๊ฝ๊ฝ‚๊ฝƒ๊ฝˆ๊ฝ‰๊ฝ๊ฝœ๊ฝ๊ฝค๊ฝฅ๊ฝน๊พ€๊พ„๊พˆ๊พ๊พ‘๊พ•๊พœ๊พธ๊พน๊พผ๊ฟ€๊ฟ‡๊ฟˆ๊ฟ‰๊ฟ‹๊ฟ๊ฟŽ๊ฟ”๊ฟœ๊ฟจ๊ฟฉ๊ฟฐ๊ฟฑ๊ฟด๊ฟธ๋€€๋€๋€„๋€Œ๋€๋€”๋€œ๋€๋€จ๋„๋…๋ˆ๋Š๋Œ๋Ž๋“๋”๋•๋—๋™"], +["b341","์ฟŒ",19,"์ฟข์ฟฃ์ฟฅ์ฟฆ์ฟง์ฟฉ"], +["b361","์ฟช",5,"์ฟฒ์ฟด์ฟถ",5,"์ฟฝ์ฟพ์ฟฟํ€ํ€‚ํ€ƒํ€…",5], +["b381","ํ€‹",5,"ํ€’",5,"ํ€™",19,"๋๋ผ๋ฝ๋‚€๋‚„๋‚Œ๋‚๋‚๋‚‘๋‚˜๋‚™๋‚š๋‚œ๋‚Ÿ๋‚ ๋‚ก๋‚ข๋‚จ๋‚ฉ๋‚ซ",4,"๋‚ฑ๋‚ณ๋‚ด๋‚ต๋‚ธ๋‚ผ๋ƒ„๋ƒ…๋ƒ‡๋ƒˆ๋ƒ‰๋ƒ๋ƒ‘๋ƒ”๋ƒ˜๋ƒ ๋ƒฅ๋„ˆ๋„‰๋„‹๋„Œ๋„๋„’๋„“๋„˜๋„™๋„›๋„œ๋„๋„ฃ๋„ค๋„ฅ๋„จ๋„ฌ๋„ด๋„ต๋„ท๋„ธ๋„น๋…€๋…๋…„๋…ˆ๋…๋…‘๋…”๋…•๋…˜๋…œ๋… ๋…ธ๋…น๋…ผ๋†€๋†‚๋†ˆ๋†‰๋†‹๋†๋†’๋†“๋†”๋†˜๋†œ๋†จ๋‡Œ๋‡๋‡”๋‡œ๋‡"], +["b441","ํ€ฎ",5,"ํ€ถํ€ทํ€นํ€บํ€ปํ€ฝ",6,"ํ†ํˆํŠ",5], +["b461","ํ‘ํ’ํ“ํ•ํ–ํ—ํ™",6,"ํก",10,"ํฎํฏ"], +["b481","ํฑํฒํณํต",6,"ํพํฟํ‚€ํ‚‚",18,"๋‡Ÿ๋‡จ๋‡ฉ๋‡ฌ๋‡ฐ๋‡น๋‡ป๋‡ฝ๋ˆ„๋ˆ…๋ˆˆ๋ˆ‹๋ˆŒ๋ˆ”๋ˆ•๋ˆ—๋ˆ™๋ˆ ๋ˆด๋ˆผ๋‰˜๋‰œ๋‰ ๋‰จ๋‰ฉ๋‰ด๋‰ต๋‰ผ๋Š„๋Š…๋Љ๋А๋Š‘๋Š”๋Š˜๋Š™๋Šš๋Š ๋Šก๋Šฃ๋Šฅ๋Šฆ๋Šช๋Šฌ๋Šฐ๋Šด๋‹ˆ๋‹‰๋‹Œ๋‹๋‹’๋‹˜๋‹™๋‹›๋‹๋‹ข๋‹ค๋‹ฅ๋‹ฆ๋‹จ๋‹ซ",4,"๋‹ณ๋‹ด๋‹ต๋‹ท",4,"๋‹ฟ๋Œ€๋Œ๋Œ„๋Œˆ๋Œ๋Œ‘๋Œ“๋Œ”๋Œ•๋Œœ๋”๋•๋–๋˜๋›๋œ๋ž๋Ÿ๋ค๋ฅ"], +["b541","ํ‚•",14,"ํ‚ฆํ‚งํ‚ฉํ‚ชํ‚ซํ‚ญ",5], +["b561","ํ‚ณํ‚ถํ‚ธํ‚บ",5,"ํƒ‚ํƒƒํƒ…ํƒ†ํƒ‡ํƒŠ",5,"ํƒ’ํƒ–",4], +["b581","ํƒ›ํƒžํƒŸํƒกํƒขํƒฃํƒฅ",6,"ํƒฎํƒฒ",5,"ํƒน",11,"๋ง๋ฉ๋ซ๋ฎ๋ฐ๋ฑ๋ด๋ธ๋Ž€๋ށ๋Žƒ๋Ž„๋Ž…๋ŽŒ๋ސ๋Ž”๋Ž ๋Žก๋Žจ๋Žฌ๋„๋…๋ˆ๋‹๋Œ๋Ž๋๋”๋•๋—๋™๋›๋๋ ๋ค๋จ๋ผ๋๋˜๋œ๋ ๋จ๋ฉ๋ซ๋ด๋‘๋‘‘๋‘”๋‘˜๋‘ ๋‘ก๋‘ฃ๋‘ฅ๋‘ฌ๋’€๋’ˆ๋’๋’ค๋’จ๋’ฌ๋’ต๋’ท๋’น๋“€๋“„๋“ˆ๋“๋“•๋“œ๋“๋“ ๋“ฃ๋“ค๋“ฆ๋“ฌ๋“ญ๋“ฏ๋“ฑ๋“ธ๋””๋”•๋”˜๋”›๋”œ๋”ค๋”ฅ๋”ง๋”จ๋”ฉ๋”ช๋”ฐ๋”ฑ๋”ด๋”ธ"], +["b641","ํ„…",7,"ํ„Ž",17], +["b661","ํ„ ",15,"ํ„ฒํ„ณํ„ตํ„ถํ„ทํ„นํ„ปํ„ผํ„ฝํ„พ"], +["b681","ํ„ฟํ…‚ํ…†",5,"ํ…Žํ…ํ…‘ํ…’ํ…“ํ…•",6,"ํ…žํ… ํ…ข",5,"ํ…ฉํ…ชํ…ซํ…ญ๋•€๋•๋•ƒ๋•„๋•…๋•‹๋•Œ๋•๋•๋•”๋•œ๋•๋•Ÿ๋• ๋•ก๋– ๋–ก๋–ค๋–จ๋–ช๋–ซ๋–ฐ๋–ฑ๋–ณ๋–ด๋–ต๋–ป๋–ผ๋–ฝ๋—€๋—„๋—Œ๋—๋—๋—๋—‘๋—˜๋—ฌ๋˜๋˜‘๋˜”๋˜˜๋˜ฅ๋˜ฌ๋˜ด๋™ˆ๋™ค๋™จ๋šœ๋š๋š ๋šค๋šซ๋šฌ๋šฑ๋›”๋›ฐ๋›ด๋›ธ๋œ€๋œ๋œ…๋œจ๋œฉ๋œฌ๋œฏ๋œฐ๋œธ๋œน๋œป๋„๋ˆ๋Œ๋”๋•๋ ๋ค๋จ๋ฐ๋ฑ๋ณ๋ต๋ผ๋ฝ๋ž€๋ž„๋žŒ๋ž๋ž๋ž๋ž‘๋ž’๋ž–๋ž—"], +["b741","ํ…ฎ",13,"ํ…ฝ",6,"ํ†…ํ††ํ†‡ํ†‰ํ†Š"], +["b761","ํ†‹",20,"ํ†ขํ†ฃํ†ฅํ†ฆํ†ง"], +["b781","ํ†ฉ",6,"ํ†ฒํ†ดํ†ถํ†ทํ†ธํ†นํ†ปํ†ฝํ†พํ†ฟํ‡",14,"๋ž˜๋ž™๋žœ๋ž ๋žจ๋žฉ๋žซ๋žฌ๋žญ๋žด๋žต๋žธ๋Ÿ‡๋Ÿ‰๋Ÿฌ๋Ÿญ๋Ÿฐ๋Ÿด๋Ÿผ๋Ÿฝ๋Ÿฟ๋ €๋ ๋ ‡๋ ˆ๋ ‰๋ Œ๋ ๋ ˜๋ ™๋ ›๋ ๋ ค๋ ฅ๋ จ๋ ฌ๋ ด๋ ต๋ ท๋ ธ๋ น๋ก€๋ก„๋ก‘๋ก“๋กœ๋ก๋ก ๋กค๋กฌ๋กญ๋กฏ๋กฑ๋กธ๋กผ๋ข๋ขจ๋ขฐ๋ขด๋ขธ๋ฃ€๋ฃ๋ฃƒ๋ฃ…๋ฃŒ๋ฃ๋ฃ”๋ฃ๋ฃŸ๋ฃก๋ฃจ๋ฃฉ๋ฃฌ๋ฃฐ๋ฃธ๋ฃน๋ฃป๋ฃฝ๋ค„๋ค˜๋ค ๋คผ๋คฝ๋ฅ€๋ฅ„๋ฅŒ๋ฅ๋ฅ‘๋ฅ˜๋ฅ™๋ฅœ๋ฅ ๋ฅจ๋ฅฉ"], +["b841","ํ‡",7,"ํ‡™",17], +["b861","ํ‡ซ",8,"ํ‡ตํ‡ถํ‡ทํ‡น",13], +["b881","ํˆˆํˆŠ",5,"ํˆ‘",24,"๋ฅซ๋ฅญ๋ฅด๋ฅต๋ฅธ๋ฅผ๋ฆ„๋ฆ…๋ฆ‡๋ฆ‰๋ฆŠ๋ฆ๋ฆŽ๋ฆฌ๋ฆญ๋ฆฐ๋ฆด๋ฆผ๋ฆฝ๋ฆฟ๋ง๋งˆ๋ง‰๋งŒ๋งŽ",4,"๋ง˜๋ง™๋ง›๋ง๋งž๋งก๋งฃ๋งค๋งฅ๋งจ๋งฌ๋งด๋งต๋งท๋งธ๋งน๋งบ๋จ€๋จ๋จˆ๋จ•๋จธ๋จน๋จผ๋ฉ€๋ฉ‚๋ฉˆ๋ฉ‰๋ฉ‹๋ฉ๋ฉŽ๋ฉ“๋ฉ”๋ฉ•๋ฉ˜๋ฉœ๋ฉค๋ฉฅ๋ฉง๋ฉจ๋ฉฉ๋ฉฐ๋ฉฑ๋ฉด๋ฉธ๋ชƒ๋ช„๋ช…๋ช‡๋ชŒ๋ชจ๋ชฉ๋ชซ๋ชฌ๋ชฐ๋ชฒ๋ชธ๋ชน๋ชป๋ชฝ๋ซ„๋ซˆ๋ซ˜๋ซ™๋ซผ"], +["b941","ํˆชํˆซํˆฎํˆฏํˆฑํˆฒํˆณํˆต",6,"ํˆพํ‰€ํ‰‚",5,"ํ‰‰ํ‰Šํ‰‹ํ‰Œ"], +["b961","ํ‰",14,"ํ‰",6,"ํ‰ฅํ‰ฆํ‰งํ‰จ"], +["b981","ํ‰ฉ",22,"ํŠ‚ํŠƒํŠ…ํІํЇํЉํŠŠํŠ‹ํŠŒ๋ฌ€๋ฌ„๋ฌ๋ฌ๋ฌ‘๋ฌ˜๋ฌœ๋ฌ ๋ฌฉ๋ฌซ๋ฌด๋ฌต๋ฌถ๋ฌธ๋ฌป๋ฌผ๋ฌฝ๋ฌพ๋ญ„๋ญ…๋ญ‡๋ญ‰๋ญ๋ญ๋ญ๋ญ”๋ญ˜๋ญก๋ญฃ๋ญฌ๋ฎˆ๋ฎŒ๋ฎ๋ฎค๋ฎจ๋ฎฌ๋ฎด๋ฎท๋ฏ€๋ฏ„๋ฏˆ๋ฏ๋ฏ“๋ฏธ๋ฏน๋ฏผ๋ฏฟ๋ฐ€๋ฐ‚๋ฐˆ๋ฐ‰๋ฐ‹๋ฐŒ๋ฐ๋ฐ๋ฐ‘๋ฐ”",4,"๋ฐ›",4,"๋ฐค๋ฐฅ๋ฐง๋ฐฉ๋ฐญ๋ฐฐ๋ฐฑ๋ฐด๋ฐธ๋ฑ€๋ฑ๋ฑƒ๋ฑ„๋ฑ…๋ฑ‰๋ฑŒ๋ฑ๋ฑ๋ฑ๋ฒ„๋ฒ…๋ฒˆ๋ฒ‹๋ฒŒ๋ฒŽ๋ฒ”๋ฒ•๋ฒ—"], +["ba41","ํŠํŠŽํŠํŠ’ํŠ“ํŠ”ํŠ–",5,"ํŠํŠžํŠŸํŠกํŠขํŠฃํŠฅ",6,"ํŠญ"], +["ba61","ํŠฎํŠฏํŠฐํŠฒ",5,"ํŠบํŠปํŠฝํŠพํ‹ํ‹ƒ",4,"ํ‹Šํ‹Œ",5], +["ba81","ํ‹’ํ‹“ํ‹•ํ‹–ํ‹—ํ‹™ํ‹šํ‹›ํ‹",6,"ํ‹ฆ",9,"ํ‹ฒํ‹ณํ‹ตํ‹ถํ‹ทํ‹นํ‹บ๋ฒ™๋ฒš๋ฒ ๋ฒก๋ฒค๋ฒง๋ฒจ๋ฒฐ๋ฒฑ๋ฒณ๋ฒด๋ฒต๋ฒผ๋ฒฝ๋ณ€๋ณ„๋ณ๋ณ๋ณ๋ณ‘๋ณ•๋ณ˜๋ณœ๋ณด๋ณต๋ณถ๋ณธ๋ณผ๋ด„๋ด…๋ด‡๋ด‰๋ด๋ด”๋ดค๋ดฌ๋ต€๋ตˆ๋ต‰๋ตŒ๋ต๋ต˜๋ต™๋ตค๋ตจ๋ถ€๋ถ๋ถ„๋ถ‡๋ถˆ๋ถ‰๋ถŠ๋ถ๋ถ‘๋ถ“๋ถ•๋ถ™๋ถš๋ถœ๋ถค๋ถฐ๋ถธ๋ท”๋ท•๋ท˜๋ทœ๋ทฉ๋ทฐ๋ทด๋ทธ๋ธ€๋ธƒ๋ธ…๋ธŒ๋ธ๋ธ๋ธ”๋ธœ๋ธ๋ธŸ๋น„๋น…๋นˆ๋นŒ๋นŽ๋น”๋น•๋น—๋น™๋นš๋น›๋น ๋นก๋นค"], +["bb41","ํ‹ป",4,"ํŒ‚ํŒ„ํŒ†",5,"ํŒํŒ‘ํŒ’ํŒ“ํŒ•ํŒ—",4,"ํŒžํŒขํŒฃ"], +["bb61","ํŒคํŒฆํŒงํŒชํŒซํŒญํŒฎํŒฏํŒฑ",6,"ํŒบํŒพ",5,"ํ†ํ‡ํˆํ‰"], +["bb81","ํŠ",31,"๋นจ๋นช๋นฐ๋นฑ๋นณ๋นด๋นต๋นป๋นผ๋นฝ๋บ€๋บ„๋บŒ๋บ๋บ๋บ๋บ‘๋บ˜๋บ™๋บจ๋ป๋ป‘๋ป”๋ป—๋ป˜๋ป ๋ปฃ๋ปค๋ปฅ๋ปฌ๋ผ๋ผˆ๋ผ‰๋ผ˜๋ผ™๋ผ›๋ผœ๋ผ๋ฝ€๋ฝ๋ฝ„๋ฝˆ๋ฝ๋ฝ‘๋ฝ•๋พ”๋พฐ๋ฟ…๋ฟŒ๋ฟ๋ฟ๋ฟ”๋ฟœ๋ฟŸ๋ฟก์€ผ์‘์˜์œ์ ์จ์ฉ์‚์‚‘์‚”์‚˜์‚ ์‚ก์‚ฃ์‚ฅ์‚ฌ์‚ญ์‚ฏ์‚ฐ์‚ณ์‚ด์‚ต์‚ถ์‚ผ์‚ฝ์‚ฟ์ƒ€์ƒ์ƒ…์ƒˆ์ƒ‰์ƒŒ์ƒ์ƒ˜์ƒ™์ƒ›์ƒœ์ƒ์ƒค"], +["bc41","ํช",17,"ํพํฟํށํŽ‚ํŽƒํŽ…ํކํއ"], +["bc61","ํŽˆํމํŽŠํŽ‹ํŽŽํŽ’",5,"ํŽšํŽ›ํŽํŽžํŽŸํŽก",6,"ํŽชํŽฌํŽฎ"], +["bc81","ํŽฏ",4,"ํŽตํŽถํŽทํŽนํŽบํŽปํŽฝ",6,"ํ†ํ‡ํŠ",5,"ํ‘",5,"์ƒฅ์ƒจ์ƒฌ์ƒด์ƒต์ƒท์ƒน์„€์„„์„ˆ์„์„•์„œ",4,"์„ฃ์„ค์„ฆ์„ง์„ฌ์„ญ์„ฏ์„ฐ์„ฑ์„ถ์„ธ์„น์„ผ์…€์…ˆ์…‰์…‹์…Œ์…์…”์…•์…˜์…œ์…ค์…ฅ์…ง์…จ์…ฉ์…ฐ์…ด์…ธ์†…์†Œ์†์†Ž์†์†”์†–์†œ์†์†Ÿ์†ก์†ฅ์†จ์†ฉ์†ฌ์†ฐ์†ฝ์‡„์‡ˆ์‡Œ์‡”์‡—์‡˜์‡ ์‡ค์‡จ์‡ฐ์‡ฑ์‡ณ์‡ผ์‡ฝ์ˆ€์ˆ„์ˆŒ์ˆ์ˆ์ˆ‘์ˆ˜์ˆ™์ˆœ์ˆŸ์ˆ ์ˆจ์ˆฉ์ˆซ์ˆญ"], +["bd41","ํ—ํ™",7,"ํขํค",7,"ํฎํฏํฑํฒํณํตํถํท"], +["bd61","ํธํนํบํปํพํ€ํ‚",5,"ํ‰",13], +["bd81","ํ—",5,"ํž",25,"์ˆฏ์ˆฑ์ˆฒ์ˆด์‰ˆ์‰์‰‘์‰”์‰˜์‰ ์‰ฅ์‰ฌ์‰ญ์‰ฐ์‰ด์‰ผ์‰ฝ์‰ฟ์Ё์Šˆ์Љ์А์Š˜์Š›์Š์Šค์Šฅ์Šจ์Šฌ์Šญ์Šด์Šต์Šท์Šน์‹œ์‹์‹ ์‹ฃ์‹ค์‹ซ์‹ฌ์‹ญ์‹ฏ์‹ฑ์‹ถ์‹ธ์‹น์‹ป์‹ผ์Œ€์Œˆ์Œ‰์ŒŒ์Œ์Œ“์Œ”์Œ•์Œ˜์Œœ์Œค์Œฅ์Œจ์Œฉ์…์จ์ฉ์ฌ์ฐ์ฒ์ธ์น์ผ์ฝ์Ž„์Žˆ์ŽŒ์€์˜์™์œ์Ÿ์ ์ข์จ์ฉ์ญ์ด์ต์ธ์ˆ์์ค์ฌ์ฐ"], +["be41","ํธ",7,"ํ‘ํ‘‚ํ‘ƒํ‘…",14], +["be61","ํ‘”",7,"ํ‘ํ‘žํ‘Ÿํ‘กํ‘ขํ‘ฃํ‘ฅ",7,"ํ‘ฎํ‘ฐํ‘ฑํ‘ฒ"], +["be81","ํ‘ณ",4,"ํ‘บํ‘ปํ‘ฝํ‘พํ’ํ’ƒ",4,"ํ’Šํ’Œํ’Ž",5,"ํ’•",8,"์ด์ผ์ฝ์‘ˆ์‘ค์‘ฅ์‘จ์‘ฌ์‘ด์‘ต์‘น์’€์’”์’œ์’ธ์’ผ์“ฉ์“ฐ์“ฑ์“ด์“ธ์“บ์“ฟ์”€์”์”Œ์”์””์”œ์”จ์”ฉ์”ฌ์”ฐ์”ธ์”น์”ป์”ฝ์•„์•…์•ˆ์•‰์•Š์•Œ์•์•Ž์•“์•”์••์•—์•˜์•™์•์•ž์• ์•ก์•ค์•จ์•ฐ์•ฑ์•ณ์•ด์•ต์•ผ์•ฝ์–€์–„์–‡์–Œ์–์–์–‘์–•์–—์–˜์–œ์– ์–ฉ์–ด์–ต์–ธ์–น์–ป์–ผ์–ฝ์–พ์—„",6,"์—Œ์—Ž"], +["bf41","ํ’ž",10,"ํ’ช",14], +["bf61","ํ’น",18,"ํ“ํ“Žํ“ํ“‘ํ“’ํ““ํ“•"], +["bf81","ํ“–",5,"ํ“ํ“žํ“ ",7,"ํ“ฉํ“ชํ“ซํ“ญํ“ฎํ“ฏํ“ฑ",6,"ํ“นํ“บํ“ผ์—์—‘์—”์—˜์— ์—ก์—ฃ์—ฅ์—ฌ์—ญ์—ฎ์—ฐ์—ด์—ถ์—ท์—ผ",5,"์˜…์˜†์˜‡์˜ˆ์˜Œ์˜์˜˜์˜™์˜›์˜œ์˜ค์˜ฅ์˜จ์˜ฌ์˜ญ์˜ฎ์˜ฐ์˜ณ์˜ด์˜ต์˜ท์˜น์˜ป์™€์™์™„์™ˆ์™์™‘์™“์™”์™•์™œ์™์™ ์™ฌ์™ฏ์™ฑ์™ธ์™น์™ผ์š€์šˆ์š‰์š‹์š์š”์š•์š˜์šœ์šค์šฅ์šง์šฉ์šฐ์šฑ์šด์šธ์šน์šบ์›€์›์›ƒ์›…์›Œ์›์›์›”์›œ์›์› ์›ก์›จ"], +["c041","ํ“พ",5,"ํ”…ํ”†ํ”‡ํ”‰ํ”Šํ”‹ํ”",6,"ํ”–ํ”˜",5], +["c061","ํ”ž",25], +["c081","ํ”ธํ”นํ”บํ”ปํ”พํ”ฟํ•ํ•‚ํ•ƒํ•…",6,"ํ•Žํ•ํ•’",5,"ํ•šํ•›ํ•ํ•žํ•Ÿํ•กํ•ขํ•ฃ์›ฉ์›ฌ์›ฐ์›ธ์›น์›ฝ์œ„์œ…์œˆ์œŒ์œ”์œ•์œ—์œ™์œ ์œก์œค์œจ์œฐ์œฑ์œณ์œต์œท์œผ์œฝ์€์„์Š์Œ์์์‘",7,"์œ์ ์จ์ซ์ด์ต์ธ์ผ์ฝ์พ์žƒ์ž„์ž…์ž‡์žˆ์ž‰์žŠ์žŽ์ž์ž‘์ž”์ž–์ž—์ž˜์žš์ž ์žก์žฃ์žค์žฅ์žฆ์žฌ์žญ์žฐ์žด์žผ์žฝ์žฟ์Ÿ€์Ÿ์Ÿˆ์Ÿ‰์ŸŒ์ŸŽ์Ÿ์Ÿ˜์Ÿ์Ÿค์Ÿจ์Ÿฌ์ €์ ์ „์ ˆ์ Š"], +["c141","ํ•คํ•ฆํ•งํ•ชํ•ฌํ•ฎ",5,"ํ•ถํ•ทํ•นํ•บํ•ปํ•ฝ",6,"ํ–†ํ–Šํ–‹"], +["c161","ํ–Œํ–ํ–Žํ–ํ–‘",19,"ํ–ฆํ–ง"], +["c181","ํ–จ",31,"์ ์ ‘์ “์ •์ –์ œ์ ์  ์ ค์ ฌ์ ญ์ ฏ์ ฑ์ ธ์ ผ์ก€์กˆ์ก‰์กŒ์ก์ก”์กฐ์กฑ์กด์กธ์กบ์ข€์ข์ขƒ์ข…์ข†์ข‡์ข‹์ขŒ์ข์ข”์ข์ขŸ์ขก์ขจ์ขผ์ขฝ์ฃ„์ฃˆ์ฃŒ์ฃ”์ฃ•์ฃ—์ฃ™์ฃ ์ฃก์ฃค์ฃต์ฃผ์ฃฝ์ค€์ค„์ค…์ค†์คŒ์ค์ค์ค‘์ค˜์คฌ์คด์ฅ์ฅ‘์ฅ”์ฅ˜์ฅ ์ฅก์ฅฃ์ฅฌ์ฅฐ์ฅด์ฅผ์ฆˆ์ฆ‰์ฆŒ์ฆ์ฆ˜์ฆ™์ฆ›์ฆ์ง€์ง์ง„์ง‡์งˆ์งŠ์ง์ง‘์ง“"], +["c241","ํ—Šํ—‹ํ—ํ—Žํ—ํ—‘ํ—“",4,"ํ—šํ—œํ—ž",5,"ํ—ฆํ—งํ—ฉํ—ชํ—ซํ—ญํ—ฎ"], +["c261","ํ—ฏ",4,"ํ—ถํ—ธํ—บ",5,"ํ˜‚ํ˜ƒํ˜…ํ˜†ํ˜‡ํ˜‰",6,"ํ˜’"], +["c281","ํ˜–",5,"ํ˜ํ˜žํ˜Ÿํ˜กํ˜ขํ˜ฃํ˜ฅ",7,"ํ˜ฎ",9,"ํ˜บํ˜ป์ง•์ง–์ง™์งš์งœ์ง์ง ์งข์งค์งง์งฌ์งญ์งฏ์งฐ์งฑ์งธ์งน์งผ์จ€์จˆ์จ‰์จ‹์จŒ์จ์จ”์จ˜์จฉ์ฉŒ์ฉ์ฉ์ฉ”์ฉœ์ฉ์ฉŸ์ฉ ์ฉก์ฉจ์ฉฝ์ช„์ช˜์ชผ์ชฝ์ซ€์ซ„์ซŒ์ซ์ซ์ซ‘์ซ“์ซ˜์ซ™์ซ ์ซฌ์ซด์ฌˆ์ฌ์ฌ”์ฌ˜์ฌ ์ฌก์ญ์ญˆ์ญ‰์ญŒ์ญ์ญ˜์ญ™์ญ์ญค์ญธ์ญน์ฎœ์ฎธ์ฏ”์ฏค์ฏง์ฏฉ์ฐŒ์ฐ์ฐ์ฐ”์ฐœ์ฐ์ฐก์ฐข์ฐง์ฐจ์ฐฉ์ฐฌ์ฐฎ์ฐฐ์ฐธ์ฐน์ฐป"], +["c341","ํ˜ฝํ˜พํ˜ฟํ™ํ™‚ํ™ƒํ™„ํ™†ํ™‡ํ™Šํ™Œํ™Žํ™ํ™ํ™’ํ™“ํ™–ํ™—ํ™™ํ™šํ™›ํ™",4], +["c361","ํ™ข",4,"ํ™จํ™ช",5,"ํ™ฒํ™ณํ™ต",11], +["c381","ํšํš‚ํš„ํš†",5,"ํšŽํšํš‘ํš’ํš“ํš•",7,"ํšžํš ํšข",5,"ํšฉํšช์ฐผ์ฐฝ์ฐพ์ฑ„์ฑ…์ฑˆ์ฑŒ์ฑ”์ฑ•์ฑ—์ฑ˜์ฑ™์ฑ ์ฑค์ฑฆ์ฑจ์ฑฐ์ฑต์ฒ˜์ฒ™์ฒœ์ฒ ์ฒจ์ฒฉ์ฒซ์ฒฌ์ฒญ์ฒด์ฒต์ฒธ์ฒผ์ณ„์ณ…์ณ‡์ณ‰์ณ์ณ”์ณค์ณฌ์ณฐ์ด์ดˆ์ด‰์ดŒ์ด์ด˜์ด™์ด›์ด์ดค์ดจ์ดฌ์ดน์ตœ์ต ์ตค์ตฌ์ตญ์ตฏ์ตฑ์ตธ์ถˆ์ถ”์ถ•์ถ˜์ถœ์ถค์ถฅ์ถง์ถฉ์ถฐ์ท„์ทŒ์ท์ทจ์ทฌ์ทฐ์ทธ์ทน์ทป์ทฝ์ธ„์ธˆ์ธŒ์ธ”์ธ™์ธ ์ธก์ธค์ธจ์ธฐ์ธฑ์ธณ์ธต"], +["c441","ํšซํšญํšฎํšฏํšฑ",7,"ํšบํšผ",7,"ํ›†ํ›‡ํ›‰ํ›Šํ›‹"], +["c461","ํ›ํ›Žํ›ํ›ํ›’ํ›“ํ›•ํ›–ํ›˜ํ›š",5,"ํ›กํ›ขํ›ฃํ›ฅํ›ฆํ›งํ›ฉ",4], +["c481","ํ›ฎํ›ฏํ›ฑํ›ฒํ›ณํ›ดํ›ถ",5,"ํ›พํ›ฟํœํœ‚ํœƒํœ…",11,"ํœ’ํœ“ํœ”์น˜์น™์นœ์นŸ์น ์นก์นจ์นฉ์นซ์นญ์นด์นต์นธ์นผ์บ„์บ…์บ‡์บ‰์บ์บ‘์บ”์บ˜์บ ์บก์บฃ์บค์บฅ์บฌ์บญ์ป์ปค์ปฅ์ปจ์ปซ์ปฌ์ปด์ปต์ปท์ปธ์ปน์ผ€์ผ์ผ„์ผˆ์ผ์ผ‘์ผ“์ผ•์ผœ์ผ ์ผค์ผฌ์ผญ์ผฏ์ผฐ์ผฑ์ผธ์ฝ”์ฝ•์ฝ˜์ฝœ์ฝค์ฝฅ์ฝง์ฝฉ์ฝฐ์ฝฑ์ฝด์ฝธ์พ€์พ…์พŒ์พก์พจ์พฐ์ฟ„์ฟ ์ฟก์ฟค์ฟจ์ฟฐ์ฟฑ์ฟณ์ฟต์ฟผํ€€ํ€„ํ€‘ํ€˜ํ€ญํ€ดํ€ตํ€ธํ€ผ"], +["c541","ํœ•ํœ–ํœ—ํœšํœ›ํœํœžํœŸํœก",6,"ํœชํœฌํœฎ",5,"ํœถํœทํœน"], +["c561","ํœบํœปํœฝ",6,"ํ…ํ†ํˆํŠ",5,"ํ’ํ“ํ•ํš",4], +["c581","ํŸํขํคํฆํงํจํชํซํญํฎํฏํฑํฒํณํต",6,"ํพํฟํž€ํž‚",5,"ํžŠํž‹ํ„ํ…ํ‡ํ‰ํํ”ํ˜ํ ํฌํญํฐํดํผํฝํ‚ํ‚คํ‚ฅํ‚จํ‚ฌํ‚ดํ‚ตํ‚ทํ‚นํƒ€ํƒํƒ„ํƒˆํƒ‰ํƒํƒ‘ํƒ“ํƒ”ํƒ•ํƒœํƒํƒ ํƒคํƒฌํƒญํƒฏํƒฐํƒฑํƒธํ„ํ„ฐํ„ฑํ„ดํ„ธํ„บํ…€ํ…ํ…ƒํ…„ํ……ํ…Œํ…ํ…ํ…”ํ…œํ…ํ…Ÿํ…กํ…จํ…ฌํ…ผํ†„ํ†ˆํ† ํ†กํ†คํ†จํ†ฐํ†ฑํ†ณํ†ตํ†บํ†ผํ‡€ํ‡˜ํ‡ดํ‡ธํˆ‡ํˆ‰ํˆํˆฌํˆญํˆฐํˆดํˆผํˆฝํˆฟํ‰ํ‰ˆํ‰œ"], +["c641","ํžํžŽํžํž‘",6,"ํžšํžœํžž",5], +["c6a1","ํ‰คํŠ€ํЁํŠ„ํŠˆํАํŠ‘ํŠ•ํŠœํŠ ํŠคํŠฌํŠฑํŠธํŠนํŠผํŠฟํ‹€ํ‹‚ํ‹ˆํ‹‰ํ‹‹ํ‹”ํ‹˜ํ‹œํ‹คํ‹ฅํ‹ฐํ‹ฑํ‹ดํ‹ธํŒ€ํŒํŒƒํŒ…ํŒŒํŒํŒŽํŒํŒ”ํŒ–ํŒœํŒํŒŸํŒ ํŒกํŒฅํŒจํŒฉํŒฌํŒฐํŒธํŒนํŒปํŒผํŒฝํ„ํ…ํผํฝํŽ€ํŽ„ํŽŒํŽํŽํސํŽ‘ํŽ˜ํŽ™ํŽœํŽ ํŽจํŽฉํŽซํŽญํŽดํŽธํŽผํ„ํ…ํˆํ‰ํํ˜ํกํฃํฌํญํฐํดํผํฝํฟํ"], +["c7a1","ํˆํํ‘€ํ‘„ํ‘œํ‘ ํ‘คํ‘ญํ‘ฏํ‘ธํ‘นํ‘ผํ‘ฟํ’€ํ’‚ํ’ˆํ’‰ํ’‹ํ’ํ’”ํ’ฉํ“Œํ“ํ“”ํ“œํ“Ÿํ“จํ“ฌํ“ฐํ“ธํ“ปํ“ฝํ”„ํ”ˆํ”Œํ””ํ”•ํ”—ํ”ผํ”ฝํ•€ํ•„ํ•Œํ•ํ•ํ•‘ํ•˜ํ•™ํ•œํ• ํ•ฅํ•จํ•ฉํ•ซํ•ญํ•ดํ•ตํ•ธํ•ผํ–„ํ–…ํ–‡ํ–ˆํ–‰ํ–ํ–ฅํ—ˆํ—‰ํ—Œํ—ํ—’ํ—˜ํ—™ํ—›ํ—ํ—คํ—ฅํ—จํ—ฌํ—ดํ—ตํ—ทํ—นํ˜€ํ˜ํ˜„ํ˜ˆํ˜ํ˜‘ํ˜“ํ˜”ํ˜•ํ˜œํ˜ "], +["c8a1","ํ˜คํ˜ญํ˜ธํ˜นํ˜ผํ™€ํ™…ํ™ˆํ™‰ํ™‹ํ™ํ™‘ํ™”ํ™•ํ™˜ํ™œํ™งํ™ฉํ™ฐํ™ฑํ™ดํšƒํš…ํšŒํšํšํš”ํšํšŸํšกํšจํšฌํšฐํšนํšปํ›„ํ›…ํ›ˆํ›Œํ›‘ํ›”ํ›—ํ›™ํ› ํ›คํ›จํ›ฐํ›ตํ›ผํ›ฝํœ€ํœ„ํœ‘ํœ˜ํœ™ํœœํœ ํœจํœฉํœซํœญํœดํœตํœธํœผํ„ํ‡ํ‰ํํ‘ํ”ํ–ํ—ํ˜ํ™ํ ํกํฃํฅํฉํฌํฐํดํผํฝํžํžˆํž‰ํžŒํžํž˜ํž™ํž›ํž"], +["caa1","ไผฝไฝณๅ‡ๅƒนๅŠ ๅฏๅ‘ตๅ“ฅๅ˜‰ๅซๅฎถๆš‡ๆžถๆžทๆŸฏๆญŒ็‚็—‚็จผ่‹›่Œ„่ก—่ขˆ่จถ่ณˆ่ท่ปป่ฟฆ้ง•ๅˆปๅดๅ„ๆชๆ…คๆฎผ็่„š่ฆบ่ง’้–ฃไพƒๅˆŠๅขพๅฅธๅงฆๅนฒๅนนๆ‡‡ๆ€ๆ†ๆŸฌๆกฟๆพ—็™Ž็œ‹็ฃต็จˆ็ซฟ็ฐก่‚่‰ฎ่‰ฑ่ซซ้–“ไนซๅ–ๆ›ทๆธด็ขฃ็ซญ่‘›่ค่Ž้žจๅ‹˜ๅŽๅ ชๅตŒๆ„Ÿๆ†พๆˆกๆ•ขๆŸ‘ๆฉ„ๆธ›็”˜็–ณ็›ฃ็žฐ็ดบ้‚ฏ้‘‘้‘’้พ•"], +["cba1","ๅŒฃๅฒฌ็”ฒ่ƒ›้‰€้–˜ๅ‰›ๅ ˆๅงœๅฒกๅด—ๅบทๅผบๅฝŠๆ…ทๆฑŸ็•บ็–†็ณ ็ตณ็ถฑ็พŒ่…”่ˆก่–‘่ฅ่ฌ›้‹ผ้™้ฑ‡ไป‹ไปทๅ€‹ๅ‡ฑๅกๆ„ทๆ„พๆ…จๆ”นๆงชๆผ‘็–ฅ็š†็›–็ฎ‡่Šฅ่“‹๏ค€้Žง้–‹ๅ–€ๅฎขๅ‘๏ค็ฒณ็พน้†ตๅ€จๅŽปๅฑ…ๅทจๆ‹’ๆฎๆ“šๆ“งๆธ ็‚ฌ็ฅ›่ท่ธž๏ค‚้ฝ้‰…้‹ธไนพไปถๅฅๅทพๅปบๆ„†ๆฅ—่…ฑ่™”่น‡้ต้จซไนžๅ‚‘ๆฐๆก€ๅ„‰ๅŠๅŠ’ๆชข"], +["cca1","็žผ้ˆ้ป”ๅŠซๆ€ฏ่ฟฒๅˆๆ†ฉๆญๆ“Šๆ ผๆช„ๆฟ€่†ˆ่ฆก้š”ๅ …็‰ฝ็Šฌ็”„็ตน็นญ่‚ฉ่ฆ‹่ญด้ฃ้ต‘ๆЉๆฑบๆฝ”็ต็ผบ่จฃๅ…ผๆ…Š็ฎ่ฌ™้‰—้ŽŒไบฌไฟ“ๅ€žๅ‚พๅ„†ๅ‹ๅ‹ๅฟๅฐๅขƒๅบšๅพ‘ๆ…ถๆ†ฌๆ“Žๆ•ฌๆ™ฏๆšปๆ›ดๆข—ๆถ‡็‚…็ƒฑ็’Ÿ็’ฅ็“Š็—™็กฌ็ฃฌ็ซŸ็ซถ็ต…็ถ“่€•่€ฟ่„›่Ž–่ญฆ่ผ•้€•้ก้ ƒ้ ธ้ฉš้ฏจไฟ‚ๅ•“ๅ บๅฅ‘ๅญฃๅฑ†ๆ‚ธๆˆ’ๆก‚ๆขฐ"], +["cda1","ๆฃจๆบช็•Œ็™ธ็ฃŽ็จฝ็ณป็นซ็นผ่จˆ่ชก่ฐฟ้šŽ้ท„ๅคๅฉๅ‘Šๅ‘ฑๅ›บๅง‘ๅญคๅฐปๅบซๆ‹ทๆ”ทๆ•…ๆ•ฒๆš ๆžฏๆงๆฒฝ็—ผ็š็พ็จฟ็พ”่€ƒ่‚ก่†่‹ฆ่‹ฝ่ฐ่—่ ฑ่ขด่ชฅ๏คƒ่พœ้Œฎ้›‡้กง้ซ˜้ผ“ๅ“ญๆ–›ๆ›ฒๆข็ฉ€่ฐท้ต ๅ›ฐๅคๅด‘ๆ˜†ๆขฑๆฃๆปพ็จ่ขž้ฏคๆฑจ๏ค„้ชจไพ›ๅ…ฌๅ…ฑๅŠŸๅญ”ๅทฅๆๆญๆ‹ฑๆŽงๆ”ป็™็ฉบ่šฃ่ฒข้žไธฒๅฏกๆˆˆๆžœ็“œ"], +["cea1","็ง‘่“่ช‡่ชฒ่ทจ้Ž้‹้ก†ๅป“ๆงจ่—ฟ้ƒญ๏ค…ๅ† ๅฎ˜ๅฏฌๆ…ฃๆฃบๆฌพ็Œ็ฏ็“˜็ฎก็ฝ่…่ง€่ฒซ้—œ้คจๅˆฎๆๆ‹ฌ้€‚ไพŠๅ…‰ๅŒกๅฃ™ๅปฃๆ› ๆดธ็‚š็‹‚็–็ญ่ƒฑ้‘›ๅฆๆŽ›็ฝซไน–ๅ‚€ๅกŠๅฃžๆ€ชๆ„งๆ‹ๆง้ญๅฎ็ด˜่‚ฑ่ฝŸไบคๅƒ‘ๅ’ฌๅ–ฌๅฌŒๅถ ๅทงๆ”ชๆ•Žๆ กๆฉ‹็‹ก็šŽ็Ÿฏ็ตž็ฟน่† ่•Ž่›Ÿ่ผƒ่ฝŽ้ƒŠ้คƒ้ฉ•้ฎซไธ˜ไน…ไนไป‡ไฟฑๅ…ทๅ‹พ"], +["cfa1","ๅ€ๅฃๅฅๅ’Žๅ˜”ๅตๅžขๅฏ‡ๅถ‡ๅปๆ‡ผๆ‹˜ๆ•‘ๆžธๆŸฉๆง‹ๆญๆฏ†ๆฏฌๆฑ‚ๆบ็ธ็‹—็Ž–็ƒ็žฟ็Ÿฉ็ฉถ็ตฟ่€‰่‡ผ่ˆ…่ˆŠ่‹Ÿ่กข่ฌณ่ณผ่ป€้€‘้‚ฑ้‰ค้Šถ้ง’้ฉ…้ณฉ้ท—้พœๅœ‹ๅฑ€่Š้ž ้žซ้บดๅ›็ช˜็พค่ฃ™่ป้ƒกๅ €ๅฑˆๆŽ˜็ชŸๅฎฎๅผ“็ฉน็ชฎ่ŠŽ่บฌๅ€ฆๅˆธๅ‹ธๅทๅœˆๆ‹ณๆฒๆฌŠๆทƒ็œทๅŽฅ็—่•จ่นถ้—•ๆœบๆซƒๆฝฐ่ฉญ่ปŒ้ฅ‹๏ค†ๆ™ทๆญธ่ฒด"], +["d0a1","้ฌผ๏ค‡ๅซๅœญๅฅŽๆ†ๆงป็ช็ก…็ชบ็ซ…็ณพ่‘ต่ฆ่ตณ้€ต้–จๅ‹ปๅ‡็•‡็ญ ่Œ้ˆž๏คˆๆฉ˜ๅ…‹ๅ‰‹ๅЇๆˆŸๆฃ˜ๆฅต้š™ๅƒ…ๅŠคๅ‹คๆ‡ƒๆ–คๆ นๆงฟ็‘พ็ญ‹่Šน่ซ่ฆฒ่ฌน่ฟ‘้ฅ‰๏ค‰ไปŠๅฆ—ๆ“’ๆ˜‘ๆชŽ็ด็ฆ็ฆฝ่Šฉ่กพ่กฟ่ฅŸ๏คŠ้Œฆไผ‹ๅŠๆ€ฅๆ‰ฑๆฑฒ็ดš็ตฆไบ˜ๅ…ข็Ÿœ่‚ฏไผไผŽๅ…ถๅ†€ๅ—œๅ™จๅœปๅŸบๅŸผๅค”ๅฅ‡ๅฆ“ๅฏ„ๅฒๅดŽๅทฑๅนพๅฟŒๆŠ€ๆ——ๆ—ฃ"], +["d1a1","ๆœžๆœŸๆžๆฃ‹ๆฃ„ๆฉŸๆฌบๆฐฃๆฑฝๆฒ‚ๆท‡็Ž˜็ฆ็ช็’‚็’ฃ็•ธ็•ฟ็ข็ฃฏ็ฅ็ฅ‡็ฅˆ็ฅบ็ฎ•็ด€็ถบ็พˆ่€†่€ญ่‚Œ่จ˜่ญ่ฑˆ่ตท้Œก้Œค้ฃข้ฅ‘้จŽ้จ้ฉฅ้บ’็ทŠไฝถๅ‰ๆ‹ฎๆก”้‡‘ๅ–ซๅ„บ๏ค‹๏คŒๅจœๆ‡ฆ๏คๆ‹ๆ‹ฟ๏คŽ",5,"้‚ฃ๏ค”",4,"่ซพ๏ค™๏คš๏ค›๏คœๆš–๏ค็…–๏คž๏คŸ้›ฃ๏ค ๆๆบๅ—๏คกๆžๆฅ ๆนณ๏คข็”ท๏คฃ๏คค๏คฅ"], +["d2a1","็ด๏คฆ๏คง่กฒๅ›Šๅจ˜๏คจ",4,"ไนƒ๏คญๅ…งๅฅˆๆŸฐ่€๏คฎๅฅณๅนดๆ’š็งŠๅฟตๆฌๆ‹ˆๆปๅฏงๅฏ—ๅŠช๏คฏๅฅดๅผฉๆ€’๏คฐ๏คฑ๏คฒ็‘™๏คณ",5,"้ง‘๏คน",10,"ๆฟƒ๏ฅ„๏ฅ…่†ฟ่พฒๆƒฑ๏ฅ†๏ฅ‡่…ฆ๏ฅˆ๏ฅ‰ๅฐฟ๏ฅŠ",7,"ๅซฉ่จฅๆป็ด๏ฅ’",5,"่ƒฝ๏ฅ˜๏ฅ™ๅฐผๆณฅๅŒฟๆบบๅคš่Œถ"], +["d3a1","ไธนไบถไฝ†ๅ–ฎๅœ˜ๅฃ‡ๅฝ–ๆ–ทๆ—ฆๆช€ๆฎตๆน็Ÿญ็ซฏ็ฐž็ทž่›‹่ข’้„ฒ้›ๆ’ปๆพพ็บ็–ธ้”ๅ•–ๅๆ†บๆ“”ๆ›‡ๆทกๆน›ๆฝญๆพน็—ฐ่ƒ่†ฝ่•่ฆƒ่ซ‡่ญš้ŒŸๆฒ“็•“็ญ”่ธ้ๅ”ๅ ‚ๅก˜ๅนขๆˆ‡ๆ’žๆฃ ็•ถ็ณ–่žณ้ปจไปฃๅžˆๅฎๅคงๅฐๅฒฑๅธถๅพ…ๆˆดๆ“ก็Žณ่‡บ่ข‹่ฒธ้šŠ้ป›ๅฎ…ๅพทๆ‚ณๅ€’ๅˆ€ๅˆฐๅœ–ๅ ตๅก—ๅฐŽๅฑ ๅณถๅถ‹ๅบฆๅพ’ๆ‚ผๆŒ‘ๆމๆ—ๆกƒ"], +["d4a1","ๆฃนๆซ‚ๆท˜ๆธกๆป”ๆฟค็‡พ็›œ็น็ฆฑ็จป่„่ฆฉ่ณญ่ทณ่นˆ้€ƒ้€”้“้ƒฝ้้™ถ้Ÿœๆฏ’็€†็‰˜็Šข็จ็ฃ็ฆฟ็ฏค็บ›่ฎ€ๅขฉๆƒ‡ๆ•ฆๆ—ฝๆšพๆฒŒ็„ž็‡‰่ฑš้ “ไนญ็ชไปๅ†ฌๅ‡ๅ‹•ๅŒๆ†งๆฑๆกๆฃŸๆดžๆฝผ็–ผ็žณ็ซฅ่ƒด่‘ฃ้Š…ๅ…œๆ–—ๆœๆž“็—˜็ซ‡่ณ๏ฅš่ฑ†้€—้ ญๅฑฏ่‡€่Šš้้ฏ้ˆๅพ—ๅถๆฉ™็‡ˆ็™ป็ญ‰่—ค่ฌ„้„ง้จฐๅ–‡ๆ‡ถ๏ฅ›็™ฉ็พ…"], +["d5a1","่˜ฟ่žบ่ฃธ้‚๏ฅœๆด›็ƒ™็ž็ตก่ฝ๏ฅ้…ช้งฑ๏ฅžไบ‚ๅตๆฌ„ๆฌ’็€พ็ˆ›่˜ญ้ธžๅ‰Œ่พฃๅตๆ“ฅๆ”ฌๆฌ–ๆฟซ็ฑƒ็บœ่—่ฅค่ฆฝๆ‹‰่‡˜่ ŸๅปŠๆœ—ๆตช็‹ผ็…็‘ฏ่ž‚้ƒžไพ†ๅดๅพ ่Šๅ†ทๆŽ ็•ฅไบฎๅ€†ๅ…ฉๅ‡‰ๆขๆจ‘็ฒฎ็ฒฑ็ณง่‰ฏ่ซ’่ผ›้‡ไพถๅ„ทๅ‹ตๅ‘‚ๅปฌๆ…ฎๆˆพๆ—…ๆซšๆฟพ็คช่—œ่ ฃ้–ญ้ฉข้ฉช้บ—้ปŽๅŠ›ๆ›†ๆญท็€็คซ่ฝข้‚ๆ†ๆˆ€ๆ”ฃๆผฃ"], +["d6a1","็…‰็’‰็ทด่ฏ่“ฎ่ผฆ้€ฃ้Šๅ†ฝๅˆ—ๅŠฃๆดŒ็ƒˆ่ฃ‚ๅป‰ๆ–‚ๆฎฎๆฟ‚็ฐพ็ตไปคไผถๅ›น๏ฅŸๅฒบๅถบๆ€œ็Žฒ็ฌญ็พš็ฟŽ่†้€ž้ˆด้›ถ้ˆ้ ˜้ฝกไพ‹ๆพง็ฆฎ้†ด้šทๅ‹ž๏ฅ ๆ’ˆๆ“„ๆซ“ๆฝž็€˜็ˆ็›ง่€่˜†่™œ่ทฏ่ผ…้œฒ้ญฏ้ทบ้นต็ขŒ็ฅฟ็ถ ่‰้Œ„้นฟ้บ“่ซ–ๅฃŸๅผ„ๆœง็€ง็“็ฑ ่พๅ„ก็€จ็‰ข็ฃŠ่ณ‚่ณš่ณด้›ทไบ†ๅƒšๅฏฎๅป–ๆ–™็‡Ž็™‚็žญ่Š่“ผ"], +["d7a1","้ผ้ฌง้พๅฃ˜ๅฉๅฑขๆจ“ๆทšๆผ็˜ป็ดฏ็ธท่”ž่คธ้ค้™‹ๅЉๆ—’ๆŸณๆฆดๆตๆบœ็€็‰็‘ ็•™็˜ค็กซ่ฌฌ้กžๅ…ญๆˆฎ้™ธไพ–ๅ€ซๅด™ๆทช็ถธ่ผชๅพ‹ๆ…„ๆ —๏ฅก้š†ๅ‹’่‚‹ๅ‡œๅ‡Œๆฅž็จœ็ถพ่ฑ้™ตไฟšๅˆฉๅŽ˜ๅๅ”Žๅฑฅๆ‚งๆŽๆขจๆตฌ็Ё็‹ธ็†็’ƒ๏ฅข็—ข็ฑฌ็ฝน็พธ่މ่ฃ่ฃก้‡Œ้‡้›ข้ฏ‰ๅๆฝพ็‡็’˜่—บ่บช้šฃ้ฑ—้บŸๆž—ๆท‹็ณ่‡จ้œ–็ ฌ"], +["d8a1","็ซ‹็ฌ ็ฒ’ๆ‘ฉ็‘ช็—ฒ็ขผ็ฃจ้ฆฌ้ญ”้บปๅฏžๅน•ๆผ ่†œ่Žซ้‚ˆไธ‡ๅๅจฉๅท’ๅฝŽๆ…ขๆŒฝๆ™ฉๆ›ผๆปฟๆผซ็ฃ็žž่ฌ่”“่ ป่ผ“้ฅ…้ฐปๅ”œๆŠนๆœซๆฒซ่Œ‰่ฅช้บไบกๅฆ„ๅฟ˜ๅฟ™ๆœ›็ถฒ็ฝ”่Š’่Œซ่Žฝ่ผž้‚™ๅŸ‹ๅฆนๅช’ๅฏๆ˜งๆžšๆข…ๆฏ็…ค็ฝต่ฒท่ณฃ้‚้ญ…่„ˆ่ฒŠ้™Œ้ฉ€้บฅๅญŸๆฐ“็Œ›็›ฒ็›Ÿ่Œๅ†ช่ฆ“ๅ…ๅ†•ๅ‹‰ๆฃ‰ๆฒ”็œ„็œ ็ถฟ็ทฌ้ข้บตๆป…"], +["d9a1","่”‘ๅ†ฅๅๅ‘ฝๆ˜ŽๆšๆคงๆบŸ็šฟ็ž‘่Œ—่“‚่žŸ้…ฉ้Š˜้ณด่ข‚ไพฎๅ†’ๅ‹Ÿๅง†ๅธฝๆ…•ๆ‘ธๆ‘นๆšฎๆŸๆจกๆฏๆฏ›็‰Ÿ็‰ก็‘็œธ็Ÿ›่€—่Šผ่Œ…่ฌ€่ฌจ่ฒŒๆœจๆฒ็‰ง็›ฎ็ฆ็ฉ†้ถฉๆญฟๆฒ’ๅคขๆœฆ่’™ๅฏๅข“ๅฆ™ๅปŸๆๆ˜ดๆณๆธบ็Œซ็ซ—่‹—้Œจๅ‹™ๅทซๆ†ฎๆ‡‹ๆˆŠๆ‹‡ๆ’ซๆ— ๆฅ™ๆญฆๆฏ‹็„ก็ท็•็น†่ˆž่Œ‚่•ช่ชฃ่ฒฟ้œง้ตกๅขจ้ป˜ๅ€‘ๅˆŽๅปๅ•ๆ–‡"], +["daa1","ๆฑถ็ดŠ็ด‹่ž่šŠ้–€้›ฏๅ‹ฟๆฒ•็‰ฉๅ‘ณๅชšๅฐพๅต‹ๅฝŒๅพฎๆœชๆขถๆฅฃๆธผๆน„็œ‰็ฑณ็พŽ่–‡่ฌŽ่ฟท้ก้ปดๅฒทๆ‚ถๆ„ๆ†ซๆ•ๆ—ปๆ—ผๆฐ‘ๆณฏ็ŽŸ็‰็ทก้–”ๅฏ†่œœ่ฌๅ‰ๅšๆ‹ๆๆ’ฒๆœดๆจธๆณŠ็€็’ž็ฎ”็ฒ•็ธ›่†Š่ˆถ่–„่ฟซ้›น้งไผดๅŠๅๅ›ๆ‹Œๆฌๆ”€ๆ–‘ๆงƒๆณฎๆฝ˜็ญ็•”็˜ข็›ค็›ผ็ฃ็ฃป็คฌ็ต†่ˆฌ่Ÿ ่ฟ”้ ’้ฃฏๅ‹ƒๆ‹”ๆ’ฅๆธคๆฝ‘"], +["dba1","็™ผ่ท‹้†ฑ้‰ข้ซฎ้ญƒๅ€ฃๅ‚ๅŠๅฆจๅฐจๅน‡ๅฝทๆˆฟๆ”พๆ–นๆ—ๆ˜‰ๆž‹ๆฆœๆป‚็ฃ…็ดก่‚ช่†€่ˆซ่Šณ่’ก่šŒ่จช่ฌ—้‚ฆ้˜ฒ้พๅ€ไฟณ๏ฅฃๅŸนๅพ˜ๆ‹œๆŽ’ๆฏๆนƒ็„™็›ƒ่ƒŒ่ƒš่ฃด่ฃต่ค™่ณ ่ผฉ้…้™ชไผฏไฝฐๅธ›ๆŸๆ ข็™ฝ็™พ้ญ„ๅนกๆจŠ็…ฉ็‡”็•ช๏ฅค็น่•ƒ่—ฉ้ฃœไผ็ญ็ฝฐ้–ฅๅ‡กๅธ†ๆขตๆฐพๆฑŽๆณ›็Šฏ็ฏ„่Œƒๆณ•็บๅƒปๅŠˆๅฃๆ“˜ๆช—็’ง็™–"], +["dca1","็ขง่˜—้—ข้œน๏ฅฅๅžๅผ่ฎŠ่พจ่พฏ้‚Šๅˆฅ็žฅ้ฑ‰้ผˆไธ™ๅ€‚ๅ…ตๅฑ›ๅนทๆ˜žๆ˜บๆŸ„ๆฃ…็‚ณ็”็—…็ง‰็ซ่ผง้ค ้จˆไฟๅ กๅ ฑๅฏถๆ™ฎๆญฅๆด‘ๆนบๆฝฝ็ค็”ซ่ฉ่ฃœ่ค“่ญœ่ผ”ไผๅƒ•ๅŒๅœๅฎ“ๅพฉๆœ็ฆ่…น่Œฏ่””่ค‡่ฆ†่ผน่ผป้ฆฅ้ฐ’ๆœฌไนถไฟธๅฅ‰ๅฐๅณฏๅณฐๆงๆฃ’็ƒฝ็†ข็ซ็ธซ่“ฌ่œ‚้€ข้‹’้ณณไธไป˜ไฟฏๅ‚…ๅ‰–ๅ‰ฏๅฆๅ’ๅŸ ๅคซๅฉฆ"], +["dda1","ๅญšๅญตๅฏŒๅบœ๏ฅฆๆ‰ถๆ•ทๆ–งๆตฎๆบฅ็ˆถ็ฌฆ็ฐฟ็ผถ่…่…‘่†š่‰€่Š™่Žฉ่จƒ่ฒ ่ณฆ่ณป่ตด่ถบ้ƒจ้‡œ้˜œ้™„้ง™้ณงๅŒ—ๅˆ†ๅฉๅ™ดๅขณๅฅ”ๅฅฎๅฟฟๆ†คๆ‰ฎๆ˜ๆฑพ็„š็›†็ฒ‰็ณž็ด›่Šฌ่ณ้›ฐ๏ฅงไฝ›ๅผ—ๅฝฟๆ‹‚ๅดฉๆœ‹ๆฃš็กผ็นƒ้ตฌไธ•ๅ‚™ๅŒ•ๅŒชๅ‘ๅฆƒๅฉขๅบ‡ๆ‚ฒๆ†Šๆ‰‰ๆ‰นๆ–ๆž‡ๆฆงๆฏ”ๆฏ–ๆฏ—ๆฏ˜ๆฒธ๏ฅจ็ต็—บ็ ’็ข‘็ง•็ง˜็ฒƒ็ท‹็ฟก่‚ฅ"], +["dea1","่„พ่‡‚่ฒ่œš่ฃจ่ชน่ญฌ่ฒป้„™้ž้ฃ›้ผปๅšฌๅฌชๅฝฌๆ–Œๆชณๆฎฏๆตœๆฟฑ็€•็‰็Žญ่ฒง่ณ“้ ปๆ†‘ๆฐท่˜้จไนไบ‹ไบ›ไป•ไผบไผผไฝฟไฟŸๅƒฟๅฒๅธๅ”†ๅ—ฃๅ››ๅฃซๅฅขๅจ‘ๅฏซๅฏบๅฐ„ๅทณๅธซๅพ™ๆ€ๆจๆ–œๆ–ฏๆŸถๆŸปๆขญๆญปๆฒ™ๆณ—ๆธฃ็€‰็…็ ‚็คพ็ฅ€็ฅ ็ง็ฏฉ็ด—็ตฒ่‚†่ˆ่ŽŽ่“‘่›‡่ฃŸ่ฉ่ฉž่ฌ่ณœ่ตฆ่พญ้‚ช้ฃผ้งŸ้บๅ‰Š๏ฅฉๆœ”๏ฅช"], +["dfa1","ๅ‚˜ๅˆชๅฑฑๆ•ฃๆฑ•็Š็”ฃ็–็ฎ—่’œ้…ธ้œฐไนทๆ’’ๆฎบ็…ž่–ฉไธ‰๏ฅซๆ‰ๆฃฎๆธ—่ŠŸ่”˜่กซๆทๆพ้ˆ’้ขฏไธŠๅ‚ทๅƒๅ„Ÿๅ•†ๅ–ชๅ˜—ๅญ€ๅฐ™ๅณ ๅธธๅบŠๅบ ๅป‚ๆƒณๆก‘ๆฉกๆน˜็ˆฝ็‰€็‹€็›ธ็ฅฅ็ฎฑ็ฟ”่ฃณ่งด่ฉณ่ฑก่ณž้œœๅกž็’ฝ่ณฝๅ—‡๏ฅฌ็ฉก็ดข่‰ฒ็‰ฒ็”Ÿ็”ฅ๏ฅญ็ฌ™ๅข…ๅฃปๅถผๅบๅบถๅพๆ•ๆŠ’ๆฟๆ•ๆš‘ๆ›™ๆ›ธๆ –ๆฃฒ็Š€็‘ž็ญฎ็ตฎ็ท–็ฝฒ"], +["e0a1","่ƒฅ่ˆ’่–ฏ่ฅฟ่ช“้€้‹ค้ป้ผ ๅค•ๅฅญๅธญๆƒœๆ˜”ๆ™ณๆžๆฑๆท…ๆฝŸ็Ÿณ็ขฉ่“†้‡‹้Œซไป™ๅƒŠๅ…ˆๅ–„ๅฌ‹ๅฎฃๆ‰‡ๆ•พๆ—‹ๆธฒ็…ฝ็็‘„็’‡็’ฟ็™ฌ็ฆช็ทš็น•็พจ่…บ่†ณ่ˆน่˜š่Ÿฌ่ฉต่ทฃ้ธ้Š‘้ฅ้ฅ้ฎฎๅจๅฑ‘ๆฅ”ๆณ„ๆดฉๆธซ่ˆŒ่–›่คป่จญ่ชช้›ช้ฝงๅ‰กๆšนๆฎฒ็บ–่Ÿพ่ด้–ƒ้™ๆ”ๆถ‰็‡ฎ๏ฅฎๅŸŽๅง“ๅฎฌๆ€งๆƒบๆˆๆ˜Ÿๆ™Ÿ็Œฉ็น็››็œ็ญฌ"], +["e1a1","่–่ฒ่…ฅ่ช ้†’ไธ–ๅ‹ขๆญฒๆด—็จ…็ฌน็ดฐ๏ฅฏ่ฒฐๅฌๅ˜ฏๅก‘ๅฎตๅฐๅฐ‘ๅทขๆ‰€ๆŽƒๆ”ๆ˜ญๆขณๆฒผๆถˆๆบฏ็€Ÿ็‚ค็‡’็”ฆ็–็–Ž็˜™็ฌ‘็ฏ ็ฐซ็ด ็ดน่”ฌ่•ญ่˜‡่จด้€้ก้‚ต้Šท้Ÿถ้จทไฟ—ๅฑฌๆŸๆถ‘็ฒŸ็บŒ่ฌ–่ด–้€Ÿๅญซๅทฝๆ่“€้œ้ฃก็އๅฎ‹ๆ‚šๆพๆทž่จŸ่ชฆ้€้ Œๅˆท๏ฅฐ็‘็ขŽ้Ž–่กฐ้‡—ไฟฎๅ—ๅ—ฝๅ›šๅž‚ๅฃฝๅซ‚ๅฎˆๅฒซๅณ€ๅธฅๆ„"], +["e2a1","ๆˆๆ‰‹ๆŽˆๆœๆ”ถๆ•ธๆจนๆฎŠๆฐดๆด™ๆผฑ็‡ง็‹ฉ็ธ็‡็’ฒ็˜ฆ็ก็ง€็ฉ—็ซช็ฒน็ถ็ถฌ็นก็พž่„ฉ่Œฑ่’่“š่—ช่ข–่ชฐ่ฎ่ผธ้‚้‚ƒ้…ฌ้Š–้Šน้š‹้šง้šจ้›–้œ€้ ˆ้ฆ–้ซ“้ฌšๅ”ๅกพๅค™ๅญฐๅฎฟๆท‘ๆฝš็†Ÿ็ก็’น่‚…่ฝๅทกๅพ‡ๅพชๆ‚ๆ—ฌๆ ’ๆฅฏๆฉ“ๆฎ‰ๆดตๆทณ็ฃ็›พ็žฌ็ญ็ด”่„ฃ่ˆœ่€่“ด่•ฃ่ฉข่ซ„้†‡้Œž้ †้ฆดๆˆŒ่ก“่ฟฐ้‰ฅๅด‡ๅดง"], +["e3a1","ๅตฉ็‘Ÿ่†่จๆฟ•ๆ‹พ็ฟ’่คถ่ฅฒไธžไน˜ๅƒงๅ‹ๅ‡ๆ‰ฟๆ˜‡็นฉ่ …้™žไพๅŒ™ๅ˜ถๅง‹ๅชคๅฐธๅฑŽๅฑๅธ‚ๅผ‘ๆƒๆ–ฝๆ˜ฏๆ™‚ๆžพๆŸด็Œœ็Ÿข็คบ็ฟ…่’”่“่ฆ–่ฉฆ่ฉฉ่ซก่ฑ•่ฑบๅŸดๅฏ”ๅผๆฏๆ‹ญๆคๆฎ–ๆนœ็†„็ฏ’่•่ญ˜่ปพ้ฃŸ้ฃพไผธไพไฟกๅ‘ปๅจ ๅฎธๆ„ผๆ–ฐๆ™จ็‡ผ็”ณ็ฅž็ดณ่…Ž่‡ฃ่Ž˜่–ช่—Ž่œƒ่จŠ่บซ่พ›๏ฅฑ่ฟ…ๅคฑๅฎคๅฏฆๆ‚‰ๅฏฉๅฐ‹ๅฟƒๆฒ"], +["e4a1","๏ฅฒๆทฑ็€‹็”š่Šฏ่ซถไป€ๅ๏ฅณ้›™ๆฐไบžไฟ„ๅ…’ๅ•žๅจฅๅณจๆˆ‘็‰™่Šฝ่Žช่›พ่ก™่จ้˜ฟ้›…้ค“้ด‰้ตๅ Šๅฒณๅถฝๅน„ๆƒกๆ„•ๆกๆจ‚ๆธฅ้„‚้”้กŽ้ฐ้ฝทๅฎ‰ๅฒธๆŒ‰ๆ™ๆกˆ็œผ้›้ž้ก”้ฎŸๆ–ก่ฌ่ป‹้–ผๅ”ตๅฒฉๅท–ๅบตๆš—็™Œ่ด้—‡ๅฃ“ๆŠผ็‹Ž้ดจไปฐๅคฎๆ€ๆ˜ปๆฎƒ็งง้ดฆๅŽ“ๅ“€ๅŸƒๅด–ๆ„›ๆ›–ๆถฏ็ข่‰พ้š˜้„ๅŽ„ๆ‰ผๆŽ–ๆถฒ็ธŠ่…‹้ก"], +["e5a1","ๆซป็ฝŒ้ถฏ้ธšไนŸๅ€ปๅ†ถๅคœๆƒนๆถๆคฐ็ˆบ่€ถ๏ฅด้‡Žๅผฑ๏ฅต๏ฅถ็ด„่‹ฅ่‘ฏ่’ป่—ฅ่บ๏ฅทไฝฏ๏ฅธ๏ฅนๅฃคๅญƒๆ™ๆšๆ”˜ๆ•ญๆš˜๏ฅบๆฅŠๆจฃๆด‹็€็…ฌ็—’็˜็ฆณ็ฉฐ๏ฅป็พŠ๏ฅผ่ฅ„๏ฅฝ่ฎ“้‡€้™ฝ๏ฅพ้คŠๅœ„ๅพกๆ–ผๆผ็˜€็ฆฆ่ชž้ฆญ้ญš้ฝฌๅ„„ๆ†ถๆŠ‘ๆช่‡†ๅƒๅ ฐๅฝฆ็„‰่จ€่ซบๅญผ่˜–ไฟบๅ„ผๅšดๅฅ„ๆŽฉๆทนๅถชๆฅญๅ††ไบˆไฝ™๏ฅฟ๏ฆ€๏ฆๅฆ‚๏ฆ‚"], +["e6a1","๏ฆƒๆญŸๆฑ๏ฆ„็’ต็ค–๏ฆ…่ˆ‡่‰…่Œน่ผฟ่ฝ๏ฆ†้ค˜๏ฆ‡๏ฆˆ๏ฆ‰ไบฆ๏ฆŠๅŸŸๅฝนๆ˜“๏ฆ‹๏ฆŒ็–ซ็นน่ญฏ๏ฆ้€†้ฉ›ๅšฅๅ งๅงธๅจŸๅฎด๏ฆŽๅปถ๏ฆ๏ฆๆๆŒป๏ฆ‘ๆคฝๆฒ‡ๆฒฟๆถŽๆถ“ๆทตๆผ”๏ฆ’็ƒŸ็„ถ็…™๏ฆ“็‡ƒ็‡•๏ฆ”็ก็กฏ๏ฆ•็ญต็ทฃ๏ฆ–็ธฏ๏ฆ—่ก่ปŸ๏ฆ˜๏ฆ™๏ฆš้‰›๏ฆ›้ณถ๏ฆœ๏ฆ๏ฆžๆ‚…ๆถ…๏ฆŸ็†ฑ๏ฆ ๏ฆก้–ฑๅŽญ๏ฆข๏ฆฃ๏ฆคๆŸ“๏ฆฅ็‚Ž็„ฐ็ฐ่‰ถ่‹’"], +["e7a1","๏ฆฆ้–ป้ซฅ้นฝๆ›„๏ฆง็‡่‘‰๏ฆจ๏ฆฉๅก‹๏ฆช๏ฆซๅถธๅฝฑ๏ฆฌๆ˜ ๆšŽๆฅนๆฆฎๆฐธๆณณๆธถๆฝๆฟš็€›็€ฏ็…็‡Ÿ็ฐ๏ฆญ็‘›๏ฆฎ็“”็›ˆ็ฉŽ็บ“๏ฆฏ๏ฆฐ่‹ฑ่ฉ ่ฟŽ๏ฆฑ้ˆ๏ฆฒ้œ™๏ฆณ๏ฆดไน‚ๅ€ช๏ฆตๅˆˆๅกๆ›ณๆฑญๆฟŠ็ŒŠ็ฟ็ฉข่Šฎ่—่˜‚๏ฆถ่ฃ”่ฉฃ่ญฝ่ฑซ๏ฆท้Šณ๏ฆธ้œ“้ ไบ”ไผไฟ‰ๅ‚ฒๅˆๅพๅณๅ—šๅกขๅขบๅฅงๅจ›ๅฏคๆ‚Ÿ๏ฆนๆ‡Šๆ•–ๆ—ฟๆ™คๆขงๆฑšๆพณ"], +["e8a1","็ƒ็†ฌ็’็ญฝ่œˆ่ชค้ฐฒ้ผ‡ๅฑ‹ๆฒƒ็„็މ้ˆบๆบซ็‘ฅ็˜Ÿ็ฉฉ็ธ•่˜Šๅ…€ๅฃ…ๆ“็“ฎ็”•็™ฐ็ฟ้‚•้›้ฅ”ๆธฆ็“ฆ็ชฉ็ชช่‡ฅ่›™่ธ่จ›ๅฉ‰ๅฎŒๅฎ›ๆขกๆค€ๆตฃ็Žฉ็“็ฌ็ข—็ทฉ็ฟซ่„˜่…•่Žž่ฑŒ้˜ฎ้ ‘ๆ›ฐๅพ€ๆ—บๆž‰ๆฑช็Ž‹ๅ€ญๅจƒๆญช็Ÿฎๅค–ๅตฌๅท็Œฅ็•๏ฆบ๏ฆปๅƒฅๅ‡นๅ ฏๅคญๅฆ–ๅงšๅฏฅ๏ฆผ๏ฆฝๅถขๆ‹—ๆ–ๆ’“ๆ“พ๏ฆพๆ›œ๏ฆฟๆฉˆ๏ง€็‡ฟ็‘ค๏ง"], +["e9a1","็ชˆ็ชฏ็น‡็นž่€€่…ฐ๏ง‚่Ÿฏ่ฆ่ฌ ้™๏งƒ้‚€้ฅ’ๆ…พๆฌฒๆตด็ธŸ่คฅ่พฑไฟ‘ๅ‚ญๅ†—ๅ‹‡ๅŸ‡ๅข‰ๅฎนๅบธๆ…‚ๆฆ•ๆถŒๆนงๆบถ็†”็‘ข็”จ็”ฌ่ณ่Œธ่“‰่ธŠ้Ž”้ž๏ง„ไบŽไฝ‘ๅถๅ„ชๅˆๅ‹ๅณๅฎ‡ๅฏ“ๅฐคๆ„šๆ†‚ๆ—ด็‰›็Ž—็‘€็›‚็ฅ็ฆ‘็ฆน็ด†็พฝ่Š‹่—•่™ž่ฟ‚้‡้ƒต้‡ช้š…้›จ้›ฉๅ‹–ๅฝงๆ—ญๆ˜ฑๆ ฏ็…œ็จถ้ƒ้ Šไบ‘๏ง…ๆฉ’ๆฎžๆพ็†‰่€˜่Šธ่•“"], +["eaa1","้‹้š•้›ฒ้Ÿป่”š้ฌฑไบ็†Š้›„ๅ…ƒๅŽŸๅ“กๅœ“ๅœ’ๅžฃๅช›ๅซ„ๅฏƒๆ€จๆ„ฟๆดๆฒ…ๆดนๆนฒๆบ็ˆฐ็Œฟ็‘—่‹‘่ข่ฝ…้ ๏ง†้™ข้ก˜้ด›ๆœˆ่ถŠ้‰žไฝๅ‰ๅƒžๅฑๅœๅง”ๅจๅฐ‰ๆ…ฐๆšๆธญ็ˆฒ็‘‹็ทฏ่ƒƒ่Ž่‘ฆ่”ฟ่Ÿ่ก›่ค˜่ฌ‚้•้Ÿ‹้ญไนณไพ‘ๅ„’ๅ…ช๏ง‡ๅ”ฏๅ–ฉๅญบๅฎฅๅนผๅนฝๅบพๆ‚ ๆƒŸๆ„ˆๆ„‰ๆ„ๆ”ธๆœ‰๏งˆๆŸ”ๆŸš๏ง‰ๆฅกๆฅขๆฒนๆดง๏งŠๆธธ๏ง‹"], +["eba1","ๆฟก็Œถ็Œท๏งŒ็‘œ็”ฑ๏ง็™’๏งŽ๏ง็ถญ่‡พ่ธ่ฃ•่ช˜่ซ›่ซญ่ธฐ่น‚้Š้€พ้บ้…‰้‡‰้ฎ๏ง๏ง‘ๅ ‰๏ง’ๆฏ“่‚‰่‚ฒ๏ง“๏ง”ๅ…ๅฅซๅฐน๏ง•๏ง–ๆฝค็Žง่ƒค่ด‡๏ง—้ˆ—้–๏ง˜๏ง™๏งš๏ง›่ฟๆˆŽ็€œ็ตจ่ž๏งœๅž ๆฉๆ…‡ๆฎท่ชพ้Š€้šฑไน™ๅŸๆทซ่”ญ้™ฐ้Ÿณ้ฃฎๆ–ๆณฃ้‚‘ๅ‡ๆ‡‰่†บ้ทนไพๅ€šๅ„€ๅฎœๆ„ๆ‡ฟๆ“ฌๆค…ๆฏ…็–‘็Ÿฃ็พฉ่‰ค่–่Ÿป่กฃ่ชผ"], +["eca1","่ญฐ้†ซไบŒไปฅไผŠ๏ง๏งžๅคทๅงจ๏งŸๅทฒๅผ›ๅฝ›ๆ€ก๏ง ๏งก๏งข๏งฃ็ˆพ็ฅ๏งค็•ฐ็—๏งฅ็งป๏งฆ่€Œ่€ณ่‚„่‹ก่‘๏งง๏งจ่ฒฝ่ฒณ้‚‡๏งฉ๏งช้ฃด้คŒ๏งซ๏งฌ็€ท็›Š็ฟŠ็ฟŒ็ฟผ่ฌšไบบไปๅˆƒๅฐ๏งญๅ’ฝๅ› ๅงปๅฏ…ๅผ•ๅฟๆนฎ๏งฎ๏งฏ็ตช่Œต๏งฐ่š“่ช๏งฑ้ญ้ท๏งฒ๏งณไธ€ไฝšไฝพๅฃนๆ—ฅๆบข้€ธ้Žฐ้ฆนไปปๅฃฌๅฆŠๅง™ๆ๏งด๏งต็จ”๏งถ่่ณƒๅ…ฅๅ„"], +["eda1","๏งท๏งธ๏งนไปๅ‰ฉๅญ•่Šฟไป”ๅˆบๅ’จๅง‰ๅงฟๅญๅญ—ๅญœๆฃๆ…ˆๆป‹็‚™็…ฎ็ކ็“ท็–ต็ฃ็ดซ่€…่‡ช่Œจ่”—่—‰่ซฎ่ณ‡้›Œไฝœๅ‹บๅšผๆ–ซๆ˜จ็ผ็‚ธ็ˆต็ถฝ่Š้…Œ้›€้ตฒๅญฑๆฃงๆฎ˜ๆฝบ็›žๅฒ‘ๆšซๆฝ›็ฎด็ฐช่ ถ้›œไธˆไป—ๅŒ ๅ ดๅขปๅฃฏๅฅฌๅฐ‡ๅธณๅบ„ๅผตๆŽŒๆšฒๆ–ๆจŸๆชฃๆฌŒๆผฟ็‰†๏งบ็็’‹็ซ ็ฒง่…ธ่‡Ÿ่‡ง่ŽŠ่‘ฌ่”ฃ่–”่—่ฃ่ด“้†ฌ้•ท"], +["eea1","้šœๅ†ๅ“‰ๅœจๅฎฐๆ‰ๆๆ ฝๆข“ๆธฝๆป“็ฝ็ธก่ฃ่ฒก่ผ‰้ฝ‹้ฝŽ็ˆญ็ฎ่ซ้Œšไฝ‡ไฝŽๅ„ฒๅ’€ๅงๅบ•ๆŠตๆตๆฅฎๆจ—ๆฒฎๆธš็‹™็Œช็–ฝ็ฎธ็ดต่‹ง่น่‘—่—ท่ฉ›่ฒฏ่บ‡้€™้‚ธ้›Ž้ฝŸๅ‹ฃๅŠๅซกๅฏ‚ๆ‘˜ๆ•ตๆปด็‹„๏งป็š„็ฉ็ฌ›็ฑ็ธพ็ฟŸ่ป่ฌซ่ณŠ่ตค่ทก่นŸ่ฟช่ฟน้ฉ้‘ไฝƒไฝบๅ‚ณๅ…จๅ…ธๅ‰ๅ‰ชๅกกๅกผๅฅ ๅฐˆๅฑ•ๅป›ๆ‚›ๆˆฐๆ “ๆฎฟๆฐˆๆพฑ"], +["efa1","็…Ž็ ็”ฐ็”ธ็•‘็™ฒ็ญŒ็ฎ‹็ฎญ็ฏ†็บ่ฉฎ่ผพ่ฝ‰้ˆฟ้Š“้Œข้ซ้›ป้กš้กซ้คžๅˆ‡ๆˆชๆŠ˜ๆต™็™ค็ซŠ็ฏ€็ตถๅ ๅฒพๅบ—ๆผธ็‚น็ฒ˜้œ‘้ฎŽ้ปžๆŽฅๆ‘บ่ถไธไบ•ไบญๅœๅตๅ‘ˆๅงƒๅฎšๅน€ๅบญๅปทๅพๆƒ…ๆŒบๆ”ฟๆ•ดๆ—Œๆ™ถๆ™ธๆŸพๆฅจๆช‰ๆญฃๆฑ€ๆท€ๆทจๆธŸๆนž็€ž็‚ก็ŽŽ็ฝ็”บ็›็ข‡็ฆŽ็จ‹็ฉฝ็ฒพ็ถŽ่‰‡่จ‚่ซช่ฒž้„ญ้…Š้‡˜้‰ฆ้‹Œ้Œ ้œ†้–"], +["f0a1","้œ้ ‚้ผŽๅˆถๅŠ‘ๅ•ผๅ คๅธๅผŸๆ‚ŒๆๆขฏๆฟŸ็ฅญ็ฌฌ่‡่–บ่ฃฝ่ซธ่น„้†้™ค้š›้œฝ้กŒ้ฝŠไฟŽๅ…†ๅ‡‹ๅŠฉๅ˜ฒๅผ”ๅฝซๆŽชๆ“ๆ—ฉๆ™ๆ›บๆ›นๆœๆขๆฃ—ๆงฝๆผ•ๆฝฎ็…ง็‡ฅ็ˆช็’ช็œบ็ฅ–็ฅš็งŸ็จ ็ช•็ฒ—็ณŸ็ต„็นฐ่‚‡่—ป่šค่ฉ”่ชฟ่ถ™่บ้€ ้ญ้‡ฃ้˜ป้›•้ณฅๆ—็ฐ‡่ถณ้ƒๅญ˜ๅฐŠๅ’ๆ‹™็Œๅ€งๅฎ—ๅพžๆ‚ฐๆ…ซๆฃ•ๆท™็ฎ็จฎ็ต‚็ถœ็ธฑ่…ซ"], +["f1a1","่ธช่ธต้พ้˜ไฝๅๅทฆๅบงๆŒซ็ฝชไธปไฝไพๅšๅง่ƒ„ๅ‘ชๅ‘จๅ—พๅฅๅฎ™ๅทžๅปšๆ™ๆœฑๆŸฑๆ ชๆณจๆดฒๆนŠๆพ็‚ท็ ็–‡็ฑŒ็ด‚็ดฌ็ถข่ˆŸ่››่จป่ช…่ตฐ่บŠ่ผณ้€ฑ้…Ž้…’้‘„้ง็ซน็ฒฅไฟŠๅ„ๅ‡†ๅŸˆๅฏฏๅณปๆ™™ๆจฝๆตšๆบ–ๆฟฌ็„Œ็•ฏ็ซฃ่ ข้€ก้ต้›‹้งฟ่Œไธญไปฒ่ก†้‡ๅฝๆซ›ๆฅซๆฑ่‘บๅขžๆ†Žๆ›พๆ‹ฏ็ƒ็”‘็—‡็น’่’ธ่ญ‰่ดˆไน‹ๅช"], +["f2a1","ๅ’ซๅœฐๅ€ๅฟ—ๆŒๆŒ‡ๆ‘ฏๆ”ฏๆ—จๆ™บๆžๆžณๆญขๆฑ ๆฒšๆผฌ็Ÿฅ็ ฅ็ฅ‰็ฅ—็ด™่‚ข่„‚่‡ณ่Š่Šท่œ˜่ชŒ๏งผ่ด„่ถพ้ฒ็›ด็จ™็จท็น”่ทๅ”‡ๅ—”ๅกตๆŒฏๆขๆ™‰ๆ™‹ๆกญๆฆ›ๆฎ„ๆดฅๆบฑ็็‘จ็’ก็•›็–น็›ก็œž็ž‹็งฆ็ธ‰็ธ่‡ป่”ฏ่ข—่จบ่ณ‘่ปซ่พฐ้€ฒ้Žญ้™ฃ้™ณ้œ‡ไพ„ๅฑๅงชๅซ‰ๅธ™ๆกŽ็“†็–พ็งฉ็ช’่†ฃ่›ญ่ณช่ทŒ่ฟญๆ–Ÿๆœ•๏งฝๅŸทๆฝ—็ท่ผฏ"], +["f3a1","้ถ้›†ๅพตๆ‡ฒๆพ„ไธ”ไพ˜ๅ€Ÿๅ‰ๅ—Ÿๅตฏๅทฎๆฌกๆญค็ฃ‹็ฎš๏งพ่น‰่ปŠ้ฎๆ‰ๆพ็€็ช„้Œฏ้‘ฟ้ฝชๆ’ฐๆพฏ็‡ฆ็’จ็“š็ซ„็ฐ’็บ‚็ฒฒ็บ˜่ฎš่ดŠ้‘ฝ้ค้ฅŒๅˆนๅฏŸๆ“ฆๆœญ็ดฎๅƒญๅƒๅกนๆ…˜ๆ…™ๆ‡บๆ–ฌ็ซ™่ฎ’่ฎ–ๅ€‰ๅ€กๅ‰ตๅ”ฑๅจผๅป ๅฝฐๆ„ดๆ•žๆ˜Œๆ˜ถๆšขๆงๆป„ๆผฒ็Œ–็˜ก็ช“่„น่‰™่–่’ผๅ‚ตๅŸฐๅฏ€ๅฏจๅฝฉๆŽก็ ฆ็ถต่œ่”ก้‡‡้‡ตๅ†ŠๆŸต็ญ–"], +["f4a1","่ฒฌๅ‡„ๅฆปๆ‚ฝ่™•ๅ€œ๏งฟๅ‰”ๅฐบๆ…ฝๆˆšๆ‹“ๆ“ฒๆ–ฅๆปŒ็˜ ่„Š่น ้™Ÿ้šปไปŸๅƒๅ–˜ๅคฉๅทๆ“…ๆณ‰ๆทบ็Ž”็ฉฟ่ˆ›่–ฆ่ณค่ธ้ท้‡ง้—ก้˜ก้Ÿ†ๅ‡ธๅ“ฒๅ–†ๅพนๆ’คๆพˆ็ถด่ผŸ่ฝ้ตๅƒ‰ๅฐ–ๆฒพๆทป็”›็žป็ฐฝ็ฑค่ฉน่ซ‚ๅ žๅฆพๅธ–ๆท็‰’็–Š็ซ่ซœ่ฒผ่ผ’ๅปณๆ™ดๆทธ่ฝ่่ซ‹้‘้ฏ–๏จ€ๅ‰ƒๆ›ฟๆถ•ๆปฏ็ท ่ซฆ้€ฎ้ž้ซ”ๅˆๅ‰ฟๅ“จๆ†”ๆŠ„ๆ‹›ๆขข"], +["f5a1","ๆค’ๆฅšๆจต็‚’็„ฆ็ก็ค็คŽ็ง’็จ่‚–่‰ธ่‹•่‰่•‰่ฒ‚่ถ…้…ข้†‹้†ฎไฟƒๅ›‘็‡ญ็Ÿ—่œ€่งธๅฏธๅฟ–ๆ‘้‚จๅขๅกšๅฏตๆ‚คๆ†ๆ‘ ็ธฝ่ฐ่”ฅ้Šƒๆ’ฎๅ‚ฌๅด”ๆœ€ๅขœๆŠฝๆŽจๆคŽๆฅธๆจžๆนซ็šบ็ง‹่Šป่ฉ่ซ่ถจ่ฟฝ้„’้…‹้†œ้Œ้Œ˜้Žš้››้จถ้ฐไธ‘็•œ็ฅ็ซบ็ญ‘็ฏ‰็ธฎ่“„่น™่นด่ปธ้€ๆ˜ฅๆคฟ็‘ƒๅ‡บๆœฎ้ปœๅ……ๅฟ ๆฒ–่Ÿฒ่ก่กทๆ‚ด่†ต่ƒ"], +["f6a1","่ด…ๅ–ๅนๅ˜ดๅจถๅฐฑ็‚Š็ฟ ่š่„†่‡ญ่ถฃ้†‰้ฉŸ้ทฒๅดไป„ๅŽ ๆƒปๆธฌๅฑคไพˆๅ€คๅ—คๅณ™ๅนŸๆฅๆข”ๆฒปๆท„็†พ็—”็—ด็™ก็จš็ฉ‰็ท‡็ทป็ฝฎ่‡ด่šฉ่ผœ้›‰้ฆณ้ฝ’ๅ‰‡ๅ‹…้ฃญ่ฆชไธƒๆŸ’ๆผ†ไพตๅฏขๆž•ๆฒˆๆตธ็›็ ง้‡้ผ่Ÿ„็งค็จฑๅฟซไป–ๅ’คๅ”พๅขฎๅฆฅๆƒฐๆ‰“ๆ‹–ๆœถๆฅ•่ˆต้™€้ฆฑ้งๅ€ฌๅ“ๅ•„ๅผ๏จๆ‰˜๏จ‚ๆ“ขๆ™ซๆŸๆฟๆฟฏ็ข็ธ่จ—"], +["f7a1","้ธๅ‘‘ๅ˜†ๅฆๅฝˆๆ†šๆญŽ็˜็‚ญ็ถป่ช•ๅฅช่„ซๆŽข็œˆ่€ฝ่ฒชๅก”ๆญๆฆปๅฎ•ๅธ‘ๆนฏ๏จƒ่•ฉๅ…Œๅฐๅคชๆ€ ๆ…‹ๆฎ†ๆฑฐๆณฐ็ฌž่ƒŽ่‹”่ท†้‚ฐ้ขฑ๏จ„ๆ“‡ๆพคๆ’‘ๆ”„ๅ…ŽๅๅœŸ่จŽๆ…Ÿๆกถ๏จ…็—›็ญ’็ตฑ้€šๅ †ๆงŒ่…ฟ่คช้€€้ นๅธๅฅ—ๅฆฌๆŠ•้€้ฌชๆ…็‰น้—–ๅกๅฉ†ๅทดๆŠŠๆ’ญๆ“บๆทๆณขๆดพ็ˆฌ็ถ็ ด็ฝท่Šญ่ท›้ —ๅˆคๅ‚ๆฟ็‰ˆ็“ฃ่ฒฉ่พฆ้ˆ‘"], +["f8a1","้˜ชๅ…ซๅญๆŒไฝฉๅ”„ๆ‚–ๆ•—ๆฒ›ๆตฟ็‰Œ็‹ฝ็จ—่ฆ‡่ฒๅฝญๆพŽ็ƒน่†จๆ„Žไพฟๅๆ‰็‰‡็ฏ‡็ทจ็ฟฉ้้žญ้จ™่ฒถๅชๅนณๆžฐ่่ฉ•ๅ ๅฌ–ๅนฃๅปขๅผŠๆ–ƒ่‚บ่”ฝ้–‰้™›ไฝˆๅŒ…ๅŒๅŒๅ’†ๅ“บๅœƒๅธƒๆ€–ๆŠ›ๆŠฑๆ•๏จ†ๆณกๆตฆ็–ฑ็ ฒ่ƒž่„ฏ่‹ž่‘ก่’ฒ่ข่ค’้€‹้‹ช้ฃฝ้ฎ‘ๅน…ๆšดๆ›็€‘็ˆ†๏จ‡ไฟตๅ‰ฝๅฝชๆ…“ๆ“ๆจ™ๆผ‚็“ข็ฅจ่กจ่ฑน้ฃ‡้ฃ„้ฉƒ"], +["f9a1","ๅ“็จŸๆฅ“่ซท่ฑŠ้ขจ้ฆฎๅฝผๆŠซ็–ฒ็šฎ่ขซ้ฟ้™‚ๅŒนๅผผๅฟ…ๆณŒ็Œ็•ข็–‹็ญ†่‹พ้ฆไน้€ผไธ‹ไฝ•ๅŽฆๅคๅปˆๆ˜ฐๆฒณ็‘•่ท่ฆ่ณ€้้œž้ฐ•ๅฃ‘ๅญธ่™่ฌ”้ถดๅฏ’ๆจๆ‚ๆ—ฑๆฑ—ๆผขๆพฃ็€š็ฝ•็ฟฐ้–‘้–’้™้Ÿ“ๅ‰ฒ่ฝ„ๅ‡ฝๅซๅ’ธๅ•ฃๅ–Šๆชปๆถต็ท˜่‰ฆ้Šœ้™ท้นนๅˆๅ“ˆ็›’่›ค้–ค้—”้™œไบขไผ‰ๅงฎๅซฆๅททๆ’ๆŠ—ๆญๆกๆฒ†ๆธฏ็ผธ่‚›่ˆช"], +["faa1","๏จˆ๏จ‰้ …ไบฅๅ•ๅ’ณๅž“ๅฅšๅญฉๅฎณๆ‡ˆๆฅทๆตท็€ฃ่Ÿน่งฃ่ฉฒ่ซง้‚‚้งญ้ชธๅŠพๆ ธๅ€–ๅนธๆ่‡่กŒไบซๅ‘ๅšฎ็ฆ้„•้Ÿฟ้ค‰้ฅ—้ฆ™ๅ™“ๅขŸ่™›่จฑๆ†ฒๆซถ็ป่ป’ๆญ‡้šช้ฉ—ๅฅ•็ˆ€่ตซ้ฉไฟ”ๅณดๅผฆๆ‡ธๆ™›ๆณซ็‚ซ็Ž„็Žน็พ็œฉ็็ตƒ็ตข็ธฃ่ˆท่ก’๏จŠ่ณข้‰‰้กฏๅญ‘็ฉด่ก€้ ๅซŒไฟ ๅ”ๅคพๅณฝๆŒพๆตน็‹น่„…่„‡่Žข้‹้ ฐไบจๅ…„ๅˆ‘ๅž‹"], +["fba1","ๅฝขๆณ‚ๆปŽ็€…็็‚ฏ็†’็ฉ็‘ฉ่Š่žข่กก้€ˆ้‚ข้Žฃ้ฆจๅ…ฎๅฝ—ๆƒ ๆ…งๆšณ่•™่นŠ้†ฏ้ž‹ไนŽไบ’ๅ‘ผๅฃ•ๅฃบๅฅฝๅฒตๅผงๆˆถๆ‰ˆๆ˜Šๆ™งๆฏซๆตฉๆทๆน–ๆปธๆพ”ๆฟ ๆฟฉ็็‹็ฅ็‘š็“ ็š“็ฅœ็ณŠ็ธž่ƒก่Šฆ่‘ซ่’ฟ่™Ž่™Ÿ่ด่ญท่ฑช้Žฌ้ €้กฅๆƒ‘ๆˆ–้…ทๅฉšๆ˜ๆททๆธพ็ฟ้ญ‚ๅฟฝๆƒš็ฌๅ“„ๅผ˜ๆฑžๆณ“ๆดช็ƒ˜็ด…่™น่จŒ้ดปๅŒ–ๅ’Œๅฌ…ๆจบ็ซ็•ต"], +["fca1","็ฆ็ฆพ่Šฑ่ฏ่ฉฑ่ญ่ฒจ้ด๏จ‹ๆ“ดๆ”ซ็ขบ็ขป็ฉซไธธๅ–šๅฅๅฎฆๅนปๆ‚ฃๆ›ๆญกๆ™ฅๆก“ๆธ™็…ฅ็’ฐ็ดˆ้‚„้ฉฉ้ฐฅๆดปๆป‘็Œพ่ฑ้—Šๅ‡ฐๅนŒๅพจๆๆƒถๆ„ฐๆ…Œๆ™ƒๆ™„ๆฆฅๆณๆนŸๆป‰ๆฝข็…Œ็’œ็š‡็ฏ็ฐง่’่—้‘้š้ปƒๅŒฏๅ›žๅปปๅพŠๆขๆ‚”ๆ‡ทๆ™ฆๆœƒๆชœๆทฎๆพฎ็ฐ็ช็นช่†พ่Œด่›”่ชจ่ณ„ๅŠƒ็ฒๅฎ–ๆฉซ้„ๅ“ฎๅš†ๅญๆ•ˆๆ–…ๆ›‰ๆขŸๆถๆท†"], +["fda1","็ˆป่‚ด้…ต้ฉไพฏๅ€™ๅŽšๅŽๅผๅ–‰ๅ—…ๅธฟๅพŒๆœฝ็…ฆ็้€…ๅ‹›ๅ‹ณๅกคๅฃŽ็„„็†็‡ป่–ฐ่จ“ๆšˆ่–จๅ–งๆš„็…Š่ฑๅ‰ๅ–™ๆฏๅฝ™ๅพฝๆฎๆš‰็…‡่ซฑ่ผ้บพไผ‘ๆบ็ƒ‹็•ฆ่™งๆค่ญŽ้ทธๅ…‡ๅ‡ถๅŒˆๆดถ่ƒธ้ป‘ๆ˜•ๆฌฃ็‚˜็—•ๅƒๅฑน็ด‡่จ–ๆฌ ๆฌฝๆญ†ๅธๆฐๆดฝ็ฟ•่ˆˆๅƒ–ๅ‡žๅ–œๅ™ซๅ›ๅงฌๅฌ‰ๅธŒๆ†™ๆ†˜ๆˆฑๆ™žๆ›ฆ็†™็†น็†บ็Šง็ฆง็จ€็พฒ่ฉฐ"] +] diff --git a/node_modules/iconv-lite/encodings/tables/cp950.json b/node_modules/iconv-lite/encodings/tables/cp950.json new file mode 100644 index 0000000..d8bc871 --- /dev/null +++ b/node_modules/iconv-lite/encodings/tables/cp950.json @@ -0,0 +1,177 @@ +[ +["0","\u0000",127], +["a140","ใ€€๏ผŒใ€ใ€‚๏ผŽโ€ง๏ผ›๏ผš๏ผŸ๏ผ๏ธฐโ€ฆโ€ฅ๏น๏น‘๏น’ยท๏น”๏น•๏น–๏น—๏ฝœโ€“๏ธฑโ€”๏ธณโ•ด๏ธด๏น๏ผˆ๏ผ‰๏ธต๏ธถ๏ฝ›๏ฝ๏ธท๏ธธใ€”ใ€•๏ธน๏ธบใ€ใ€‘๏ธป๏ธผใ€Šใ€‹๏ธฝ๏ธพใ€ˆใ€‰๏ธฟ๏น€ใ€Œใ€๏น๏น‚ใ€Žใ€๏นƒ๏น„๏น™๏นš"], +["a1a1","๏น›๏นœ๏น๏นžโ€˜โ€™โ€œโ€ใ€ใ€žโ€ตโ€ฒ๏ผƒ๏ผ†๏ผŠโ€ปยงใ€ƒโ—‹โ—โ–ณโ–ฒโ—Žโ˜†โ˜…โ—‡โ—†โ–กโ– โ–ฝโ–ผใŠฃโ„…ยฏ๏ฟฃ๏ผฟห๏น‰๏นŠ๏น๏นŽ๏น‹๏นŒ๏นŸ๏น ๏นก๏ผ‹๏ผร—รทยฑโˆš๏ผœ๏ผž๏ผโ‰ฆโ‰งโ‰ โˆžโ‰’โ‰ก๏นข",4,"๏ฝžโˆฉโˆชโŠฅโˆ โˆŸโŠฟใ’ใ‘โˆซโˆฎโˆตโˆดโ™€โ™‚โŠ•โŠ™โ†‘โ†“โ†โ†’โ†–โ†—โ†™โ†˜โˆฅโˆฃ๏ผ"], +["a240","๏ผผโˆ•๏นจ๏ผ„๏ฟฅใ€’๏ฟ ๏ฟก๏ผ…๏ผ โ„ƒโ„‰๏นฉ๏นช๏นซใ•ใŽœใŽใŽžใŽใŽกใŽŽใŽใ„ยฐๅ…™ๅ…›ๅ…žๅ…ๅ…กๅ…ฃๅ—ง็“ฉ็ณŽโ–",7,"โ–โ–Žโ–โ–Œโ–‹โ–Šโ–‰โ”ผโ”ดโ”ฌโ”คโ”œโ–”โ”€โ”‚โ–•โ”Œโ”โ””โ”˜โ•ญ"], +["a2a1","โ•ฎโ•ฐโ•ฏโ•โ•žโ•ชโ•กโ—ขโ—ฃโ—ฅโ—คโ•ฑโ•ฒโ•ณ๏ผ",9,"โ… ",9,"ใ€ก",8,"ๅๅ„ๅ…๏ผก",25,"๏ฝ",21], +["a340","๏ฝ—๏ฝ˜๏ฝ™๏ฝšฮ‘",16,"ฮฃ",6,"ฮฑ",16,"ฯƒ",6,"ใ„…",10], +["a3a1","ใ„",25,"ห™ห‰หŠห‡ห‹"], +["a3e1","โ‚ฌ"], +["a440","ไธ€ไน™ไธไธƒไนƒไนไบ†ไบŒไบบๅ„ฟๅ…ฅๅ…ซๅ‡ ๅˆ€ๅˆๅŠ›ๅŒ•ๅๅœๅˆไธ‰ไธ‹ไธˆไธŠไธซไธธๅ‡กไน…ไนˆไนŸไนžไบŽไบกๅ…€ๅˆƒๅ‹บๅƒๅ‰ๅฃๅœŸๅฃซๅค•ๅคงๅฅณๅญๅญ‘ๅญ“ๅฏธๅฐๅฐขๅฐธๅฑฑๅทๅทฅๅทฑๅทฒๅทณๅทพๅนฒๅปพๅผ‹ๅผ“ๆ‰"], +["a4a1","ไธ‘ไธไธไธญไธฐไธนไน‹ๅฐนไบˆไบ‘ไบ•ไบ’ไบ”ไบขไปไป€ไปƒไป†ไป‡ไปไปŠไป‹ไป„ๅ…ƒๅ…ๅ…งๅ…ญๅ…ฎๅ…ฌๅ†—ๅ‡ถๅˆ†ๅˆ‡ๅˆˆๅ‹ปๅ‹พๅ‹ฟๅŒ–ๅŒนๅˆๅ‡ๅ…ๅžๅŽ„ๅ‹ๅŠๅๅฃฌๅคฉๅคซๅคชๅคญๅญ”ๅฐ‘ๅฐคๅฐบๅฑฏๅทดๅนปๅปฟๅผ”ๅผ•ๅฟƒๆˆˆๆˆถๆ‰‹ๆ‰Žๆ”ฏๆ–‡ๆ–—ๆ–คๆ–นๆ—ฅๆ›ฐๆœˆๆœจๆฌ ๆญขๆญนๆฏ‹ๆฏ”ๆฏ›ๆฐๆฐด็ซ็ˆช็ˆถ็ˆป็‰‡็‰™็‰›็Šฌ็Ž‹ไธ™"], +["a540","ไธ–ไธ•ไธ”ไธ˜ไธปไนไนไนŽไปฅไป˜ไป”ไป•ไป–ไป—ไปฃไปคไป™ไปžๅ……ๅ…„ๅ†‰ๅ†Šๅ†ฌๅ‡นๅ‡บๅ‡ธๅˆŠๅŠ ๅŠŸๅŒ…ๅŒ†ๅŒ—ๅŒไปŸๅŠๅ‰ๅกๅ ๅฏๅฎๅŽปๅฏๅคๅณๅฌๅฎๅฉๅจๅผๅธๅตๅซๅฆๅชๅฒๅฑๅฐๅฅๅญๅปๅ››ๅ›šๅค–"], +["a5a1","ๅคฎๅคฑๅฅดๅฅถๅญ•ๅฎƒๅฐผๅทจๅทงๅทฆๅธ‚ๅธƒๅนณๅนผๅผๅผ˜ๅผ—ๅฟ…ๆˆŠๆ‰“ๆ‰”ๆ‰’ๆ‰‘ๆ–ฅๆ—ฆๆœฎๆœฌๆœชๆœซๆœญๆญฃๆฏๆฐ‘ๆฐๆฐธๆฑๆฑ€ๆฐพ็Šฏ็Ž„็މ็“œ็“ฆ็”˜็”Ÿ็”จ็”ฉ็”ฐ็”ฑ็”ฒ็”ณ็–‹็™ฝ็šฎ็šฟ็›ฎ็Ÿ›็Ÿข็Ÿณ็คบ็ฆพ็ฉด็ซ‹ไธžไธŸไน’ไน“ไนฉไบ™ไบคไบฆไบฅไปฟไผ‰ไผ™ไผŠไผ•ไผไผไผ‘ไผไปฒไปถไปปไปฐไปณไปฝไผไผ‹ๅ…‰ๅ…‡ๅ…†ๅ…ˆๅ…จ"], +["a640","ๅ…ฑๅ†ๅ†ฐๅˆ—ๅˆ‘ๅˆ’ๅˆŽๅˆ–ๅŠฃๅŒˆๅŒกๅŒ ๅฐๅฑๅ‰ๅๅŒๅŠๅๅๅ‹ๅ„ๅ‘ๅๅˆๅƒๅŽๅ†ๅ’ๅ› ๅ›žๅ›ๅœณๅœฐๅœจๅœญๅœฌๅœฏๅœฉๅค™ๅคšๅคทๅคธๅฆ„ๅฅธๅฆƒๅฅฝๅฅนๅฆ‚ๅฆๅญ—ๅญ˜ๅฎ‡ๅฎˆๅฎ…ๅฎ‰ๅฏบๅฐ–ๅฑนๅทžๅธ†ๅนถๅนด"], +["a6a1","ๅผๅผ›ๅฟ™ๅฟ–ๆˆŽๆˆŒๆˆๆˆๆ‰ฃๆ‰›ๆ‰˜ๆ”ถๆ—ฉๆ—จๆ—ฌๆ—ญๆ›ฒๆ›ณๆœ‰ๆœฝๆœดๆœฑๆœตๆฌกๆญคๆญปๆฐ–ๆฑๆฑ—ๆฑ™ๆฑŸๆฑ ๆฑๆฑ•ๆฑกๆฑ›ๆฑๆฑŽ็ฐ็‰Ÿ็‰็™พ็ซน็ฑณ็ณธ็ผถ็พŠ็พฝ่€่€ƒ่€Œ่€’่€ณ่ฟ่‚‰่‚‹่‚Œ่‡ฃ่‡ช่‡ณ่‡ผ่ˆŒ่ˆ›่ˆŸ่‰ฎ่‰ฒ่‰พ่™ซ่ก€่กŒ่กฃ่ฅฟ้˜กไธฒไบจไฝไฝไฝ‡ไฝ—ไฝžไผดไฝ›ไฝ•ไผฐไฝไฝ‘ไผฝไผบไผธไฝƒไฝ”ไผผไฝ†ไฝฃ"], +["a740","ไฝœไฝ ไผฏไฝŽไผถไฝ™ไฝไฝˆไฝšๅ…Œๅ…‹ๅ…ๅ…ตๅ†ถๅ†ทๅˆฅๅˆคๅˆฉๅˆชๅˆจๅŠซๅŠฉๅŠชๅŠฌๅŒฃๅณๅตๅๅญๅžๅพๅฆๅ‘Žๅงๅ‘†ๅ‘ƒๅณๅ‘ˆๅ‘‚ๅ›ๅฉๅ‘Šๅนๅปๅธๅฎๅตๅถๅ ๅผๅ‘€ๅฑๅซๅŸๅฌๅ›ชๅ›ฐๅ›คๅ›ซๅŠๅ‘ๅ€ๅ"], +["a7a1","ๅ‡ๅŽๅœพๅๅๅœปๅฃฏๅคพๅฆๅฆ’ๅฆจๅฆžๅฆฃๅฆ™ๅฆ–ๅฆๅฆคๅฆ“ๅฆŠๅฆฅๅญๅญœๅญšๅญ›ๅฎŒๅฎ‹ๅฎๅฐฌๅฑ€ๅฑๅฐฟๅฐพๅฒๅฒ‘ๅฒ”ๅฒŒๅทซๅธŒๅบๅบ‡ๅบŠๅปทๅผ„ๅผŸๅฝคๅฝขๅฝทๅฝนๅฟ˜ๅฟŒๅฟ—ๅฟๅฟฑๅฟซๅฟธๅฟชๆˆ’ๆˆ‘ๆŠ„ๆŠ—ๆŠ–ๆŠ€ๆ‰ถๆЉๆ‰ญๆŠŠๆ‰ผๆ‰พๆ‰นๆ‰ณๆŠ’ๆ‰ฏๆŠ˜ๆ‰ฎๆŠ•ๆŠ“ๆŠ‘ๆІๆ”นๆ”ปๆ”ธๆ—ฑๆ›ดๆŸๆŽๆๆๆ‘ๆœๆ–ๆžๆ‰ๆ†ๆ "], +["a840","ๆ“ๆ—ๆญฅๆฏๆฑ‚ๆฑžๆฒ™ๆฒๆฒˆๆฒ‰ๆฒ…ๆฒ›ๆฑชๆฑบๆฒๆฑฐๆฒŒๆฑจๆฒ–ๆฒ’ๆฑฝๆฒƒๆฑฒๆฑพๆฑดๆฒ†ๆฑถๆฒๆฒ”ๆฒ˜ๆฒ‚็ถ็ผ็ฝ็ธ็‰ข็‰ก็‰ ็‹„็‹‚็Ž–็”ฌ็”ซ็”ท็”ธ็š‚็›ฏ็Ÿฃ็ง็ง€็ฆฟ็ฉถ็ณป็ฝ•่‚–่‚“่‚่‚˜่‚›่‚š่‚ฒ่‰ฏ่Š’"], +["a8a1","่Š‹่Š่ฆ‹่ง’่จ€่ฐท่ฑ†่ฑ•่ฒ่ตค่ตฐ่ถณ่บซ่ปŠ่พ›่พฐ่ฟ‚่ฟ†่ฟ…่ฟ„ๅทก้‚‘้‚ข้‚ช้‚ฆ้‚ฃ้…‰้‡†้‡Œ้˜ฒ้˜ฎ้˜ฑ้˜ช้˜ฌไธฆไน–ไนณไบ‹ไบ›ไบžไบซไบฌไฝฏไพไพไฝณไฝฟไฝฌไพ›ไพ‹ไพ†ไพƒไฝฐไฝตไพˆไฝฉไฝปไพ–ไฝพไพไพ‘ไฝบๅ…”ๅ…’ๅ…•ๅ…ฉๅ…ทๅ…ถๅ…ธๅ†ฝๅ‡ฝๅˆปๅˆธๅˆทๅˆบๅˆฐๅˆฎๅˆถๅ‰ๅŠพๅŠปๅ’ๅ”ๅ“ๅ‘ๅฆๅทๅธๅนๅ–ๅ”ๅ—ๅ‘ณๅ‘ต"], +["a940","ๅ’–ๅ‘ธๅ’•ๅ’€ๅ‘ปๅ‘ทๅ’„ๅ’’ๅ’†ๅ‘ผๅ’ๅ‘ฑๅ‘ถๅ’Œๅ’šๅ‘ขๅ‘จๅ’‹ๅ‘ฝๅ’Žๅ›บๅžƒๅทๅชๅฉๅกๅฆๅคๅผๅคœๅฅ‰ๅฅ‡ๅฅˆๅฅ„ๅฅ”ๅฆพๅฆปๅง”ๅฆนๅฆฎๅง‘ๅง†ๅงๅงๅง‹ๅง“ๅงŠๅฆฏๅฆณๅง’ๅง…ๅญŸๅญคๅญฃๅฎ—ๅฎšๅฎ˜ๅฎœๅฎ™ๅฎ›ๅฐšๅฑˆๅฑ…"], +["a9a1","ๅฑ†ๅฒทๅฒกๅฒธๅฒฉๅฒซๅฒฑๅฒณๅธ˜ๅธšๅธ–ๅธ•ๅธ›ๅธ‘ๅนธๅบšๅบ—ๅบœๅบ•ๅบ–ๅปถๅผฆๅผงๅผฉๅพ€ๅพๅฝฟๅฝผๅฟๅฟ ๅฟฝๅฟตๅฟฟๆ€ๆ€”ๆ€ฏๆ€ตๆ€–ๆ€ชๆ€•ๆ€กๆ€งๆ€ฉๆ€ซๆ€›ๆˆ–ๆˆ•ๆˆฟๆˆพๆ‰€ๆ‰ฟๆ‹‰ๆ‹Œๆ‹„ๆŠฟๆ‹‚ๆŠนๆ‹’ๆ‹›ๆŠซๆ‹“ๆ‹”ๆ‹‹ๆ‹ˆๆŠจๆŠฝๆŠผๆ‹ๆ‹™ๆ‹‡ๆ‹ๆŠตๆ‹šๆŠฑๆ‹˜ๆ‹–ๆ‹—ๆ‹†ๆŠฌๆ‹Žๆ”พๆ–งๆ–ผๆ—บๆ˜”ๆ˜“ๆ˜Œๆ˜†ๆ˜‚ๆ˜Žๆ˜€ๆ˜ๆ˜•ๆ˜Š"], +["aa40","ๆ˜‡ๆœๆœ‹ๆญๆž‹ๆž•ๆฑๆžœๆณๆทๆž‡ๆžๆž—ๆฏๆฐๆฟๆž‰ๆพๆžๆตๆžšๆž“ๆผๆชๆฒๆฌฃๆญฆๆญงๆญฟๆฐ“ๆฐ›ๆณฃๆณจๆณณๆฒฑๆณŒๆณฅๆฒณๆฒฝๆฒพๆฒผๆณขๆฒซๆณ•ๆณ“ๆฒธๆณ„ๆฒนๆณๆฒฎๆณ—ๆณ…ๆณฑๆฒฟๆฒปๆณกๆณ›ๆณŠๆฒฌๆณฏๆณœๆณ–ๆณ "], +["aaa1","็‚•็‚Ž็‚’็‚Š็‚™็ˆฌ็ˆญ็ˆธ็‰ˆ็‰ง็‰ฉ็‹€็‹Ž็‹™็‹—็‹็Žฉ็Žจ็ŽŸ็Žซ็Žฅ็”ฝ็–็–™็–š็š„็›‚็›ฒ็›ด็Ÿฅ็Ÿฝ็คพ็ฅ€็ฅ็ง‰็งˆ็ฉบ็ฉน็ซบ็ณพ็ฝ”็พŒ็พ‹่€…่‚บ่‚ฅ่‚ข่‚ฑ่‚ก่‚ซ่‚ฉ่‚ด่‚ช่‚ฏ่‡ฅ่‡พ่ˆ่Šณ่Š่Š™่Šญ่Šฝ่ŠŸ่Šน่Šฑ่Šฌ่Šฅ่Šฏ่Šธ่Šฃ่Šฐ่Šพ่Šท่™Ž่™ฑๅˆ่กจ่ป‹่ฟŽ่ฟ”่ฟ‘้‚ต้‚ธ้‚ฑ้‚ถ้‡‡้‡‘้•ท้–€้˜œ้™€้˜ฟ้˜ป้™„"], +["ab40","้™‚้šน้›จ้’้žไบŸไบญไบฎไฟกไพตไพฏไพฟไฟ ไฟ‘ไฟไฟไฟƒไพถไฟ˜ไฟŸไฟŠไฟ—ไพฎไฟไฟ„ไฟ‚ไฟšไฟŽไฟžไพทๅ…—ๅ†’ๅ†‘ๅ† ๅ‰Žๅ‰ƒๅ‰Šๅ‰ๅ‰Œๅ‰‹ๅ‰‡ๅ‹‡ๅ‹‰ๅ‹ƒๅ‹ๅŒๅ—ๅปๅŽšๅ›ๅ’ฌๅ“€ๅ’จๅ“Žๅ“‰ๅ’ธๅ’ฆๅ’ณๅ“‡ๅ“‚ๅ’ฝๅ’ชๅ“"], +["aba1","ๅ“„ๅ“ˆๅ’ฏๅ’ซๅ’ฑๅ’ปๅ’ฉๅ’งๅ’ฟๅ›ฟๅž‚ๅž‹ๅž ๅžฃๅžขๅŸŽๅžฎๅž“ๅฅ•ๅฅ‘ๅฅๅฅŽๅฅๅงœๅง˜ๅงฟๅงฃๅงจๅจƒๅงฅๅงชๅงšๅงฆๅจๅงปๅญฉๅฎฃๅฎฆๅฎคๅฎขๅฎฅๅฐๅฑŽๅฑๅฑๅฑ‹ๅณ™ๅณ’ๅททๅธๅธฅๅธŸๅนฝๅบ ๅบฆๅปบๅผˆๅผญๅฝฅๅพˆๅพ…ๅพŠๅพ‹ๅพ‡ๅพŒๅพ‰ๆ€’ๆ€ๆ€ ๆ€ฅๆ€Žๆ€จๆๆฐๆจๆขๆ†ๆƒๆฌๆซๆชๆคๆ‰ๆ‹œๆŒ–ๆŒ‰ๆ‹ผๆ‹ญๆŒๆ‹ฎๆ‹ฝๆŒ‡ๆ‹ฑๆ‹ท"], +["ac40","ๆ‹ฏๆ‹ฌๆ‹พๆ‹ดๆŒ‘ๆŒ‚ๆ”ฟๆ•…ๆ–ซๆ–ฝๆ—ขๆ˜ฅๆ˜ญๆ˜ ๆ˜งๆ˜ฏๆ˜Ÿๆ˜จๆ˜ฑๆ˜คๆ›ทๆŸฟๆŸ“ๆŸฑๆŸ”ๆŸๆŸฌๆžถๆžฏๆŸตๆŸฉๆŸฏๆŸ„ๆŸ‘ๆžดๆŸšๆŸฅๆžธๆŸๆŸžๆŸณๆžฐๆŸ™ๆŸขๆŸๆŸ’ๆญชๆฎƒๆฎ†ๆฎตๆฏ’ๆฏ—ๆฐŸๆณ‰ๆด‹ๆดฒๆดชๆตๆดฅๆดŒๆดฑๆดžๆด—"], +["aca1","ๆดปๆดฝๆดพๆดถๆด›ๆณตๆดนๆดงๆดธๆดฉๆดฎๆดตๆดŽๆดซ็‚ซ็‚บ็‚ณ็‚ฌ็‚ฏ็‚ญ็‚ธ็‚ฎ็‚ค็ˆฐ็‰ฒ็‰ฏ็‰ด็‹ฉ็‹ ็‹ก็Žท็Š็Žป็Žฒ็็€็Žณ็”š็”ญ็•็•Œ็•Ž็•‹็–ซ็–ค็–ฅ็–ข็–ฃ็™ธ็š†็š‡็šˆ็›ˆ็›†็›ƒ็›…็œ็›น็›ธ็œ‰็œ‹็›พ็›ผ็œ‡็Ÿœ็ ‚็ ”็ Œ็ ็ฅ†็ฅ‰็ฅˆ็ฅ‡็ฆน็ฆบ็ง‘็ง’็ง‹็ฉฟ็ช็ซฟ็ซฝ็ฑฝ็ด‚็ด…็ด€็ด‰็ด‡็ด„็ด†็ผธ็พŽ็พฟ่€„"], +["ad40","่€่€่€‘่€ถ่ƒ–่ƒฅ่ƒš่ƒƒ่ƒ„่ƒŒ่ƒก่ƒ›่ƒŽ่ƒž่ƒค่ƒ่‡ด่ˆข่‹ง่Œƒ่Œ…่‹ฃ่‹›่‹ฆ่Œ„่‹ฅ่Œ‚่Œ‰่‹’่‹—่‹ฑ่Œ่‹œ่‹”่‹‘่‹ž่‹“่‹Ÿ่‹ฏ่Œ†่™่™น่™ป่™บ่ก่กซ่ฆ่ง”่จˆ่จ‚่จƒ่ฒž่ฒ ่ตด่ตณ่ถด่ป่ปŒ่ฟฐ่ฟฆ่ฟข่ฟช่ฟฅ"], +["ada1","่ฟญ่ฟซ่ฟค่ฟจ้ƒŠ้ƒŽ้ƒ้ƒƒ้…‹้…Š้‡้–‚้™้™‹้™Œ้™้ข้ฉ้Ÿ‹้Ÿญ้Ÿณ้ ้ขจ้ฃ›้ฃŸ้ฆ–้ฆ™ไน˜ไบณๅ€Œๅ€ๅ€ฃไฟฏๅ€ฆๅ€ฅไฟธๅ€ฉๅ€–ๅ€†ๅ€ผๅ€Ÿๅ€šๅ€’ๅ€‘ไฟบๅ€€ๅ€”ๅ€จไฟฑๅ€กๅ€‹ๅ€™ๅ€˜ไฟณไฟฎๅ€ญๅ€ชไฟพๅ€ซๅ€‰ๅ…ผๅ†คๅ†ฅๅ†ขๅ‡ๅ‡Œๅ‡†ๅ‡‹ๅ‰–ๅ‰œๅ‰”ๅ‰›ๅ‰ๅŒชๅฟๅŽŸๅŽๅŸๅ“จๅ”ๅ”ๅ”ทๅ“ผๅ“ฅๅ“ฒๅ”†ๅ“บๅ””ๅ“ฉๅ“ญๅ“กๅ”‰ๅ“ฎๅ“ช"], +["ae40","ๅ“ฆๅ”งๅ”‡ๅ“ฝๅ”ๅœƒๅœ„ๅŸ‚ๅŸ”ๅŸ‹ๅŸƒๅ ‰ๅคๅฅ—ๅฅ˜ๅฅšๅจ‘ๅจ˜ๅจœๅจŸๅจ›ๅจ“ๅงฌๅจ ๅจฃๅจฉๅจฅๅจŒๅจ‰ๅญซๅฑ˜ๅฎฐๅฎณๅฎถๅฎดๅฎฎๅฎตๅฎนๅฎธๅฐ„ๅฑ‘ๅฑ•ๅฑๅณญๅณฝๅณปๅณชๅณจๅณฐๅณถๅดๅณดๅทฎๅธญๅธซๅบซๅบญๅบงๅผฑๅพ’ๅพ‘ๅพๆ™"], +["aea1","ๆฃๆฅๆๆ•ๆญๆฉๆฏๆ‚„ๆ‚Ÿๆ‚šๆ‚ๆ‚”ๆ‚Œๆ‚…ๆ‚–ๆ‰‡ๆ‹ณๆŒˆๆ‹ฟๆŽๆŒพๆŒฏๆ•ๆ‚ๆ†ๆๆ‰ๆŒบๆๆŒฝๆŒชๆŒซๆŒจๆๆŒๆ•ˆๆ•‰ๆ–™ๆ—ๆ—…ๆ™‚ๆ™‰ๆ™ๆ™ƒๆ™’ๆ™Œๆ™…ๆ™ๆ›ธๆœ”ๆœ•ๆœ—ๆ กๆ ธๆกˆๆก†ๆก“ๆ นๆก‚ๆก”ๆ ฉๆขณๆ —ๆกŒๆก‘ๆ ฝๆŸดๆกๆก€ๆ ผๆกƒๆ ชๆก…ๆ “ๆ ˜ๆกๆฎŠๆฎ‰ๆฎทๆฐฃๆฐงๆฐจๆฐฆๆฐคๆณฐๆตชๆถ•ๆถˆๆถ‡ๆตฆๆตธๆตทๆต™ๆถ“"], +["af40","ๆตฌๆถ‰ๆตฎๆตšๆตดๆตฉๆถŒๆถŠๆตนๆถ…ๆตฅๆถ”็ƒŠ็ƒ˜็ƒค็ƒ™็ƒˆ็ƒ็ˆน็‰น็‹ผ็‹น็‹ฝ็‹ธ็‹ท็ކ็ญ็‰็ฎ็ ็ช็ž็•”็•็•œ็•š็•™็–พ็—…็—‡็–ฒ็–ณ็–ฝ็–ผ็–น็—‚็–ธ็š‹็šฐ็›Š็›็›Ž็œฉ็œŸ็œ ็œจ็Ÿฉ็ ฐ็ ง็ ธ็ ็ ด็ ท"], +["afa1","็ ฅ็ ญ็  ็ Ÿ็ ฒ็ฅ•็ฅ็ฅ ็ฅŸ็ฅ–็ฅž็ฅ็ฅ—็ฅš็งค็งฃ็งง็งŸ็งฆ็งฉ็ง˜็ช„็ชˆ็ซ™็ฌ†็ฌ‘็ฒ‰็ดก็ด—็ด‹็ดŠ็ด ็ดข็ด”็ด็ด•็ดš็ดœ็ด็ด™็ด›็ผบ็ฝŸ็พ”็ฟ…็ฟ่€†่€˜่€•่€™่€—่€ฝ่€ฟ่ƒฑ่„‚่ƒฐ่„…่ƒญ่ƒด่„†่ƒธ่ƒณ่„ˆ่ƒฝ่„Š่ƒผ่ƒฏ่‡ญ่‡ฌ่ˆ€่ˆ่ˆช่ˆซ่ˆจ่ˆฌ่Šป่Œซ่’่”่Š่Œธ่่‰่Œต่Œด่่Œฒ่Œน่Œถ่Œ—่€่Œฑ่Œจ่ƒ"], +["b040","่™”่šŠ่šช่š“่šค่šฉ่šŒ่šฃ่šœ่กฐ่กท่ข่ข‚่กฝ่กน่จ˜่จ่จŽ่จŒ่จ•่จŠ่จ—่จ“่จ–่จ่จ‘่ฑˆ่ฑบ่ฑน่ฒก่ฒข่ตท่บฌ่ป’่ป”่ป่พฑ้€้€†่ฟท้€€่ฟบ่ฟด้€ƒ่ฟฝ้€…่ฟธ้‚•้ƒก้ƒ้ƒข้…’้…้…Œ้‡˜้‡้‡—้‡œ้‡™้–ƒ้™ข้™ฃ้™ก"], +["b0a1","้™›้™้™ค้™˜้™ž้šป้ฃข้ฆฌ้ชจ้ซ˜้ฌฅ้ฌฒ้ฌผไนพๅบๅฝๅœๅ‡ๅƒๅŒๅšๅ‰ๅฅๅถๅŽๅ•ๅตๅดๅทๅๅ€ๅฏๅญๅ…œๅ†•ๅ‡ฐๅ‰ชๅ‰ฏๅ‹’ๅ‹™ๅ‹˜ๅ‹•ๅŒๅŒๅŒ™ๅŒฟๅ€ๅŒพๅƒๆ›ผๅ•†ๅ•ชๅ•ฆๅ•„ๅ•žๅ•กๅ•ƒๅ•Šๅ”ฑๅ•–ๅ•ๅ••ๅ”ฏๅ•คๅ”ธๅ”ฎๅ•œๅ”ฌๅ•ฃๅ”ณๅ•ๅ•—ๅœˆๅœ‹ๅœ‰ๅŸŸๅ …ๅ Šๅ †ๅŸ ๅŸคๅŸบๅ ‚ๅ ตๅŸทๅŸนๅค ๅฅขๅจถๅฉๅฉ‰ๅฉฆๅฉชๅฉ€"], +["b140","ๅจผๅฉขๅฉšๅฉ†ๅฉŠๅญฐๅฏ‡ๅฏ…ๅฏ„ๅฏ‚ๅฎฟๅฏ†ๅฐ‰ๅฐˆๅฐ‡ๅฑ ๅฑœๅฑๅด‡ๅด†ๅดŽๅด›ๅด–ๅดขๅด‘ๅดฉๅด”ๅด™ๅดคๅดงๅด—ๅทขๅธธๅธถๅธณๅธทๅบทๅบธๅบถๅบตๅบพๅผตๅผทๅฝ—ๅฝฌๅฝฉๅฝซๅพ—ๅพ™ๅพžๅพ˜ๅพกๅพ ๅพœๆฟๆ‚ฃๆ‚‰ๆ‚ ๆ‚จๆƒ‹ๆ‚ดๆƒฆๆ‚ฝ"], +["b1a1","ๆƒ…ๆ‚ปๆ‚ตๆƒœๆ‚ผๆƒ˜ๆƒ•ๆƒ†ๆƒŸๆ‚ธๆƒšๆƒ‡ๆˆšๆˆ›ๆ‰ˆๆŽ ๆŽงๆฒๆŽ–ๆŽขๆŽฅๆทๆงๆŽ˜ๆŽชๆฑๆŽฉๆމๆŽƒๆŽ›ๆซๆŽจๆŽ„ๆŽˆๆŽ™ๆŽกๆŽฌๆŽ’ๆŽๆŽ€ๆปๆฉๆจๆบๆ•ๆ•–ๆ•‘ๆ•™ๆ•—ๅ•Ÿๆ•ๆ•˜ๆ••ๆ•”ๆ–œๆ–›ๆ–ฌๆ—ๆ—‹ๆ—Œๆ—Žๆ™ๆ™šๆ™คๆ™จๆ™ฆๆ™žๆ›นๅ‹—ๆœ›ๆขๆขฏๆขขๆข“ๆขตๆกฟๆกถๆขฑๆขงๆข—ๆขฐๆขƒๆฃ„ๆขญๆข†ๆข…ๆข”ๆขๆขจๆขŸๆขกๆข‚ๆฌฒๆฎบ"], +["b240","ๆฏซๆฏฌๆฐซๆถŽๆถผๆทณๆท™ๆถฒๆทกๆทŒๆทคๆทปๆทบๆธ…ๆท‡ๆท‹ๆถฏๆท‘ๆถฎๆทžๆทนๆถธๆททๆทตๆท…ๆท’ๆธšๆถตๆทšๆทซๆท˜ๆทชๆทฑๆทฎๆทจๆท†ๆท„ๆถชๆทฌๆถฟๆทฆ็ƒน็„‰็„Š็ƒฝ็ƒฏ็ˆฝ็‰ฝ็Ё็Œœ็Œ›็Œ–็Œ“็Œ™็އ็…็Š็ƒ็†็พ็็“ ็“ถ"], +["b2a1","็“ท็”œ็”ข็•ฅ็•ฆ็•ข็•ฐ็–็—”็—•็–ต็—Š็—็šŽ็›”็›’็››็œท็œพ็œผ็œถ็œธ็œบ็กซ็กƒ็กŽ็ฅฅ็ฅจ็ฅญ็งป็ช’็ช•็ฌ ็ฌจ็ฌ›็ฌฌ็ฌฆ็ฌ™็ฌž็ฌฎ็ฒ’็ฒ—็ฒ•็ต†็ตƒ็ตฑ็ดฎ็ดน็ดผ็ต€็ดฐ็ดณ็ต„็ดฏ็ต‚็ดฒ็ดฑ็ผฝ็พž็พš็ฟŒ็ฟŽ็ฟ’่€œ่Š่†่„ฏ่„–่„ฃ่„ซ่„ฉ่„ฐ่„ค่ˆ‚่ˆต่ˆท่ˆถ่ˆน่ŽŽ่Žž่Ž˜่ธ่Žข่Ž–่Žฝ่Žซ่Ž’่ŽŠ่Ž“่މ่Ž ่ท่ป่ผ"], +["b340","่ކ่Žง่™•ๅฝช่›‡่›€่šถ่›„่šต่›†่›‹่šฑ่šฏ่›‰่ก“่ขž่ขˆ่ขซ่ข’่ข–่ข่ข‹่ฆ“่ฆ่จช่จ่จฃ่จฅ่จฑ่จญ่จŸ่จ›่จข่ฑ‰่ฑš่ฒฉ่ฒฌ่ฒซ่ฒจ่ฒช่ฒง่ตง่ตฆ่ถพ่ถบ่ป›่ปŸ้€™้€้€š้€—้€ฃ้€Ÿ้€้€้€•้€ž้€ ้€้€ข้€–้€›้€”"], +["b3a1","้ƒจ้ƒญ้ƒฝ้…—้‡Ž้‡ต้‡ฆ้‡ฃ้‡ง้‡ญ้‡ฉ้–‰้™ช้™ต้™ณ้™ธ้™ฐ้™ด้™ถ้™ท้™ฌ้›€้›ช้›ฉ็ซ ็ซŸ้ ‚้ ƒ้ญš้ณฅ้นต้นฟ้บฅ้บปๅ‚ขๅ‚ๅ‚…ๅ‚™ๅ‚‘ๅ‚€ๅ‚–ๅ‚˜ๅ‚šๆœ€ๅ‡ฑๅ‰ฒๅ‰ดๅ‰ตๅ‰ฉๅ‹žๅ‹ๅ‹›ๅšๅŽฅๅ•ปๅ–€ๅ–งๅ•ผๅ–Šๅ–ๅ–˜ๅ–‚ๅ–œๅ–ชๅ–”ๅ–‡ๅ–‹ๅ–ƒๅ–ณๅ–ฎๅ–Ÿๅ”พๅ–ฒๅ–šๅ–ปๅ–ฌๅ–ฑๅ•พๅ–‰ๅ–ซๅ–™ๅœๅ ฏๅ ชๅ ดๅ คๅ ฐๅ ฑๅ กๅ ๅ  ๅฃนๅฃบๅฅ "], +["b440","ๅฉทๅชšๅฉฟๅช’ๅช›ๅชงๅญณๅญฑๅฏ’ๅฏŒๅฏ“ๅฏๅฐŠๅฐ‹ๅฐฑๅตŒๅตๅดดๅต‡ๅทฝๅน…ๅธฝๅน€ๅนƒๅนพๅปŠๅปๅป‚ๅป„ๅผผๅฝญๅพฉๅพชๅพจๆƒ‘ๆƒกๆ‚ฒๆ‚ถๆƒ ๆ„œๆ„ฃๆƒบๆ„•ๆƒฐๆƒปๆƒดๆ…จๆƒฑๆ„Žๆƒถๆ„‰ๆ„€ๆ„’ๆˆŸๆ‰‰ๆŽฃๆŽŒๆๆ€ๆฉๆ‰ๆ†ๆ"], +["b4a1","ๆ’ๆฃๆๆกๆ–ๆญๆฎๆถๆดๆชๆ›ๆ‘’ๆšๆนๆ•žๆ•ฆๆ•ขๆ•ฃๆ–‘ๆ–ๆ–ฏๆ™ฎๆ™ฐๆ™ดๆ™ถๆ™ฏๆš‘ๆ™บๆ™พๆ™ทๆ›พๆ›ฟๆœŸๆœๆฃบๆฃ•ๆฃ ๆฃ˜ๆฃ—ๆค…ๆฃŸๆฃตๆฃฎๆฃงๆฃนๆฃ’ๆฃฒๆฃฃๆฃ‹ๆฃๆคๆค’ๆคŽๆฃ‰ๆฃšๆฅฎๆฃปๆฌพๆฌบๆฌฝๆฎ˜ๆฎ–ๆฎผๆฏฏๆฐฎๆฐฏๆฐฌๆธฏๆธธๆน”ๆธกๆธฒๆนงๆนŠๆธ ๆธฅๆธฃๆธ›ๆน›ๆน˜ๆธคๆน–ๆนฎๆธญๆธฆๆนฏๆธดๆนๆธบๆธฌๆนƒๆธๆธพๆป‹"], +["b540","ๆบ‰ๆธ™ๆนŽๆนฃๆน„ๆนฒๆนฉๆนŸ็„™็„š็„ฆ็„ฐ็„ก็„ถ็…ฎ็„œ็‰Œ็Š„็Š€็Œถ็Œฅ็Œด็Œฉ็บ็ช็ณ็ข็ฅ็ต็ถ็ด็ฏ็›็ฆ็จ็”ฅ็”ฆ็•ซ็•ช็—ข็—›็—ฃ็—™็—˜็—ž็— ็™ป็™ผ็š–็š“็šด็›œ็็Ÿญ็ก็กฌ็กฏ็จ็จˆ็จ‹็จ…็จ€็ช˜"], +["b5a1","็ช—็ช–็ซฅ็ซฃ็ญ‰็ญ–็ญ†็ญ็ญ’็ญ”็ญ็ญ‹็ญ็ญ‘็ฒŸ็ฒฅ็ตž็ต็ตจ็ต•็ดซ็ตฎ็ตฒ็ตก็ตฆ็ตข็ตฐ็ตณๅ–„็ฟ”็ฟ•่€‹่’่‚…่…•่…”่…‹่…‘่…Ž่„น่…†่„พ่…Œ่…“่…ด่ˆ’่ˆœ่ฉ่ƒ่ธ่่ ่…่‹่่ฏ่ฑ่ด่‘—่Š่ฐ่Œ่Œ่ฝ่ฒ่Š่ธ่Ž่„่œ่‡่”่Ÿ่™›่›Ÿ่›™่›ญ่›”่››่›ค่›่›ž่ก—่ฃ่ฃ‚่ขฑ่ฆƒ่ฆ–่จป่ฉ ่ฉ•่ฉž่จผ่ฉ"], +["b640","่ฉ”่ฉ›่ฉ่ฉ†่จด่จบ่จถ่ฉ–่ฑก่ฒ‚่ฒฏ่ฒผ่ฒณ่ฒฝ่ณ่ฒป่ณ€่ฒด่ฒท่ฒถ่ฒฟ่ฒธ่ถŠ่ถ…่ถ่ทŽ่ท่ท‹่ทš่ท‘่ทŒ่ท›่ท†่ปป่ปธ่ปผ่พœ้€ฎ้€ต้€ฑ้€ธ้€ฒ้€ถ้„‚้ƒต้„‰้ƒพ้…ฃ้…ฅ้‡้ˆ”้ˆ•้ˆฃ้ˆ‰้ˆž้ˆ้ˆ้ˆ‡้ˆ‘้–”้–้–‹้–‘"], +["b6a1","้–“้–’้–Ž้šŠ้šŽ้š‹้™ฝ้š…้š†้š้™ฒ้š„้›้›…้›„้›†้›‡้›ฏ้›ฒ้ŸŒ้ …้ †้ ˆ้ฃง้ฃช้ฃฏ้ฃฉ้ฃฒ้ฃญ้ฆฎ้ฆญ้ปƒ้ป้ป‘ไบ‚ๅ‚ญๅ‚ตๅ‚ฒๅ‚ณๅƒ…ๅ‚พๅ‚ฌๅ‚ทๅ‚ปๅ‚ฏๅƒ‡ๅ‰ฟๅ‰ทๅ‰ฝๅ‹Ÿๅ‹ฆๅ‹คๅ‹ขๅ‹ฃๅŒฏๅ—Ÿๅ—จๅ—“ๅ—ฆๅ—Žๅ—œๅ—‡ๅ—‘ๅ—ฃๅ—คๅ—ฏๅ—šๅ—กๅ—…ๅ—†ๅ—ฅๅ—‰ๅœ’ๅœ“ๅกžๅก‘ๅก˜ๅก—ๅกšๅก”ๅกซๅกŒๅกญๅกŠๅกขๅก’ๅก‹ๅฅงๅซๅซ‰ๅซŒๅชพๅชฝๅชผ"], +["b740","ๅชณๅซ‚ๅชฒๅตฉๅตฏๅนŒๅนนๅป‰ๅปˆๅผ’ๅฝ™ๅพฌๅพฎๆ„šๆ„ๆ…ˆๆ„Ÿๆƒณๆ„›ๆƒนๆ„ๆ„ˆๆ…Žๆ…Œๆ…„ๆ…ๆ„พๆ„ดๆ„งๆ„ๆ„†ๆ„ทๆˆกๆˆขๆ“ๆพๆžๆชๆญๆฝๆฌๆๆœๆ”ๆๆถๆ–ๆ—ๆ†ๆ•ฌๆ–Ÿๆ–ฐๆš—ๆš‰ๆš‡ๆšˆๆš–ๆš„ๆš˜ๆšๆœƒๆฆ”ๆฅญ"], +["b7a1","ๆฅšๆฅทๆฅ ๆฅ”ๆฅตๆคฐๆฆ‚ๆฅŠๆฅจๆฅซๆฅžๆฅ“ๆฅนๆฆ†ๆฅๆฅฃๆฅ›ๆญ‡ๆญฒๆฏ€ๆฎฟๆฏ“ๆฏฝๆบขๆบฏๆป“ๆบถๆป‚ๆบๆบๆป‡ๆป…ๆบฅๆบ˜ๆบผๆบบๆบซๆป‘ๆบ–ๆบœๆป„ๆป”ๆบชๆบงๆบด็…Ž็…™็…ฉ็…ค็…‰็…ง็…œ็…ฌ็…ฆ็…Œ็…ฅ็…ž็…†็…จ็…–็ˆบ็‰’็Œท็…็Œฟ็Œพ็‘ฏ็‘š็‘•็‘Ÿ็‘ž็‘็ฟ็‘™็‘›็‘œ็•ถ็•ธ็˜€็—ฐ็˜็—ฒ็—ฑ็—บ็—ฟ็—ด็—ณ็›ž็›Ÿ็›็ซ็ฆ็ž็ฃ"], +["b840","็น็ช็ฌ็œ็ฅ็จ็ข็Ÿฎ็ขŽ็ขฐ็ข—็ข˜็ขŒ็ข‰็กผ็ข‘็ข“็กฟ็ฅบ็ฅฟ็ฆ่ฌ็ฆฝ็จœ็จš็จ ็จ”็จŸ็จž็ชŸ็ช ็ญท็ฏ€็ญ ็ญฎ็ญง็ฒฑ็ฒณ็ฒต็ถ“็ตน็ถ‘็ถ็ถ็ต›็ฝฎ็ฝฉ็ฝช็ฝฒ็พฉ็พจ็พค่–่˜่‚†่‚„่…ฑ่…ฐ่…ธ่…ฅ่…ฎ่…ณ่…ซ"], +["b8a1","่…น่…บ่…ฆ่ˆ…่‰‡่’‚่‘ท่ฝ่ฑ่‘ต่‘ฆ่‘ซ่‘‰่‘ฌ่‘›่ผ่ต่‘ก่‘ฃ่‘ฉ่‘ญ่‘†่™ž่™œ่™Ÿ่›น่œ“่œˆ่œ‡่œ€่›พ่›ป่œ‚่œƒ่œ†่œŠ่ก™่ฃŸ่ฃ”่ฃ™่ฃœ่ฃ˜่ฃ่ฃก่ฃŠ่ฃ•่ฃ’่ฆœ่งฃ่ฉซ่ฉฒ่ฉณ่ฉฆ่ฉฉ่ฉฐ่ช‡่ฉผ่ฉฃ่ช ่ฉฑ่ช…่ฉญ่ฉข่ฉฎ่ฉฌ่ฉน่ฉป่จพ่ฉจ่ฑข่ฒŠ่ฒ‰่ณŠ่ณ‡่ณˆ่ณ„่ฒฒ่ณƒ่ณ‚่ณ…่ทก่ทŸ่ทจ่ทฏ่ทณ่ทบ่ทช่ทค่ทฆ่บฒ่ผƒ่ผ‰่ปพ่ผŠ"], +["b940","่พŸ่พฒ้‹้Š้“้‚้”้€ผ้•้้‡้้Ž้้‘้€พ้้„’้„—้…ฌ้…ช้…ฉ้‡‰้ˆท้‰—้ˆธ้ˆฝ้‰€้ˆพ้‰›้‰‹้‰ค้‰‘้ˆด้‰‰้‰้‰…้ˆน้ˆฟ้‰š้–˜้š˜้š”้š•้›้›‹้›‰้›Š้›ท้›ป้›น้›ถ้–้ด้ถ้ ้ ‘้ “้ Š้ ’้ Œ้ฃผ้ฃด"], +["b9a1","้ฃฝ้ฃพ้ฆณ้ฆฑ้ฆด้ซก้ณฉ้บ‚้ผŽ้ผ“้ผ ๅƒงๅƒฎๅƒฅๅƒ–ๅƒญๅƒšๅƒ•ๅƒๅƒ‘ๅƒฑๅƒŽๅƒฉๅ…ขๅ‡ณๅŠƒๅŠ‚ๅŒฑๅŽญๅ—พๅ˜€ๅ˜›ๅ˜—ๅ—ฝๅ˜”ๅ˜†ๅ˜‰ๅ˜ๅ˜Žๅ—ทๅ˜–ๅ˜Ÿๅ˜ˆๅ˜ๅ—ถๅœ˜ๅœ–ๅกตๅกพๅขƒๅข“ๅขŠๅกนๅข…ๅกฝๅฃฝๅคฅๅคขๅคคๅฅชๅฅฉๅซกๅซฆๅซฉๅซ—ๅซ–ๅซ˜ๅซฃๅญตๅฏžๅฏงๅฏกๅฏฅๅฏฆๅฏจๅฏขๅฏคๅฏŸๅฐๅฑขๅถ„ๅถ‡ๅน›ๅนฃๅน•ๅน—ๅน”ๅป“ๅป–ๅผŠๅฝ†ๅฝฐๅพนๆ…‡"], +["ba40","ๆ„ฟๆ…‹ๆ…ทๆ…ขๆ…ฃๆ…Ÿๆ…šๆ…˜ๆ…ตๆˆชๆ’‡ๆ‘˜ๆ‘”ๆ’คๆ‘ธๆ‘Ÿๆ‘บๆ‘‘ๆ‘งๆดๆ‘ญๆ‘ปๆ•ฒๆ–กๆ——ๆ—–ๆšขๆšจๆšๆฆœๆฆจๆฆ•ๆงๆฆฎๆง“ๆง‹ๆฆ›ๆฆทๆฆปๆฆซๆฆดๆงๆงๆฆญๆงŒๆฆฆๆงƒๆฆฃๆญ‰ๆญŒๆฐณๆผณๆผ”ๆปพๆผ“ๆปดๆผฉๆผพๆผ ๆผฌๆผๆผ‚ๆผข"], +["baa1","ๆปฟๆปฏๆผ†ๆผฑๆผธๆผฒๆผฃๆผ•ๆผซๆผฏๆพˆๆผชๆปฌๆผๆปฒๆปŒๆปท็†”็†™็…ฝ็†Š็†„็†’็ˆพ็Š’็Š–็„็็‘ค็‘ฃ็‘ช็‘ฐ็‘ญ็”„็–‘็˜ง็˜็˜‹็˜‰็˜“็›ก็›ฃ็ž„็ฝ็ฟ็ก็ฃ็ขŸ็ขง็ขณ็ขฉ็ขฃ็ฆŽ็ฆ็ฆ็จฎ็จฑ็ชช็ชฉ็ซญ็ซฏ็ฎก็ฎ•็ฎ‹็ญต็ฎ—็ฎ็ฎ”็ฎ็ฎธ็ฎ‡็ฎ„็ฒน็ฒฝ็ฒพ็ถป็ถฐ็ถœ็ถฝ็ถพ็ถ ็ทŠ็ถด็ถฒ็ถฑ็ถบ็ถข็ถฟ็ถต็ถธ็ถญ็ท’็ท‡็ถฌ"], +["bb40","็ฝฐ็ฟ ็ฟก็ฟŸ่ž่š่‚‡่…่†€่†่†ˆ่†Š่…ฟ่†‚่‡ง่‡บ่ˆ‡่ˆ”่ˆž่‰‹่“‰่’ฟ่“†่“„่’™่’ž่’ฒ่’œ่“‹่’ธ่“€่““่’่’ผ่“‘่“Š่œฟ่œœ่œป่œข่œฅ่œด่œ˜่•่œท่œฉ่ฃณ่ค‚่ฃด่ฃน่ฃธ่ฃฝ่ฃจ่คš่ฃฏ่ชฆ่ชŒ่ชž่ชฃ่ช่ชก่ช“่ชค"], +["bba1","่ชช่ชฅ่ชจ่ช˜่ช‘่ชš่ชง่ฑช่ฒ่ฒŒ่ณ“่ณ‘่ณ’่ตซ่ถ™่ถ•่ทผ่ผ”่ผ’่ผ•่ผ“่พฃ้ ้˜้œ้ฃ้™้ž้ข้้›้„™้„˜้„ž้…ต้…ธ้…ท้…ด้‰ธ้Š€้Š…้Š˜้Š–้‰ป้Š“้Šœ้Šจ้‰ผ้Š‘้–ก้–จ้–ฉ้–ฃ้–ฅ้–ค้š™้šœ้š›้›Œ้›’้œ€้ผ้ž…้Ÿถ้ —้ ˜้ขฏ้ขฑ้คƒ้ค…้คŒ้ค‰้ง้ชฏ้ชฐ้ซฆ้ญ้ญ‚้ณด้ณถ้ณณ้บผ้ผป้ฝŠๅ„„ๅ„€ๅƒปๅƒตๅƒนๅ„‚ๅ„ˆๅ„‰ๅ„…ๅ‡œ"], +["bc40","ๅЇๅŠˆๅЉๅŠๅŠŠๅ‹ฐๅŽฒๅ˜ฎๅ˜ปๅ˜นๅ˜ฒๅ˜ฟๅ˜ดๅ˜ฉๅ™“ๅ™Žๅ™—ๅ™ดๅ˜ถๅ˜ฏๅ˜ฐๅข€ๅขŸๅขžๅขณๅขœๅขฎๅขฉๅขฆๅฅญๅฌ‰ๅซปๅฌ‹ๅซตๅฌŒๅฌˆๅฏฎๅฏฌๅฏฉๅฏซๅฑคๅฑฅๅถๅถ”ๅนขๅนŸๅนกๅปขๅปšๅปŸๅปๅปฃๅป ๅฝˆๅฝฑๅพทๅพตๆ…ถๆ…งๆ…ฎๆ…ๆ…•ๆ†‚"], +["bca1","ๆ…ผๆ…ฐๆ…ซๆ…พๆ†งๆ†ๆ†ซๆ†Žๆ†ฌๆ†šๆ†คๆ†”ๆ†ฎๆˆฎๆ‘ฉๆ‘ฏๆ‘นๆ’žๆ’ฒๆ’ˆๆ’ๆ’ฐๆ’ฅๆ’“ๆ’•ๆ’ฉๆ’’ๆ’ฎๆ’ญๆ’ซๆ’šๆ’ฌๆ’™ๆ’ขๆ’ณๆ•ตๆ•ทๆ•ธๆšฎๆšซๆšดๆšฑๆจฃๆจŸๆงจๆจๆจžๆจ™ๆงฝๆจกๆจ“ๆจŠๆงณๆจ‚ๆจ…ๆงญๆจ‘ๆญๆญŽๆฎคๆฏ…ๆฏ†ๆผฟๆฝผๆพ„ๆฝ‘ๆฝฆๆฝ”ๆพ†ๆฝญๆฝ›ๆฝธๆฝฎๆพŽๆฝบๆฝฐๆฝคๆพ—ๆฝ˜ๆป•ๆฝฏๆฝ ๆฝŸ็†Ÿ็†ฌ็†ฑ็†จ็‰–็Š›็Ž็—็‘ฉ็’‹็’ƒ"], +["bd40","็‘พ็’€็•ฟ็˜ ็˜ฉ็˜Ÿ็˜ค็˜ฆ็˜ก็˜ข็šš็šบ็›ค็žŽ็ž‡็žŒ็ž‘็ž‹็ฃ‹็ฃ…็ขบ็ฃŠ็ขพ็ฃ•็ขผ็ฃ็จฟ็จผ็ฉ€็จฝ็จท็จป็ชฏ็ชฎ็ฎญ็ฎฑ็ฏ„็ฎด็ฏ†็ฏ‡็ฏ็ฎ ็ฏŒ็ณŠ็ท ็ทด็ทฏ็ทป็ท˜็ทฌ็ท็ทจ็ทฃ็ทš็ทž็ทฉ็ถž็ท™็ทฒ็ทน็ฝต็ฝท็พฏ"], +["bda1","็ฟฉ่€ฆ่†›่†œ่†่† ่†š่†˜่”—่”ฝ่”š่“ฎ่”ฌ่”ญ่”“่”‘่”ฃ่”ก่””่“ฌ่”ฅ่“ฟ่”†่ž‚่ด่ถ่ ่ฆ่ธ่จ่™่—่Œ่“่ก›่ก่ค่ค‡่ค’่ค“่ค•่คŠ่ชผ่ซ’่ซ‡่ซ„่ช•่ซ‹่ซธ่ชฒ่ซ‰่ซ‚่ชฟ่ชฐ่ซ–่ซ่ชถ่ชน่ซ›่ฑŒ่ฑŽ่ฑฌ่ณ ่ณž่ณฆ่ณค่ณฌ่ณญ่ณข่ณฃ่ณœ่ณช่ณก่ตญ่ถŸ่ถฃ่ธซ่ธ่ธ่ธข่ธ่ธฉ่ธŸ่ธก่ธž่บบ่ผ่ผ›่ผŸ่ผฉ่ผฆ่ผช่ผœ่ผž"], +["be40","่ผฅ้ฉ้ฎ้จ้ญ้ท้„ฐ้„ญ้„ง้„ฑ้†‡้†‰้†‹้†ƒ้‹…้Šป้Šท้‹ช้Šฌ้‹ค้‹้Šณ้Šผ้‹’้‹‡้‹ฐ้Šฒ้–ญ้–ฑ้œ„้œ†้œ‡้œ‰้ ้ž้ž‹้ž้ ก้ ซ้ œ้ขณ้คŠ้ค“้ค’้ค˜้ง้ง้งŸ้ง›้ง‘้ง•้ง’้ง™้ชท้ซฎ้ซฏ้ฌง้ญ…้ญ„้ญท้ญฏ้ด†้ด‰"], +["bea1","้ดƒ้บฉ้บพ้ปŽๅขจ้ฝ’ๅ„’ๅ„˜ๅ„”ๅ„ๅ„•ๅ†€ๅ†ชๅ‡ๅŠ‘ๅŠ“ๅ‹ณๅ™™ๅ™ซๅ™นๅ™ฉๅ™คๅ™ธๅ™ชๅ™จๅ™ฅๅ™ฑๅ™ฏๅ™ฌๅ™ขๅ™ถๅฃๅขพๅฃ‡ๅฃ…ๅฅฎๅฌๅฌดๅญธๅฏฐๅฐŽๅฝŠๆ†ฒๆ†‘ๆ†ฉๆ†Šๆ‡ๆ†ถๆ†พๆ‡Šๆ‡ˆๆˆฐๆ“…ๆ“ๆ“‹ๆ’ปๆ’ผๆ“šๆ“„ๆ“‡ๆ“‚ๆ“ๆ’ฟๆ“’ๆ“”ๆ’พๆ•ดๆ›†ๆ›‰ๆšนๆ›„ๆ›‡ๆšธๆจฝๆจธๆจบๆฉ™ๆฉซๆฉ˜ๆจนๆฉ„ๆฉขๆฉกๆฉ‹ๆฉ‡ๆจตๆฉŸๆฉˆๆญ™ๆญทๆฐ…ๆฟ‚ๆพฑๆพก"], +["bf40","ๆฟƒๆพคๆฟๆพงๆพณๆฟ€ๆพนๆพถๆพฆๆพ ๆพด็†พ็‡‰็‡็‡’็‡ˆ็‡•็†น็‡Ž็‡™็‡œ็‡ƒ็‡„็จ็’œ็’ฃ็’˜็’Ÿ็’ž็“ข็”Œ็”็˜ด็˜ธ็˜บ็›ง็›ฅ็ž ็žž็žŸ็žฅ็ฃจ็ฃš็ฃฌ็ฃง็ฆฆ็ฉ็ฉŽ็ฉ†็ฉŒ็ฉ‹็ชบ็ฏ™็ฐ‘็ฏ‰็ฏค็ฏ›็ฏก็ฏฉ็ฏฆ็ณ•็ณ–็ธŠ"], +["bfa1","็ธ‘็ธˆ็ธ›็ธฃ็ธž็ธ็ธ‰็ธ็ฝน็พฒ็ฟฐ็ฟฑ็ฟฎ่€จ่†ณ่†ฉ่†จ่‡ป่ˆˆ่‰˜่‰™่•Š่•™่•ˆ่•จ่•ฉ่•ƒ่•‰่•ญ่•ช่•ž่žƒ่žŸ่žž่žข่ž่กก่คช่คฒ่คฅ่คซ่คก่ฆช่ฆฆ่ซฆ่ซบ่ซซ่ซฑ่ฌ€่ซœ่ซง่ซฎ่ซพ่ฌ่ฌ‚่ซท่ซญ่ซณ่ซถ่ซผ่ฑซ่ฑญ่ฒ“่ณด่น„่ธฑ่ธด่น‚่ธน่ธต่ผป่ผฏ่ผธ่ผณ่พจ่พฆ้ต้ด้ธ้ฒ้ผ้บ้„ด้†’้Œ ้Œถ้‹ธ้Œณ้Œฏ้Œข้‹ผ้Œซ้Œ„้Œš"], +["c040","้Œ้Œฆ้Œก้Œ•้Œฎ้Œ™้–ป้šง้šจ้šช้›•้œŽ้œ‘้œ–้œ้œ“้œ้›้œ้ฆ้ž˜้ ฐ้ ธ้ ป้ ท้ ญ้ น้ ค้ค้คจ้คž้ค›้คก้คš้งญ้งข้งฑ้ชธ้ชผ้ซป้ซญ้ฌจ้ฎ‘้ด•้ดฃ้ดฆ้ดจ้ด’้ด›้ป˜้ป”้พ้พœๅ„ชๅ„Ÿๅ„กๅ„ฒๅ‹ตๅšŽๅš€ๅšๅš…ๅš‡"], +["c0a1","ๅšๅฃ•ๅฃ“ๅฃ‘ๅฃŽๅฌฐๅฌชๅฌคๅญบๅฐทๅฑจๅถผๅถบๅถฝๅถธๅนซๅฝŒๅพฝๆ‡‰ๆ‡‚ๆ‡‡ๆ‡ฆๆ‡‹ๆˆฒๆˆดๆ“Žๆ“Šๆ“˜ๆ“ ๆ“ฐๆ“ฆๆ“ฌๆ“ฑๆ“ขๆ“ญๆ–‚ๆ–ƒๆ›™ๆ›–ๆช€ๆช”ๆช„ๆชขๆชœๆซ›ๆชฃๆฉพๆช—ๆชๆช ๆญœๆฎฎๆฏšๆฐˆๆฟ˜ๆฟฑๆฟŸๆฟ ๆฟ›ๆฟคๆฟซๆฟฏๆพ€ๆฟฌๆฟกๆฟฉๆฟ•ๆฟฎๆฟฐ็‡ง็‡Ÿ็‡ฎ็‡ฆ็‡ฅ็‡ญ็‡ฌ็‡ด็‡ ็ˆต็‰†็ฐ็ฒ็’ฉ็’ฐ็’ฆ็’จ็™†็™‚็™Œ็›ช็žณ็žช็žฐ็žฌ"], +["c140","็žง็žญ็Ÿฏ็ฃท็ฃบ็ฃด็ฃฏ็ค็ฆง็ฆช็ฉ—็ชฟ็ฐ‡็ฐ็ฏพ็ฏท็ฐŒ็ฏ ็ณ ็ณœ็ณž็ณข็ณŸ็ณ™็ณ็ธฎ็ธพ็น†็ธท็ธฒ็นƒ็ธซ็ธฝ็ธฑ็น…็น็ธด็ธน็นˆ็ธต็ธฟ็ธฏ็ฝ„็ฟณ็ฟผ่ฑ่ฒ่ฐ่ฏ่ณ่‡†่‡ƒ่†บ่‡‚่‡€่†ฟ่†ฝ่‡‰่†พ่‡จ่ˆ‰่‰ฑ่–ช"], +["c1a1","่–„่•พ่–œ่–‘่–”่–ฏ่–›่–‡่–จ่–Š่™ง่Ÿ€่Ÿ‘่žณ่Ÿ’่Ÿ†่žซ่žป่žบ่Ÿˆ่Ÿ‹่คป่คถ่ฅ„่คธ่คฝ่ฆฌ่ฌŽ่ฌ—่ฌ™่ฌ›่ฌŠ่ฌ ่ฌ่ฌ„่ฌ่ฑ่ฐฟ่ฑณ่ณบ่ณฝ่ณผ่ณธ่ณป่ถจ่น‰่น‹่นˆ่นŠ่ฝ„่ผพ่ฝ‚่ฝ…่ผฟ้ฟ้ฝ้‚„้‚้‚‚้‚€้„น้†ฃ้†ž้†œ้้Ž‚้Œจ้ต้Š้ฅ้‹้Œ˜้พ้ฌ้›้ฐ้š้”้—Š้—‹้—Œ้—ˆ้—†้šฑ้šธ้›–้œœ้œž้ž ้Ÿ“้ก†้ขถ้คต้จ"], +["c240","้งฟ้ฎฎ้ฎซ้ฎช้ฎญ้ดป้ดฟ้บ‹้ป้ปž้ปœ้ป้ป›้ผพ้ฝ‹ๅขๅš•ๅšฎๅฃ™ๅฃ˜ๅฌธๅฝๆ‡ฃๆˆณๆ“ดๆ“ฒๆ“พๆ”†ๆ“บๆ“ปๆ“ทๆ–ทๆ›œๆœฆๆชณๆชฌๆซƒๆชปๆชธๆซ‚ๆชฎๆชฏๆญŸๆญธๆฎฏ็€‰็€‹ๆฟพ็€†ๆฟบ็€‘็€็‡ป็‡ผ็‡พ็‡ธ็ท็ต็’ง็’ฟ็”•็™–็™˜"], +["c2a1","็™’็žฝ็žฟ็žป็žผ็คŽ็ฆฎ็ฉก็ฉข็ฉ ็ซ„็ซ…็ฐซ็ฐง็ฐช็ฐž็ฐฃ็ฐก็ณง็น”็น•็นž็นš็นก็น’็น™็ฝˆ็ฟน็ฟป่ท่ถ่‡่‡่ˆŠ่—่–ฉ่—่—่—‰่–ฐ่–บ่–น่–ฆ่Ÿฏ่Ÿฌ่Ÿฒ่Ÿ ่ฆ†่ฆฒ่งด่ฌจ่ฌน่ฌฌ่ฌซ่ฑ่ด…่น™่นฃ่นฆ่นค่นŸ่น•่ป€่ฝ‰่ฝ้‚‡้‚ƒ้‚ˆ้†ซ้†ฌ้‡้Ž”้ŽŠ้Ž–้Žข้Žณ้Žฎ้Žฌ้Žฐ้Ž˜้Žš้Ž—้—”้—–้—้—•้›ข้›œ้›™้››้›ž้œค้žฃ้žฆ"], +["c340","้žญ้Ÿน้ก้ก้กŒ้กŽ้ก“้ขบ้คพ้คฟ้คฝ้คฎ้ฆฅ้จŽ้ซ้ฌƒ้ฌ†้ญ้ญŽ้ญ้ฏŠ้ฏ‰้ฏฝ้ฏˆ้ฏ€้ต‘้ต้ต ้ป ้ผ•้ผฌๅ„ณๅšฅๅฃžๅฃŸๅฃขๅฏต้พๅปฌๆ‡ฒๆ‡ทๆ‡ถๆ‡ตๆ”€ๆ”ๆ› ๆ›ๆซฅๆซๆซšๆซ“็€›็€Ÿ็€จ็€š็€็€•็€˜็ˆ†็ˆ็‰˜็Šข็ธ"], +["c3a1","็บ็’ฝ็“Š็“ฃ็–‡็–†็™Ÿ็™ก็Ÿ‡็ค™็ฆฑ็ฉซ็ฉฉ็ฐพ็ฐฟ็ฐธ็ฐฝ็ฐท็ฑ€็นซ็นญ็นน็นฉ็นช็พ…็นณ็พถ็พน็พธ่‡˜่—ฉ่—่—ช่—•่—ค่—ฅ่—ท่Ÿป่ …่ ่Ÿน่Ÿพ่ฅ ่ฅŸ่ฅ–่ฅž่ญ่ญœ่ญ˜่ญ‰่ญš่ญŽ่ญ่ญ†่ญ™่ดˆ่ดŠ่นผ่นฒ่บ‡่นถ่นฌ่นบ่นด่ฝ”่ฝŽ่พญ้‚Š้‚‹้†ฑ้†ฎ้ก้‘้Ÿ้ƒ้ˆ้œ้้–้ข้้˜้ค้—้จ้—œ้šด้›ฃ้œช้œง้ก้Ÿœ้Ÿป้กž"], +["c440","้ก˜้ก›้ขผ้ฅ…้ฅ‰้จ–้จ™้ฌ้ฏจ้ฏง้ฏ–้ฏ›้ถ‰้ตก้ตฒ้ตช้ตฌ้บ’้บ—้บ“้บดๅ‹ธๅšจๅšทๅšถๅšดๅšผๅฃคๅญ€ๅญƒๅญฝๅฏถๅท‰ๆ‡ธๆ‡บๆ”˜ๆ””ๆ”™ๆ›ฆๆœงๆซฌ็€พ็€ฐ็€ฒ็ˆ็ป็“็™ข็™ฅ็คฆ็คช็คฌ็คซ็ซ‡็ซถ็ฑŒ็ฑƒ็ฑ็ณฏ็ณฐ่พฎ็นฝ็นผ"], +["c4a1","็บ‚็ฝŒ่€€่‡š่‰ฆ่—ป่—น่˜‘่—บ่˜†่˜‹่˜‡่˜Š่ ”่ •่ฅค่ฆบ่งธ่ญฐ่ญฌ่ญฆ่ญฏ่ญŸ่ญซ่ด่ด่บ‰่บ่บ…่บ‚้†ด้‡‹้˜้ƒ้ฝ้—ก้œฐ้ฃ„้ฅ’้ฅ‘้ฆจ้จซ้จฐ้จท้จต้ฐ“้ฐ้นน้บต้ปจ้ผฏ้ฝŸ้ฝฃ้ฝกๅ„ทๅ„ธๅ›ๅ›€ๅ›‚ๅค”ๅฑฌๅทๆ‡ผๆ‡พๆ”ๆ”œๆ–•ๆ›ฉๆซปๆฌ„ๆซบๆฎฒ็Œ็ˆ›็Šง็“–็“”็™ฉ็Ÿ“็ฑ็บ็บŒ็พผ่˜—่˜ญ่˜š่ ฃ่ ข่ ก่ Ÿ่ฅช่ฅฌ่ฆฝ่ญด"], +["c540","่ญท่ญฝ่ด“่บŠ่บ่บ‹่ฝŸ่พฏ้†บ้ฎ้ณ้ต้บ้ธ้ฒ้ซ้—ข้œธ้œน้œฒ้Ÿฟ้กง้กฅ้ฅ—้ฉ…้ฉƒ้ฉ€้จพ้ซ้ญ”้ญ‘้ฐญ้ฐฅ้ถฏ้ถด้ท‚้ถธ้บ้ปฏ้ผ™้ฝœ้ฝฆ้ฝงๅ„ผๅ„ปๅ›ˆๅ›Šๅ›‰ๅญฟๅท”ๅท’ๅฝŽๆ‡ฟๆ”คๆฌŠๆญก็‘็˜็Ž€็“ค็–Š็™ฎ็™ฌ"], +["c5a1","็ฆณ็ฑ ็ฑŸ่พ่ฝ่‡Ÿ่ฅฒ่ฅฏ่งผ่ฎ€่ด–่ด—่บ‘่บ“่ฝก้…ˆ้‘„้‘‘้‘’้œฝ้œพ้Ÿƒ้Ÿ้กซ้ฅ•้ฉ•้ฉ้ซ’้ฌš้ฑ‰้ฐฑ้ฐพ้ฐป้ท“้ท—้ผด้ฝฌ้ฝช้พ”ๅ›Œๅท–ๆˆ€ๆ”ฃๆ”ซๆ”ชๆ›ฌๆฌ็“š็ซŠ็ฑค็ฑฃ็ฑฅ็บ“็บ–็บ”่‡ข่˜ธ่˜ฟ่ ฑ่ฎŠ้‚้‚้‘ฃ้‘ ้‘ค้จ้กฏ้ฅœ้ฉš้ฉ›้ฉ—้ซ“้ซ”้ซ‘้ฑ”้ฑ—้ฑ–้ทฅ้บŸ้ปดๅ›‘ๅฃฉๆ”ฌ็ž็™ฑ็™ฒ็Ÿ—็ฝ็พˆ่ ถ่ น่กข่ฎ“่ฎ’"], +["c640","่ฎ–่‰ท่ด›้‡€้‘ช้‚้ˆ้„้Ÿ†้กฐ้ฉŸ้ฌข้ญ˜้ฑŸ้ทน้ทบ้นผ้นฝ้ผ‡้ฝท้ฝฒๅปณๆฌ–็ฃ็ฑฌ็ฑฎ่ ป่ง€่บก้‡้‘ฒ้‘ฐ้กฑ้ฅž้ซ–้ฌฃ้ปŒ็ค็Ÿš่ฎš้‘ท้Ÿ‰้ฉข้ฉฅ็บœ่ฎœ่บช้‡…้‘ฝ้‘พ้‘ผ้ฑท้ฑธ้ปท่ฑ”้‘ฟ้ธš็ˆจ้ฉช้ฌฑ้ธ›้ธž็ฑฒ"], +["c940","ไน‚ไนœๅ‡ตๅŒšๅŽ‚ไธ‡ไธŒไน‡ไบๅ›—๏จŒๅฑฎๅฝณไธๅ†‡ไธŽไธฎไบ“ไป‚ไป‰ไปˆๅ†˜ๅ‹ผๅฌๅŽนๅœ ๅคƒๅคฌๅฐๅทฟๆ—กๆฎณๆฏŒๆฐ”็ˆฟไธฑไธผไปจไปœไปฉไปกไปไปšๅˆŒๅŒœๅŒๅœขๅœฃๅค—ๅคฏๅฎๅฎ„ๅฐ’ๅฐปๅฑดๅฑณๅธ„ๅบ€ๅบ‚ๅฟ‰ๆˆ‰ๆ‰ๆฐ•"], +["c9a1","ๆฐถๆฑƒๆฐฟๆฐป็Šฎ็Šฐ็ŽŠ็ฆธ่‚Š้˜žไผŽไผ˜ไผฌไปตไผ”ไปฑไผ€ไปทไผˆไผไผ‚ไผ…ไผขไผ“ไผ„ไปดไผ’ๅ†ฑๅˆ“ๅˆ‰ๅˆๅŠฆๅŒขๅŒŸๅๅŽŠๅ‡ๅ›กๅ›Ÿๅœฎๅœชๅœดๅคผๅฆ€ๅฅผๅฆ…ๅฅปๅฅพๅฅทๅฅฟๅญ–ๅฐ•ๅฐฅๅฑผๅฑบๅฑปๅฑพๅทŸๅนตๅบ„ๅผ‚ๅผšๅฝดๅฟ•ๅฟ”ๅฟๆ‰œๆ‰žๆ‰คๆ‰กๆ‰ฆๆ‰ขๆ‰™ๆ‰ ๆ‰šๆ‰ฅๆ—ฏๆ—ฎๆœพๆœนๆœธๆœปๆœบๆœฟๆœผๆœณๆฐ˜ๆฑ†ๆฑ’ๆฑœๆฑๆฑŠๆฑ”ๆฑ‹"], +["ca40","ๆฑŒ็ฑ็‰ž็Šด็Šต็ŽŽ็”ช็™ฟ็ฉต็ฝ‘่‰ธ่‰ผ่Š€่‰ฝ่‰ฟ่™่ฅพ้‚™้‚—้‚˜้‚›้‚”้˜ข้˜ค้˜ ้˜ฃไฝ–ไผปไฝขไฝ‰ไฝ“ไฝคไผพไฝงไฝ’ไฝŸไฝไฝ˜ไผญไผณไผฟไฝกๅ†ๅ†นๅˆœๅˆžๅˆกๅŠญๅŠฎๅŒ‰ๅฃๅฒๅŽŽๅŽๅฐๅทๅชๅ‘”ๅ‘…ๅ™ๅœๅฅๅ˜"], +["caa1","ๅฝๅ‘ๅ‘ๅจๅคๅ‘‡ๅ›ฎๅ›งๅ›ฅๅๅ…ๅŒๅ‰ๅ‹ๅ’ๅค†ๅฅ€ๅฆฆๅฆ˜ๅฆ ๅฆ—ๅฆŽๅฆขๅฆๅฆๅฆงๅฆกๅฎŽๅฎ’ๅฐจๅฐชๅฒๅฒๅฒˆๅฒ‹ๅฒ‰ๅฒ’ๅฒŠๅฒ†ๅฒ“ๅฒ•ๅท ๅธŠๅธŽๅบ‹ๅบ‰ๅบŒๅบˆๅบๅผ…ๅผๅฝธๅฝถๅฟ’ๅฟ‘ๅฟๅฟญๅฟจๅฟฎๅฟณๅฟกๅฟคๅฟฃๅฟบๅฟฏๅฟทๅฟปๆ€€ๅฟดๆˆบๆŠƒๆŠŒๆŠŽๆŠๆŠ”ๆЇๆ‰ฑๆ‰ปๆ‰บๆ‰ฐๆЁๆŠˆๆ‰ทๆ‰ฝๆ‰ฒๆ‰ดๆ”ทๆ—ฐๆ—ดๆ—ณๆ—ฒๆ—ตๆ…ๆ‡"], +["cb40","ๆ™ๆ•ๆŒๆˆๆๆๆšๆ‹ๆฏๆฐ™ๆฐšๆฑธๆฑงๆฑซๆฒ„ๆฒ‹ๆฒๆฑฑๆฑฏๆฑฉๆฒšๆฑญๆฒ‡ๆฒ•ๆฒœๆฑฆๆฑณๆฑฅๆฑปๆฒŽ็ด็บ็‰ฃ็Šฟ็Šฝ็‹ƒ็‹†็‹็Šบ็‹…็Ž•็Ž—็Ž“็Ž”็Ž’็”บ็”น็–”็–•็š็คฝ่€ด่‚•่‚™่‚่‚’่‚œ่А่Š่Š…่ŠŽ่Š‘่Š“"], +["cba1","่ŠŠ่Šƒ่Š„่ฑธ่ฟ‰่พฟ้‚Ÿ้‚ก้‚ฅ้‚ž้‚ง้‚ ้˜ฐ้˜จ้˜ฏ้˜ญไธณไพ˜ไฝผไพ…ไฝฝไพ€ไพ‡ไฝถไฝดไพ‰ไพ„ไฝทไฝŒไพ—ไฝชไพšไฝนไพไฝธไพไพœไพ”ไพžไพ’ไพ‚ไพ•ไฝซไฝฎๅ†žๅ†ผๅ†พๅˆตๅˆฒๅˆณๅ‰†ๅˆฑๅŠผๅŒŠๅŒ‹ๅŒผๅŽ’ๅŽ”ๅ’‡ๅ‘ฟๅ’ๅ’‘ๅ’‚ๅ’ˆๅ‘ซๅ‘บๅ‘พๅ‘ฅๅ‘ฌๅ‘ดๅ‘ฆๅ’ๅ‘ฏๅ‘กๅ‘ ๅ’˜ๅ‘ฃๅ‘งๅ‘คๅ›ทๅ›นๅฏๅฒๅญๅซๅฑๅฐๅถๅž€ๅตๅปๅณๅดๅข"], +["cc40","ๅจๅฝๅคŒๅฅ…ๅฆตๅฆบๅงๅงŽๅฆฒๅงŒๅงๅฆถๅฆผๅงƒๅง–ๅฆฑๅฆฝๅง€ๅงˆๅฆดๅง‡ๅญขๅญฅๅฎ“ๅฎ•ๅฑ„ๅฑ‡ๅฒฎๅฒคๅฒ ๅฒตๅฒฏๅฒจๅฒฌๅฒŸๅฒฃๅฒญๅฒขๅฒชๅฒงๅฒๅฒฅๅฒถๅฒฐๅฒฆๅธ—ๅธ”ๅธ™ๅผจๅผขๅผฃๅผคๅฝ”ๅพ‚ๅฝพๅฝฝๅฟžๅฟฅๆ€ญๆ€ฆๆ€™ๆ€ฒๆ€‹"], +["cca1","ๆ€ดๆ€Šๆ€—ๆ€ณๆ€šๆ€žๆ€ฌๆ€ขๆ€ๆ€ๆ€ฎๆ€“ๆ€‘ๆ€Œๆ€‰ๆ€œๆˆ”ๆˆฝๆŠญๆŠดๆ‹‘ๆŠพๆŠชๆŠถๆ‹ŠๆŠฎๆŠณๆŠฏๆŠปๆŠฉๆŠฐๆŠธๆ”ฝๆ–จๆ–ปๆ˜‰ๆ—ผๆ˜„ๆ˜’ๆ˜ˆๆ—ปๆ˜ƒๆ˜‹ๆ˜ๆ˜…ๆ—ฝๆ˜‘ๆ˜ๆ›ถๆœŠๆž…ๆฌๆžŽๆž’ๆถๆปๆž˜ๆž†ๆž„ๆดๆžๆžŒๆบๆžŸๆž‘ๆž™ๆžƒๆฝๆžๆธๆนๆž”ๆฌฅๆฎ€ๆญพๆฏžๆฐๆฒ“ๆณฌๆณซๆณฎๆณ™ๆฒถๆณ”ๆฒญๆณงๆฒทๆณๆณ‚ๆฒบๆณƒๆณ†ๆณญๆณฒ"], +["cd40","ๆณ’ๆณๆฒดๆฒŠๆฒๆฒ€ๆณžๆณ€ๆดฐๆณๆณ‡ๆฒฐๆณนๆณๆณฉๆณ‘็‚”็‚˜็‚…็‚“็‚†็‚„็‚‘็‚–็‚‚็‚š็‚ƒ็‰ช็‹–็‹‹็‹˜็‹‰็‹œ็‹’็‹”็‹š็‹Œ็‹‘็Žค็Žก็Žญ็Žฆ็Žข็Ž ็Žฌ็Ž็“็“จ็”ฟ็•€็”พ็–Œ็–˜็šฏ็›ณ็›ฑ็›ฐ็›ต็Ÿธ็Ÿผ็Ÿน็Ÿป็Ÿบ"], +["cda1","็Ÿท็ฅ‚็คฟ็ง…็ฉธ็ฉป็ซป็ฑต็ณฝ่€ต่‚่‚ฎ่‚ฃ่‚ธ่‚ต่‚ญ่ˆ ่Š ่‹€่Šซ่Šš่Š˜่Š›่Šต่Šง่Šฎ่Šผ่Šž่Šบ่Šด่Šจ่Šก่Šฉ่‹‚่Šค่‹ƒ่Šถ่Šข่™ฐ่™ฏ่™ญ่™ฎ่ฑ–่ฟ’่ฟ‹่ฟ“่ฟ่ฟ–่ฟ•่ฟ—้‚ฒ้‚ด้‚ฏ้‚ณ้‚ฐ้˜น้˜ฝ้˜ผ้˜บ้™ƒไฟไฟ…ไฟ“ไพฒไฟ‰ไฟ‹ไฟไฟ”ไฟœไฟ™ไพปไพณไฟ›ไฟ‡ไฟ–ไพบไฟ€ไพนไฟฌๅ‰„ๅ‰‰ๅ‹€ๅ‹‚ๅŒฝๅผๅŽ—ๅŽ–ๅŽ™ๅŽ˜ๅ’บๅ’กๅ’ญๅ’ฅๅ“"], +["ce40","ๅ“ƒ่Œๅ’ทๅ’ฎๅ“–ๅ’ถๅ“…ๅ“†ๅ’ ๅ‘ฐๅ’ผๅ’ขๅ’พๅ‘ฒๅ“žๅ’ฐๅžตๅžžๅžŸๅžคๅžŒๅž—ๅžๅž›ๅž”ๅž˜ๅžๅž™ๅžฅๅžšๅž•ๅฃดๅคๅฅ“ๅงกๅงžๅงฎๅจ€ๅงฑๅงๅงบๅงฝๅงผๅงถๅงคๅงฒๅงทๅง›ๅงฉๅงณๅงตๅง ๅงพๅงดๅงญๅฎจๅฑŒๅณๅณ˜ๅณŒๅณ—ๅณ‹ๅณ›"], +["cea1","ๅณžๅณšๅณ‰ๅณ‡ๅณŠๅณ–ๅณ“ๅณ”ๅณๅณˆๅณ†ๅณŽๅณŸๅณธๅทนๅธกๅธขๅธฃๅธ ๅธคๅบฐๅบคๅบขๅบ›ๅบฃๅบฅๅผ‡ๅผฎๅฝ–ๅพ†ๆ€ทๆ€นๆ”ๆฒๆžๆ…ๆ“ๆ‡ๆ‰ๆ›ๆŒๆ€ๆ‚ๆŸๆ€คๆ„ๆ˜ๆฆๆฎๆ‰‚ๆ‰ƒๆ‹ๆŒๆŒ‹ๆ‹ตๆŒŽๆŒƒๆ‹ซๆ‹นๆŒๆŒŒๆ‹ธๆ‹ถๆŒ€ๆŒ“ๆŒ”ๆ‹บๆŒ•ๆ‹ปๆ‹ฐๆ•ๆ•ƒๆ–ชๆ–ฟๆ˜ถๆ˜กๆ˜ฒๆ˜ตๆ˜œๆ˜ฆๆ˜ขๆ˜ณๆ˜ซๆ˜บๆ˜ๆ˜ดๆ˜นๆ˜ฎๆœๆœๆŸๆŸฒๆŸˆๆžบ"], +["cf40","ๆŸœๆžปๆŸธๆŸ˜ๆŸ€ๆžทๆŸ…ๆŸซๆŸคๆŸŸๆžตๆŸๆžณๆŸทๆŸถๆŸฎๆŸฃๆŸ‚ๆžนๆŸŽๆŸงๆŸฐๆžฒๆŸผๆŸ†ๆŸญๆŸŒๆžฎๆŸฆๆŸ›ๆŸบๆŸ‰ๆŸŠๆŸƒๆŸชๆŸ‹ๆฌจๆฎ‚ๆฎ„ๆฎถๆฏ–ๆฏ˜ๆฏ ๆฐ ๆฐกๆดจๆดดๆดญๆดŸๆดผๆดฟๆด’ๆดŠๆณšๆดณๆด„ๆด™ๆดบๆดšๆด‘ๆด€ๆดๆต‚"], +["cfa1","ๆดๆด˜ๆดทๆดƒๆดๆต€ๆด‡ๆด ๆดฌๆดˆๆดขๆด‰ๆด็‚ท็‚Ÿ็‚พ็‚ฑ็‚ฐ็‚ก็‚ด็‚ต็‚ฉ็‰็‰‰็‰Š็‰ฌ็‰ฐ็‰ณ็‰ฎ็‹Š็‹ค็‹จ็‹ซ็‹Ÿ็‹ช็‹ฆ็‹ฃ็Ž…็Œ็‚็ˆ็…็Žน็Žถ็Žต็Žด็ซ็Žฟ็‡็Žพ็ƒ็†็Žธ็‹็“ฌ็“ฎ็”ฎ็•‡็•ˆ็–ง็–ช็™น็›„็œˆ็œƒ็œ„็œ…็œŠ็›ท็›ป็›บ็Ÿง็Ÿจ็ †็ ‘็ ’็ …็ ็ ็ Ž็ ‰็ ƒ็ “็ฅŠ็ฅŒ็ฅ‹็ฅ…็ฅ„็ง•็ง็ง็ง–็งŽ็ช€"], +["d040","็ฉพ็ซ‘็ฌ€็ฌ็ฑบ็ฑธ็ฑน็ฑฟ็ฒ€็ฒ็ดƒ็ดˆ็ด็ฝ˜็พ‘็พ็พพ่€‡่€Ž่€่€”่€ท่ƒ˜่ƒ‡่ƒ ่ƒ‘่ƒˆ่ƒ‚่ƒ่ƒ…่ƒฃ่ƒ™่ƒœ่ƒŠ่ƒ•่ƒ‰่ƒ่ƒ—่ƒฆ่ƒ่‡ฟ่ˆก่Š”่‹™่‹พ่‹น่Œ‡่‹จ่Œ€่‹•่Œบ่‹ซ่‹–่‹ด่‹ฌ่‹ก่‹ฒ่‹ต่ŒŒ่‹ป่‹ถ่‹ฐ่‹ช"], +["d0a1","่‹ค่‹ ่‹บ่‹ณ่‹ญ่™ท่™ด่™ผ่™ณ่ก่กŽ่กง่กช่กฉ่ง“่จ„่จ‡่ตฒ่ฟฃ่ฟก่ฟฎ่ฟ ้ƒฑ้‚ฝ้‚ฟ้ƒ•้ƒ…้‚พ้ƒ‡้ƒ‹้ƒˆ้‡”้‡“้™”้™้™‘้™“้™Š้™Žๅ€žๅ€…ๅ€‡ๅ€“ๅ€ขๅ€ฐๅ€›ไฟตไฟดๅ€ณๅ€ทๅ€ฌไฟถไฟทๅ€—ๅ€œๅ€ ๅ€งๅ€ตๅ€ฏๅ€ฑๅ€Žๅ…šๅ†”ๅ†“ๅ‡Šๅ‡„ๅ‡…ๅ‡ˆๅ‡Žๅ‰กๅ‰šๅ‰’ๅ‰žๅ‰Ÿๅ‰•ๅ‰ขๅ‹ๅŒŽๅŽžๅ”ฆๅ“ขๅ”—ๅ”’ๅ“งๅ“ณๅ“คๅ”šๅ“ฟๅ”„ๅ”ˆๅ“ซๅ”‘ๅ”…ๅ“ฑ"], +["d140","ๅ”Šๅ“ปๅ“ทๅ“ธๅ“ ๅ”Žๅ”ƒๅ”‹ๅœๅœ‚ๅŸŒๅ ฒๅŸ•ๅŸ’ๅžบๅŸ†ๅžฝๅžผๅžธๅžถๅžฟๅŸ‡ๅŸๅžนๅŸๅคŽๅฅŠๅจ™ๅจ–ๅจญๅจฎๅจ•ๅจๅจ—ๅจŠๅจžๅจณๅญฌๅฎงๅฎญๅฎฌๅฐƒๅฑ–ๅฑ”ๅณฌๅณฟๅณฎๅณฑๅณทๅด€ๅณนๅธฉๅธจๅบจๅบฎๅบชๅบฌๅผณๅผฐๅฝงๆๆšๆง"], +["d1a1","ๆๆ‚ขๆ‚ˆๆ‚€ๆ‚’ๆ‚ๆ‚ๆ‚ƒๆ‚•ๆ‚›ๆ‚—ๆ‚‡ๆ‚œๆ‚Žๆˆ™ๆ‰†ๆ‹ฒๆŒๆ–ๆŒฌๆ„ๆ…ๆŒถๆƒๆคๆŒนๆ‹ๆŠๆŒผๆŒฉๆๆŒดๆ˜ๆ”ๆ™ๆŒญๆ‡ๆŒณๆšๆ‘ๆŒธๆ—ๆ€ๆˆๆ•Šๆ•†ๆ—†ๆ—ƒๆ—„ๆ—‚ๆ™Šๆ™Ÿๆ™‡ๆ™‘ๆœ’ๆœ“ๆ Ÿๆ šๆก‰ๆ ฒๆ ณๆ ปๆก‹ๆกๆ –ๆ ฑๆ œๆ ตๆ ซๆ ญๆ ฏๆกŽๆก„ๆ ดๆ ๆ ’ๆ ”ๆ ฆๆ จๆ ฎๆกๆ บๆ ฅๆ  ๆฌฌๆฌฏๆฌญๆฌฑๆฌดๆญญ่‚‚ๆฎˆๆฏฆๆฏค"], +["d240","ๆฏจๆฏฃๆฏขๆฏงๆฐฅๆตบๆตฃๆตคๆตถๆดๆตกๆถ’ๆต˜ๆตขๆตญๆตฏๆถ‘ๆถๆทฏๆตฟๆถ†ๆตžๆตงๆต ๆถ—ๆตฐๆตผๆตŸๆถ‚ๆถ˜ๆดฏๆตจๆถ‹ๆตพๆถ€ๆถ„ๆด–ๆถƒๆตปๆตฝๆตตๆถ็ƒœ็ƒ“็ƒ‘็ƒ็ƒ‹็ผน็ƒข็ƒ—็ƒ’็ƒž็ƒ ็ƒ”็ƒ็ƒ…็ƒ†็ƒ‡็ƒš็ƒŽ็ƒก็‰‚็‰ธ"], +["d2a1","็‰ท็‰ถ็Œ€็‹บ็‹ด็‹พ็‹ถ็‹ณ็‹ป็Œ็“็™็ฅ็–็Žผ็ง็ฃ็ฉ็œ็’็›็”็็š็—็˜็จ็“ž็“Ÿ็“ด็“ต็”ก็•›็•Ÿ็–ฐ็—็–ป็—„็—€็–ฟ็–ถ็–บ็šŠ็›‰็œ็œ›็œ็œ“็œ’็œฃ็œ‘็œ•็œ™็œš็œข็œง็ ฃ็ ฌ็ ข็ ต็ ฏ็ จ็ ฎ็ ซ็ ก็ ฉ็ ณ็ ช็ ฑ็ฅ”็ฅ›็ฅ็ฅœ็ฅ“็ฅ’็ฅ‘็งซ็งฌ็ง ็งฎ็งญ็งช็งœ็งž็ง็ช†็ช‰็ช…็ช‹็ชŒ็ชŠ็ช‡็ซ˜็ฌ"], +["d340","็ฌ„็ฌ“็ฌ…็ฌ็ฌˆ็ฌŠ็ฌŽ็ฌ‰็ฌ’็ฒ„็ฒ‘็ฒŠ็ฒŒ็ฒˆ็ฒ็ฒ…็ดž็ด็ด‘็ดŽ็ด˜็ด–็ด“็ดŸ็ด’็ด็ดŒ็ฝœ็ฝก็ฝž็ฝ ็ฝ็ฝ›็พ–็พ’็ฟƒ็ฟ‚็ฟ€่€–่€พ่€น่ƒบ่ƒฒ่ƒน่ƒต่„่ƒป่„€่ˆ่ˆฏ่ˆฅ่Œณ่Œญ่„่Œ™่‘่Œฅ่–่Œฟ่่Œฆ่Œœ่Œข"], +["d3a1","่‚่Ž่Œ›่Œช่Œˆ่Œผ่่Œ–่Œค่Œ ่Œท่Œฏ่Œฉ่‡่…่Œ่“่Œž่Œฌ่‹่Œง่ˆ่™“่™’่šข่šจ่š–่š่š‘่šž่š‡่š—่š†่š‹่šš่š…่šฅ่š™่šก่šง่š•่š˜่šŽ่š่š่š”่กƒ่ก„่กญ่กต่กถ่กฒ่ข€่กฑ่กฟ่กฏ่ขƒ่กพ่กด่กผ่จ’่ฑ‡่ฑ—่ฑป่ฒค่ฒฃ่ตถ่ตธ่ถต่ถท่ถถ่ป‘่ป“่ฟพ่ฟต้€‚่ฟฟ่ฟป้€„่ฟผ่ฟถ้ƒ–้ƒ ้ƒ™้ƒš้ƒฃ้ƒŸ้ƒฅ้ƒ˜้ƒ›้ƒ—้ƒœ้ƒค้…"], +["d440","้…Ž้…้‡•้‡ข้‡š้™œ้™Ÿ้šผ้ฃฃ้ซŸ้ฌฏไนฟๅฐๅชๅกๅžๅ ๅ“ๅ‹ๅๅฒๅˆๅๅๅ›ๅŠๅขๅ€•ๅ…ๅŸๅฉๅซๅฃๅคๅ†ๅ€ๅฎๅณๅ—ๅ‘ๅ‡ๅ‰ซๅ‰ญๅ‰ฌๅ‰ฎๅ‹–ๅ‹“ๅŒญๅŽœๅ•ตๅ•ถๅ”ผๅ•ๅ•ๅ”ดๅ”ชๅ•‘ๅ•ขๅ”ถๅ”ตๅ”ฐๅ•’ๅ•…"], +["d4a1","ๅ”Œๅ”ฒๅ•ฅๅ•Žๅ”นๅ•ˆๅ”ญๅ”ปๅ•€ๅ•‹ๅœŠๅœ‡ๅŸปๅ ”ๅŸขๅŸถๅŸœๅŸดๅ €ๅŸญๅŸฝๅ ˆๅŸธๅ ‹ๅŸณๅŸๅ ‡ๅŸฎๅŸฃๅŸฒๅŸฅๅŸฌๅŸกๅ ŽๅŸผๅ ๅŸงๅ ๅ ŒๅŸฑๅŸฉๅŸฐๅ ๅ „ๅฅœๅฉ ๅฉ˜ๅฉ•ๅฉงๅฉžๅจธๅจตๅฉญๅฉๅฉŸๅฉฅๅฉฌๅฉ“ๅฉคๅฉ—ๅฉƒๅฉๅฉ’ๅฉ„ๅฉ›ๅฉˆๅชŽๅจพๅฉๅจนๅฉŒๅฉฐๅฉฉๅฉ‡ๅฉ‘ๅฉ–ๅฉ‚ๅฉœๅญฒๅญฎๅฏๅฏ€ๅฑ™ๅดžๅด‹ๅดๅดšๅด ๅดŒๅดจๅดๅดฆๅดฅๅด"], +["d540","ๅดฐๅด’ๅดฃๅดŸๅดฎๅธพๅธดๅบฑๅบดๅบนๅบฒๅบณๅผถๅผธๅพ›ๅพ–ๅพŸๆ‚Šๆ‚ๆ‚†ๆ‚พๆ‚ฐๆ‚บๆƒ“ๆƒ”ๆƒๆƒคๆƒ™ๆƒๆƒˆๆ‚ฑๆƒ›ๆ‚ทๆƒŠๆ‚ฟๆƒƒๆƒๆƒ€ๆŒฒๆฅๆŽŠๆŽ‚ๆฝๆŽฝๆŽžๆŽญๆŽๆŽ—ๆŽซๆŽŽๆฏๆއๆސๆฎๆŽฏๆตๆŽœๆญๆŽฎๆผๆŽคๆŒปๆŽŸ"], +["d5a1","ๆธๆŽ…ๆށๆŽ‘ๆŽๆฐๆ•“ๆ—ๆ™ฅๆ™กๆ™›ๆ™™ๆ™œๆ™ขๆœ˜ๆกนๆข‡ๆขๆขœๆกญๆกฎๆขฎๆขซๆฅ–ๆกฏๆขฃๆขฌๆขฉๆกตๆกดๆขฒๆขๆกทๆข’ๆกผๆกซๆกฒๆขชๆข€ๆกฑๆกพๆข›ๆข–ๆข‹ๆข ๆข‰ๆขคๆกธๆกปๆข‘ๆขŒๆขŠๆกฝๆฌถๆฌณๆฌทๆฌธๆฎ‘ๆฎๆฎๆฎŽๆฎŒๆฐชๆท€ๆถซๆถดๆถณๆนดๆถฌๆทฉๆทขๆถทๆทถๆท”ๆธ€ๆทˆๆท ๆทŸๆท–ๆถพๆทฅๆทœๆทๆท›ๆทดๆทŠๆถฝๆทญๆทฐๆถบๆท•ๆท‚ๆทๆท‰"], +["d640","ๆทๆทฒๆท“ๆทฝๆท—ๆทๆทฃๆถป็ƒบ็„็ƒท็„—็ƒด็„Œ็ƒฐ็„„็ƒณ็„็ƒผ็ƒฟ็„†็„“็„€็ƒธ็ƒถ็„‹็„‚็„Ž็‰พ็‰ป็‰ผ็‰ฟ็Œ็Œ—็Œ‡็Œ‘็Œ˜็ŒŠ็Œˆ็‹ฟ็Œ็Œž็Žˆ็ถ็ธ็ต็„็็ฝ็‡็€็บ็ผ็ฟ็Œ็‹็ด็ˆ็•ค็•ฃ็—Ž็—’็—"], +["d6a1","็—‹็—Œ็—‘็—็š็š‰็›“็œน็œฏ็œญ็œฑ็œฒ็œด็œณ็œฝ็œฅ็œป็œต็กˆ็ก’็ก‰็ก็กŠ็กŒ็ ฆ็ก…็ก็ฅค็ฅง็ฅฉ็ฅช็ฅฃ็ฅซ็ฅก็ฆป็งบ็งธ็งถ็งท็ช็ช”็ช็ฌต็ญ‡็ฌด็ฌฅ็ฌฐ็ฌข็ฌค็ฌณ็ฌ˜็ฌช็ฌ็ฌฑ็ฌซ็ฌญ็ฌฏ็ฌฒ็ฌธ็ฌš็ฌฃ็ฒ”็ฒ˜็ฒ–็ฒฃ็ดต็ดฝ็ดธ็ดถ็ดบ็ต…็ดฌ็ดฉ็ต็ต‡็ดพ็ดฟ็ตŠ็ดป็ดจ็ฝฃ็พ•็พœ็พ็พ›็ฟŠ็ฟ‹็ฟ็ฟ็ฟ‘็ฟ‡็ฟ็ฟ‰่€Ÿ"], +["d740","่€ž่€›่‡่ƒ่ˆ่„˜่„ฅ่„™่„›่„ญ่„Ÿ่„ฌ่„ž่„ก่„•่„ง่„่„ข่ˆ‘่ˆธ่ˆณ่ˆบ่ˆด่ˆฒ่‰ด่ސ่Žฃ่Žจ่Ž่บ่ณ่Žค่ด่Ž่ށ่Ž•่Ž™่ต่Ž”่Žฉ่ฝ่Žƒ่ŽŒ่Ž่Ž›่Žช่Ž‹่พ่Žฅ่Žฏ่Žˆ่Ž—่Žฐ่ฟ่Žฆ่އ่Žฎ่ถ่Žš่™™่™–่šฟ่šท"], +["d7a1","่›‚่›่›…่šบ่šฐ่›ˆ่šน่šณ่šธ่›Œ่šด่šป่šผ่›ƒ่šฝ่šพ่ก’่ข‰่ข•่ขจ่ขข่ขช่ขš่ข‘่ขก่ขŸ่ข˜่ขง่ข™่ข›่ข—่ขค่ขฌ่ขŒ่ข“่ขŽ่ฆ‚่ง–่ง™่ง•่จฐ่จง่จฌ่จž่ฐน่ฐป่ฑœ่ฑ่ฑฝ่ฒฅ่ตฝ่ตป่ตน่ถผ่ท‚่ถน่ถฟ่ท่ป˜่ปž่ป่ปœ่ป—่ป ่ปก้€ค้€‹้€‘้€œ้€Œ้€ก้ƒฏ้ƒช้ƒฐ้ƒด้ƒฒ้ƒณ้ƒ”้ƒซ้ƒฌ้ƒฉ้…–้…˜้…š้…“้…•้‡ฌ้‡ด้‡ฑ้‡ณ้‡ธ้‡ค้‡น้‡ช"], +["d840","้‡ซ้‡ท้‡จ้‡ฎ้•บ้–†้–ˆ้™ผ้™ญ้™ซ้™ฑ้™ฏ้šฟ้ช้ „้ฃฅ้ฆ—ๅ‚›ๅ‚•ๅ‚”ๅ‚žๅ‚‹ๅ‚ฃๅ‚ƒๅ‚Œๅ‚Žๅ‚ๅจๅ‚œๅ‚’ๅ‚‚ๅ‚‡ๅ…Ÿๅ‡”ๅŒ’ๅŒ‘ๅŽคๅŽงๅ–‘ๅ–จๅ–ฅๅ–ญๅ•ทๅ™…ๅ–ขๅ–“ๅ–ˆๅ–ๅ–ตๅ–ๅ–ฃๅ–’ๅ–คๅ•ฝๅ–Œๅ–ฆๅ•ฟๅ–•ๅ–กๅ–ŽๅœŒๅ ฉๅ ท"], +["d8a1","ๅ ™ๅ žๅ งๅ ฃๅ จๅŸตๅกˆๅ ฅๅ œๅ ›ๅ ณๅ ฟๅ ถๅ ฎๅ นๅ ธๅ ญๅ ฌๅ ปๅฅกๅชฏๅช”ๅชŸๅฉบๅชขๅชžๅฉธๅชฆๅฉผๅชฅๅชฌๅช•ๅชฎๅจทๅช„ๅชŠๅช—ๅชƒๅช‹ๅชฉๅฉปๅฉฝๅชŒๅชœๅชๅช“ๅชๅฏชๅฏๅฏ‹ๅฏ”ๅฏ‘ๅฏŠๅฏŽๅฐŒๅฐฐๅดทๅตƒๅตซๅตๅต‹ๅดฟๅดตๅต‘ๅตŽๅต•ๅดณๅดบๅต’ๅดฝๅดฑๅต™ๅต‚ๅดนๅต‰ๅดธๅดผๅดฒๅดถๅต€ๅต…ๅน„ๅนๅฝ˜ๅพฆๅพฅๅพซๆƒ‰ๆ‚นๆƒŒๆƒขๆƒŽๆƒ„ๆ„”"], +["d940","ๆƒฒๆ„Šๆ„–ๆ„…ๆƒตๆ„“ๆƒธๆƒผๆƒพๆƒๆ„ƒๆ„˜ๆ„ๆ„ๆƒฟๆ„„ๆ„‹ๆ‰ŠๆŽ”ๆŽฑๆŽฐๆŽๆฅๆจๆฏๆƒๆ’ๆณๆŠๆ ๆถๆ•ๆฒๆตๆ‘กๆŸๆŽพๆๆœๆ„ๆ˜ๆ“ๆ‚ๆ‡ๆŒๆ‹ๆˆๆฐๆ—ๆ™ๆ”ฒๆ•งๆ•ชๆ•คๆ•œๆ•จๆ•ฅๆ–Œๆ–ๆ–žๆ–ฎๆ—ๆ—’"], +["d9a1","ๆ™ผๆ™ฌๆ™ปๆš€ๆ™ฑๆ™นๆ™ชๆ™ฒๆœๆคŒๆฃ“ๆค„ๆฃœๆคชๆฃฌๆฃชๆฃฑๆคๆฃ–ๆฃทๆฃซๆฃคๆฃถๆค“ๆคๆฃณๆฃกๆค‡ๆฃŒๆคˆๆฅฐๆขดๆค‘ๆฃฏๆฃ†ๆค”ๆฃธๆฃๆฃฝๆฃผๆฃจๆค‹ๆคŠๆค—ๆฃŽๆฃˆๆฃๆฃžๆฃฆๆฃดๆฃ‘ๆค†ๆฃ”ๆฃฉๆค•ๆคฅๆฃ‡ๆฌนๆฌปๆฌฟๆฌผๆฎ”ๆฎ—ๆฎ™ๆฎ•ๆฎฝๆฏฐๆฏฒๆฏณๆฐฐๆทผๆน†ๆน‡ๆธŸๆน‰ๆบˆๆธผๆธฝๆน…ๆนขๆธซๆธฟๆนๆนๆนณๆธœๆธณๆน‹ๆน€ๆน‘ๆธปๆธƒๆธฎๆนž"], +["da40","ๆนจๆนœๆนกๆธฑๆธจๆน ๆนฑๆนซๆธนๆธขๆธฐๆน“ๆนฅๆธงๆนธๆนคๆนทๆน•ๆนนๆน’ๆนฆๆธตๆธถๆนš็„ ็„ž็„ฏ็ƒป็„ฎ็„ฑ็„ฃ็„ฅ็„ข็„ฒ็„Ÿ็„จ็„บ็„›็‰‹็‰š็Šˆ็Љ็І็Š…็Š‹็Œ’็Œ‹็Œฐ็Œข็Œฑ็Œณ็Œง็Œฒ็Œญ็Œฆ็Œฃ็Œต็ŒŒ็ฎ็ฌ็ฐ็ซ็–"], +["daa1","็š็ก็ญ็ฑ็ค็ฃ็็ฉ็ ็ฒ็“ป็”ฏ็•ฏ็•ฌ็—ง็—š็—ก็—ฆ็—็—Ÿ็—ค็——็š•็š’็›š็†็‡็„็็…็Š็Ž็‹็Œ็Ÿž็Ÿฌ็ก ็กค็กฅ็กœ็กญ็กฑ็กช็กฎ็กฐ็กฉ็กจ็กž็กข็ฅด็ฅณ็ฅฒ็ฅฐ็จ‚็จŠ็จƒ็จŒ็จ„็ช™็ซฆ็ซค็ญŠ็ฌป็ญ„็ญˆ็ญŒ็ญŽ็ญ€็ญ˜็ญ…็ฒข็ฒž็ฒจ็ฒก็ต˜็ตฏ็ตฃ็ต“็ต–็ตง็ตช็ต็ตญ็ตœ็ตซ็ต’็ต”็ตฉ็ต‘็ตŸ็ตŽ็ผพ็ผฟ็ฝฅ"], +["db40","็ฝฆ็พข็พ ็พก็ฟ—่‘่่่ƒพ่ƒ”่…ƒ่…Š่…’่…่…‡่„ฝ่…่„บ่‡ฆ่‡ฎ่‡ท่‡ธ่‡น่ˆ„่ˆผ่ˆฝ่ˆฟ่‰ต่Œป่่น่ฃ่€่จ่’่ง่ค่ผ่ถ่่†่ˆ่ซ่ฃ่Žฟ่่่ฅ่˜่ฟ่ก่‹่Ž่–่ต่‰่‰่่ž่‘่†่‚่ณ"], +["dba1","่•่บ่‡่‘่ช่“่ƒ่ฌ่ฎ่„่ป่—่ข่›่›่พ่›˜่›ข่›ฆ่›“่›ฃ่›š่›ช่›่›ซ่›œ่›ฌ่›ฉ่›—่›จ่›‘่กˆ่ก–่ก•่ขบ่ฃ—่ขน่ขธ่ฃ€่ขพ่ขถ่ขผ่ขท่ขฝ่ขฒ่ค่ฃ‰่ฆ•่ฆ˜่ฆ—่ง่งš่ง›่ฉŽ่ฉ่จน่ฉ™่ฉ€่ฉ—่ฉ˜่ฉ„่ฉ…่ฉ’่ฉˆ่ฉ‘่ฉŠ่ฉŒ่ฉ่ฑŸ่ฒ่ฒ€่ฒบ่ฒพ่ฒฐ่ฒน่ฒต่ถ„่ถ€่ถ‰่ท˜่ท“่ท่ท‡่ท–่ทœ่ท่ท•่ท™่ทˆ่ท—่ท…่ปฏ่ปท่ปบ"], +["dc40","่ปน่ปฆ่ปฎ่ปฅ่ปต่ปง่ปจ่ปถ่ปซ่ปฑ่ปฌ่ปด่ปฉ้€ญ้€ด้€ฏ้„†้„ฌ้„„้ƒฟ้ƒผ้„ˆ้ƒน้ƒป้„้„€้„‡้„…้„ƒ้…ก้…ค้…Ÿ้…ข้… ้ˆ้ˆŠ้ˆฅ้ˆƒ้ˆš้ˆฆ้ˆ้ˆŒ้ˆ€้ˆ’้‡ฟ้‡ฝ้ˆ†้ˆ„้ˆง้ˆ‚้ˆœ้ˆค้ˆ™้ˆ—้ˆ…้ˆ–้•ป้–้–Œ้–้š‡้™พ้šˆ"], +["dca1","้š‰้šƒ้š€้›‚้›ˆ้›ƒ้›ฑ้›ฐ้ฌ้ฐ้ฎ้ ‡้ขฉ้ฃซ้ณฆ้ปนไบƒไบ„ไบถๅ‚ฝๅ‚ฟๅƒ†ๅ‚ฎๅƒ„ๅƒŠๅ‚ดๅƒˆๅƒ‚ๅ‚ฐๅƒๅ‚บๅ‚ฑๅƒ‹ๅƒ‰ๅ‚ถๅ‚ธๅ‡—ๅ‰บๅ‰ธๅ‰ปๅ‰ผๅ—ƒๅ—›ๅ—Œๅ—ๅ—‹ๅ—Šๅ—ๅ—€ๅ—”ๅ—„ๅ—ฉๅ–ฟๅ—’ๅ–ๅ—ๅ—•ๅ—ขๅ—–ๅ—ˆๅ—ฒๅ—ๅ—™ๅ—‚ๅœ”ๅก“ๅกจๅกคๅกๅกๅก‰ๅกฏๅก•ๅกŽๅกๅก™ๅกฅๅก›ๅ ฝๅกฃๅกฑๅฃผๅซ‡ๅซ„ๅซ‹ๅชบๅชธๅชฑๅชตๅชฐๅชฟๅซˆๅชปๅซ†"], +["dd40","ๅชทๅซ€ๅซŠๅชดๅชถๅซๅชนๅชๅฏ–ๅฏ˜ๅฏ™ๅฐŸๅฐณๅตฑๅตฃๅตŠๅตฅๅตฒๅตฌๅตžๅตจๅตงๅตขๅทฐๅนๅนŽๅนŠๅนๅน‹ๅป…ๅปŒๅป†ๅป‹ๅป‡ๅฝ€ๅพฏๅพญๆƒทๆ…‰ๆ…Šๆ„ซๆ……ๆ„ถๆ„ฒๆ„ฎๆ…†ๆ„ฏๆ…ๆ„ฉๆ…€ๆˆ ้…จๆˆฃๆˆฅๆˆคๆ…ๆฑๆซๆๆ’ๆ‰ๆ ๆค"], +["dda1","ๆณๆ‘ƒๆŸๆ•ๆ˜ๆนๆทๆขๆฃๆŒๆฆๆฐๆจๆ‘ๆตๆฏๆŠๆšๆ‘€ๆฅๆงๆ‹ๆงๆ›ๆฎๆกๆŽๆ•ฏๆ–’ๆ—“ๆš†ๆšŒๆš•ๆšๆš‹ๆšŠๆš™ๆš”ๆ™ธๆœ ๆฅฆๆฅŸๆคธๆฅŽๆฅขๆฅฑๆคฟๆฅ…ๆฅชๆคนๆฅ‚ๆฅ—ๆฅ™ๆฅบๆฅˆๆฅ‰ๆคตๆฅฌๆคณๆคฝๆฅฅๆฃฐๆฅธๆคดๆฅฉๆฅ€ๆฅฏๆฅ„ๆฅถๆฅ˜ๆฅๆฅดๆฅŒๆคปๆฅ‹ๆคทๆฅœๆฅๆฅ‘ๆคฒๆฅ’ๆคฏๆฅปๆคผๆญ†ๆญ…ๆญƒๆญ‚ๆญˆๆญๆฎ›๏จๆฏปๆฏผ"], +["de40","ๆฏนๆฏทๆฏธๆบ›ๆป–ๆปˆๆบๆป€ๆบŸๆบ“ๆบ”ๆบ ๆบฑๆบนๆป†ๆป’ๆบฝๆปๆบžๆป‰ๆบทๆบฐๆปๆบฆๆปๆบฒๆบพๆปƒๆปœๆป˜ๆบ™ๆบ’ๆบŽๆบๆบคๆบกๆบฟๆบณๆปๆปŠๆบ—ๆบฎๆบฃ็…‡็…”็…’็…ฃ็… ็…็…็…ข็…ฒ็…ธ็…ช็…ก็…‚็…˜็…ƒ็…‹็…ฐ็…Ÿ็…็…“"], +["dea1","็…„็…็…š็‰็Š็ŠŒ็Š‘็А็ŠŽ็Œผ็‚็Œป็Œบ็€็Š็‰็‘„็‘Š็‘‹็‘’็‘‘็‘—็‘€็‘็‘็‘Ž็‘‚็‘†็‘็‘”็“ก็“ฟ็“พ็“ฝ็”็•น็•ทๆฆƒ็—ฏ็˜็˜ƒ็—ท็—พ็—ผ็—น็—ธ็˜็—ป็—ถ็—ญ็—ต็—ฝ็š™็šต็›็•็Ÿ็ ็’็–็š็ฉ็ง็”็™็ญ็Ÿ ็ข‡็ขš็ข”็ข็ข„็ข•็ข…็ข†็ขก็ขƒ็กน็ข™็ข€็ข–็กป็ฅผ็ฆ‚็ฅฝ็ฅน็จ‘็จ˜็จ™็จ’็จ—็จ•็จข็จ“"], +["df40","็จ›็จ็ชฃ็ชข็ชž็ซซ็ญฆ็ญค็ญญ็ญด็ญฉ็ญฒ็ญฅ็ญณ็ญฑ็ญฐ็ญก็ญธ็ญถ็ญฃ็ฒฒ็ฒด็ฒฏ็ถˆ็ถ†็ถ€็ถ็ตฟ็ถ…็ตบ็ถŽ็ตป็ถƒ็ตผ็ถŒ็ถ”็ถ„็ตฝ็ถ’็ฝญ็ฝซ็ฝง็ฝจ็ฝฌ็พฆ็พฅ็พง็ฟ›็ฟœ่€ก่…ค่… ่…ท่…œ่…ฉ่…›่…ข่…ฒๆœก่…ž่…ถ่…ง่…ฏ"], +["dfa1","่…„่…ก่ˆ่‰‰่‰„่‰€่‰‚่‰…่“ฑ่ฟ่‘–่‘ถ่‘น่’่’่‘ฅ่‘‘่‘€่’†่‘ง่ฐ่‘่‘ฝ่‘š่‘™่‘ด่‘ณ่‘่”‡่‘ž่ท่บ่ด่‘บ่‘ƒ่‘ธ่ฒ่‘…่ฉ่™่‘‹่ฏ่‘‚่ญ่‘Ÿ่‘ฐ่น่‘Ž่‘Œ่‘’่‘ฏ่“…่’Ž่ป่‘‡่ถ่ณ่‘จ่‘พ่‘„่ซ่‘ ่‘”่‘ฎ่‘่œ‹่œ„่›ท่œŒ่›บ่›–่›ต่่›ธ่œŽ่œ‰่œ่›ถ่œ่œ…่ฃ–่ฃ‹่ฃ่ฃŽ่ฃž่ฃ›่ฃš่ฃŒ่ฃ่ฆ…่ฆ›่งŸ่งฅ่งค"], +["e040","่งก่ง ่งข่งœ่งฆ่ฉถ่ช†่ฉฟ่ฉก่จฟ่ฉท่ช‚่ช„่ฉต่ชƒ่ช่ฉด่ฉบ่ฐผ่ฑ‹่ฑŠ่ฑฅ่ฑค่ฑฆ่ฒ†่ฒ„่ฒ…่ณŒ่ตจ่ตฉ่ถ‘่ถŒ่ถŽ่ถ่ถ่ถ“่ถ”่ถ่ถ’่ทฐ่ท ่ทฌ่ทฑ่ทฎ่ท่ทฉ่ทฃ่ทข่ทง่ทฒ่ทซ่ทด่ผ†่ปฟ่ผ่ผ€่ผ…่ผ‡่ผˆ่ผ‚่ผ‹้’้€ฟ"], +["e0a1","้„้‰้€ฝ้„้„้„้„‘้„–้„”้„‹้„Ž้…ฎ้…ฏ้‰ˆ้‰’้ˆฐ้ˆบ้‰ฆ้ˆณ้‰ฅ้‰ž้Šƒ้ˆฎ้‰Š้‰†้‰ญ้‰ฌ้‰้‰ ้‰ง้‰ฏ้ˆถ้‰ก้‰ฐ้ˆฑ้‰”้‰ฃ้‰้‰ฒ้‰Ž้‰“้‰Œ้‰–้ˆฒ้–Ÿ้–œ้–ž้–›้š’้š“้š‘้š—้›Ž้›บ้›ฝ้›ธ้›ต้ณ้ท้ธ้ฒ้ ้ ้ Ž้ขฌ้ฃถ้ฃน้ฆฏ้ฆฒ้ฆฐ้ฆต้ชญ้ชซ้ญ›้ณช้ณญ้ณง้บ€้ปฝๅƒฆๅƒ”ๅƒ—ๅƒจๅƒณๅƒ›ๅƒชๅƒๅƒคๅƒ“ๅƒฌๅƒฐๅƒฏๅƒฃๅƒ "], +["e140","ๅ‡˜ๅŠ€ๅЁๅ‹ฉๅ‹ซๅŒฐๅŽฌๅ˜งๅ˜•ๅ˜Œๅ˜’ๅ—ผๅ˜ๅ˜œๅ˜ๅ˜“ๅ˜‚ๅ—บๅ˜ๅ˜„ๅ—ฟๅ—นๅข‰ๅกผๅขๅข˜ๅข†ๅขๅกฟๅกดๅข‹ๅกบๅข‡ๅข‘ๅขŽๅกถๅข‚ๅขˆๅกปๅข”ๅขๅฃพๅฅซๅซœๅซฎๅซฅๅซ•ๅซชๅซšๅซญๅซซๅซณๅซขๅซ ๅซ›ๅซฌๅซžๅซๅซ™ๅซจๅซŸๅญทๅฏ "], +["e1a1","ๅฏฃๅฑฃๅถ‚ๅถ€ๅตฝๅถ†ๅตบๅถๅตทๅถŠๅถ‰ๅถˆๅตพๅตผๅถๅตนๅตฟๅน˜ๅน™ๅน“ๅป˜ๅป‘ๅป—ๅปŽๅปœๅป•ๅป™ๅป’ๅป”ๅฝ„ๅฝƒๅฝฏๅพถๆ„ฌๆ„จๆ…ๆ…žๆ…ฑๆ…ณๆ…’ๆ…“ๆ…ฒๆ…ฌๆ†€ๆ…ดๆ…”ๆ…บๆ…›ๆ…ฅๆ„ปๆ…ชๆ…กๆ…–ๆˆฉๆˆงๆˆซๆซๆ‘ๆ‘›ๆ‘ๆ‘ดๆ‘ถๆ‘ฒๆ‘ณๆ‘ฝๆ‘ตๆ‘ฆๆ’ฆๆ‘Žๆ’‚ๆ‘žๆ‘œๆ‘‹ๆ‘“ๆ‘ ๆ‘ๆ‘ฟๆฟๆ‘ฌๆ‘ซๆ‘™ๆ‘ฅๆ‘ทๆ•ณๆ– ๆšกๆš ๆšŸๆœ…ๆœ„ๆœขๆฆฑๆฆถๆง‰"], +["e240","ๆฆ ๆงŽๆฆ–ๆฆฐๆฆฌๆฆผๆฆ‘ๆฆ™ๆฆŽๆฆงๆฆๆฆฉๆฆพๆฆฏๆฆฟๆง„ๆฆฝๆฆคๆง”ๆฆนๆงŠๆฆšๆงๆฆณๆฆ“ๆฆชๆฆกๆฆžๆง™ๆฆ—ๆฆๆง‚ๆฆตๆฆฅๆง†ๆญŠๆญๆญ‹ๆฎžๆฎŸๆฎ ๆฏƒๆฏ„ๆฏพๆปŽๆปตๆปฑๆผƒๆผฅๆปธๆผทๆปปๆผฎๆผ‰ๆฝŽๆผ™ๆผšๆผงๆผ˜ๆผปๆผ’ๆปญๆผŠ"], +["e2a1","ๆผถๆฝณๆปนๆปฎๆผญๆฝ€ๆผฐๆผผๆผตๆปซๆผ‡ๆผŽๆฝƒๆผ…ๆปฝๆปถๆผนๆผœๆปผๆผบๆผŸๆผๆผžๆผˆๆผก็†‡็†็†‰็†€็†…็†‚็†็…ป็††็†็†—็‰„็‰“็Š—็Š•็Š“็ƒ็็‘็Œ็‘ข็‘ณ็‘ฑ็‘ต็‘ฒ็‘ง็‘ฎ็”€็”‚็”ƒ็•ฝ็–็˜–็˜ˆ็˜Œ็˜•็˜‘็˜Š็˜”็šธ็ž็ผ็ž…็ž‚็ฎ็ž€็ฏ็พ็žƒ็ขฒ็ขช็ขด็ขญ็ขจ็กพ็ขซ็ขž็ขฅ็ข ็ขฌ็ขข็ขค็ฆ˜็ฆŠ็ฆ‹็ฆ–็ฆ•็ฆ”็ฆ“"], +["e340","็ฆ—็ฆˆ็ฆ’็ฆ็จซ็ฉŠ็จฐ็จฏ็จจ็จฆ็ชจ็ชซ็ชฌ็ซฎ็ฎˆ็ฎœ็ฎŠ็ฎ‘็ฎ็ฎ–็ฎ็ฎŒ็ฎ›็ฎŽ็ฎ…็ฎ˜ๅŠ„็ฎ™็ฎค็ฎ‚็ฒป็ฒฟ็ฒผ็ฒบ็ถง็ถท็ท‚็ถฃ็ถช็ท็ท€็ท…็ถ็ทŽ็ท„็ท†็ท‹็ทŒ็ถฏ็ถน็ถ–็ถผ็ถŸ็ถฆ็ถฎ็ถฉ็ถก็ท‰็ฝณ็ฟข็ฟฃ็ฟฅ็ฟž"], +["e3a1","่€ค่่œ่†‰่††่†ƒ่†‡่†่†Œ่†‹่ˆ•่’—่’ค่’ก่’Ÿ่’บ่“Ž่“‚่’ฌ่’ฎ่’ซ่’น่’ด่“่“่’ช่’š่’ฑ่“่’่’ง่’ป่’ข่’”่“‡่“Œ่’›่’ฉ่’ฏ่’จ่“–่’˜่’ถ่“่’ ่“—่“”่“’่“›่’ฐ่’‘่™ก่œณ่œฃ่œจ่ซ่€่œฎ่œž่œก่œ™่œ›่ƒ่œฌ่่œพ่†่œ ่œฒ่œช่œญ่œผ่œ’่œบ่œฑ่œต่‚่œฆ่œง่œธ่œค่œš่œฐ่œ‘่ฃท่ฃง่ฃฑ่ฃฒ่ฃบ่ฃพ่ฃฎ่ฃผ่ฃถ่ฃป"], +["e440","่ฃฐ่ฃฌ่ฃซ่ฆ่ฆก่ฆŸ่ฆž่งฉ่งซ่งจ่ชซ่ช™่ช‹่ช’่ช่ช–่ฐฝ่ฑจ่ฑฉ่ณ•่ณ่ณ—่ถ–่ธ‰่ธ‚่ทฟ่ธ่ทฝ่ธŠ่ธƒ่ธ‡่ธ†่ธ…่ทพ่ธ€่ธ„่ผ่ผ‘่ผŽ่ผ้„ฃ้„œ้„ ้„ข้„Ÿ้„้„š้„ค้„ก้„›้…บ้…ฒ้…น้…ณ้Šฅ้Šค้‰ถ้Š›้‰บ้Š ้Š”้Šช้Š"], +["e4a1","้Šฆ้Šš้Šซ้‰น้Š—้‰ฟ้Šฃ้‹ฎ้ŠŽ้Š‚้Š•้Šข้‰ฝ้Šˆ้Šก้ŠŠ้І้ŠŒ้Š™้Šง้‰พ้Ї้Šฉ้Š้Š‹้ˆญ้šž้šก้›ฟ้˜้ฝ้บ้พ้žƒ้ž€้ž‚้ป้ž„้ž้ฟ้ŸŽ้Ÿ้ –้ขญ้ขฎ้ค‚้ค€้ค‡้ฆ้ฆœ้งƒ้ฆน้ฆป้ฆบ้ง‚้ฆฝ้ง‡้ชฑ้ซฃ้ซง้ฌพ้ฌฟ้ญ ้ญก้ญŸ้ณฑ้ณฒ้ณต้บงๅƒฟๅ„ƒๅ„ฐๅƒธๅ„†ๅ„‡ๅƒถๅƒพๅ„‹ๅ„Œๅƒฝๅ„ŠๅŠ‹ๅŠŒๅ‹ฑๅ‹ฏๅ™ˆๅ™‚ๅ™Œๅ˜ตๅ™ๅ™Šๅ™‰ๅ™†ๅ™˜"], +["e540","ๅ™šๅ™€ๅ˜ณๅ˜ฝๅ˜ฌๅ˜พๅ˜ธๅ˜ชๅ˜บๅœšๅขซๅขๅขฑๅข ๅขฃๅขฏๅขฌๅขฅๅขกๅฃฟๅซฟๅซดๅซฝๅซทๅซถๅฌƒๅซธๅฌ‚ๅซนๅฌๅฌ‡ๅฌ…ๅฌๅฑงๅถ™ๅถ—ๅถŸๅถ’ๅถขๅถ“ๅถ•ๅถ ๅถœๅถกๅถšๅถžๅนฉๅนๅน ๅนœ็ทณๅป›ๅปžๅปกๅฝ‰ๅพฒๆ†‹ๆ†ƒๆ…นๆ†ฑๆ†ฐๆ†ขๆ†‰"], +["e5a1","ๆ†›ๆ†“ๆ†ฏๆ†ญๆ†Ÿๆ†’ๆ†ชๆ†กๆ†ๆ…ฆๆ†ณๆˆญๆ‘ฎๆ‘ฐๆ’–ๆ’ ๆ’…ๆ’—ๆ’œๆ’ๆ’‹ๆ’Šๆ’Œๆ’ฃๆ’Ÿๆ‘จๆ’ฑๆ’˜ๆ•ถๆ•บๆ•นๆ•ปๆ–ฒๆ–ณๆšตๆšฐๆšฉๆšฒๆšทๆšชๆšฏๆจ€ๆจ†ๆจ—ๆงฅๆงธๆจ•ๆงฑๆงคๆจ ๆงฟๆงฌๆงขๆจ›ๆจๆงพๆจงๆงฒๆงฎๆจ”ๆงทๆงงๆฉ€ๆจˆๆงฆๆงปๆจๆงผๆงซๆจ‰ๆจ„ๆจ˜ๆจฅๆจๆงถๆจฆๆจ‡ๆงดๆจ–ๆญ‘ๆฎฅๆฎฃๆฎขๆฎฆๆฐๆฐ€ๆฏฟๆฐ‚ๆฝๆผฆๆฝพๆพ‡ๆฟ†ๆพ’"], +["e640","ๆพๆพ‰ๆพŒๆฝขๆฝๆพ…ๆฝšๆพ–ๆฝถๆฝฌๆพ‚ๆฝ•ๆฝฒๆฝ’ๆฝๆฝ—ๆพ”ๆพ“ๆฝๆผ€ๆฝกๆฝซๆฝฝๆฝงๆพๆฝ“ๆพ‹ๆฝฉๆฝฟๆพ•ๆฝฃๆฝทๆฝชๆฝป็†ฒ็†ฏ็†›็†ฐ็† ็†š็†ฉ็†ต็†็†ฅ็†ž็†ค็†ก็†ช็†œ็†ง็†ณ็Š˜็Šš็˜็’็ž็Ÿ็ ็็›็ก็š็™"], +["e6a1","็ข็’‡็’‰็’Š็’†็’็‘ฝ็’…็’ˆ็‘ผ็‘น็”ˆ็”‡็•พ็˜ฅ็˜ž็˜™็˜็˜œ็˜ฃ็˜š็˜จ็˜›็šœ็š็šž็š›็ž็ž็ž‰็žˆ็ฃ็ขป็ฃ็ฃŒ็ฃ‘็ฃŽ็ฃ”็ฃˆ็ฃƒ็ฃ„็ฃ‰็ฆš็ฆก็ฆ ็ฆœ็ฆข็ฆ›ๆญถ็จน็ชฒ็ชด็ชณ็ฎท็ฏ‹็ฎพ็ฎฌ็ฏŽ็ฎฏ็ฎน็ฏŠ็ฎต็ณ…็ณˆ็ณŒ็ณ‹็ทท็ท›็ทช็ทง็ท—็ทก็ธƒ็ทบ็ทฆ็ทถ็ทฑ็ทฐ็ทฎ็ทŸ็ฝถ็พฌ็พฐ็พญ็ฟญ็ฟซ็ฟช็ฟฌ็ฟฆ็ฟจ่ค่ง่†ฃ่†Ÿ"], +["e740","่†ž่†•่†ข่†™่†—่ˆ–่‰่‰“่‰’่‰่‰Ž่‰‘่”ค่”ป่”่”€่”ฉ่”Ž่”‰่”่”Ÿ่”Š่”ง่”œ่“ป่”ซ่“บ่”ˆ่”Œ่“ด่”ช่“ฒ่”•่“ท่“ซ่“ณ่“ผ่”’่“ช่“ฉ่”–่“พ่”จ่”่”ฎ่”‚่“ฝ่”ž่“ถ่”ฑ่”ฆ่“ง่“จ่“ฐ่“ฏ่“น่”˜่” ่”ฐ่”‹่”™่”ฏ่™ข"], +["e7a1","่–่ฃ่ค่ท่Ÿก่ณ่˜่”่›่’่ก่š่‘่ž่ญ่ช่่Ž่Ÿ่่ฏ่ฌ่บ่ฎ่œ่ฅ่่ป่ต่ข่ง่ฉ่กš่ค…่คŒ่ค”่ค‹่ค—่ค˜่ค™่ค†่ค–่ค‘่คŽ่ค‰่ฆข่ฆค่ฆฃ่งญ่งฐ่งฌ่ซ่ซ†่ชธ่ซ“่ซ‘่ซ”่ซ•่ชป่ซ—่ชพ่ซ€่ซ…่ซ˜่ซƒ่ชบ่ชฝ่ซ™่ฐพ่ฑ่ฒ่ณฅ่ณŸ่ณ™่ณจ่ณš่ณ่ณง่ถ ่ถœ่ถก่ถ›่ธ ่ธฃ่ธฅ่ธค่ธฎ่ธ•่ธ›่ธ–่ธ‘่ธ™่ธฆ่ธง"], +["e840","่ธ”่ธ’่ธ˜่ธ“่ธœ่ธ—่ธš่ผฌ่ผค่ผ˜่ผš่ผ ่ผฃ่ผ–่ผ—้ณ้ฐ้ฏ้ง้ซ้„ฏ้„ซ้„ฉ้„ช้„ฒ้„ฆ้„ฎ้†…้††้†Š้†้†‚้†„้†€้‹้‹ƒ้‹„้‹€้‹™้Šถ้‹้‹ฑ้‹Ÿ้‹˜้‹ฉ้‹—้‹้‹Œ้‹ฏ้‹‚้‹จ้‹Š้‹ˆ้‹Ž้‹ฆ้‹้‹•้‹‰้‹ ้‹ž้‹ง้‹‘้‹“"], +["e8a1","้Šต้‹ก้‹†้Šด้•ผ้–ฌ้–ซ้–ฎ้–ฐ้šค้šข้›“้œ…้œˆ้œ‚้š้žŠ้žŽ้žˆ้Ÿ้Ÿ้ ž้ ้ ฆ้ ฉ้ จ้  ้ ›้ ง้ขฒ้คˆ้ฃบ้ค‘้ค”้ค–้ค—้ค•้งœ้ง้ง้ง“้ง”้งŽ้ง‰้ง–้ง˜้ง‹้ง—้งŒ้ชณ้ซฌ้ซซ้ซณ้ซฒ้ซฑ้ญ†้ญƒ้ญง้ญด้ญฑ้ญฆ้ญถ้ญต้ญฐ้ญจ้ญค้ญฌ้ณผ้ณบ้ณฝ้ณฟ้ณท้ด‡้ด€้ณน้ณป้ดˆ้ด…้ด„้บƒ้ป“้ผ้ผๅ„œๅ„“ๅ„—ๅ„šๅ„‘ๅ‡žๅŒดๅกๅ™ฐๅ™ ๅ™ฎ"], +["e940","ๅ™ณๅ™ฆๅ™ฃๅ™ญๅ™ฒๅ™žๅ™ทๅœœๅœ›ๅฃˆๅขฝๅฃ‰ๅขฟๅขบๅฃ‚ๅขผๅฃ†ๅฌ—ๅฌ™ๅฌ›ๅฌกๅฌ”ๅฌ“ๅฌๅฌ–ๅฌจๅฌšๅฌ ๅฌžๅฏฏๅถฌๅถฑๅถฉๅถงๅถตๅถฐๅถฎๅถชๅถจๅถฒๅถญๅถฏๅถดๅนงๅนจๅนฆๅนฏๅปฉๅปงๅปฆๅปจๅปฅๅฝ‹ๅพผๆ†ๆ†จๆ†–ๆ‡…ๆ†ดๆ‡†ๆ‡ๆ‡Œๆ†บ"], +["e9a1","ๆ†ฟๆ†ธๆ†Œๆ“—ๆ“–ๆ“ๆ“ๆ“‰ๆ’ฝๆ’‰ๆ“ƒๆ“›ๆ“ณๆ“™ๆ”ณๆ•ฟๆ•ผๆ–ขๆ›ˆๆšพๆ›€ๆ›Šๆ›‹ๆ›ๆšฝๆšปๆšบๆ›Œๆœฃๆจดๆฉฆๆฉ‰ๆฉงๆจฒๆฉจๆจพๆฉๆฉญๆฉถๆฉ›ๆฉ‘ๆจจๆฉšๆจปๆจฟๆฉๆฉชๆฉคๆฉๆฉๆฉ”ๆฉฏๆฉฉๆฉ ๆจผๆฉžๆฉ–ๆฉ•ๆฉๆฉŽๆฉ†ๆญ•ๆญ”ๆญ–ๆฎงๆฎชๆฎซๆฏˆๆฏ‡ๆฐ„ๆฐƒๆฐ†ๆพญๆฟ‹ๆพฃๆฟ‡ๆพผๆฟŽๆฟˆๆฝžๆฟ„ๆพฝๆพžๆฟŠๆพจ็€„ๆพฅๆพฎๆพบๆพฌๆพชๆฟๆพฟๆพธ"], +["ea40","ๆพขๆฟ‰ๆพซๆฟๆพฏๆพฒๆพฐ็‡…็‡‚็†ฟ็†ธ็‡–็‡€็‡็‡‹็‡”็‡Š็‡‡็‡็†ฝ็‡˜็†ผ็‡†็‡š็‡›็Š็Šž็ฉ็ฆ็ง็ฌ็ฅ็ซ็ช็‘ฟ็’š็’ ็’”็’’็’•็’ก็”‹็–€็˜ฏ็˜ญ็˜ฑ็˜ฝ็˜ณ็˜ผ็˜ต็˜ฒ็˜ฐ็šป็›ฆ็žš็ž็žก็žœ็ž›็žข็žฃ็ž•็ž™"], +["eaa1","็ž—็ฃ็ฃฉ็ฃฅ็ฃช็ฃž็ฃฃ็ฃ›็ฃก็ฃข็ฃญ็ฃŸ็ฃ ็ฆค็ฉ„็ฉˆ็ฉ‡็ชถ็ชธ็ชต็ชฑ็ชท็ฏž็ฏฃ็ฏง็ฏ็ฏ•็ฏฅ็ฏš็ฏจ็ฏน็ฏ”็ฏช็ฏข็ฏœ็ฏซ็ฏ˜็ฏŸ็ณ’็ณ”็ณ—็ณ็ณ‘็ธ’็ธก็ธ—็ธŒ็ธŸ็ธ ็ธ“็ธŽ็ธœ็ธ•็ธš็ธข็ธ‹็ธ็ธ–็ธ็ธ”็ธฅ็ธค็ฝƒ็ฝป็ฝผ็ฝบ็พฑ็ฟฏ่€ช่€ฉ่ฌ่†ฑ่†ฆ่†ฎ่†น่†ต่†ซ่†ฐ่†ฌ่†ด่†ฒ่†ท่†ง่‡ฒ่‰•่‰–่‰—่•–่•…่•ซ่•่•“่•ก่•˜"], +["eb40","่•€่•†่•ค่•่•ข่•„่•‘่•‡่•ฃ่”พ่•›่•ฑ่•Ž่•ฎ่•ต่••่•ง่• ่–Œ่•ฆ่•่•”่•ฅ่•ฌ่™ฃ่™ฅ่™ค่ž›่ž่ž—่ž“่ž’่žˆ่ž่ž–่ž˜่น่ž‡่žฃ่ž…่ž่ž‘่ž่ž„่ž”่žœ่žš่ž‰่คž่คฆ่คฐ่คญ่คฎ่คง่คฑ่คข่คฉ่คฃ่คฏ่คฌ่คŸ่งฑ่ซ "], +["eba1","่ซข่ซฒ่ซด่ซต่ซ่ฌ”่ซค่ซŸ่ซฐ่ซˆ่ซž่ซก่ซจ่ซฟ่ซฏ่ซป่ฒ‘่ฒ’่ฒ่ณต่ณฎ่ณฑ่ณฐ่ณณ่ตฌ่ตฎ่ถฅ่ถง่ธณ่ธพ่ธธ่น€่น…่ธถ่ธผ่ธฝ่น่ธฐ่ธฟ่บฝ่ผถ่ผฎ่ผต่ผฒ่ผน่ผท่ผด้ถ้น้ป้‚†้ƒบ้„ณ้„ต้„ถ้†“้†้†‘้†้†้Œง้Œž้Œˆ้ŒŸ้Œ†้Œ้บ้Œธ้Œผ้Œ›้Œฃ้Œ’้Œ้†้Œญ้ŒŽ้Œ้‹‹้Œ้‹บ้Œฅ้Œ“้‹น้‹ท้Œด้Œ‚้Œค้‹ฟ้Œฉ้Œน้Œต้Œช้Œ”้ŒŒ"], +["ec40","้Œ‹้‹พ้Œ‰้Œ€้‹ป้Œ–้–ผ้—้–พ้–น้–บ้–ถ้–ฟ้–ต้–ฝ้šฉ้›”้œ‹้œ’้œ้ž™้ž—้ž”้Ÿฐ้Ÿธ้ ต้ ฏ้ ฒ้คค้คŸ้คง้คฉ้ฆž้งฎ้งฌ้งฅ้งค้งฐ้งฃ้งช้งฉ้งง้ชน้ชฟ้ชด้ชป้ซถ้ซบ้ซน้ซท้ฌณ้ฎ€้ฎ…้ฎ‡้ญผ้ญพ้ญป้ฎ‚้ฎ“้ฎ’้ฎ้ญบ้ฎ•"], +["eca1","้ญฝ้ฎˆ้ดฅ้ด—้ด ้ดž้ด”้ดฉ้ด้ด˜้ดข้ด้ด™้ดŸ้บˆ้บ†้บ‡้บฎ้บญ้ป•้ป–้ปบ้ผ’้ผฝๅ„ฆๅ„ฅๅ„ขๅ„คๅ„ ๅ„ฉๅ‹ดๅš“ๅšŒๅšๅš†ๅš„ๅšƒๅ™พๅš‚ๅ™ฟๅšๅฃ–ๅฃ”ๅฃๅฃ’ๅฌญๅฌฅๅฌฒๅฌฃๅฌฌๅฌงๅฌฆๅฌฏๅฌฎๅญปๅฏฑๅฏฒๅถทๅนฌๅนชๅพพๅพปๆ‡ƒๆ†ตๆ†ผๆ‡งๆ‡ ๆ‡ฅๆ‡คๆ‡จๆ‡žๆ“ฏๆ“ฉๆ“ฃๆ“ซๆ“คๆ“จๆ–ๆ–€ๆ–ถๆ—šๆ›’ๆชๆช–ๆชๆชฅๆช‰ๆชŸๆช›ๆชกๆชžๆช‡ๆช“ๆชŽ"], +["ed40","ๆช•ๆชƒๆชจๆชคๆช‘ๆฉฟๆชฆๆชšๆช…ๆชŒๆช’ๆญ›ๆฎญๆฐ‰ๆฟŒๆพฉๆฟดๆฟ”ๆฟฃๆฟœๆฟญๆฟงๆฟฆๆฟžๆฟฒๆฟๆฟขๆฟจ็‡ก็‡ฑ็‡จ็‡ฒ็‡ค็‡ฐ็‡ข็ณ็ฎ็ฏ็’—็’ฒ็’ซ็’็’ช็’ญ็’ฑ็’ฅ็’ฏ็”็”‘็”’็”็–„็™ƒ็™ˆ็™‰็™‡็šค็›ฉ็žต็žซ็žฒ็žท็žถ"], +["eda1","็žด็žฑ็žจ็Ÿฐ็ฃณ็ฃฝ็ค‚็ฃป็ฃผ็ฃฒ็ค…็ฃน็ฃพ็ค„็ฆซ็ฆจ็ฉœ็ฉ›็ฉ–็ฉ˜็ฉ”็ฉš็ชพ็ซ€็ซ็ฐ…็ฐ็ฏฒ็ฐ€็ฏฟ็ฏป็ฐŽ็ฏด็ฐ‹็ฏณ็ฐ‚็ฐ‰็ฐƒ็ฐ็ฏธ็ฏฝ็ฐ†็ฏฐ็ฏฑ็ฐ็ฐŠ็ณจ็ธญ็ธผ็น‚็ธณ้กˆ็ธธ็ธช็น‰็น€็น‡็ธฉ็นŒ็ธฐ็ธป็ธถ็น„็ธบ็ฝ…็ฝฟ็ฝพ็ฝฝ็ฟด็ฟฒ่€ฌ่†ป่‡„่‡Œ่‡Š่‡…่‡‡่†ผ่‡ฉ่‰›่‰š่‰œ่–ƒ่–€่–่–ง่–•่– ่–‹่–ฃ่•ป่–ค่–š่–ž"], +["ee40","่•ท่•ผ่–‰่–ก่•บ่•ธ่•—่–Ž่––่–†่–่–™่–่–่–ข่–‚่–ˆ่–…่•น่•ถ่–˜่–่–Ÿ่™จ่žพ่žช่žญ่Ÿ…่žฐ่žฌ่žน่žต่žผ่žฎ่Ÿ‰่Ÿƒ่Ÿ‚่ŸŒ่žท่žฏ่Ÿ„่ŸŠ่žด่žถ่žฟ่žธ่žฝ่Ÿž่žฒ่คต่คณ่คผ่คพ่ฅ่ฅ’่คท่ฅ‚่ฆญ่ฆฏ่ฆฎ่งฒ่งณ่ฌž"], +["eea1","่ฌ˜่ฌ–่ฌ‘่ฌ…่ฌ‹่ฌข่ฌ่ฌ’่ฌ•่ฌ‡่ฌ่ฌˆ่ฌ†่ฌœ่ฌ“่ฌš่ฑ่ฑฐ่ฑฒ่ฑฑ่ฑฏ่ฒ•่ฒ”่ณน่ตฏ่นŽ่น่น“่น่นŒ่น‡่ฝƒ่ฝ€้‚…้พ้„ธ้†š้†ข้†›้†™้†Ÿ้†ก้†้† ้Žก้Žƒ้Žฏ้ค้–้‡้ผ้˜้œ้ถ้‰้้‘้ ้ญ้Ž้Œ้ช้น้—้•้’้้ฑ้ท้ป้ก้ž้ฃ้ง้Ž€้Ž้™้—‡้—€้—‰้—ƒ้—…้–ท้šฎ้šฐ้šฌ้œ ้œŸ้œ˜้œ้œ™้žš้žก้žœ"], +["ef40","้žž้ž้Ÿ•้Ÿ”้Ÿฑ้ก้ก„้กŠ้ก‰้ก…้กƒ้คฅ้คซ้คฌ้คช้คณ้คฒ้คฏ้คญ้คฑ้คฐ้ฆ˜้ฆฃ้ฆก้จ‚้งบ้งด้งท้งน้งธ้งถ้งป้งฝ้งพ้งผ้จƒ้ชพ้ซพ้ซฝ้ฌ้ซผ้ญˆ้ฎš้ฎจ้ฎž้ฎ›้ฎฆ้ฎก้ฎฅ้ฎค้ฎ†้ฎข้ฎ ้ฎฏ้ดณ้ต้ตง้ดถ้ดฎ้ดฏ้ดฑ้ดธ้ดฐ"], +["efa1","้ต…้ต‚้ตƒ้ดพ้ดท้ต€้ดฝ็ฟต้ดญ้บŠ้บ‰้บ้บฐ้ปˆ้ปš้ปป้ปฟ้ผค้ผฃ้ผข้ฝ”้พ ๅ„ฑๅ„ญๅ„ฎๅš˜ๅšœๅš—ๅššๅšๅš™ๅฅฐๅฌผๅฑฉๅฑชๅท€ๅนญๅนฎๆ‡˜ๆ‡Ÿๆ‡ญๆ‡ฎๆ‡ฑๆ‡ชๆ‡ฐๆ‡ซๆ‡–ๆ‡ฉๆ“ฟๆ”„ๆ“ฝๆ“ธๆ”ๆ”ƒๆ“ผๆ–”ๆ—›ๆ›šๆ››ๆ›˜ๆซ…ๆชนๆชฝๆซกๆซ†ๆชบๆชถๆชทๆซ‡ๆชดๆชญๆญžๆฏ‰ๆฐ‹็€‡็€Œ็€็€็€…็€”็€Žๆฟฟ็€€ๆฟป็€ฆๆฟผๆฟท็€Š็ˆ็‡ฟ็‡น็ˆƒ็‡ฝ็ถ"], +["f040","็’ธ็“€็’ต็“็’พ็’ถ็’ป็“‚็””็”“็™œ็™ค็™™็™็™“็™—็™š็šฆ็šฝ็›ฌ็Ÿ‚็žบ็ฃฟ็คŒ็ค“็ค”็ค‰็ค็ค’็ค‘็ฆญ็ฆฌ็ฉŸ็ฐœ็ฐฉ็ฐ™็ฐ ็ฐŸ็ฐญ็ฐ็ฐฆ็ฐจ็ฐข็ฐฅ็ฐฐ็นœ็น็น–็นฃ็น˜็นข็นŸ็น‘็น ็น—็น“็พต็พณ็ฟท็ฟธ่ต่‡‘่‡’"], +["f0a1","่‡่‰Ÿ่‰ž่–ด่—†่—€่—ƒ่—‚่–ณ่–ต่–ฝ่—‡่—„่–ฟ่—‹่—Ž่—ˆ่—…่–ฑ่–ถ่—’่˜ค่–ธ่–ท่–พ่™ฉ่Ÿง่Ÿฆ่Ÿข่Ÿ›่Ÿซ่Ÿช่Ÿฅ่ŸŸ่Ÿณ่Ÿค่Ÿ”่Ÿœ่Ÿ“่Ÿญ่Ÿ˜่Ÿฃ่žค่Ÿ—่Ÿ™่ ่Ÿด่Ÿจ่Ÿ่ฅ“่ฅ‹่ฅ่ฅŒ่ฅ†่ฅ่ฅ‘่ฅ‰่ฌช่ฌง่ฌฃ่ฌณ่ฌฐ่ฌต่ญ‡่ฌฏ่ฌผ่ฌพ่ฌฑ่ฌฅ่ฌท่ฌฆ่ฌถ่ฌฎ่ฌค่ฌป่ฌฝ่ฌบ่ฑ‚่ฑต่ฒ™่ฒ˜่ฒ—่ณพ่ด„่ด‚่ด€่นœ่นข่น ่น—่น–่นž่นฅ่นง"], +["f140","่น›่นš่นก่น่นฉ่น”่ฝ†่ฝ‡่ฝˆ่ฝ‹้„จ้„บ้„ป้„พ้†จ้†ฅ้†ง้†ฏ้†ช้Žต้ŽŒ้Ž’้Žท้Ž›้Ž้މ้Žง้ŽŽ้Žช้Žž้Žฆ้Ž•้Žˆ้Ž™้ŽŸ้Ž้Žฑ้Ž‘้Žฒ้Žค้Žจ้Žด้Žฃ้Žฅ้—’้—“้—‘้šณ้›—้›šๅท‚้›Ÿ้›˜้›้œฃ้œข้œฅ้žฌ้žฎ้žจ้žซ้žค้žช"], +["f1a1","้žข้žฅ้Ÿ—้Ÿ™้Ÿ–้Ÿ˜้Ÿบ้ก้ก‘้ก’้ขธ้ฅ้คผ้คบ้จ้จ‹้จ‰้จ้จ„้จ‘้จŠ้จ…้จ‡้จ†้ซ€้ซœ้ฌˆ้ฌ„้ฌ…้ฌฉ้ฌต้ญŠ้ญŒ้ญ‹้ฏ‡้ฏ†้ฏƒ้ฎฟ้ฏ้ฎต้ฎธ้ฏ“้ฎถ้ฏ„้ฎน้ฎฝ้ตœ้ต“้ต้ตŠ้ต›้ต‹้ต™้ต–้ตŒ้ต—้ต’้ต”้ตŸ้ต˜้ตš้บŽ้บŒ้ปŸ้ผ้ผ€้ผ–้ผฅ้ผซ้ผช้ผฉ้ผจ้ฝŒ้ฝ•ๅ„ดๅ„ตๅŠ–ๅ‹ทๅŽดๅšซๅšญๅšฆๅšงๅšชๅšฌๅฃšๅฃๅฃ›ๅค’ๅฌฝๅฌพๅฌฟๅทƒๅนฐ"], +["f240","ๅพฟๆ‡ปๆ”‡ๆ”ๆ”ๆ”‰ๆ”Œๆ”Žๆ–„ๆ—žๆ—ๆ›žๆซงๆซ ๆซŒๆซ‘ๆซ™ๆซ‹ๆซŸๆซœๆซๆซซๆซๆซๆซžๆญ ๆฎฐๆฐŒ็€™็€ง็€ ็€–็€ซ็€ก็€ข็€ฃ็€ฉ็€—็€ค็€œ็€ช็ˆŒ็ˆŠ็ˆ‡็ˆ‚็ˆ…็Šฅ็Šฆ็Šค็Šฃ็Šก็“‹็“…็’ท็“ƒ็”–็™ ็Ÿ‰็ŸŠ็Ÿ„็Ÿฑ็ค็ค›"], +["f2a1","็คก็คœ็ค—็คž็ฆฐ็ฉง็ฉจ็ฐณ็ฐผ็ฐน็ฐฌ็ฐป็ณฌ็ณช็นถ็นต็นธ็นฐ็นท็นฏ็นบ็นฒ็นด็นจ็ฝ‹็ฝŠ็พƒ็พ†็พท็ฟฝ็ฟพ่ธ่‡—่‡•่‰ค่‰ก่‰ฃ่—ซ่—ฑ่—ญ่—™่—ก่—จ่—š่——่—ฌ่—ฒ่—ธ่—˜่—Ÿ่—ฃ่—œ่—‘่—ฐ่—ฆ่—ฏ่—ž่—ข่ €่Ÿบ่ ƒ่Ÿถ่Ÿท่ ‰่ Œ่ ‹่ †่Ÿผ่ ˆ่Ÿฟ่ Š่ ‚่ฅข่ฅš่ฅ›่ฅ—่ฅก่ฅœ่ฅ˜่ฅ่ฅ™่ฆˆ่ฆท่ฆถ่งถ่ญ่ญˆ่ญŠ่ญ€่ญ“่ญ–่ญ”่ญ‹่ญ•"], +["f340","่ญ‘่ญ‚่ญ’่ญ—่ฑƒ่ฑท่ฑถ่ฒš่ด†่ด‡่ด‰่ถฌ่ถช่ถญ่ถซ่นญ่นธ่นณ่นช่นฏ่นป่ป‚่ฝ’่ฝ‘่ฝ่ฝ่ฝ“่พด้…€้„ฟ้†ฐ้†ญ้ž้‡้้‚้š้้น้ฌ้Œ้™้Žฉ้ฆ้Š้”้ฎ้ฃ้•้„้Ž้€้’้ง้•ฝ้—š้—›้›ก้œฉ้œซ้œฌ้œจ้œฆ"], +["f3a1","้žณ้žท้žถ้Ÿ้Ÿž้ŸŸ้กœ้ก™้ก้ก—้ขฟ้ขฝ้ขป้ขพ้ฅˆ้ฅ‡้ฅƒ้ฆฆ้ฆง้จš้จ•้จฅ้จ้จค้จ›้จข้จ ้จง้จฃ้จž้จœ้จ”้ซ‚้ฌ‹้ฌŠ้ฌŽ้ฌŒ้ฌท้ฏช้ฏซ้ฏ ้ฏž้ฏค้ฏฆ้ฏข้ฏฐ้ฏ”้ฏ—้ฏฌ้ฏœ้ฏ™้ฏฅ้ฏ•้ฏก้ฏš้ตท้ถ้ถŠ้ถ„้ถˆ้ตฑ้ถ€้ตธ้ถ†้ถ‹้ถŒ้ตฝ้ตซ้ตด้ตต้ตฐ้ตฉ้ถ…้ตณ้ตป้ถ‚้ตฏ้ตน้ตฟ้ถ‡้ตจ้บ”้บ‘้ป€้ปผ้ผญ้ฝ€้ฝ้ฝ้ฝ–้ฝ—้ฝ˜ๅŒทๅšฒ"], +["f440","ๅšตๅšณๅฃฃๅญ…ๅท†ๅท‡ๅปฎๅปฏๅฟ€ๅฟๆ‡นๆ”—ๆ”–ๆ”•ๆ”“ๆ—Ÿๆ›จๆ›ฃๆ›คๆซณๆซฐๆซชๆซจๆซนๆซฑๆซฎๆซฏ็€ผ็€ต็€ฏ็€ท็€ด็€ฑ็‚็€ธ็€ฟ็€บ็€น็€็€ป็€ณ็็ˆ“็ˆ”็Šจ็ฝ็ผ็’บ็šซ็šช็šพ็›ญ็ŸŒ็ŸŽ็Ÿ็Ÿ็Ÿฒ็คฅ็คฃ็คง็คจ็คค็คฉ"], +["f4a1","็ฆฒ็ฉฎ็ฉฌ็ฉญ็ซท็ฑ‰็ฑˆ็ฑŠ็ฑ‡็ฑ…็ณฎ็นป็นพ็บ็บ€็พบ็ฟฟ่น่‡›่‡™่ˆ‹่‰จ่‰ฉ่˜ข่—ฟ่˜่—พ่˜›่˜€่—ถ่˜„่˜‰่˜…่˜Œ่—ฝ่ ™่ ่ ‘่ —่ “่ –่ฅฃ่ฅฆ่ฆน่งท่ญ ่ญช่ญ่ญจ่ญฃ่ญฅ่ญง่ญญ่ถฎ่บ†่บˆ่บ„่ฝ™่ฝ–่ฝ—่ฝ•่ฝ˜่ฝš้‚้…ƒ้…้†ท้†ต้†ฒ้†ณ้‹้“้ป้ ้้”้พ้•้้จ้™้้ต้€้ท้‡้Ž้–้’้บ้‰้ธ้Š้ฟ"], +["f540","้ผ้Œ้ถ้‘้†้—ž้— ้—Ÿ้œฎ้œฏ้žน้žป้Ÿฝ้Ÿพ้ก ้กข้กฃ้กŸ้ฃ้ฃ‚้ฅ้ฅŽ้ฅ™้ฅŒ้ฅ‹้ฅ“้จฒ้จด้จฑ้จฌ้จช้จถ้จฉ้จฎ้จธ้จญ้ซ‡้ซŠ้ซ†้ฌ้ฌ’้ฌ‘้ฐ‹้ฐˆ้ฏท้ฐ…้ฐ’้ฏธ้ฑ€้ฐ‡้ฐŽ้ฐ†้ฐ—้ฐ”้ฐ‰้ถŸ้ถ™้ถค้ถ้ถ’้ถ˜้ถ้ถ›"], +["f5a1","้ถ ้ถ”้ถœ้ถช้ถ—้ถก้ถš้ถข้ถจ้ถž้ถฃ้ถฟ้ถฉ้ถ–้ถฆ้ถง้บ™้บ›้บš้ปฅ้ปค้ปง้ปฆ้ผฐ้ผฎ้ฝ›้ฝ ้ฝž้ฝ้ฝ™้พ‘ๅ„บๅ„นๅŠ˜ๅŠ—ๅ›ƒๅšฝๅšพๅญˆๅญ‡ๅท‹ๅทๅปฑๆ‡ฝๆ”›ๆฌ‚ๆซผๆฌƒๆซธๆฌ€็ƒ็„็Š็ˆ็‰็…็†็ˆ็ˆš็ˆ™็พ็”—็™ช็Ÿ็คญ็คฑ็คฏ็ฑ”็ฑ“็ณฒ็บŠ็บ‡็บˆ็บ‹็บ†็บ็ฝ็พป่€ฐ่‡่˜˜่˜ช่˜ฆ่˜Ÿ่˜ฃ่˜œ่˜™่˜ง่˜ฎ่˜ก่˜ ่˜ฉ่˜ž่˜ฅ"], +["f640","่ ฉ่ ่ ›่  ่ ค่ œ่ ซ่กŠ่ฅญ่ฅฉ่ฅฎ่ฅซ่งบ่ญน่ญธ่ญ…่ญบ่ญป่ด่ด”่ถฏ่บŽ่บŒ่ฝž่ฝ›่ฝ้…†้…„้……้†น้ฟ้ป้ถ้ฉ้ฝ้ผ้ฐ้น้ช้ท้ฌ้‘€้ฑ้—ฅ้—ค้—ฃ้œต้œบ้žฟ้Ÿก้กค้ฃ‰้ฃ†้ฃ€้ฅ˜้ฅ–้จน้จฝ้ฉ†้ฉ„้ฉ‚้ฉ้จบ"], +["f6a1","้จฟ้ซ้ฌ•้ฌ—้ฌ˜้ฌ–้ฌบ้ญ’้ฐซ้ฐ้ฐœ้ฐฌ้ฐฃ้ฐจ้ฐฉ้ฐค้ฐก้ถท้ถถ้ถผ้ท้ท‡้ทŠ้ท้ถพ้ท…้ทƒ้ถป้ถต้ทŽ้ถน้ถบ้ถฌ้ทˆ้ถฑ้ถญ้ทŒ้ถณ้ท้ถฒ้นบ้บœ้ปซ้ปฎ้ปญ้ผ›้ผ˜้ผš้ผฑ้ฝŽ้ฝฅ้ฝค้พ’ไบนๅ›†ๅ›…ๅ›‹ๅฅฑๅญ‹ๅญŒๅท•ๅท‘ๅปฒๆ”กๆ” ๆ”ฆๆ”ขๆฌ‹ๆฌˆๆฌ‰ๆฐ็•็–็—็’็ˆž็ˆŸ็Šฉ็ฟ็“˜็“•็“™็“—็™ญ็šญ็คต็ฆด็ฉฐ็ฉฑ็ฑ—็ฑœ็ฑ™็ฑ›็ฑš"], +["f740","็ณด็ณฑ็บ‘็ฝ็พ‡่‡ž่‰ซ่˜ด่˜ต่˜ณ่˜ฌ่˜ฒ่˜ถ่ ฌ่ จ่ ฆ่ ช่ ฅ่ฅฑ่ฆฟ่ฆพ่งป่ญพ่ฎ„่ฎ‚่ฎ†่ฎ…่ญฟ่ด•่บ•่บ”่บš่บ’่บ่บ–่บ—่ฝ ่ฝข้…‡้‘Œ้‘้‘Š้‘‹้‘้‘‡้‘…้‘ˆ้‘‰้‘†้œฟ้Ÿฃ้กช้กฉ้ฃ‹้ฅ”้ฅ›้ฉŽ้ฉ“้ฉ”้ฉŒ้ฉ้ฉˆ้ฉŠ"], +["f7a1","้ฉ‰้ฉ’้ฉ้ซ้ฌ™้ฌซ้ฌป้ญ–้ญ•้ฑ†้ฑˆ้ฐฟ้ฑ„้ฐน้ฐณ้ฑ้ฐผ้ฐท้ฐด้ฐฒ้ฐฝ้ฐถ้ท›้ท’้ทž้ทš้ท‹้ท้ทœ้ท‘้ทŸ้ทฉ้ท™้ท˜้ท–้ทต้ท•้ท้บถ้ปฐ้ผต้ผณ้ผฒ้ฝ‚้ฝซ้พ•้พขๅ„ฝๅŠ™ๅฃจๅฃงๅฅฒๅญๅท˜่ ฏๅฝๆˆๆˆƒๆˆ„ๆ”ฉๆ”ฅๆ––ๆ›ซๆฌ‘ๆฌ’ๆฌๆฏŠ็›็š็ˆข็Ž‚็ށ็Žƒ็™ฐ็Ÿ”็ฑง็ฑฆ็บ•่‰ฌ่˜บ่™€่˜น่˜ผ่˜ฑ่˜ป่˜พ่ ฐ่ ฒ่ ฎ่ ณ่ฅถ่ฅด่ฅณ่งพ"], +["f840","่ฎŒ่ฎŽ่ฎ‹่ฎˆ่ฑ…่ด™่บ˜่ฝค่ฝฃ้†ผ้‘ข้‘•้‘้‘—้‘ž้Ÿ„้Ÿ…้ €้ฉ–้ฉ™้ฌž้ฌŸ้ฌ ้ฑ’้ฑ˜้ฑ้ฑŠ้ฑ้ฑ‹้ฑ•้ฑ™้ฑŒ้ฑŽ้ทป้ทท้ทฏ้ทฃ้ทซ้ทธ้ทค้ทถ้ทก้ทฎ้ทฆ้ทฒ้ทฐ้ทข้ทฌ้ทด้ทณ้ทจ้ทญ้ป‚้ป้ปฒ้ปณ้ผ†้ผœ้ผธ้ผท้ผถ้ฝƒ้ฝ"], +["f8a1","้ฝฑ้ฝฐ้ฝฎ้ฝฏๅ›“ๅ›ๅญŽๅฑญๆ”ญๆ›ญๆ›ฎๆฌ“็Ÿ็ก็็ ็ˆฃ็“›็“ฅ็Ÿ•็คธ็ฆท็ฆถ็ฑช็บ—็พ‰่‰ญ่™ƒ่ ธ่ ท่ ต่ก‹่ฎ”่ฎ•่บž่บŸ่บ ่บ้†พ้†ฝ้‡‚้‘ซ้‘จ้‘ฉ้›ฅ้†้ƒ้‡้Ÿ‡้Ÿฅ้ฉž้ซ•้ญ™้ฑฃ้ฑง้ฑฆ้ฑข้ฑž้ฑ ้ธ‚้ทพ้ธ‡้ธƒ้ธ†้ธ…้ธ€้ธ้ธ‰้ทฟ้ทฝ้ธ„้บ ้ผž้ฝ†้ฝด้ฝต้ฝถๅ›”ๆ”ฎๆ–ธๆฌ˜ๆฌ™ๆฌ—ๆฌš็ข็ˆฆ็Šช็Ÿ˜็Ÿ™็คน็ฑฉ็ฑซ็ณถ็บš"], +["f940","็บ˜็บ›็บ™่‡ ่‡ก่™†่™‡่™ˆ่ฅน่ฅบ่ฅผ่ฅป่งฟ่ฎ˜่ฎ™่บฅ่บค่บฃ้‘ฎ้‘ญ้‘ฏ้‘ฑ้‘ณ้‰้กฒ้ฅŸ้ฑจ้ฑฎ้ฑญ้ธ‹้ธ้ธ้ธ้ธ’้ธ‘้บก้ปต้ผ‰้ฝ‡้ฝธ้ฝป้ฝบ้ฝนๅœž็ฆ็ฑฏ่ ผ่ถฒ่บฆ้‡ƒ้‘ด้‘ธ้‘ถ้‘ต้ฉ ้ฑด้ฑณ้ฑฑ้ฑต้ธ”้ธ“้ปถ้ผŠ"], +["f9a1","้พค็จ็ฅ็ณท่™ช่ พ่ ฝ่ ฟ่ฎž่ฒœ่บฉ่ป‰้‹้กณ้กด้ฃŒ้ฅก้ฆซ้ฉค้ฉฆ้ฉง้ฌค้ธ•้ธ—้ฝˆๆˆ‡ๆฌž็ˆง่™Œ่บจ้’‚้’€้’้ฉฉ้ฉจ้ฌฎ้ธ™็ˆฉ่™‹่ฎŸ้’ƒ้ฑน้บท็™ต้ฉซ้ฑบ้ธ็ฉ็ช้บค้ฝพ้ฝ‰้พ˜็ข้Šน่ฃๅขปๆ’็ฒงๅซบโ•”โ•ฆโ•—โ• โ•ฌโ•ฃโ•šโ•ฉโ•โ•’โ•คโ••โ•žโ•ชโ•กโ•˜โ•งโ•›โ•“โ•ฅโ•–โ•Ÿโ•ซโ•ขโ•™โ•จโ•œโ•‘โ•โ•ญโ•ฎโ•ฐโ•ฏโ–“"] +] diff --git a/node_modules/iconv-lite/encodings/tables/eucjp.json b/node_modules/iconv-lite/encodings/tables/eucjp.json new file mode 100644 index 0000000..4fa61ca --- /dev/null +++ b/node_modules/iconv-lite/encodings/tables/eucjp.json @@ -0,0 +1,182 @@ +[ +["0","\u0000",127], +["8ea1","๏ฝก",62], +["a1a1","ใ€€ใ€ใ€‚๏ผŒ๏ผŽใƒป๏ผš๏ผ›๏ผŸ๏ผใ‚›ใ‚œยด๏ฝ€ยจ๏ผพ๏ฟฃ๏ผฟใƒฝใƒพใ‚ใ‚žใ€ƒไปใ€…ใ€†ใ€‡ใƒผโ€•โ€๏ผ๏ผผ๏ฝžโˆฅ๏ฝœโ€ฆโ€ฅโ€˜โ€™โ€œโ€๏ผˆ๏ผ‰ใ€”ใ€•๏ผป๏ผฝ๏ฝ›๏ฝใ€ˆ",9,"๏ผ‹๏ผยฑร—รท๏ผโ‰ ๏ผœ๏ผžโ‰ฆโ‰งโˆžโˆดโ™‚โ™€ยฐโ€ฒโ€ณโ„ƒ๏ฟฅ๏ผ„๏ฟ ๏ฟก๏ผ…๏ผƒ๏ผ†๏ผŠ๏ผ ยงโ˜†โ˜…โ—‹โ—โ—Žโ—‡"], +["a2a1","โ—†โ–กโ– โ–ณโ–ฒโ–ฝโ–ผโ€ปใ€’โ†’โ†โ†‘โ†“ใ€“"], +["a2ba","โˆˆโˆ‹โІโЇโŠ‚โŠƒโˆชโˆฉ"], +["a2ca","โˆงโˆจ๏ฟขโ‡’โ‡”โˆ€โˆƒ"], +["a2dc","โˆ โŠฅโŒ’โˆ‚โˆ‡โ‰กโ‰’โ‰ชโ‰ซโˆšโˆฝโˆโˆตโˆซโˆฌ"], +["a2f2","โ„ซโ€ฐโ™ฏโ™ญโ™ชโ€ โ€กยถ"], +["a2fe","โ—ฏ"], +["a3b0","๏ผ",9], +["a3c1","๏ผก",25], +["a3e1","๏ฝ",25], +["a4a1","ใ",82], +["a5a1","ใ‚ก",85], +["a6a1","ฮ‘",16,"ฮฃ",6], +["a6c1","ฮฑ",16,"ฯƒ",6], +["a7a1","ะ",5,"ะะ–",25], +["a7d1","ะฐ",5,"ั‘ะถ",25], +["a8a1","โ”€โ”‚โ”Œโ”โ”˜โ””โ”œโ”ฌโ”คโ”ดโ”ผโ”โ”ƒโ”โ”“โ”›โ”—โ”ฃโ”ณโ”ซโ”ปโ•‹โ” โ”ฏโ”จโ”ทโ”ฟโ”โ”ฐโ”ฅโ”ธโ•‚"], +["ada1","โ‘ ",19,"โ… ",9], +["adc0","ใ‰ใŒ”ใŒขใใŒ˜ใŒงใŒƒใŒถใ‘ใ—ใŒใŒฆใŒฃใŒซใŠใŒปใŽœใŽใŽžใŽŽใŽใ„ใŽก"], +["addf","ใปใ€ใ€Ÿโ„–ใโ„กใŠค",4,"ใˆฑใˆฒใˆนใพใฝใผโ‰’โ‰กโˆซโˆฎโˆ‘โˆšโŠฅโˆ โˆŸโŠฟโˆตโˆฉโˆช"], +["b0a1","ไบœๅ”–ๅจƒ้˜ฟๅ“€ๆ„›ๆŒจๅงถ้€ข่‘ต่Œœ็ฉๆ‚ชๆกๆธฅๆ—ญ่‘ฆ่Šฆ้ฏตๆข“ๅœงๆ–กๆ‰ฑๅฎ›ๅง่™ป้ฃด็ตข็ถพ้ฎŽๆˆ–็ฒŸ่ขทๅฎ‰ๅบตๆŒ‰ๆš—ๆกˆ้—‡้žๆไปฅไผŠไฝไพๅ‰ๅ›ฒๅคทๅง”ๅจๅฐ‰ๆƒŸๆ„ๆ…ฐๆ˜“ๆค…็‚บ็•็•ฐ็งป็ถญ็ทฏ่ƒƒ่Ž่กฃ่ฌ‚้•้บๅŒปไบ•ไบฅๅŸŸ่‚ฒ้ƒ็ฃฏไธ€ๅฃฑๆบข้€ธ็จฒ่Œจ่Š‹้ฐฏๅ…ๅฐๅ’ฝๅ“กๅ› ๅงปๅผ•้ฃฒๆทซ่ƒค่”ญ"], +["b1a1","้™ข้™ฐ้š ้Ÿปๅ‹ๅณๅฎ‡็ƒ็พฝ่ฟ‚้›จๅฏ้ตœ็ชบไธ‘็ข“่‡ผๆธฆๅ˜˜ๅ”„ๆฌ่”š้ฐปๅงฅๅŽฉๆตฆ็“œ้–ๅ™‚ไบ‘้‹้›ฒ่้คŒๅกๅ–ถๅฌฐๅฝฑๆ˜ ๆ›ณๆ „ๆฐธๆณณๆดฉ็‘›็›ˆ็ฉŽ้ ด่‹ฑ่ก›่ฉ ้‹ญๆถฒ็–ซ็›Š้ง…ๆ‚ฆ่ฌ่ถŠ้–ฒๆฆŽๅŽญๅ††ๅœ’ๅ ฐๅฅ„ๅฎดๅปถๆ€จๆŽฉๆดๆฒฟๆผ”็‚Ž็„”็…™็‡•็Œฟ็ธ่‰ถ่‹‘่–—้ ้‰›้ด›ๅกฉๆ–ผๆฑš็”ฅๅ‡นๅคฎๅฅฅๅพ€ๅฟœ"], +["b2a1","ๆŠผๆ—บๆจชๆฌงๆฎด็Ž‹็ฟ่ฅ–้ดฌ้ดŽ้ป„ๅฒกๆฒ–่ปๅ„„ๅฑ‹ๆ†ถ่‡†ๆกถ็‰กไน™ไฟบๅธๆฉๆธฉ็ฉ้Ÿณไธ‹ๅŒ–ไปฎไฝ•ไผฝไพกไฝณๅŠ ๅฏๅ˜‰ๅคๅซๅฎถๅฏก็ง‘ๆš‡ๆžœๆžถๆญŒๆฒณ็ซ็‚็ฆ็ฆพ็จผ็ฎ‡่Šฑ่‹›่Œ„่ท่ฏ่“่ฆ่ชฒๅ˜ฉ่ฒจ่ฟฆ้Ž้œž่šŠไฟ„ๅณจๆˆ‘็‰™็”ป่‡ฅ่Šฝ่›พ่ณ€้›…้ค“้ง•ไป‹ไผš่งฃๅ›žๅกŠๅฃŠๅปปๅฟซๆ€ชๆ‚”ๆขๆ‡ๆˆ’ๆ‹ๆ”น"], +["b3a1","้ญๆ™ฆๆขฐๆตท็ฐ็•Œ็š†็ตต่Šฅ่Ÿน้–‹้šŽ่ฒๅ‡ฑๅŠพๅค–ๅ’ณๅฎณๅด–ๆ…จๆฆ‚ๆถฏ็ข่“‹่ก—่ฉฒ้Žง้ชธๆตฌ้ฆจ่›™ๅžฃๆŸฟ่›Ž้ˆŽๅŠƒๅš‡ๅ„ๅป“ๆ‹กๆ’นๆ ผๆ ธๆฎป็ฒ็ขบ็ฉซ่ฆš่ง’่ตซ่ผƒ้ƒญ้–ฃ้š”้ฉๅญฆๅฒณๆฅฝ้ก้กŽๆŽ›็ฌ ๆจซๆฉฟๆขถ้ฐๆฝŸๅ‰ฒๅ–ๆฐๆ‹ฌๆดปๆธ‡ๆป‘่‘›่ค่ฝ„ไธ”้ฐนๅถๆค›ๆจบ้ž„ๆ ชๅ…œ็ซƒ่’ฒ้‡œ้ŽŒๅ™›้ดจๆ ข่Œ…่ฑ"], +["b4a1","็ฒฅๅˆˆ่‹…็“ฆไนพไพƒๅ† ๅฏ’ๅˆŠๅ‹˜ๅ‹งๅทปๅ–šๅ ชๅงฆๅฎŒๅฎ˜ๅฏ›ๅนฒๅนนๆ‚ฃๆ„Ÿๆ…ฃๆ†พๆ›ๆ•ขๆŸ‘ๆก“ๆฃบๆฌพๆญ“ๆฑ—ๆผขๆพ—ๆฝ…็’ฐ็”˜็›ฃ็œ‹็ซฟ็ฎก็ฐก็ทฉ็ผถ็ฟฐ่‚่‰ฆ่Žž่ฆณ่ซŒ่ฒซ้‚„้‘‘้–“้–‘้–ข้™ฅ้Ÿ“้คจ่ˆ˜ไธธๅซๅฒธๅทŒ็Žฉ็™Œ็œผๅฒฉ็ฟซ่ด‹้›้ ‘้ก”้ก˜ไผไผŽๅฑๅ–œๅ™จๅŸบๅฅ‡ๅฌ‰ๅฏ„ๅฒๅธŒๅนพๅฟŒๆฎๆœบๆ——ๆ—ขๆœŸๆฃ‹ๆฃ„"], +["b5a1","ๆฉŸๅธฐๆฏ…ๆฐ—ๆฑฝ็•ฟ็ฅˆๅญฃ็จ€็ด€ๅพฝ่ฆ่จ˜่ฒด่ตท่ปŒ่ผ้ฃข้จŽ้ฌผไบ€ๅฝๅ„€ๅฆ“ๅฎœๆˆฏๆŠ€ๆ“ฌๆฌบ็Š ็–‘็ฅ‡็พฉ่Ÿป่ชผ่ญฐๆŽฌ่Š้ž ๅ‰ๅƒๅ–ซๆก”ๆฉ˜่ฉฐ็ งๆต้ปๅดๅฎข่„š่™้€†ไธ˜ไน…ไป‡ไผ‘ๅŠๅธๅฎฎๅผ“ๆ€ฅๆ•‘ๆœฝๆฑ‚ๆฑฒๆณฃ็ธ็ƒ็ฉถ็ชฎ็ฌˆ็ดš็ณพ็ตฆๆ—ง็‰›ๅŽปๅฑ…ๅทจๆ‹’ๆ‹ ๆŒ™ๆธ ่™š่จฑ่ท้‹ธๆผ็ฆฆ้ญšไบจไบซไบฌ"], +["b6a1","ไพ›ไพ ๅƒ‘ๅ…‡็ซถๅ…ฑๅ‡ถๅ”ๅŒกๅฟๅซๅ–ฌๅขƒๅณกๅผทๅฝŠๆ€ฏๆๆญๆŒŸๆ•™ๆฉ‹ๆณ็‹‚็‹ญ็Ÿฏ่ƒธ่„…่ˆˆ่•Ž้ƒท้ก้Ÿฟ้ฅ—้ฉšไปฐๅ‡ๅฐญๆšๆฅญๅฑ€ๆ›ฒๆฅต็މๆก็ฒๅƒ…ๅ‹คๅ‡ๅทพ้Œฆๆ–คๆฌฃๆฌฝ็ด็ฆ็ฆฝ็ญ‹็ทŠ่Šน่Œ่กฟ่ฅŸ่ฌน่ฟ‘้‡‘ๅŸ้Š€ไนๅ€ถๅฅๅŒบ็‹—็Ž–็Ÿฉ่‹ฆ่บฏ้ง†้งˆ้ง’ๅ…ทๆ„š่™žๅ–ฐ็ฉบๅถๅฏ“้‡้š…ไธฒๆซ›้‡งๅฑ‘ๅฑˆ"], +["b7a1","ๆŽ˜็ชŸๆฒ“้ด่ฝก็ชช็†Š้šˆ็ฒ‚ๆ —็นฐๆก‘้ฌๅ‹ฒๅ›่–ซ่จ“็พค่ป้ƒกๅฆ่ขˆ็ฅไฟ‚ๅ‚พๅˆ‘ๅ…„ๅ•“ๅœญ็ชๅž‹ๅฅ‘ๅฝขๅพ„ๆตๆ…ถๆ…งๆ†ฉๆŽฒๆบๆ•ฌๆ™ฏๆก‚ๆธ“็•ฆ็จฝ็ณป็ตŒ็ถ™็น‹็ฝซ่ŒŽ่Š่›่จˆ่ฉฃ่ญฆ่ปฝ้ š้ถ่Šธ่ฟŽ้ฏจๅЇๆˆŸๆ’ƒๆฟ€้š™ๆกๅ‚‘ๆฌ ๆฑบๆฝ”็ฉด็ต่ก€่จฃๆœˆไปถๅ€นๅ€ฆๅฅๅ…ผๅˆธๅ‰ฃๅ–งๅœๅ …ๅซŒๅปบๆ†ฒๆ‡ธๆ‹ณๆฒ"], +["b8a1","ๆคœๆจฉ็‰ฝ็Šฌ็Œฎ็ ”็กฏ็ตน็œŒ่‚ฉ่ฆ‹่ฌ™่ณข่ป’้ฃ้ต้™บ้ก•้จ“้นธๅ…ƒๅŽŸๅŽณๅนปๅผฆๆธ›ๆบ็Ž„็พ็ตƒ่ˆท่จ€่ซบ้™ไนŽๅ€‹ๅคๅ‘ผๅ›บๅง‘ๅญคๅทฑๅบซๅผงๆˆธๆ•…ๆžฏๆน–็‹็ณŠ่ขด่‚ก่ƒก่ฐ่™Ž่ช‡่ทจ้ˆท้›‡้กง้ผ“ไบ”ไบ’ไผๅˆๅ‘‰ๅพๅจฏๅพŒๅพกๆ‚ŸๆขงๆชŽ็‘š็ข่ชž่ชค่ญท้†ไนž้ฏ‰ไบคไฝผไพฏๅ€™ๅ€–ๅ…‰ๅ…ฌๅŠŸๅŠนๅ‹พๅŽšๅฃๅ‘"], +["b9a1","ๅŽๅ–‰ๅ‘ๅžขๅฅฝๅญ”ๅญๅฎๅทฅๅทงๅททๅนธๅบƒๅบšๅบทๅผ˜ๆ’ๆ…ŒๆŠ—ๆ‹˜ๆŽงๆ”ปๆ˜‚ๆ™ƒๆ›ดๆญๆ กๆข—ๆง‹ๆฑŸๆดชๆตฉๆธฏๆบ็”ฒ็š‡็กฌ็จฟ็ณ ็ด…็ด˜็ตž็ถฑ่€•่€ƒ่‚ฏ่‚ฑ่…”่†่ˆช่’่กŒ่กก่ฌ›่ฒข่ณผ้ƒŠ้…ต้‰ฑ็ ฟ้‹ผ้–ค้™้ …้ฆ™้ซ˜้ดปๅ‰›ๅŠซๅทๅˆๅฃ•ๆ‹ทๆฟ ่ฑช่ฝŸ้บนๅ…‹ๅˆปๅ‘Šๅ›ฝ็ฉ€้…ท้ต ้ป’็„ๆผ‰่…ฐ็”‘ๅฟฝๆƒš้ชจ็‹›่พผ"], +["baa1","ๆญค้ ƒไปŠๅ›ฐๅคๅขพๅฉšๆจๆ‡‡ๆ˜ๆ˜†ๆ นๆขฑๆทท็—•็ดบ่‰ฎ้ญ‚ไบ›ไฝๅ‰ๅ”†ๅตฏๅทฆๅทฎๆŸปๆฒ™็‘ณ็ ‚่ฉ้Ž–่ฃŸๅๅบงๆŒซๅ‚ตๅ‚ฌๅ†ๆœ€ๅ“‰ๅกžๅฆปๅฎฐๅฝฉๆ‰ๆŽกๆ ฝๆญณๆธˆ็ฝ้‡‡็Š€็ •็ ฆ็ฅญๆ–Ž็ดฐ่œ่ฃ่ผ‰้š›ๅ‰คๅœจๆ็ฝช่ฒกๅ†ดๅ‚้˜ชๅ บๆฆŠ่‚ดๅ’ฒๅดŽๅŸผ็ข•้ทบไฝœๅ‰Šๅ’‹ๆพๆ˜จๆœ”ๆŸต็ช„็ญ–็ดข้Œฏๆกœ้ฎญ็ฌนๅŒ™ๅ†Šๅˆท"], +["bba1","ๅฏŸๆ‹ถๆ’ฎๆ“ฆๆœญๆฎบ่–ฉ้›‘็š้ฏ–ๆŒ้Œ†้ฎซ็šฟๆ™’ไธ‰ๅ‚˜ๅ‚ๅฑฑๆƒจๆ’’ๆ•ฃๆกŸ็‡ฆ็Š็”ฃ็ฎ—็บ‚่š•่ฎƒ่ณ›้…ธ้คๆ–ฌๆšซๆฎ‹ไป•ไป”ไผบไฝฟๅˆบๅธๅฒๅ—ฃๅ››ๅฃซๅง‹ๅง‰ๅงฟๅญๅฑๅธ‚ๅธซๅฟ—ๆ€ๆŒ‡ๆ”ฏๅญœๆ–ฏๆ–ฝๆ—จๆžๆญขๆญปๆฐ็…็ฅ‰็ง็ณธ็ด™็ดซ่‚ข่„‚่‡ณ่ฆ–่ฉž่ฉฉ่ฉฆ่ชŒ่ซฎ่ณ‡่ณœ้›Œ้ฃผๆญฏไบ‹ไผผไพๅ…ๅญ—ๅฏบๆ…ˆๆŒๆ™‚"], +["bca1","ๆฌกๆป‹ๆฒป็ˆพ็’ฝ็—”็ฃ็คบ่€Œ่€ณ่‡ช่’”่พžๆฑ้นฟๅผ่ญ˜้ดซ็ซบ่ปธๅฎ้›ซไธƒๅฑๅŸทๅคฑๅซ‰ๅฎคๆ‚‰ๆนฟๆผ†็–พ่ณชๅฎŸ่”€็ฏ ๅฒๆŸด่Šๅฑก่•Š็ธž่ˆŽๅ†™ๅฐ„ๆจ่ตฆๆ–œ็…ฎ็คพ็ด—่€…่ฌ่ปŠ้ฎ่›‡้‚ชๅ€Ÿๅ‹บๅฐบๆ“็ผ็ˆต้…Œ้‡ˆ้Œซ่‹ฅๅฏ‚ๅผฑๆƒนไธปๅ–ๅฎˆๆ‰‹ๆœฑๆฎŠ็‹ฉ็ ็จฎ่…ซ่ถฃ้…’้ฆ–ๅ„’ๅ—ๅ‘ชๅฏฟๆŽˆๆจน็ถฌ้œ€ๅ›šๅŽๅ‘จ"], +["bda1","ๅฎ—ๅฐฑๅทžไฟฎๆ„ๆ‹พๆดฒ็ง€็ง‹็ต‚็น็ฟ’่‡ญ่ˆŸ่’่ก†่ฅฒ่ฎ่นด่ผฏ้€ฑ้…‹้…ฌ้›†้†œไป€ไฝๅ……ๅๅพ“ๆˆŽๆŸ”ๆฑๆธ‹็ฃ็ธฆ้‡้Šƒๅ”ๅค™ๅฎฟๆท‘็ฅ็ธฎ็ฒ›ๅกพ็†Ÿๅ‡บ่ก“่ฟฐไฟŠๅณปๆ˜ฅ็žฌ็ซฃ่ˆœ้งฟๅ‡†ๅพชๆ—ฌๆฅฏๆฎ‰ๆทณๆบ–ๆฝค็›พ็ด”ๅทก้ต้†‡้ †ๅ‡ฆๅˆๆ‰€ๆš‘ๆ›™ๆธšๅบถ็ท’็ฝฒๆ›ธ่–ฏ่—ท่ซธๅŠฉๅ™ๅฅณๅบๅพๆ•้‹ค้™คๅ‚ทๅ„Ÿ"], +["bea1","ๅ‹ๅŒ ๅ‡ๅฌๅ“จๅ•†ๅ”ฑๅ˜—ๅฅจๅฆพๅจผๅฎตๅฐ†ๅฐๅฐ‘ๅฐšๅบ„ๅบŠๅป ๅฝฐๆ‰ฟๆŠ„ๆ‹›ๆŽŒๆทๆ˜‡ๆ˜Œๆ˜ญๆ™ถๆพๆขขๆจŸๆจตๆฒผๆถˆๆธ‰ๆน˜็„ผ็„ฆ็…ง็—‡็œ็ก็ค็ฅฅ็งฐ็ซ ็ฌ‘็ฒง็ดน่‚–่–่’‹่•‰่ก่ฃณ่จŸ่จผ่ฉ”่ฉณ่ฑก่ณž้†ค้‰ฆ้พ้˜้šœ้ž˜ไธŠไธˆไธžไน—ๅ†—ๅ‰ฐๅŸŽๅ ดๅฃŒๅฌขๅธธๆƒ…ๆ“พๆกๆ–ๆต„็Šถ็•ณ็ฉฃ่’ธ่ญฒ้†ธ้Œ ๅ˜ฑๅŸด้ฃพ"], +["bfa1","ๆ‹ญๆคๆฎ–็‡ญ็น”่ท่‰ฒ่งฆ้ฃŸ่•่พฑๅฐปไผธไฟกไพตๅ”‡ๅจ ๅฏๅฏฉๅฟƒๆ…ŽๆŒฏๆ–ฐๆ™‹ๆฃฎๆฆ›ๆตธๆทฑ็”ณ็–น็œŸ็ฅž็งฆ็ดณ่‡ฃ่Šฏ่–ช่ฆช่จบ่บซ่พ›้€ฒ้‡้œ‡ไบบไปๅˆƒๅกตๅฃฌๅฐ‹็”šๅฐฝ่…Ž่จŠ่ฟ…้™ฃ้ญ็ฌฅ่ซ้ ˆ้…ขๅ›ณๅŽจ้€—ๅนๅž‚ๅธฅๆŽจๆฐด็‚Š็ก็ฒ‹็ฟ ่กฐ้‚้…”้Œ้Œ˜้š็‘ž้ซ„ๅด‡ๅตฉๆ•ฐๆžข่ถจ้››ๆฎๆ‰ๆค™่…้ —้›€่ฃพ"], +["c0a1","ๆพ„ๆ‘บๅฏธไธ–็€ฌ็•ๆ˜ฏๅ‡„ๅˆถๅ‹ขๅง“ๅพๆ€งๆˆๆ”ฟๆ•ดๆ˜Ÿๆ™ดๆฃฒๆ –ๆญฃๆธ…็‰ฒ็”Ÿ็››็ฒพ่–ๅฃฐ่ฃฝ่ฅฟ่ช ่ช“่ซ‹้€้†’้’้™ๆ–‰็จŽ่„†้šปๅธญๆƒœๆˆšๆ–ฅๆ˜”ๆž็Ÿณ็ฉ็ฑ็ธพ่„Š่ฒฌ่ตค่ทก่นŸ็ขฉๅˆ‡ๆ‹™ๆŽฅๆ‘‚ๆŠ˜่จญ็ชƒ็ฏ€่ชฌ้›ช็ตถ่ˆŒ่‰ไป™ๅ…ˆๅƒๅ ๅฎฃๅฐ‚ๅฐ–ๅทๆˆฆๆ‰‡ๆ’ฐๆ “ๆ ดๆณ‰ๆต…ๆด—ๆŸ“ๆฝœ็…Ž็…ฝๆ—‹็ฉฟ็ฎญ็ทš"], +["c1a1","็นŠ็พจ่…บ่ˆ›่ˆน่–ฆ่ฉฎ่ณŽ่ทต้ธ้ท้Šญ้Š‘้–ƒ้ฎฎๅ‰ๅ–„ๆผธ็„ถๅ…จ็ฆ…็น•่†ณ็ณŽๅ™Œๅก‘ๅฒจๆŽชๆ›พๆ›ฝๆฅš็‹™็–็–Ž็คŽ็ฅ–็งŸ็ฒ—็ด ็ต„่˜‡่จด้˜ป้ก้ผ ๅƒงๅ‰ตๅŒๅขๅ€‰ๅ–ชๅฃฎๅฅ็ˆฝๅฎ‹ๅฑคๅŒๆƒฃๆƒณๆœๆŽƒๆŒฟๆŽปๆ“ๆ—ฉๆ›นๅทฃๆงๆงฝๆผ•็‡ฅไบ‰็—ฉ็›ธ็ช“็ณŸ็ท็ถœ่ก่‰่˜่‘ฌ่’ผ่—ป่ฃ…่ตฐ้€้ญ้Ž—้œœ้จ’ๅƒๅข—ๆ†Ž"], +["c2a1","่‡“่”ต่ดˆ้€ ไฟƒๅดๅ‰‡ๅณๆฏๆ‰ๆŸๆธฌ่ถณ้€Ÿไฟ—ๅฑž่ณŠๆ—็ถšๅ’่ข–ๅ…ถๆƒๅญ˜ๅญซๅฐŠๆๆ‘้œไป–ๅคšๅคชๆฑฐ่ฉ‘ๅ”พๅ •ๅฆฅๆƒฐๆ‰“ๆŸ่ˆตๆฅ•้™€้ง„้จจไฝ“ๅ †ๅฏพ่€ๅฒฑๅธฏๅพ…ๆ€ ๆ…‹ๆˆดๆ›ฟๆณฐๆปž่ƒŽ่…ฟ่‹”่ข‹่ฒธ้€€้€ฎ้šŠ้ป›้ฏ›ไปฃๅฐๅคง็ฌฌ้†้กŒ้ทนๆป็€งๅ“ๅ•„ๅฎ…ๆ‰˜ๆŠžๆ‹“ๆฒขๆฟฏ็ข่จ—้ธๆฟ่ซพ่Œธๅ‡ง่›ธๅช"], +["c3a1","ๅฉไฝ†้”่พฐๅฅช่„ฑๅทฝ็ซช่พฟๆฃš่ฐท็‹ธ้ฑˆๆจฝ่ชฐไธนๅ˜ๅ˜†ๅฆๆ‹…ๆŽขๆ—ฆๆญŽๆทกๆน›็‚ญ็Ÿญ็ซฏ็ฎช็ถป่€ฝ่ƒ†่›‹่ช•้›ๅ›ฃๅฃ‡ๅผพๆ–ญๆš–ๆช€ๆฎต็”ท่ซ‡ๅ€ค็Ÿฅๅœฐๅผ›ๆฅๆ™บๆฑ ็—ด็จš็ฝฎ่‡ด่œ˜้…้ฆณ็ฏ‰็•œ็ซน็ญ‘่“„้€็งฉ็ช’่Œถๅซก็€ไธญไปฒๅฎ™ๅฟ ๆŠฝๆ˜ผๆŸฑๆณจ่™ซ่กท่จป้…Ž้‹ณ้งๆจ—็€ฆ็Œช่‹ง่‘—่ฒฏไธๅ…†ๅ‡‹ๅ–‹ๅฏต"], +["c4a1","ๅธ–ๅธณๅบๅผ”ๅผตๅฝซๅพดๆ‡ฒๆŒ‘ๆšขๆœๆฝฎ็‰’็”บ็œบ่ด่„น่…ธ่ถ่ชฟ่ซœ่ถ…่ทณ้Šš้•ท้ ‚้ณฅๅ‹…ๆ—็›ดๆœ•ๆฒˆ็่ณƒ้Žฎ้™ณๆดฅๅขœๆคŽๆงŒ่ฟฝ้Žš็—›้€šๅกšๆ ‚ๆŽดๆงปไฝƒๆผฌๆŸ˜่พป่”ฆ็ถด้”ๆคฟๆฝฐๅชๅฃทๅฌฌ็ดฌ็ˆชๅŠ้‡ฃ้ถดไบญไฝŽๅœๅตๅ‰ƒ่ฒžๅ‘ˆๅ คๅฎšๅธๅบ•ๅบญๅปทๅผŸๆ‚ŒๆŠตๆŒบๆๆขฏๆฑ€็ข‡็ฆŽ็จ‹็ท ่‰‡่จ‚่ซฆ่น„้€“"], +["c5a1","้‚ธ้„ญ้‡˜้ผŽๆณฅๆ‘˜ๆ“ขๆ•ตๆปด็š„็ฌ›้ฉ้‘ๆบบๅ“ฒๅพนๆ’ค่ฝ่ฟญ้‰„ๅ…ธๅกซๅคฉๅฑ•ๅบ—ๆทป็บ็”œ่ฒผ่ปข้ก›็‚นไผๆฎฟๆพฑ็”ฐ้›ปๅ…Žๅๅ ตๅก—ๅฆฌๅฑ ๅพ’ๆ–—ๆœๆธก็™ป่Ÿ่ณญ้€”้ƒฝ้็ ฅ็ บๅŠชๅบฆๅœŸๅฅดๆ€’ๅ€’ๅ…šๅ†ฌๅ‡ๅˆ€ๅ”ๅก”ๅก˜ๅฅ—ๅฎ•ๅณถๅถ‹ๆ‚ผๆŠ•ๆญๆฑๆกƒๆขผๆฃŸ็›—ๆท˜ๆนฏๆถ›็ฏ็‡ˆๅฝ“็—˜็ฅท็ญ‰็ญ”็ญ’็ณ–็ตฑๅˆฐ"], +["c6a1","่‘ฃ่•ฉ่—ค่จŽ่ฌ„่ฑ†่ธ้€ƒ้€้™้™ถ้ ญ้จฐ้—˜ๅƒๅ‹•ๅŒๅ ‚ๅฐŽๆ†งๆ’žๆดž็žณ็ซฅ่ƒด่„้“้Š…ๅณ ้ด‡ๅŒฟๅพ—ๅพณๆถœ็‰น็ฃ็ฆฟ็ฏคๆฏ’็‹ฌ่ชญๆ ƒๆฉกๅ‡ธ็ชๆคดๅฑŠ้ณถ่‹ซๅฏ…้…‰็€žๅ™ธๅฑฏๆƒ‡ๆ•ฆๆฒŒ่ฑš้้ “ๅ‘‘ๆ›‡้ˆๅฅˆ้‚ฃๅ†…ไนๅ‡ช่–™่ฌŽ็˜ๆบ้‹ๆฅข้ฆด็ธ„็•ทๅ—ๆฅ ่ปŸ้›ฃๆฑไบŒๅฐผๅผ่ฟฉๅŒ‚่ณ‘่‚‰่™นๅปฟๆ—ฅไนณๅ…ฅ"], +["c7a1","ๅฆ‚ๅฐฟ้ŸฎไปปๅฆŠๅฟ่ชๆฟก็ฆฐ็ฅขๅฏง่‘ฑ็Œซ็†ฑๅนดๅฟตๆปๆ’š็‡ƒ็ฒ˜ไนƒๅปผไน‹ๅŸœๅšขๆ‚ฉๆฟƒ็ด่ƒฝ่„ณ่†ฟ่พฒ่ฆ—่šคๅทดๆŠŠๆ’ญ่ฆ‡ๆทๆณขๆดพ็ถ็ ดๅฉ†็ฝต่Šญ้ฆฌไฟณๅปƒๆ‹ๆŽ’ๆ•—ๆฏ็›ƒ็‰Œ่ƒŒ่‚บ่ผฉ้…ๅ€ๅŸนๅช’ๆข…ๆฅณ็…ค็‹ฝ่ฒทๅฃฒ่ณ ้™ช้€™่ฟ็งค็Ÿง่ฉไผฏๅ‰ฅๅšๆ‹ๆŸๆณŠ็™ฝ็ฎ”็ฒ•่ˆถ่–„่ฟซๆ›ๆผ ็ˆ†็ธ›่Žซ้ง้บฆ"], +["c8a1","ๅ‡ฝ็ฎฑ็กฒ็ฎธ่‚‡็ญˆๆซจๅนก่‚Œ็•‘็• ๅ…ซ้‰ขๆบŒ็™บ้†—้ซชไผ็ฝฐๆŠœ็ญ้–ฅ้ณฉๅ™บๅก™่›ค้šผไผดๅˆคๅŠๅๅ›ๅธ†ๆฌๆ–‘ๆฟๆฐพๆฑŽ็‰ˆ็Šฏ็ญ็•”็น่ˆฌ่—ฉ่ฒฉ็ฏ„้‡†็…ฉ้ ’้ฃฏๆŒฝๆ™ฉ็•ช็›ค็ฃ่•ƒ่›ฎๅŒชๅ‘ๅฆๅฆƒๅบ‡ๅฝผๆ‚ฒๆ‰‰ๆ‰นๆŠซๆ–ๆฏ”ๆณŒ็–ฒ็šฎ็ข‘็ง˜็ท‹็ฝท่‚ฅ่ขซ่ชน่ฒป้ฟ้ž้ฃ›ๆจ‹็ฐธๅ‚™ๅฐพๅพฎๆž‡ๆฏ˜็ต็œ‰็พŽ"], +["c9a1","้ผปๆŸŠ็จ—ๅŒน็–‹้ซญๅฝฆ่†่ฑ่‚˜ๅผผๅฟ…็•ข็ญ†้€ผๆกงๅงซๅช›็ด็™พ่ฌฌไฟตๅฝชๆจ™ๆฐทๆผ‚็“ข็ฅจ่กจ่ฉ•่ฑนๅปŸๆ็—…็ง’่‹—้Œจ้‹ฒ่’œ่›ญ้ฐญๅ“ๅฝฌๆ–Œๆตœ็€•่ฒง่ณ“้ ปๆ•็“ถไธไป˜ๅŸ ๅคซๅฉฆๅฏŒๅ†จๅธƒๅบœๆ€–ๆ‰ถๆ•ทๆ–งๆ™ฎๆตฎ็ˆถ็ฌฆ่…่†š่Š™่ญœ่ฒ ่ณฆ่ตด้˜œ้™„ไพฎๆ’ซๆญฆ่ˆž่‘ก่•ช้ƒจๅฐๆฅ“้ขจ่‘บ่•—ไผๅ‰ฏๅพฉๅน…ๆœ"], +["caa1","็ฆ่…น่ค‡่ฆ†ๆทตๅผ—ๆ‰•ๆฒธไป็‰ฉ้ฎ’ๅˆ†ๅปๅ™ดๅขณๆ†คๆ‰ฎ็„šๅฅฎ็ฒ‰็ณž็ด›้›ฐๆ–‡่žไธ™ไฝตๅ…ตๅก€ๅนฃๅนณๅผŠๆŸ„ไธฆ่”ฝ้–‰้™›็ฑณ้ ๅƒปๅฃ็™–็ขงๅˆฅ็žฅ่”‘็ฎ†ๅๅค‰็‰‡็ฏ‡็ทจ่พบ่ฟ”้ไพฟๅ‹‰ๅจฉๅผ้žญไฟ่ˆ—้‹ชๅœƒๆ•ๆญฉ็”ซ่ฃœ่ผ”็ฉ‚ๅ‹Ÿๅข“ๆ…•ๆˆŠๆšฎๆฏ็ฐฟ่ฉๅ€ฃไฟธๅŒ…ๅ‘†ๅ ฑๅฅ‰ๅฎๅณฐๅณฏๅดฉๅบ–ๆŠฑๆงๆ”พๆ–นๆœ‹"], +["cba1","ๆณ•ๆณก็ƒน็ ฒ็ธซ่ƒž่Šณ่Œ่“ฌ่œ‚่ค’่จช่ฑŠ้‚ฆ้‹’้ฃฝ้ณณ้ตฌไนไบกๅ‚ๅ‰–ๅŠๅฆจๅธฝๅฟ˜ๅฟ™ๆˆฟๆšดๆœ›ๆŸๆฃ’ๅ†’็ดก่‚ช่†จ่ฌ€่ฒŒ่ฒฟ้‰พ้˜ฒๅ ้ ฌๅŒ—ๅƒ•ๅœๅขจๆ’ฒๆœด็‰ง็ฆ็ฉ†้‡ฆๅ‹ƒๆฒกๆฎ†ๅ €ๅนŒๅฅ”ๆœฌ็ฟปๅ‡ก็›†ๆ‘ฉ็ฃจ้ญ”้บปๅŸ‹ๅฆนๆ˜งๆžšๆฏŽๅ“ฉๆง™ๅน•่†œๆž•้ฎชๆŸพ้ฑ’ๆกไบฆไฟฃๅˆๆŠนๆœซๆฒซ่ฟ„ไพญ็นญ้บฟไธ‡ๆ…ขๆบ€"], +["cca1","ๆผซ่”“ๅ‘ณๆœช้ญ…ๅทณ็ฎ•ๅฒฌๅฏ†่œœๆนŠ่“‘็จ”่„ˆๅฆ™็ฒๆฐ‘็œ ๅ‹™ๅคข็„ก็‰Ÿ็Ÿ›้œง้ตกๆค‹ๅฉฟๅจ˜ๅ†ฅๅๅ‘ฝๆ˜Ž็›Ÿ่ฟท้Š˜้ณดๅงช็‰ๆป…ๅ…ๆฃ‰็ถฟ็ทฌ้ข้บบๆ‘ธๆจก่Œ‚ๅฆ„ๅญŸๆฏ›็Œ›็›ฒ็ถฒ่€—่’™ๅ„ฒๆœจ้ป™็›ฎๆขๅ‹ฟ้ค…ๅฐคๆˆป็ฑพ่ฒฐๅ•ๆ‚ถ็ด‹้–€ๅŒไนŸๅ†ถๅคœ็ˆบ่€ถ้‡Žๅผฅ็ŸขๅŽ„ๅฝน็ด„่–ฌ่จณ่บ้–ๆŸณ่–ฎ้‘“ๆ„‰ๆ„ˆๆฒน็™’"], +["cda1","่ซญ่ผธๅ”ฏไฝ‘ๅ„ชๅ‹‡ๅ‹ๅฎฅๅนฝๆ‚ ๆ†‚ๆ–ๆœ‰ๆŸšๆนงๆถŒ็Œถ็Œท็”ฑ็ฅ่ฃ•่ช˜้Š้‚‘้ƒต้›„่žๅค•ไบˆไฝ™ไธŽ่ช‰่ผฟ้ ๅ‚ญๅนผๅฆ–ๅฎนๅบธๆšๆบๆ“ๆ›œๆฅŠๆง˜ๆด‹ๆบถ็†”็”จ็ชฏ็พŠ่€€่‘‰่“‰่ฆ่ฌก่ธŠ้ฅ้™ฝ้คŠๆ…พๆŠ‘ๆฌฒๆฒƒๆตด็ฟŒ็ฟผๆท€็พ…่žบ่ฃธๆฅ่Žฑ้ ผ้›ทๆด›็ตก่ฝ้…ชไนฑๅตๅตๆฌ„ๆฟซ่—่˜ญ่ฆงๅˆฉๅๅฑฅๆŽๆขจ็†็’ƒ"], +["cea1","็—ข่ฃ่ฃก้‡Œ้›ข้™ธๅพ‹็އ็ซ‹่‘ŽๆŽ ็•ฅๅЉๆตๆบœ็‰็•™็กซ็ฒ’้š†็ซœ้พไพถๆ…ฎๆ—…่™œไบ†ไบฎๅƒšไธกๅ‡Œๅฏฎๆ–™ๆขๆถผ็ŒŸ็™‚็žญ็จœ็ณง่‰ฏ่ซ’้ผ้‡้™ต้ ˜ๅŠ›็ท‘ๅ€ซๅŽ˜ๆž—ๆท‹็‡็ณ่‡จ่ผช้šฃ้ฑ—้บŸ็‘ ๅกๆถ™็ดฏ้กžไปคไผถไพ‹ๅ†ทๅŠฑๅถบๆ€œ็Žฒ็คผ่‹“้ˆด้šท้›ถ้œŠ้บ—้ฝขๆšฆๆญดๅˆ—ๅŠฃ็ƒˆ่ฃ‚ๅป‰ๆ‹ๆ†ๆผฃ็…‰็ฐพ็ทด่ฏ"], +["cfa1","่“ฎ้€ฃ้Œฌๅ‘‚้ญฏๆซ“็‚‰่ณ‚่ทฏ้œฒๅŠดๅฉๅปŠๅผ„ๆœ—ๆฅผๆฆ”ๆตชๆผ็‰ข็‹ผ็ฏญ่€่พ่‹้ƒŽๅ…ญ้บ“็ฆ„่‚‹้Œฒ่ซ–ๅ€ญๅ’Œ่ฉฑๆญช่ณ„่„‡ๆƒ‘ๆž ้ทฒไบ™ไบ˜้ฐ่ฉซ่—่•จๆค€ๆนพ็ข—่…•"], +["d0a1","ๅผŒไธไธ•ไธชไธฑไธถไธผไธฟไน‚ไน–ไน˜ไบ‚ไบ…่ฑซไบŠ่ˆ’ๅผไบŽไบžไบŸไบ ไบขไบฐไบณไบถไปŽไปไป„ไป†ไป‚ไป—ไปžไปญไปŸไปทไผ‰ไฝšไผฐไฝ›ไฝไฝ—ไฝ‡ไฝถไพˆไพไพ˜ไฝปไฝฉไฝฐไพ‘ไฝฏไพ†ไพ–ๅ„˜ไฟ”ไฟŸไฟŽไฟ˜ไฟ›ไฟ‘ไฟšไฟไฟคไฟฅๅ€šๅ€จๅ€”ๅ€ชๅ€ฅๅ€…ไผœไฟถๅ€กๅ€ฉๅ€ฌไฟพไฟฏๅ€‘ๅ€†ๅƒๅ‡ๆœƒๅ•ๅๅˆๅšๅ–ๅฌๅธๅ‚€ๅ‚šๅ‚…ๅ‚ดๅ‚ฒ"], +["d1a1","ๅƒ‰ๅƒŠๅ‚ณๅƒ‚ๅƒ–ๅƒžๅƒฅๅƒญๅƒฃๅƒฎๅƒนๅƒตๅ„‰ๅ„ๅ„‚ๅ„–ๅ„•ๅ„”ๅ„šๅ„กๅ„บๅ„ทๅ„ผๅ„ปๅ„ฟๅ…€ๅ…’ๅ…Œๅ…”ๅ…ข็ซธๅ…ฉๅ…ชๅ…ฎๅ†€ๅ†‚ๅ›˜ๅ†Œๅ†‰ๅ†ๅ†‘ๅ†“ๅ†•ๅ†–ๅ†คๅ†ฆๅ†ขๅ†ฉๅ†ชๅ†ซๅ†ณๅ†ฑๅ†ฒๅ†ฐๅ†ตๅ†ฝๅ‡…ๅ‡‰ๅ‡›ๅ‡ ่™•ๅ‡ฉๅ‡ญๅ‡ฐๅ‡ตๅ‡พๅˆ„ๅˆ‹ๅˆ”ๅˆŽๅˆงๅˆชๅˆฎๅˆณๅˆนๅ‰ๅ‰„ๅ‰‹ๅ‰Œๅ‰žๅ‰”ๅ‰ชๅ‰ดๅ‰ฉๅ‰ณๅ‰ฟๅ‰ฝๅŠๅŠ”ๅŠ’ๅ‰ฑๅŠˆๅŠ‘่พจ"], +["d2a1","่พงๅŠฌๅŠญๅŠผๅŠตๅ‹ๅ‹ๅ‹—ๅ‹žๅ‹ฃๅ‹ฆ้ฃญๅ‹ ๅ‹ณๅ‹ตๅ‹ธๅ‹นๅŒ†ๅŒˆ็”ธๅŒๅŒๅŒๅŒ•ๅŒšๅŒฃๅŒฏๅŒฑๅŒณๅŒธๅ€ๅ†ๅ…ไธ—ๅ‰ๅๅ‡–ๅžๅฉๅฎๅค˜ๅปๅทๅŽ‚ๅŽ–ๅŽ ๅŽฆๅŽฅๅŽฎๅŽฐๅŽถๅƒ็ฐ’้›™ๅŸๆ›ผ็‡ฎๅฎๅจๅญๅบๅๅฝๅ‘€ๅฌๅญๅผๅฎๅถๅฉๅๅ‘Žๅ’ๅ‘ตๅ’Žๅ‘Ÿๅ‘ฑๅ‘ทๅ‘ฐๅ’’ๅ‘ปๅ’€ๅ‘ถๅ’„ๅ’ๅ’†ๅ“‡ๅ’ขๅ’ธๅ’ฅๅ’ฌๅ“„ๅ“ˆๅ’จ"], +["d3a1","ๅ’ซๅ“‚ๅ’คๅ’พๅ’ผๅ“˜ๅ“ฅๅ“ฆๅ”ๅ””ๅ“ฝๅ“ฎๅ“ญๅ“บๅ“ขๅ”นๅ•€ๅ•ฃๅ•Œๅ”ฎๅ•œๅ•…ๅ•–ๅ•—ๅ”ธๅ”ณๅ•ๅ–™ๅ–€ๅ’ฏๅ–Šๅ–Ÿๅ•ปๅ•พๅ–˜ๅ–žๅ–ฎๅ•ผๅ–ƒๅ–ฉๅ–‡ๅ–จๅ—šๅ—…ๅ—Ÿๅ—„ๅ—œๅ—คๅ—”ๅ˜”ๅ—ทๅ˜–ๅ—พๅ—ฝๅ˜›ๅ—นๅ™Žๅ™็‡Ÿๅ˜ดๅ˜ถๅ˜ฒๅ˜ธๅ™ซๅ™คๅ˜ฏๅ™ฌๅ™ชๅš†ๅš€ๅšŠๅš ๅš”ๅšๅšฅๅšฎๅšถๅšดๅ›‚ๅšผๅ›ๅ›ƒๅ›€ๅ›ˆๅ›Žๅ›‘ๅ›“ๅ›—ๅ›ฎๅ›นๅœ€ๅ›ฟๅœ„ๅœ‰"], +["d4a1","ๅœˆๅœ‹ๅœๅœ“ๅœ˜ๅœ–ๅ—‡ๅœœๅœฆๅœทๅœธๅŽๅœปๅ€ๅๅฉๅŸ€ๅžˆๅกๅฟๅž‰ๅž“ๅž ๅžณๅžคๅžชๅžฐๅŸƒๅŸ†ๅŸ”ๅŸ’ๅŸ“ๅ ŠๅŸ–ๅŸฃๅ ‹ๅ ™ๅ ๅกฒๅ กๅกขๅก‹ๅกฐๆฏ€ๅก’ๅ ฝๅกนๅข…ๅขนๅขŸๅขซๅขบๅฃžๅขปๅขธๅขฎๅฃ…ๅฃ“ๅฃ‘ๅฃ—ๅฃ™ๅฃ˜ๅฃฅๅฃœๅฃคๅฃŸๅฃฏๅฃบๅฃนๅฃปๅฃผๅฃฝๅค‚ๅคŠๅคๅค›ๆขฆๅคฅๅคฌๅคญๅคฒๅคธๅคพ็ซ’ๅฅ•ๅฅๅฅŽๅฅšๅฅ˜ๅฅขๅฅ ๅฅงๅฅฌๅฅฉ"], +["d5a1","ๅฅธๅฆๅฆไฝžไพซๅฆฃๅฆฒๅง†ๅงจๅงœๅฆๅง™ๅงšๅจฅๅจŸๅจ‘ๅจœๅจ‰ๅจšๅฉ€ๅฉฌๅฉ‰ๅจตๅจถๅฉขๅฉชๅชšๅชผๅชพๅซ‹ๅซ‚ๅชฝๅซฃๅซ—ๅซฆๅซฉๅซ–ๅซบๅซปๅฌŒๅฌ‹ๅฌ–ๅฌฒๅซๅฌชๅฌถๅฌพๅญƒๅญ…ๅญ€ๅญ‘ๅญ•ๅญšๅญ›ๅญฅๅญฉๅญฐๅญณๅญตๅญธๆ–ˆๅญบๅฎ€ๅฎƒๅฎฆๅฎธๅฏƒๅฏ‡ๅฏ‰ๅฏ”ๅฏๅฏคๅฏฆๅฏขๅฏžๅฏฅๅฏซๅฏฐๅฏถๅฏณๅฐ…ๅฐ‡ๅฐˆๅฐๅฐ“ๅฐ ๅฐขๅฐจๅฐธๅฐนๅฑๅฑ†ๅฑŽๅฑ“"], +["d6a1","ๅฑๅฑๅญฑๅฑฌๅฑฎไนขๅฑถๅฑนๅฒŒๅฒ‘ๅฒ”ๅฆ›ๅฒซๅฒปๅฒถๅฒผๅฒทๅณ…ๅฒพๅณ‡ๅณ™ๅณฉๅณฝๅณบๅณญๅถŒๅณชๅด‹ๅด•ๅด—ๅตœๅดŸๅด›ๅด‘ๅด”ๅดขๅดšๅด™ๅด˜ๅตŒๅต’ๅตŽๅต‹ๅตฌๅตณๅตถๅถ‡ๅถ„ๅถ‚ๅถขๅถๅถฌๅถฎๅถฝๅถๅถทๅถผๅท‰ๅทๅท“ๅท’ๅท–ๅท›ๅทซๅทฒๅทตๅธ‹ๅธšๅธ™ๅธ‘ๅธ›ๅธถๅธทๅน„ๅนƒๅน€ๅนŽๅน—ๅน”ๅนŸๅนขๅนคๅน‡ๅนตๅนถๅนบ้บผๅนฟๅบ ๅปๅป‚ๅปˆๅปๅป"], +["d7a1","ๅป–ๅปฃๅปๅปšๅป›ๅปขๅปกๅปจๅปฉๅปฌๅปฑๅปณๅปฐๅปดๅปธๅปพๅผƒๅผ‰ๅฝๅฝœๅผ‹ๅผ‘ๅผ–ๅผฉๅผญๅผธๅฝๅฝˆๅฝŒๅฝŽๅผฏๅฝ‘ๅฝ–ๅฝ—ๅฝ™ๅฝกๅฝญๅฝณๅฝทๅพƒๅพ‚ๅฝฟๅพŠๅพˆๅพ‘ๅพ‡ๅพžๅพ™ๅพ˜ๅพ ๅพจๅพญๅพผๅฟ–ๅฟปๅฟคๅฟธๅฟฑๅฟๆ‚ณๅฟฟๆ€กๆ ๆ€™ๆ€ๆ€ฉๆ€Žๆ€ฑๆ€›ๆ€•ๆ€ซๆ€ฆๆ€ๆ€บๆšๆๆชๆทๆŸๆŠๆ†ๆๆฃๆƒๆคๆ‚ๆฌๆซๆ™ๆ‚ๆ‚ๆƒงๆ‚ƒๆ‚š"], +["d8a1","ๆ‚„ๆ‚›ๆ‚–ๆ‚—ๆ‚’ๆ‚งๆ‚‹ๆƒกๆ‚ธๆƒ ๆƒ“ๆ‚ดๅฟฐๆ‚ฝๆƒ†ๆ‚ตๆƒ˜ๆ…ๆ„•ๆ„†ๆƒถๆƒทๆ„€ๆƒดๆƒบๆ„ƒๆ„กๆƒปๆƒฑๆ„ๆ„Žๆ…‡ๆ„พๆ„จๆ„งๆ…Šๆ„ฟๆ„ผๆ„ฌๆ„ดๆ„ฝๆ…‚ๆ…„ๆ…ณๆ…ทๆ…˜ๆ…™ๆ…šๆ…ซๆ…ดๆ…ฏๆ…ฅๆ…ฑๆ…Ÿๆ…ๆ…“ๆ…ตๆ†™ๆ†–ๆ†‡ๆ†ฌๆ†”ๆ†šๆ†Šๆ†‘ๆ†ซๆ†ฎๆ‡Œๆ‡Šๆ‡‰ๆ‡ทๆ‡ˆๆ‡ƒๆ‡†ๆ†บๆ‡‹็ฝนๆ‡ๆ‡ฆๆ‡ฃๆ‡ถๆ‡บๆ‡ดๆ‡ฟๆ‡ฝๆ‡ผๆ‡พๆˆ€ๆˆˆๆˆ‰ๆˆๆˆŒๆˆ”ๆˆ›"], +["d9a1","ๆˆžๆˆกๆˆชๆˆฎๆˆฐๆˆฒๆˆณๆ‰ๆ‰Žๆ‰žๆ‰ฃๆ‰›ๆ‰ ๆ‰จๆ‰ผๆŠ‚ๆЉๆ‰พๆŠ’ๆŠ“ๆŠ–ๆ‹”ๆŠƒๆŠ”ๆ‹—ๆ‹‘ๆŠปๆ‹ๆ‹ฟๆ‹†ๆ“”ๆ‹ˆๆ‹œๆ‹Œๆ‹Šๆ‹‚ๆ‹‡ๆŠ›ๆ‹‰ๆŒŒๆ‹ฎๆ‹ฑๆŒงๆŒ‚ๆŒˆๆ‹ฏๆ‹ตๆๆŒพๆๆœๆๆŽ–ๆŽŽๆŽ€ๆŽซๆถๆŽฃๆŽๆމๆŽŸๆŽตๆซๆฉๆŽพๆฉๆ€ๆ†ๆฃๆ‰ๆ’ๆถๆ„ๆ–ๆดๆ†ๆ“ๆฆๆถๆ”ๆ—ๆจๆๆ‘งๆ‘ฏๆ‘ถๆ‘Žๆ”ชๆ’•ๆ’“ๆ’ฅๆ’ฉๆ’ˆๆ’ผ"], +["daa1","ๆ“šๆ“’ๆ“…ๆ“‡ๆ’ปๆ“˜ๆ“‚ๆ“ฑๆ“ง่ˆ‰ๆ“ ๆ“กๆŠฌๆ“ฃๆ“ฏๆ”ฌๆ“ถๆ“ดๆ“ฒๆ“บๆ”€ๆ“ฝๆ”˜ๆ”œๆ”…ๆ”คๆ”ฃๆ”ซๆ”ดๆ”ตๆ”ทๆ”ถๆ”ธ็•‹ๆ•ˆๆ•–ๆ••ๆ•ๆ•˜ๆ•žๆ•ๆ•ฒๆ•ธๆ–‚ๆ–ƒ่ฎŠๆ–›ๆ–Ÿๆ–ซๆ–ทๆ—ƒๆ—†ๆ—ๆ—„ๆ—Œๆ—’ๆ—›ๆ—™ๆ— ๆ—กๆ—ฑๆฒๆ˜Šๆ˜ƒๆ—ปๆณๆ˜ตๆ˜ถๆ˜ดๆ˜œๆ™ๆ™„ๆ™‰ๆ™ๆ™žๆ™ๆ™คๆ™งๆ™จๆ™Ÿๆ™ขๆ™ฐๆšƒๆšˆๆšŽๆš‰ๆš„ๆš˜ๆšๆ›ๆšนๆ›‰ๆšพๆšผ"], +["dba1","ๆ›„ๆšธๆ›–ๆ›šๆ› ๆ˜ฟๆ›ฆๆ›ฉๆ›ฐๆ›ตๆ›ทๆœๆœ–ๆœžๆœฆๆœง้œธๆœฎๆœฟๆœถๆๆœธๆœทๆ†ๆžๆ ๆ™ๆฃๆคๆž‰ๆฐๆžฉๆผๆชๆžŒๆž‹ๆžฆๆžกๆž…ๆžทๆŸฏๆžดๆŸฌๆžณๆŸฉๆžธๆŸคๆŸžๆŸๆŸขๆŸฎๆžนๆŸŽๆŸ†ๆŸงๆชœๆ žๆก†ๆ ฉๆก€ๆกๆ ฒๆกŽๆขณๆ ซๆก™ๆกฃๆกทๆกฟๆขŸๆขๆขญๆข”ๆขๆข›ๆขƒๆชฎๆขนๆกดๆขตๆข ๆขบๆคๆขๆกพๆคๆฃŠๆคˆๆฃ˜ๆคขๆคฆๆฃกๆคŒๆฃ"], +["dca1","ๆฃ”ๆฃงๆฃ•ๆคถๆค’ๆค„ๆฃ—ๆฃฃๆคฅๆฃนๆฃ ๆฃฏๆคจๆคชๆคšๆคฃๆคกๆฃ†ๆฅนๆฅทๆฅœๆฅธๆฅซๆฅ”ๆฅพๆฅฎๆคนๆฅดๆคฝๆฅ™ๆคฐๆฅกๆฅžๆฅๆฆๆฅชๆฆฒๆฆฎๆงๆฆฟๆงๆง“ๆฆพๆงŽๅฏจๆงŠๆงๆฆปๆงƒๆฆงๆจฎๆฆ‘ๆฆ ๆฆœๆฆ•ๆฆดๆงžๆงจๆจ‚ๆจ›ๆงฟๆฌŠๆงนๆงฒๆงงๆจ…ๆฆฑๆจžๆงญๆจ”ๆงซๆจŠๆจ’ๆซๆจฃๆจ“ๆฉ„ๆจŒๆฉฒๆจถๆฉธๆฉ‡ๆฉขๆฉ™ๆฉฆๆฉˆๆจธๆจขๆชๆชๆช ๆช„ๆชขๆชฃ"], +["dda1","ๆช—่˜—ๆชปๆซƒๆซ‚ๆชธๆชณๆชฌๆซžๆซ‘ๆซŸๆชชๆซšๆซชๆซปๆฌ…่˜–ๆซบๆฌ’ๆฌ–้ฌฑๆฌŸๆฌธๆฌท็›œๆฌน้ฃฎๆญ‡ๆญƒๆญ‰ๆญๆญ™ๆญ”ๆญ›ๆญŸๆญกๆญธๆญนๆญฟๆฎ€ๆฎ„ๆฎƒๆฎๆฎ˜ๆฎ•ๆฎžๆฎคๆฎชๆฎซๆฎฏๆฎฒๆฎฑๆฎณๆฎทๆฎผๆฏ†ๆฏ‹ๆฏ“ๆฏŸๆฏฌๆฏซๆฏณๆฏฏ้บพๆฐˆๆฐ“ๆฐ”ๆฐ›ๆฐคๆฐฃๆฑžๆฑ•ๆฑขๆฑชๆฒ‚ๆฒๆฒšๆฒๆฒ›ๆฑพๆฑจๆฑณๆฒ’ๆฒๆณ„ๆณฑๆณ“ๆฒฝๆณ—ๆณ…ๆณๆฒฎๆฒฑๆฒพ"], +["dea1","ๆฒบๆณ›ๆณฏๆณ™ๆณชๆดŸ่กๆดถๆดซๆดฝๆดธๆด™ๆดตๆดณๆด’ๆดŒๆตฃๆถ“ๆตคๆตšๆตนๆต™ๆถŽๆถ•ๆฟคๆถ…ๆทนๆธ•ๆธŠๆถตๆท‡ๆทฆๆถธๆท†ๆทฌๆทžๆทŒๆทจๆท’ๆท…ๆทบๆท™ๆทคๆท•ๆทชๆทฎๆธญๆนฎๆธฎๆธ™ๆนฒๆนŸๆธพๆธฃๆนซๆธซๆนถๆนๆธŸๆนƒๆธบๆนŽๆธคๆปฟๆธๆธธๆบ‚ๆบชๆบ˜ๆป‰ๆบทๆป“ๆบฝๆบฏๆป„ๆบฒๆป”ๆป•ๆบๆบฅๆป‚ๆบŸๆฝๆผ‘็ŒๆปฌๆปธๆปพๆผฟๆปฒๆผฑๆปฏๆผฒๆปŒ"], +["dfa1","ๆผพๆผ“ๆปทๆพ†ๆฝบๆฝธๆพๆพ€ๆฝฏๆฝ›ๆฟณๆฝญๆพ‚ๆฝผๆฝ˜ๆพŽๆพ‘ๆฟ‚ๆฝฆๆพณๆพฃๆพกๆพคๆพนๆฟ†ๆพชๆฟŸๆฟ•ๆฟฌๆฟ”ๆฟ˜ๆฟฑๆฟฎๆฟ›็€‰็€‹ๆฟบ็€‘็€็€ๆฟพ็€›็€šๆฝด็€็€˜็€Ÿ็€ฐ็€พ็€ฒ็‘็ฃ็‚™็‚’็‚ฏ็ƒฑ็‚ฌ็‚ธ็‚ณ็‚ฎ็ƒŸ็ƒ‹็ƒ็ƒ™็„‰็ƒฝ็„œ็„™็…ฅ็…•็†ˆ็…ฆ็…ข็…Œ็…–็…ฌ็†็‡ป็†„็†•็†จ็†ฌ็‡—็†น็†พ็‡’็‡‰็‡”็‡Ž็‡ ็‡ฌ็‡ง็‡ต็‡ผ"], +["e0a1","็‡น็‡ฟ็ˆ็ˆ็ˆ›็ˆจ็ˆญ็ˆฌ็ˆฐ็ˆฒ็ˆป็ˆผ็ˆฟ็‰€็‰†็‰‹็‰˜็‰ด็‰พ็Š‚็Ё็Ї็Š’็Š–็Šข็Šง็Šน็Šฒ็‹ƒ็‹†็‹„็‹Ž็‹’็‹ข็‹ ็‹ก็‹น็‹ทๅ€็Œ—็ŒŠ็Œœ็Œ–็Œ็Œด็Œฏ็Œฉ็Œฅ็Œพ็Ž็้ป˜็—็ช็จ็ฐ็ธ็ต็ป็บ็ˆ็Žณ็Ž็Žป็€็ฅ็ฎ็ž็’ข็…็‘ฏ็ฅ็ธ็ฒ็บ็‘•็ฟ็‘Ÿ็‘™็‘็‘œ็‘ฉ็‘ฐ็‘ฃ็‘ช็‘ถ็‘พ็’‹็’ž็’ง็“Š็“็“”็ฑ"], +["e1a1","็“ ็“ฃ็“ง็“ฉ็“ฎ็“ฒ็“ฐ็“ฑ็“ธ็“ท็”„็”ƒ็”…็”Œ็”Ž็”็”•็”“็”ž็”ฆ็”ฌ็”ผ็•„็•็•Š็•‰็•›็•†็•š็•ฉ็•ค็•ง็•ซ็•ญ็•ธ็•ถ็–†็–‡็•ด็–Š็–‰็–‚็–”็–š็–็–ฅ็–ฃ็—‚็–ณ็—ƒ็–ต็–ฝ็–ธ็–ผ็–ฑ็—็—Š็—’็—™็—ฃ็—ž็—พ็—ฟ็—ผ็˜็—ฐ็—บ็—ฒ็—ณ็˜‹็˜็˜‰็˜Ÿ็˜ง็˜ ็˜ก็˜ข็˜ค็˜ด็˜ฐ็˜ป็™‡็™ˆ็™†็™œ็™˜็™ก็™ข็™จ็™ฉ็™ช็™ง็™ฌ็™ฐ"], +["e2a1","็™ฒ็™ถ็™ธ็™ผ็š€็šƒ็šˆ็š‹็šŽ็š–็š“็š™็šš็šฐ็šด็šธ็šน็šบ็›‚็›็›–็›’็›ž็›ก็›ฅ็›ง็›ช่˜ฏ็›ป็œˆ็œ‡็œ„็œฉ็œค็œž็œฅ็œฆ็œ›็œท็œธ็‡็š็จ็ซ็›็ฅ็ฟ็พ็น็žŽ็ž‹็ž‘็ž ็žž็žฐ็žถ็žน็žฟ็žผ็žฝ็žป็Ÿ‡็Ÿ็Ÿ—็Ÿš็Ÿœ็Ÿฃ็Ÿฎ็Ÿผ็ Œ็ ’็คฆ็  ็คช็ก…็ขŽ็กด็ข†็กผ็ขš็ขŒ็ขฃ็ขต็ขช็ขฏ็ฃ‘็ฃ†็ฃ‹็ฃ”็ขพ็ขผ็ฃ…็ฃŠ็ฃฌ"], +["e3a1","็ฃง็ฃš็ฃฝ็ฃด็ค‡็ค’็ค‘็ค™็คฌ็คซ็ฅ€็ฅ ็ฅ—็ฅŸ็ฅš็ฅ•็ฅ“็ฅบ็ฅฟ็ฆŠ็ฆ็ฆง้ฝ‹็ฆช็ฆฎ็ฆณ็ฆน็ฆบ็ง‰็ง•็งง็งฌ็งก็งฃ็จˆ็จ็จ˜็จ™็จ ็จŸ็ฆ€็จฑ็จป็จพ็จท็ฉƒ็ฉ—็ฉ‰็ฉก็ฉข็ฉฉ้พ็ฉฐ็ฉน็ฉฝ็ชˆ็ช—็ช•็ช˜็ช–็ชฉ็ซˆ็ชฐ็ชถ็ซ…็ซ„็ชฟ้‚ƒ็ซ‡็ซŠ็ซ็ซ็ซ•็ซ“็ซ™็ซš็ซ็ซก็ซข็ซฆ็ซญ็ซฐ็ฌ‚็ฌ็ฌŠ็ฌ†็ฌณ็ฌ˜็ฌ™็ฌž็ฌต็ฌจ็ฌถ็ญ"], +["e4a1","็ญบ็ฌ„็ญ็ฌ‹็ญŒ็ญ…็ญต็ญฅ็ญด็ญง็ญฐ็ญฑ็ญฌ็ญฎ็ฎ็ฎ˜็ฎŸ็ฎ็ฎœ็ฎš็ฎ‹็ฎ’็ฎ็ญ็ฎ™็ฏ‹็ฏ็ฏŒ็ฏ็ฎด็ฏ†็ฏ็ฏฉ็ฐ‘็ฐ”็ฏฆ็ฏฅ็ฑ ็ฐ€็ฐ‡็ฐ“็ฏณ็ฏท็ฐ—็ฐ็ฏถ็ฐฃ็ฐง็ฐช็ฐŸ็ฐท็ฐซ็ฐฝ็ฑŒ็ฑƒ็ฑ”็ฑ็ฑ€็ฑ็ฑ˜็ฑŸ็ฑค็ฑ–็ฑฅ็ฑฌ็ฑต็ฒƒ็ฒ็ฒค็ฒญ็ฒข็ฒซ็ฒก็ฒจ็ฒณ็ฒฒ็ฒฑ็ฒฎ็ฒน็ฒฝ็ณ€็ณ…็ณ‚็ณ˜็ณ’็ณœ็ณข้ฌป็ณฏ็ณฒ็ณด็ณถ็ณบ็ด†"], +["e5a1","็ด‚็ดœ็ด•็ดŠ็ต…็ต‹็ดฎ็ดฒ็ดฟ็ดต็ต†็ตณ็ต–็ตŽ็ตฒ็ตจ็ตฎ็ต็ตฃ็ถ“็ถ‰็ต›็ถ็ตฝ็ถ›็ถบ็ถฎ็ถฃ็ถต็ท‡็ถฝ็ถซ็ธฝ็ถข็ถฏ็ทœ็ถธ็ถŸ็ถฐ็ท˜็ท็ทค็ทž็ทป็ทฒ็ทก็ธ…็ธŠ็ธฃ็ธก็ธ’็ธฑ็ธŸ็ธ‰็ธ‹็ธข็น†็นฆ็ธป็ธต็ธน็นƒ็ธท็ธฒ็ธบ็นง็น็น–็นž็น™็นš็นน็นช็นฉ็นผ็นป็บƒ็ท•็นฝ่พฎ็นฟ็บˆ็บ‰็บŒ็บ’็บ็บ“็บ”็บ–็บŽ็บ›็บœ็ผธ็ผบ"], +["e6a1","็ฝ…็ฝŒ็ฝ็ฝŽ็ฝ็ฝ‘็ฝ•็ฝ”็ฝ˜็ฝŸ็ฝ ็ฝจ็ฝฉ็ฝง็ฝธ็พ‚็พ†็พƒ็พˆ็พ‡็พŒ็พ”็พž็พ็พš็พฃ็พฏ็พฒ็พน็พฎ็พถ็พธ่ญฑ็ฟ…็ฟ†็ฟŠ็ฟ•็ฟ”็ฟก็ฟฆ็ฟฉ็ฟณ็ฟน้ฃœ่€†่€„่€‹่€’่€˜่€™่€œ่€ก่€จ่€ฟ่€ป่Š่†่’่˜่š่Ÿ่ข่จ่ณ่ฒ่ฐ่ถ่น่ฝ่ฟ่‚„่‚†่‚…่‚›่‚“่‚š่‚ญๅ†่‚ฌ่ƒ›่ƒฅ่ƒ™่ƒ่ƒ„่ƒš่ƒ–่„‰่ƒฏ่ƒฑ่„›่„ฉ่„ฃ่„ฏ่…‹"], +["e7a1","้š‹่…†่„พ่…“่…‘่ƒผ่…ฑ่…ฎ่…ฅ่…ฆ่…ด่†ƒ่†ˆ่†Š่†€่†‚่† ่†•่†ค่†ฃ่…Ÿ่†“่†ฉ่†ฐ่†ต่†พ่†ธ่†ฝ่‡€่‡‚่†บ่‡‰่‡่‡‘่‡™่‡˜่‡ˆ่‡š่‡Ÿ่‡ ่‡ง่‡บ่‡ป่‡พ่ˆ่ˆ‚่ˆ…่ˆ‡่ˆŠ่ˆ่ˆ่ˆ–่ˆฉ่ˆซ่ˆธ่ˆณ่‰€่‰™่‰˜่‰่‰š่‰Ÿ่‰ค่‰ข่‰จ่‰ช่‰ซ่ˆฎ่‰ฑ่‰ท่‰ธ่‰พ่Š่Š’่Šซ่ŠŸ่Šป่Šฌ่‹ก่‹ฃ่‹Ÿ่‹’่‹ด่‹ณ่‹บ่Ž“่Œƒ่‹ป่‹น่‹ž่Œ†่‹œ่Œ‰่‹™"], +["e8a1","่Œต่Œด่Œ–่Œฒ่Œฑ่€่Œน่่…่Œฏ่Œซ่Œ—่Œ˜่Ž…่Žš่Žช่ŽŸ่Žข่Ž–่Œฃ่ŽŽ่އ่ŽŠ่ผ่Žต่ณ่ต่Ž ่މ่Žจ่ด่“่ซ่Ž่ฝ่ƒ่˜่‹่่ท่‡่ ่ฒ่่ข่ ่Žฝ่ธ่”†่ป่‘ญ่ช่ผ่•š่’„่‘ท่‘ซ่’ญ่‘ฎ่’‚่‘ฉ่‘†่ฌ่‘ฏ่‘น่ต่“Š่‘ข่’น่’ฟ่’Ÿ่“™่“่’ป่“š่“่“่“†่“–่’ก่”ก่“ฟ่“ด่”—่”˜่”ฌ่”Ÿ่”•่””่“ผ่•€่•ฃ่•˜่•ˆ"], +["e9a1","่•่˜‚่•‹่••่–€่–ค่–ˆ่–‘่–Š่–จ่•ญ่–”่–›่—ช่–‡่–œ่•ท่•พ่–่—‰่–บ่—่–น่—่—•่—่—ฅ่—œ่—น่˜Š่˜“่˜‹่—พ่—บ่˜†่˜ข่˜š่˜ฐ่˜ฟ่™ไน•่™”่™Ÿ่™ง่™ฑ่š“่šฃ่šฉ่šช่š‹่šŒ่šถ่šฏ่›„่›†่šฐ่›‰่ ฃ่šซ่›”่›ž่›ฉ่›ฌ่›Ÿ่››่›ฏ่œ’่œ†่œˆ่œ€่œƒ่›ป่œ‘่œ‰่œ่›น่œŠ่œด่œฟ่œท่œป่œฅ่œฉ่œš่ ่Ÿ่ธ่Œ่Ž่ด่—่จ่ฎ่™"], +["eaa1","่“่ฃ่ช่ …่žข่žŸ่ž‚่žฏ่Ÿ‹่žฝ่Ÿ€่Ÿ้›–่žซ่Ÿ„่žณ่Ÿ‡่Ÿ†่žป่Ÿฏ่Ÿฒ่Ÿ ่ ่ ่Ÿพ่Ÿถ่Ÿท่ Ž่Ÿ’่ ‘่ –่ •่ ข่ ก่ ฑ่ ถ่ น่ ง่ ป่ก„่ก‚่ก’่ก™่กž่กข่กซ่ข่กพ่ขž่กต่กฝ่ขต่กฒ่ข‚่ข—่ข’่ขฎ่ข™่ขข่ข่ขค่ขฐ่ขฟ่ขฑ่ฃƒ่ฃ„่ฃ”่ฃ˜่ฃ™่ฃ่ฃน่ค‚่ฃผ่ฃด่ฃจ่ฃฒ่ค„่คŒ่คŠ่ค“่ฅƒ่คž่คฅ่คช่คซ่ฅ่ฅ„่คป่คถ่คธ่ฅŒ่ค่ฅ ่ฅž"], +["eba1","่ฅฆ่ฅค่ฅญ่ฅช่ฅฏ่ฅด่ฅท่ฅพ่ฆƒ่ฆˆ่ฆŠ่ฆ“่ฆ˜่ฆก่ฆฉ่ฆฆ่ฆฌ่ฆฏ่ฆฒ่ฆบ่ฆฝ่ฆฟ่ง€่งš่งœ่ง่งง่งด่งธ่จƒ่จ–่จ่จŒ่จ›่จ่จฅ่จถ่ฉ่ฉ›่ฉ’่ฉ†่ฉˆ่ฉผ่ฉญ่ฉฌ่ฉข่ช…่ช‚่ช„่ชจ่ชก่ช‘่ชฅ่ชฆ่ชš่ชฃ่ซ„่ซ่ซ‚่ซš่ซซ่ซณ่ซง่ซค่ซฑ่ฌ”่ซ ่ซข่ซท่ซž่ซ›่ฌŒ่ฌ‡่ฌš่ซก่ฌ–่ฌ่ฌ—่ฌ ่ฌณ้žซ่ฌฆ่ฌซ่ฌพ่ฌจ่ญ่ญŒ่ญ่ญŽ่ญ‰่ญ–่ญ›่ญš่ญซ"], +["eca1","่ญŸ่ญฌ่ญฏ่ญด่ญฝ่ฎ€่ฎŒ่ฎŽ่ฎ’่ฎ“่ฎ–่ฎ™่ฎš่ฐบ่ฑ่ฐฟ่ฑˆ่ฑŒ่ฑŽ่ฑ่ฑ•่ฑข่ฑฌ่ฑธ่ฑบ่ฒ‚่ฒ‰่ฒ…่ฒŠ่ฒ่ฒŽ่ฒ”่ฑผ่ฒ˜ๆˆ่ฒญ่ฒช่ฒฝ่ฒฒ่ฒณ่ฒฎ่ฒถ่ณˆ่ณ่ณค่ณฃ่ณš่ณฝ่ณบ่ณป่ด„่ด…่ดŠ่ด‡่ด่ด่ด้ฝŽ่ด“่ณ่ด”่ด–่ตง่ตญ่ตฑ่ตณ่ถ่ถ™่ท‚่ถพ่ถบ่ท่ทš่ท–่ทŒ่ท›่ท‹่ทช่ทซ่ทŸ่ทฃ่ทผ่ธˆ่ธ‰่ทฟ่ธ่ธž่ธ่ธŸ่น‚่ธต่ธฐ่ธด่นŠ"], +["eda1","่น‡่น‰่นŒ่น่นˆ่น™่นค่น ่ธช่นฃ่น•่นถ่นฒ่นผ่บ่บ‡่บ…่บ„่บ‹่บŠ่บ“่บ‘่บ”่บ™่บช่บก่บฌ่บฐ่ป†่บฑ่บพ่ป…่ปˆ่ป‹่ป›่ปฃ่ปผ่ปป่ปซ่ปพ่ผŠ่ผ…่ผ•่ผ’่ผ™่ผ“่ผœ่ผŸ่ผ›่ผŒ่ผฆ่ผณ่ผป่ผน่ฝ…่ฝ‚่ผพ่ฝŒ่ฝ‰่ฝ†่ฝŽ่ฝ—่ฝœ่ฝข่ฝฃ่ฝค่พœ่พŸ่พฃ่พญ่พฏ่พท่ฟš่ฟฅ่ฟข่ฟช่ฟฏ้‚‡่ฟด้€…่ฟน่ฟบ้€‘้€•้€ก้€้€ž้€–้€‹้€ง้€ถ้€ต้€น่ฟธ"], +["eea1","้้้‘้’้€Ž้‰้€พ้–้˜้ž้จ้ฏ้ถ้šจ้ฒ้‚‚้ฝ้‚้‚€้‚Š้‚‰้‚้‚จ้‚ฏ้‚ฑ้‚ต้ƒข้ƒคๆ‰ˆ้ƒ›้„‚้„’้„™้„ฒ้„ฐ้…Š้…–้…˜้…ฃ้…ฅ้…ฉ้…ณ้…ฒ้†‹้†‰้†‚้†ข้†ซ้†ฏ้†ช้†ต้†ด้†บ้‡€้‡้‡‰้‡‹้‡้‡–้‡Ÿ้‡ก้‡›้‡ผ้‡ต้‡ถ้ˆž้‡ฟ้ˆ”้ˆฌ้ˆ•้ˆ‘้‰ž้‰—้‰…้‰‰้‰ค้‰ˆ้Š•้ˆฟ้‰‹้‰้Šœ้Š–้Š“้Š›้‰š้‹้Šน้Šท้‹ฉ้Œ้‹บ้„้Œฎ"], +["efa1","้Œ™้Œข้Œš้Œฃ้Œบ้Œต้Œป้œ้ ้ผ้ฎ้–้Žฐ้Žฌ้Žญ้Ž”้Žน้–้—้จ้ฅ้˜้ƒ้้้ˆ้ค้š้”้“้ƒ้‡้้ถ้ซ้ต้ก้บ้‘้‘’้‘„้‘›้‘ ้‘ข้‘ž้‘ช้ˆฉ้‘ฐ้‘ต้‘ท้‘ฝ้‘š้‘ผ้‘พ้’้‘ฟ้–‚้–‡้–Š้–”้––้–˜้–™้– ้–จ้–ง้–ญ้–ผ้–ป้–น้–พ้—Šๆฟถ้—ƒ้—้—Œ้—•้—”้—–้—œ้—ก้—ฅ้—ข้˜ก้˜จ้˜ฎ้˜ฏ้™‚้™Œ้™้™‹้™ท้™œ้™ž"], +["f0a1","้™้™Ÿ้™ฆ้™ฒ้™ฌ้š้š˜้š•้š—้šช้šง้šฑ้šฒ้šฐ้šด้šถ้šธ้šน้›Ž้›‹้›‰้›่ฅ้›œ้œ้›•้›น้œ„้œ†้œˆ้œ“้œŽ้œ‘้œ้œ–้œ™้œค้œช้œฐ้œน้œฝ้œพ้„้†้ˆ้‚้‰้œ้ ้ค้ฆ้จๅ‹’้ซ้ฑ้น้ž…้ผ้ž้บ้ž†้ž‹้ž้ž้žœ้žจ้žฆ้žฃ้žณ้žด้Ÿƒ้Ÿ†้Ÿˆ้Ÿ‹้Ÿœ้Ÿญ้ฝ้Ÿฒ็ซŸ้Ÿถ้Ÿต้ ้ Œ้ ธ้ ค้ ก้ ท้ ฝ้ก†้ก้ก‹้กซ้กฏ้กฐ"], +["f1a1","้กฑ้กด้กณ้ขช้ขฏ้ขฑ้ขถ้ฃ„้ฃƒ้ฃ†้ฃฉ้ฃซ้คƒ้ค‰้ค’้ค”้ค˜้คก้ค้คž้คค้ค ้คฌ้คฎ้คฝ้คพ้ฅ‚้ฅ‰้ฅ…้ฅ้ฅ‹้ฅ‘้ฅ’้ฅŒ้ฅ•้ฆ—้ฆ˜้ฆฅ้ฆญ้ฆฎ้ฆผ้งŸ้ง›้ง้ง˜้ง‘้งญ้งฎ้งฑ้งฒ้งป้งธ้จ้จ้จ…้งข้จ™้จซ้จท้ฉ…้ฉ‚้ฉ€้ฉƒ้จพ้ฉ•้ฉ้ฉ›้ฉ—้ฉŸ้ฉข้ฉฅ้ฉค้ฉฉ้ฉซ้ฉช้ชญ้ชฐ้ชผ้ซ€้ซ้ซ‘้ซ“้ซ”้ซž้ซŸ้ซข้ซฃ้ซฆ้ซฏ้ซซ้ซฎ้ซด้ซฑ้ซท"], +["f2a1","้ซป้ฌ†้ฌ˜้ฌš้ฌŸ้ฌข้ฌฃ้ฌฅ้ฌง้ฌจ้ฌฉ้ฌช้ฌฎ้ฌฏ้ฌฒ้ญ„้ญƒ้ญ้ญ้ญŽ้ญ‘้ญ˜้ญด้ฎ“้ฎƒ้ฎ‘้ฎ–้ฎ—้ฎŸ้ฎ ้ฎจ้ฎด้ฏ€้ฏŠ้ฎน้ฏ†้ฏ้ฏ‘้ฏ’้ฏฃ้ฏข้ฏค้ฏ”้ฏก้ฐบ้ฏฒ้ฏฑ้ฏฐ้ฐ•้ฐ”้ฐ‰้ฐ“้ฐŒ้ฐ†้ฐˆ้ฐ’้ฐŠ้ฐ„้ฐฎ้ฐ›้ฐฅ้ฐค้ฐก้ฐฐ้ฑ‡้ฐฒ้ฑ†้ฐพ้ฑš้ฑ ้ฑง้ฑถ้ฑธ้ณง้ณฌ้ณฐ้ด‰้ดˆ้ณซ้ดƒ้ด†้ดช้ดฆ้ถฏ้ดฃ้ดŸ้ต„้ด•้ด’้ต้ดฟ้ดพ้ต†้ตˆ"], +["f3a1","้ต้ตž้ตค้ต‘้ต้ต™้ตฒ้ถ‰้ถ‡้ถซ้ตฏ้ตบ้ถš้ถค้ถฉ้ถฒ้ท„้ท้ถป้ถธ้ถบ้ท†้ท้ท‚้ท™้ท“้ทธ้ทฆ้ทญ้ทฏ้ทฝ้ธš้ธ›้ธž้นต้นน้นฝ้บ้บˆ้บ‹้บŒ้บ’้บ•้บ‘้บ้บฅ้บฉ้บธ้บช้บญ้ก้ปŒ้ปŽ้ป้ป้ป”้ปœ้ปž้ป้ป ้ปฅ้ปจ้ปฏ้ปด้ปถ้ปท้ปน้ปป้ปผ้ปฝ้ผ‡้ผˆ็šท้ผ•้ผก้ผฌ้ผพ้ฝŠ้ฝ’้ฝ”้ฝฃ้ฝŸ้ฝ ้ฝก้ฝฆ้ฝง้ฝฌ้ฝช้ฝท้ฝฒ้ฝถ้พ•้พœ้พ "], +["f4a1","ๅ ฏๆง‡้™็‘คๅ‡œ็†™"], +["f9a1","็บŠ่คœ้ˆ้Šˆ่“œไฟ‰็‚ปๆ˜ฑๆฃˆ้‹นๆ›ปๅฝ…ไธจไปกไปผไผ€ไผƒไผนไฝ–ไพ’ไพŠไพšไพ”ไฟๅ€ๅ€ขไฟฟๅ€žๅ†ๅฐๅ‚ๅ‚”ๅƒดๅƒ˜ๅ…Šๅ…คๅ†ๅ†พๅ‡ฌๅˆ•ๅŠœๅŠฆๅ‹€ๅ‹›ๅŒ€ๅŒ‡ๅŒคๅฒๅŽ“ๅŽฒๅ๏จŽๅ’œๅ’Šๅ’ฉๅ“ฟๅ–†ๅ™ๅฅๅžฌๅŸˆๅŸ‡๏จ๏จๅขžๅขฒๅค‹ๅฅ“ๅฅ›ๅฅๅฅฃๅฆคๅฆบๅญ–ๅฏ€็”ฏๅฏ˜ๅฏฌๅฐžๅฒฆๅฒบๅณตๅดงๅต“๏จ‘ๅต‚ๅตญๅถธๅถนๅทๅผกๅผดๅฝงๅพท"], +["faa1","ๅฟžๆๆ‚…ๆ‚Šๆƒžๆƒ•ๆ„ ๆƒฒๆ„‘ๆ„ทๆ„ฐๆ†˜ๆˆ“ๆŠฆๆตๆ‘ ๆ’ๆ“Žๆ•Žๆ˜€ๆ˜•ๆ˜ปๆ˜‰ๆ˜ฎๆ˜žๆ˜คๆ™ฅๆ™—ๆ™™๏จ’ๆ™ณๆš™ๆš ๆšฒๆšฟๆ›บๆœŽ๏คฉๆฆๆžปๆก’ๆŸ€ๆ ๆก„ๆฃ๏จ“ๆฅจ๏จ”ๆฆ˜ๆงขๆจฐๆฉซๆฉ†ๆฉณๆฉพๆซขๆซคๆฏ–ๆฐฟๆฑœๆฒ†ๆฑฏๆณšๆด„ๆถ‡ๆตฏๆถ–ๆถฌๆทๆทธๆทฒๆทผๆธนๆนœๆธงๆธผๆบฟๆพˆๆพตๆฟต็€…็€‡็€จ็‚…็‚ซ็„็„„็…œ็…†็…‡๏จ•็‡็‡พ็Šฑ"], +["fba1","็Šพ็Œค๏จ–็ท็Žฝ็‰็–็ฃ็’็‡็ต็ฆ็ช็ฉ็ฎ็‘ข็’‰็’Ÿ็”็•ฏ็š‚็šœ็šž็š›็šฆ๏จ—็†ๅŠฏ็ ก็กŽ็กค็กบ็คฐ๏จ˜๏จ™๏จš็ฆ”๏จ›็ฆ›็ซ‘็ซง๏จœ็ซซ็ฎž๏จ็ตˆ็ตœ็ถท็ถ ็ท–็น’็ฝ‡็พก๏จž่Œ่ข่ฟ่‡่ถ่‘ˆ่’ด่•“่•™่•ซ๏จŸ่–ฐ๏จ ๏จก่ ‡่ฃต่จ’่จท่ฉน่ชง่ชพ่ซŸ๏จข่ซถ่ญ“่ญฟ่ณฐ่ณด่ด’่ตถ๏จฃ่ป๏จค๏จฅ้ง้ƒž๏จฆ้„•้„ง้‡š"], +["fca1","้‡—้‡ž้‡ญ้‡ฎ้‡ค้‡ฅ้ˆ†้ˆ้ˆŠ้ˆบ้‰€้ˆผ้‰Ž้‰™้‰‘้ˆน้‰ง้Šง้‰ท้‰ธ้‹ง้‹—้‹™้‹๏จง้‹•้‹ ้‹“้Œฅ้Œก้‹ป๏จจ้Œž้‹ฟ้Œ้Œ‚้ฐ้—้Žค้†้ž้ธ้ฑ้‘…้‘ˆ้–’๏งœ๏จฉ้š้šฏ้œณ้œป้ƒ้้้‘้•้ก—้กฅ๏จช๏จซ้คง๏จฌ้ฆž้ฉŽ้ซ™้ซœ้ญต้ญฒ้ฎ้ฎฑ้ฎป้ฐ€้ตฐ้ตซ๏จญ้ธ™้ป‘"], +["fcf1","โ…ฐ",9,"๏ฟข๏ฟค๏ผ‡๏ผ‚"], +["8fa2af","ห˜ห‡ยธห™หยฏห›หš๏ฝžฮ„ฮ…"], +["8fa2c2","ยกยฆยฟ"], +["8fa2eb","ยบยชยฉยฎโ„ขยคโ„–"], +["8fa6e1","ฮ†ฮˆฮ‰ฮŠฮช"], +["8fa6e7","ฮŒ"], +["8fa6e9","ฮŽฮซ"], +["8fa6ec","ฮ"], +["8fa6f1","ฮฌฮญฮฎฮฏฯŠฮฯŒฯ‚ฯฯ‹ฮฐฯŽ"], +["8fa7c2","ะ‚",10,"ะŽะ"], +["8fa7f2","ั’",10,"ัžัŸ"], +["8fa9a1","ร†ฤ"], +["8fa9a4","ฤฆ"], +["8fa9a6","ฤฒ"], +["8fa9a8","ลฤฟ"], +["8fa9ab","ลŠร˜ล’"], +["8fa9af","ลฆรž"], +["8fa9c1","รฆฤ‘รฐฤงฤฑฤณฤธล‚ล€ล‰ล‹รธล“รŸลงรพ"], +["8faaa1","รร€ร„ร‚ฤ‚วฤ€ฤ„ร…รƒฤ†ฤˆฤŒร‡ฤŠฤŽร‰รˆร‹รŠฤšฤ–ฤ’ฤ˜"], +["8faaba","ฤœฤžฤขฤ ฤครรŒรรŽวฤฐฤชฤฎฤจฤดฤถฤนฤฝฤปลƒล‡ล…ร‘ร“ร’ร–ร”ว‘ลลŒร•ล”ล˜ล–ลšลœล ลžลคลขรšร™รœร›ลฌว“ลฐลชลฒลฎลจว—ว›ว™ว•ลดรลธลถลนลฝลป"], +["8faba1","รกร รครขฤƒวŽฤฤ…รฅรฃฤ‡ฤ‰ฤรงฤ‹ฤรฉรจรซรชฤ›ฤ—ฤ“ฤ™วตฤฤŸ"], +["8fabbd","ฤกฤฅรญรฌรฏรฎว"], +["8fabc5","ฤซฤฏฤฉฤตฤทฤบฤพฤผล„ลˆล†รฑรณรฒรถรดว’ล‘ลรตล•ล™ล—ล›ลลกลŸลฅลฃรบรนรผรปลญว”ลฑลซลณลฏลฉว˜วœวšว–ลตรฝรฟลทลบลพลผ"], +["8fb0a1","ไธ‚ไธ„ไธ…ไธŒไธ’ไธŸไธฃไธคไธจไธซไธฎไธฏไธฐไธตไน€ไนไน„ไน‡ไน‘ไนšไนœไนฃไนจไนฉไนดไนตไนนไนฟไบไบ–ไบ—ไบไบฏไบนไปƒไปไปšไป›ไป ไปกไปขไปจไปฏไปฑไปณไปตไปฝไปพไปฟไผ€ไผ‚ไผƒไผˆไผ‹ไผŒไผ’ไผ•ไผ–ไผ—ไผ™ไผฎไผฑไฝ ไผณไผตไผทไผนไผปไผพไฝ€ไฝ‚ไฝˆไฝ‰ไฝ‹ไฝŒไฝ’ไฝ”ไฝ–ไฝ˜ไฝŸไฝฃไฝชไฝฌไฝฎไฝฑไฝทไฝธไฝนไฝบไฝฝไฝพไพไพ‚ไพ„"], +["8fb1a1","ไพ…ไพ‰ไพŠไพŒไพŽไพไพ’ไพ“ไพ”ไพ—ไพ™ไพšไพžไพŸไพฒไพทไพนไพปไพผไพฝไพพไฟ€ไฟไฟ…ไฟ†ไฟˆไฟ‰ไฟ‹ไฟŒไฟไฟไฟ’ไฟœไฟ ไฟขไฟฐไฟฒไฟผไฟฝไฟฟๅ€€ๅ€ๅ€„ๅ€‡ๅ€Šๅ€Œๅ€Žๅ€ๅ€“ๅ€—ๅ€˜ๅ€›ๅ€œๅ€ๅ€žๅ€ขๅ€งๅ€ฎๅ€ฐๅ€ฒๅ€ณๅ€ตๅ€ๅๅ‚ๅ…ๅ†ๅŠๅŒๅŽๅ‘ๅ’ๅ“ๅ—ๅ™ๅŸๅ ๅขๅฃๅฆๅงๅชๅญๅฐๅฑๅ€ปๅ‚ๅ‚ƒๅ‚„ๅ‚†ๅ‚Šๅ‚Žๅ‚ๅ‚"], +["8fb2a1","ๅ‚’ๅ‚“ๅ‚”ๅ‚–ๅ‚›ๅ‚œๅ‚ž",4,"ๅ‚ชๅ‚ฏๅ‚ฐๅ‚นๅ‚บๅ‚ฝๅƒ€ๅƒƒๅƒ„ๅƒ‡ๅƒŒๅƒŽๅƒๅƒ“ๅƒ”ๅƒ˜ๅƒœๅƒๅƒŸๅƒขๅƒคๅƒฆๅƒจๅƒฉๅƒฏๅƒฑๅƒถๅƒบๅƒพๅ„ƒๅ„†ๅ„‡ๅ„ˆๅ„‹ๅ„Œๅ„ๅ„Žๅƒฒๅ„ๅ„—ๅ„™ๅ„›ๅ„œๅ„ๅ„žๅ„ฃๅ„งๅ„จๅ„ฌๅ„ญๅ„ฏๅ„ฑๅ„ณๅ„ดๅ„ตๅ„ธๅ„นๅ…‚ๅ…Šๅ…ๅ…“ๅ…•ๅ…—ๅ…˜ๅ…Ÿๅ…คๅ…ฆๅ…พๅ†ƒๅ†„ๅ†‹ๅ†Žๅ†˜ๅ†ๅ†กๅ†ฃๅ†ญๅ†ธๅ†บๅ†ผๅ†พๅ†ฟๅ‡‚"], +["8fb3a1","ๅ‡ˆๅ‡ๅ‡‘ๅ‡’ๅ‡“ๅ‡•ๅ‡˜ๅ‡žๅ‡ขๅ‡ฅๅ‡ฎๅ‡ฒๅ‡ณๅ‡ดๅ‡ทๅˆๅˆ‚ๅˆ…ๅˆ’ๅˆ“ๅˆ•ๅˆ–ๅˆ˜ๅˆขๅˆจๅˆฑๅˆฒๅˆตๅˆผๅ‰…ๅ‰‰ๅ‰•ๅ‰—ๅ‰˜ๅ‰šๅ‰œๅ‰Ÿๅ‰ ๅ‰กๅ‰ฆๅ‰ฎๅ‰ทๅ‰ธๅ‰นๅŠ€ๅŠ‚ๅŠ…ๅŠŠๅŠŒๅŠ“ๅŠ•ๅŠ–ๅŠ—ๅŠ˜ๅŠšๅŠœๅŠคๅŠฅๅŠฆๅŠงๅŠฏๅŠฐๅŠถๅŠทๅŠธๅŠบๅŠปๅŠฝๅ‹€ๅ‹„ๅ‹†ๅ‹ˆๅ‹Œๅ‹ๅ‹‘ๅ‹”ๅ‹–ๅ‹›ๅ‹œๅ‹กๅ‹ฅๅ‹จๅ‹ฉๅ‹ชๅ‹ฌๅ‹ฐๅ‹ฑๅ‹ดๅ‹ถๅ‹ทๅŒ€ๅŒƒๅŒŠๅŒ‹"], +["8fb4a1","ๅŒŒๅŒ‘ๅŒ“ๅŒ˜ๅŒ›ๅŒœๅŒžๅŒŸๅŒฅๅŒงๅŒจๅŒฉๅŒซๅŒฌๅŒญๅŒฐๅŒฒๅŒตๅŒผๅŒฝๅŒพๅ‚ๅŒๅ‹ๅ™ๅ›ๅกๅฃๅฅๅฌๅญๅฒๅนๅพๅŽƒๅއๅŽˆๅŽŽๅŽ“ๅŽ”ๅŽ™ๅŽๅŽกๅŽคๅŽชๅŽซๅŽฏๅŽฒๅŽดๅŽตๅŽทๅŽธๅŽบๅŽฝๅ€ๅ…ๅๅ’ๅ“ๅ•ๅšๅๅžๅ ๅฆๅงๅตๅ‚ๅ“ๅšๅกๅงๅจๅชๅฏๅฑๅดๅตๅ‘ƒๅ‘„ๅ‘‡ๅ‘ๅ‘ๅ‘žๅ‘ขๅ‘คๅ‘ฆๅ‘งๅ‘ฉๅ‘ซๅ‘ญๅ‘ฎๅ‘ดๅ‘ฟ"], +["8fb5a1","ๅ’ๅ’ƒๅ’…ๅ’ˆๅ’‰ๅ’ๅ’‘ๅ’•ๅ’–ๅ’œๅ’Ÿๅ’กๅ’ฆๅ’งๅ’ฉๅ’ชๅ’ญๅ’ฎๅ’ฑๅ’ทๅ’นๅ’บๅ’ปๅ’ฟๅ“†ๅ“Šๅ“ๅ“Žๅ“ ๅ“ชๅ“ฌๅ“ฏๅ“ถๅ“ผๅ“พๅ“ฟๅ”€ๅ”ๅ”…ๅ”ˆๅ”‰ๅ”Œๅ”ๅ”Žๅ”•ๅ”ชๅ”ซๅ”ฒๅ”ตๅ”ถๅ”ปๅ”ผๅ”ฝๅ•ๅ•‡ๅ•‰ๅ•Šๅ•ๅ•ๅ•‘ๅ•˜ๅ•šๅ•›ๅ•žๅ• ๅ•กๅ•คๅ•ฆๅ•ฟๅ–ๅ–‚ๅ–†ๅ–ˆๅ–Žๅ–ๅ–‘ๅ–’ๅ–“ๅ–”ๅ–—ๅ–ฃๅ–คๅ–ญๅ–ฒๅ–ฟๅ—ๅ—ƒๅ—†ๅ—‰ๅ—‹ๅ—Œๅ—Žๅ—‘ๅ—’"], +["8fb6a1","ๅ—“ๅ——ๅ—˜ๅ—›ๅ—žๅ—ขๅ—ฉๅ—ถๅ—ฟๅ˜…ๅ˜ˆๅ˜Šๅ˜",5,"ๅ˜™ๅ˜ฌๅ˜ฐๅ˜ณๅ˜ตๅ˜ทๅ˜นๅ˜ปๅ˜ผๅ˜ฝๅ˜ฟๅ™€ๅ™ๅ™ƒๅ™„ๅ™†ๅ™‰ๅ™‹ๅ™ๅ™ๅ™”ๅ™žๅ™ ๅ™กๅ™ขๅ™ฃๅ™ฆๅ™ฉๅ™ญๅ™ฏๅ™ฑๅ™ฒๅ™ตๅš„ๅš…ๅšˆๅš‹ๅšŒๅš•ๅš™ๅššๅšๅšžๅšŸๅšฆๅšงๅšจๅšฉๅšซๅšฌๅšญๅšฑๅšณๅšทๅšพๅ›…ๅ›‰ๅ›Šๅ›‹ๅ›ๅ›ๅ›Œๅ›ๅ›™ๅ›œๅ›ๅ›Ÿๅ›กๅ›ค",4,"ๅ›ฑๅ›ซๅ›ญ"], +["8fb7a1","ๅ›ถๅ›ทๅœๅœ‚ๅœ‡ๅœŠๅœŒๅœ‘ๅœ•ๅœšๅœ›ๅœๅœ ๅœขๅœฃๅœคๅœฅๅœฉๅœชๅœฌๅœฎๅœฏๅœณๅœดๅœฝๅœพๅœฟๅ…ๅ†ๅŒๅๅ’ๅขๅฅๅงๅจๅซๅญ",4,"ๅณๅดๅตๅทๅนๅบๅปๅผๅพๅžๅžƒๅžŒๅž”ๅž—ๅž™ๅžšๅžœๅžๅžžๅžŸๅžกๅž•ๅžงๅžจๅžฉๅžฌๅžธๅžฝๅŸ‡ๅŸˆๅŸŒๅŸๅŸ•ๅŸๅŸžๅŸคๅŸฆๅŸงๅŸฉๅŸญๅŸฐๅŸตๅŸถๅŸธๅŸฝๅŸพๅŸฟๅ ƒๅ „ๅ ˆๅ ‰ๅŸก"], +["8fb8a1","ๅ Œๅ ๅ ›ๅ žๅ Ÿๅ  ๅ ฆๅ งๅ ญๅ ฒๅ นๅ ฟๅก‰ๅกŒๅกๅกๅกๅก•ๅกŸๅกกๅกคๅกงๅกจๅกธๅกผๅกฟๅข€ๅขๅข‡ๅขˆๅข‰ๅขŠๅขŒๅขๅขๅขๅข”ๅข–ๅขๅข ๅขกๅขขๅขฆๅขฉๅขฑๅขฒๅฃ„ๅขผๅฃ‚ๅฃˆๅฃๅฃŽๅฃๅฃ’ๅฃ”ๅฃ–ๅฃšๅฃๅฃกๅฃขๅฃฉๅฃณๅค…ๅค†ๅค‹ๅคŒๅค’ๅค“ๅค”่™ๅคๅคกๅคฃๅคคๅคจๅคฏๅคฐๅคณๅคตๅคถๅคฟๅฅƒๅฅ†ๅฅ’ๅฅ“ๅฅ™ๅฅ›ๅฅๅฅžๅฅŸๅฅกๅฅฃๅฅซๅฅญ"], +["8fb9a1","ๅฅฏๅฅฒๅฅตๅฅถๅฅนๅฅปๅฅผๅฆ‹ๅฆŒๅฆŽๅฆ’ๅฆ•ๅฆ—ๅฆŸๅฆคๅฆงๅฆญๅฆฎๅฆฏๅฆฐๅฆณๅฆทๅฆบๅฆผๅงๅงƒๅง„ๅงˆๅงŠๅงๅง’ๅงๅงžๅงŸๅงฃๅงคๅงงๅงฎๅงฏๅงฑๅงฒๅงดๅงทๅจ€ๅจ„ๅจŒๅจๅจŽๅจ’ๅจ“ๅจžๅจฃๅจคๅจงๅจจๅจชๅจญๅจฐๅฉ„ๅฉ…ๅฉ‡ๅฉˆๅฉŒๅฉๅฉ•ๅฉžๅฉฃๅฉฅๅฉงๅฉญๅฉทๅฉบๅฉปๅฉพๅช‹ๅชๅช“ๅช–ๅช™ๅชœๅชžๅชŸๅช ๅชขๅชงๅชฌๅชฑๅชฒๅชณๅชตๅชธๅชบๅชปๅชฟ"], +["8fbaa1","ๅซ„ๅซ†ๅซˆๅซๅซšๅซœๅซ ๅซฅๅซชๅซฎๅซตๅซถๅซฝๅฌ€ๅฌๅฌˆๅฌ—ๅฌดๅฌ™ๅฌ›ๅฌๅฌกๅฌฅๅฌญๅฌธๅญๅญ‹ๅญŒๅญ’ๅญ–ๅญžๅญจๅญฎๅญฏๅญผๅญฝๅญพๅญฟๅฎๅฎ„ๅฎ†ๅฎŠๅฎŽๅฎๅฎ‘ๅฎ“ๅฎ”ๅฎ–ๅฎจๅฎฉๅฎฌๅฎญๅฎฏๅฎฑๅฎฒๅฎทๅฎบๅฎผๅฏ€ๅฏๅฏๅฏๅฏ–",4,"ๅฏ ๅฏฏๅฏฑๅฏดๅฏฝๅฐŒๅฐ—ๅฐžๅฐŸๅฐฃๅฐฆๅฐฉๅฐซๅฐฌๅฐฎๅฐฐๅฐฒๅฐตๅฐถๅฑ™ๅฑšๅฑœๅฑขๅฑฃๅฑงๅฑจๅฑฉ"], +["8fbba1","ๅฑญๅฑฐๅฑดๅฑตๅฑบๅฑปๅฑผๅฑฝๅฒ‡ๅฒˆๅฒŠๅฒๅฒ’ๅฒๅฒŸๅฒ ๅฒขๅฒฃๅฒฆๅฒชๅฒฒๅฒดๅฒตๅฒบๅณ‰ๅณ‹ๅณ’ๅณๅณ—ๅณฎๅณฑๅณฒๅณดๅดๅด†ๅดๅด’ๅดซๅดฃๅดคๅดฆๅดงๅดฑๅดดๅดนๅดฝๅดฟๅต‚ๅตƒๅต†ๅตˆๅต•ๅต‘ๅต™ๅตŠๅตŸๅต ๅตกๅตขๅตคๅตชๅตญๅตฐๅตนๅตบๅตพๅตฟๅถๅถƒๅถˆๅถŠๅถ’ๅถ“ๅถ”ๅถ•ๅถ™ๅถ›ๅถŸๅถ ๅถงๅถซๅถฐๅถดๅถธๅถนๅทƒๅท‡ๅท‹ๅทๅทŽๅท˜ๅท™ๅท ๅทค"], +["8fbca1","ๅทฉๅทธๅทนๅธ€ๅธ‡ๅธๅธ’ๅธ”ๅธ•ๅธ˜ๅธŸๅธ ๅธฎๅธจๅธฒๅธตๅธพๅน‹ๅนๅน‰ๅน‘ๅน–ๅน˜ๅน›ๅนœๅนžๅนจๅนช",4,"ๅนฐๅบ€ๅบ‹ๅบŽๅบขๅบคๅบฅๅบจๅบชๅบฌๅบฑๅบณๅบฝๅบพๅบฟๅป†ๅปŒๅป‹ๅปŽๅป‘ๅป’ๅป”ๅป•ๅปœๅปžๅปฅๅปซๅผ‚ๅผ†ๅผ‡ๅผˆๅผŽๅผ™ๅผœๅผๅผกๅผขๅผฃๅผคๅผจๅผซๅผฌๅผฎๅผฐๅผดๅผถๅผปๅผฝๅผฟๅฝ€ๅฝ„ๅฝ…ๅฝ‡ๅฝๅฝๅฝ”ๅฝ˜ๅฝ›ๅฝ ๅฝฃๅฝคๅฝง"], +["8fbda1","ๅฝฏๅฝฒๅฝดๅฝตๅฝธๅฝบๅฝฝๅฝพๅพ‰ๅพๅพๅพ–ๅพœๅพๅพขๅพงๅพซๅพคๅพฌๅพฏๅพฐๅพฑๅพธๅฟ„ๅฟ‡ๅฟˆๅฟ‰ๅฟ‹ๅฟ",4,"ๅฟžๅฟกๅฟขๅฟจๅฟฉๅฟชๅฟฌๅฟญๅฟฎๅฟฏๅฟฒๅฟณๅฟถๅฟบๅฟผๆ€‡ๆ€Šๆ€ๆ€“ๆ€”ๆ€—ๆ€˜ๆ€šๆ€Ÿๆ€คๆ€ญๆ€ณๆ€ตๆ€ๆ‡ๆˆๆ‰ๆŒๆ‘ๆ”ๆ–ๆ—ๆๆกๆงๆฑๆพๆฟๆ‚‚ๆ‚†ๆ‚ˆๆ‚Šๆ‚Žๆ‚‘ๆ‚“ๆ‚•ๆ‚˜ๆ‚ๆ‚žๆ‚ขๆ‚คๆ‚ฅๆ‚จๆ‚ฐๆ‚ฑๆ‚ท"], +["8fbea1","ๆ‚ปๆ‚พๆƒ‚ๆƒ„ๆƒˆๆƒ‰ๆƒŠๆƒ‹ๆƒŽๆƒๆƒ”ๆƒ•ๆƒ™ๆƒ›ๆƒๆƒžๆƒขๆƒฅๆƒฒๆƒตๆƒธๆƒผๆƒฝๆ„‚ๆ„‡ๆ„Šๆ„Œๆ„",4,"ๆ„–ๆ„—ๆ„™ๆ„œๆ„žๆ„ขๆ„ชๆ„ซๆ„ฐๆ„ฑๆ„ตๆ„ถๆ„ทๆ„นๆ…ๆ……ๆ…†ๆ…‰ๆ…žๆ… ๆ…ฌๆ…ฒๆ…ธๆ…ปๆ…ผๆ…ฟๆ†€ๆ†ๆ†ƒๆ†„ๆ†‹ๆ†ๆ†’ๆ†“ๆ†—ๆ†˜ๆ†œๆ†ๆ†Ÿๆ† ๆ†ฅๆ†จๆ†ชๆ†ญๆ†ธๆ†นๆ†ผๆ‡€ๆ‡ๆ‡‚ๆ‡Žๆ‡ๆ‡•ๆ‡œๆ‡ๆ‡žๆ‡Ÿๆ‡กๆ‡ขๆ‡งๆ‡ฉๆ‡ฅ"], +["8fbfa1","ๆ‡ฌๆ‡ญๆ‡ฏๆˆๆˆƒๆˆ„ๆˆ‡ๆˆ“ๆˆ•ๆˆœๆˆ ๆˆขๆˆฃๆˆงๆˆฉๆˆซๆˆนๆˆฝๆ‰‚ๆ‰ƒๆ‰„ๆ‰†ๆ‰Œๆ‰ๆ‰‘ๆ‰’ๆ‰”ๆ‰–ๆ‰šๆ‰œๆ‰คๆ‰ญๆ‰ฏๆ‰ณๆ‰บๆ‰ฝๆŠๆŠŽๆŠๆАๆŠฆๆŠจๆŠณๆŠถๆŠทๆŠบๆŠพๆŠฟๆ‹„ๆ‹Žๆ‹•ๆ‹–ๆ‹šๆ‹ชๆ‹ฒๆ‹ดๆ‹ผๆ‹ฝๆŒƒๆŒ„ๆŒŠๆŒ‹ๆŒๆŒๆŒ“ๆŒ–ๆŒ˜ๆŒฉๆŒชๆŒญๆŒตๆŒถๆŒนๆŒผๆๆ‚ๆƒๆ„ๆ†ๆŠๆ‹ๆŽๆ’ๆ“ๆ”ๆ˜ๆ›ๆฅๆฆๆฌๆญๆฑๆดๆต"], +["8fc0a1","ๆธๆผๆฝๆฟๆŽ‚ๆŽ„ๆއๆŽŠๆސๆŽ”ๆŽ•ๆŽ™ๆŽšๆŽžๆŽคๆŽฆๆŽญๆŽฎๆŽฏๆŽฝๆๆ…ๆˆๆŽๆ‘ๆ“ๆ”ๆ•ๆœๆ ๆฅๆชๆฌๆฒๆณๆตๆธๆนๆ‰ๆŠๆๆ’ๆ”ๆ˜ๆžๆ ๆขๆคๆฅๆฉๆชๆฏๆฐๆตๆฝๆฟๆ‘‹ๆ‘ๆ‘‘ๆ‘’ๆ‘“ๆ‘”ๆ‘šๆ‘›ๆ‘œๆ‘ๆ‘Ÿๆ‘ ๆ‘กๆ‘ฃๆ‘ญๆ‘ณๆ‘ดๆ‘ปๆ‘ฝๆ’…ๆ’‡ๆ’ๆ’ๆ’‘ๆ’˜ๆ’™ๆ’›ๆ’ๆ’Ÿๆ’กๆ’ฃๆ’ฆๆ’จๆ’ฌๆ’ณๆ’ฝๆ’พๆ’ฟ"], +["8fc1a1","ๆ“„ๆ“‰ๆ“Šๆ“‹ๆ“Œๆ“Žๆ“ๆ“‘ๆ“•ๆ“—ๆ“คๆ“ฅๆ“ฉๆ“ชๆ“ญๆ“ฐๆ“ตๆ“ทๆ“ปๆ“ฟๆ”ๆ”„ๆ”ˆๆ”‰ๆ”Šๆ”ๆ”“ๆ””ๆ”–ๆ”™ๆ”›ๆ”žๆ”Ÿๆ”ขๆ”ฆๆ”ฉๆ”ฎๆ”ฑๆ”บๆ”ผๆ”ฝๆ•ƒๆ•‡ๆ•‰ๆ•ๆ•’ๆ•”ๆ•Ÿๆ• ๆ•งๆ•ซๆ•บๆ•ฝๆ–ๆ–…ๆ–Šๆ–’ๆ–•ๆ–˜ๆ–ๆ– ๆ–ฃๆ–ฆๆ–ฎๆ–ฒๆ–ณๆ–ดๆ–ฟๆ—‚ๆ—ˆๆ—‰ๆ—Žๆ—ๆ—”ๆ—–ๆ—˜ๆ—Ÿๆ—ฐๆ—ฒๆ—ดๆ—ตๆ—นๆ—พๆ—ฟๆ˜€ๆ˜„ๆ˜ˆๆ˜‰ๆ˜ๆ˜‘ๆ˜’ๆ˜•ๆ˜–ๆ˜"], +["8fc2a1","ๆ˜žๆ˜กๆ˜ขๆ˜ฃๆ˜คๆ˜ฆๆ˜ฉๆ˜ชๆ˜ซๆ˜ฌๆ˜ฎๆ˜ฐๆ˜ฑๆ˜ณๆ˜นๆ˜ทๆ™€ๆ™…ๆ™†ๆ™Šๆ™Œๆ™‘ๆ™Žๆ™—ๆ™˜ๆ™™ๆ™›ๆ™œๆ™ ๆ™กๆ›ปๆ™ชๆ™ซๆ™ฌๆ™พๆ™ณๆ™ตๆ™ฟๆ™ทๆ™ธๆ™นๆ™ปๆš€ๆ™ผๆš‹ๆšŒๆšๆšๆš’ๆš™ๆššๆš›ๆšœๆšŸๆš ๆšคๆšญๆšฑๆšฒๆšตๆšปๆšฟๆ›€ๆ›‚ๆ›ƒๆ›ˆๆ›Œๆ›Žๆ›ๆ›”ๆ››ๆ›Ÿๆ›จๆ›ซๆ›ฌๆ›ฎๆ›บๆœ…ๆœ‡ๆœŽๆœ“ๆœ™ๆœœๆœ ๆœขๆœณๆœพๆ…ๆ‡ๆˆๆŒๆ”ๆ•ๆ"], +["8fc3a1","ๆฆๆฌๆฎๆดๆถๆปๆžๆž„ๆžŽๆžๆž‘ๆž“ๆž–ๆž˜ๆž™ๆž›ๆžฐๆžฑๆžฒๆžตๆžปๆžผๆžฝๆŸนๆŸ€ๆŸ‚ๆŸƒๆŸ…ๆŸˆๆŸ‰ๆŸ’ๆŸ—ๆŸ™ๆŸœๆŸกๆŸฆๆŸฐๆŸฒๆŸถๆŸทๆก’ๆ ”ๆ ™ๆ ๆ Ÿๆ จๆ งๆ ฌๆ ญๆ ฏๆ ฐๆ ฑๆ ณๆ ปๆ ฟๆก„ๆก…ๆกŠๆกŒๆก•ๆก—ๆก˜ๆก›ๆกซๆกฎ",4,"ๆกตๆกนๆกบๆกปๆกผๆข‚ๆข„ๆข†ๆขˆๆข–ๆข˜ๆขšๆขœๆขกๆขฃๆขฅๆขฉๆขชๆขฎๆขฒๆขปๆฃ…ๆฃˆๆฃŒๆฃ"], +["8fc4a1","ๆฃๆฃ‘ๆฃ“ๆฃ–ๆฃ™ๆฃœๆฃๆฃฅๆฃจๆฃชๆฃซๆฃฌๆฃญๆฃฐๆฃฑๆฃตๆฃถๆฃปๆฃผๆฃฝๆค†ๆค‰ๆคŠๆคๆค‘ๆค“ๆค–ๆค—ๆคฑๆคณๆคตๆคธๆคปๆฅ‚ๆฅ…ๆฅ‰ๆฅŽๆฅ—ๆฅ›ๆฅฃๆฅคๆฅฅๆฅฆๆฅจๆฅฉๆฅฌๆฅฐๆฅฑๆฅฒๆฅบๆฅปๆฅฟๆฆ€ๆฆๆฆ’ๆฆ–ๆฆ˜ๆฆกๆฆฅๆฆฆๆฆจๆฆซๆฆญๆฆฏๆฆทๆฆธๆฆบๆฆผๆง…ๆงˆๆง‘ๆง–ๆง—ๆงขๆงฅๆงฎๆงฏๆงฑๆงณๆงตๆงพๆจ€ๆจๆจƒๆจๆจ‘ๆจ•ๆจšๆจๆจ ๆจคๆจจๆจฐๆจฒ"], +["8fc5a1","ๆจดๆจทๆจปๆจพๆจฟๆฉ…ๆฉ†ๆฉ‰ๆฉŠๆฉŽๆฉๆฉ‘ๆฉ’ๆฉ•ๆฉ–ๆฉ›ๆฉคๆฉงๆฉชๆฉฑๆฉณๆฉพๆชๆชƒๆช†ๆช‡ๆช‰ๆช‹ๆช‘ๆช›ๆชๆชžๆชŸๆชฅๆชซๆชฏๆชฐๆชฑๆชดๆชฝๆชพๆชฟๆซ†ๆซ‰ๆซˆๆซŒๆซๆซ”ๆซ•ๆซ–ๆซœๆซๆซคๆซงๆซฌๆซฐๆซฑๆซฒๆซผๆซฝๆฌ‚ๆฌƒๆฌ†ๆฌ‡ๆฌ‰ๆฌๆฌๆฌ‘ๆฌ—ๆฌ›ๆฌžๆฌคๆฌจๆฌซๆฌฌๆฌฏๆฌตๆฌถๆฌปๆฌฟๆญ†ๆญŠๆญๆญ’ๆญ–ๆญ˜ๆญๆญ ๆญงๆญซๆญฎๆญฐๆญตๆญฝ"], +["8fc6a1","ๆญพๆฎ‚ๆฎ…ๆฎ—ๆฎ›ๆฎŸๆฎ ๆฎขๆฎฃๆฎจๆฎฉๆฎฌๆฎญๆฎฎๆฎฐๆฎธๆฎนๆฎฝๆฎพๆฏƒๆฏ„ๆฏ‰ๆฏŒๆฏ–ๆฏšๆฏกๆฏฃๆฏฆๆฏงๆฏฎๆฏฑๆฏทๆฏนๆฏฟๆฐ‚ๆฐ„ๆฐ…ๆฐ‰ๆฐๆฐŽๆฐๆฐ’ๆฐ™ๆฐŸๆฐฆๆฐงๆฐจๆฐฌๆฐฎๆฐณๆฐตๆฐถๆฐบๆฐปๆฐฟๆฑŠๆฑ‹ๆฑๆฑๆฑ’ๆฑ”ๆฑ™ๆฑ›ๆฑœๆฑซๆฑญๆฑฏๆฑดๆฑถๆฑธๆฑนๆฑปๆฒ…ๆฒ†ๆฒ‡ๆฒ‰ๆฒ”ๆฒ•ๆฒ—ๆฒ˜ๆฒœๆฒŸๆฒฐๆฒฒๆฒดๆณ‚ๆณ†ๆณๆณๆณๆณ‘ๆณ’ๆณ”ๆณ–"], +["8fc7a1","ๆณšๆณœๆณ ๆณงๆณฉๆณซๆณฌๆณฎๆณฒๆณดๆด„ๆด‡ๆดŠๆดŽๆดๆด‘ๆด“ๆดšๆดฆๆดงๆดจๆฑงๆดฎๆดฏๆดฑๆดนๆดผๆดฟๆต—ๆตžๆตŸๆตกๆตฅๆตงๆตฏๆตฐๆตผๆถ‚ๆถ‡ๆถ‘ๆถ’ๆถ”ๆถ–ๆถ—ๆถ˜ๆถชๆถฌๆถดๆถทๆถนๆถฝๆถฟๆท„ๆทˆๆทŠๆทŽๆทๆท–ๆท›ๆทๆทŸๆท ๆทขๆทฅๆทฉๆทฏๆทฐๆทดๆทถๆทผๆธ€ๆธ„ๆธžๆธขๆธงๆธฒๆธถๆธนๆธปๆธผๆน„ๆน…ๆนˆๆน‰ๆน‹ๆนๆน‘ๆน’ๆน“ๆน”ๆน—ๆนœๆนๆนž"], +["8fc8a1","ๆนขๆนฃๆนจๆนณๆนปๆนฝๆบๆบ“ๆบ™ๆบ ๆบงๆบญๆบฎๆบฑๆบณๆบปๆบฟๆป€ๆปๆปƒๆป‡ๆปˆๆปŠๆปๆปŽๆปๆปซๆปญๆปฎๆปนๆปปๆปฝๆผ„ๆผˆๆผŠๆผŒๆผๆผ–ๆผ˜ๆผšๆผ›ๆผฆๆผฉๆผชๆผฏๆผฐๆผณๆผถๆผปๆผผๆผญๆฝๆฝ‘ๆฝ’ๆฝ“ๆฝ—ๆฝ™ๆฝšๆฝๆฝžๆฝกๆฝขๆฝจๆฝฌๆฝฝๆฝพๆพƒๆพ‡ๆพˆๆพ‹ๆพŒๆพๆพๆพ’ๆพ“ๆพ”ๆพ–ๆพšๆพŸๆพ ๆพฅๆพฆๆพงๆพจๆพฎๆพฏๆพฐๆพตๆพถๆพผๆฟ…ๆฟ‡ๆฟˆๆฟŠ"], +["8fc9a1","ๆฟšๆฟžๆฟจๆฟฉๆฟฐๆฟตๆฟนๆฟผๆฟฝ็€€็€…็€†็€‡็€็€—็€ ็€ฃ็€ฏ็€ด็€ท็€น็€ผ็ƒ็„็ˆ็‰็Š็‹็”็•็็ž็Ž็ค็ฅ็ฌ็ฎ็ต็ถ็พ็‚็‚…็‚†็‚”",4,"็‚›็‚ค็‚ซ็‚ฐ็‚ฑ็‚ด็‚ท็ƒŠ็ƒ‘็ƒ“็ƒ”็ƒ•็ƒ–็ƒ˜็ƒœ็ƒค็ƒบ็„ƒ",4,"็„‹็„Œ็„็„ž็„ ็„ซ็„ญ็„ฏ็„ฐ็„ฑ็„ธ็…็……็…†็…‡็…Š็…‹็…็…’็…—็…š็…œ็…ž็… "], +["8fcaa1","็…จ็…น็†€็†…็†‡็†Œ็†’็†š็†›็† ็†ข็†ฏ็†ฐ็†ฒ็†ณ็†บ็†ฟ็‡€็‡็‡„็‡‹็‡Œ็‡“็‡–็‡™็‡š็‡œ็‡ธ็‡พ็ˆ€็ˆ‡็ˆˆ็ˆ‰็ˆ“็ˆ—็ˆš็ˆ็ˆŸ็ˆค็ˆซ็ˆฏ็ˆด็ˆธ็ˆน็‰็‰‚็‰ƒ็‰…็‰Ž็‰็‰็‰“็‰•็‰–็‰š็‰œ็‰ž็‰ ็‰ฃ็‰จ็‰ซ็‰ฎ็‰ฏ็‰ฑ็‰ท็‰ธ็‰ป็‰ผ็‰ฟ็Š„็Љ็Š็ŠŽ็Š“็Š›็Šจ็Šญ็Šฎ็Šฑ็Šด็Šพ็‹็‹‡็‹‰็‹Œ็‹•็‹–็‹˜็‹Ÿ็‹ฅ็‹ณ็‹ด็‹บ็‹ป"], +["8fcba1","็‹พ็Œ‚็Œ„็Œ…็Œ‡็Œ‹็Œ็Œ’็Œ“็Œ˜็Œ™็Œž็Œข็Œค็Œง็Œจ็Œฌ็Œฑ็Œฒ็Œต็Œบ็Œป็Œฝ็ƒ็็็’็–็˜็็ž็Ÿ็ ็ฆ็ง็ฉ็ซ็ฌ็ฎ็ฏ็ฑ็ท็น็ผ็Ž€็ށ็Žƒ็Ž…็ކ็ŽŽ็ސ็Ž“็Ž•็Ž—็Ž˜็Žœ็Žž็ŽŸ็Ž ็Žข็Žฅ็Žฆ็Žช็Žซ็Žญ็Žต็Žท็Žน็Žผ็Žฝ็Žฟ็…็†็‰็‹็Œ็็’็“็–็™็็ก็ฃ็ฆ็ง็ฉ็ด็ต็ท็น็บ็ป็ฝ"], +["8fcca1","็ฟ็€็็„็‡็Š็‘็š็›็ค็ฆ็จ",9,"็น็‘€็‘ƒ็‘„็‘†็‘‡็‘‹็‘็‘‘็‘’็‘—็‘็‘ข็‘ฆ็‘ง็‘จ็‘ซ็‘ญ็‘ฎ็‘ฑ็‘ฒ็’€็’็’…็’†็’‡็’‰็’็’็’‘็’’็’˜็’™็’š็’œ็’Ÿ็’ ็’ก็’ฃ็’ฆ็’จ็’ฉ็’ช็’ซ็’ฎ็’ฏ็’ฑ็’ฒ็’ต็’น็’ป็’ฟ็“ˆ็“‰็“Œ็“็““็“˜็“š็“›็“ž็“Ÿ็“ค็“จ็“ช็“ซ็“ฏ็“ด็“บ็“ป็“ผ็“ฟ็”†"], +["8fcda1","็”’็”–็”—็” ็”ก็”ค็”ง็”ฉ็”ช็”ฏ็”ถ็”น็”ฝ็”พ็”ฟ็•€็•ƒ็•‡็•ˆ็•Ž็•็•’็•—็•ž็•Ÿ็•ก็•ฏ็•ฑ็•น",5,"็–็–…็–็–’็–“็–•็–™็–œ็–ข็–ค็–ด็–บ็–ฟ็—€็—็—„็—†็—Œ็—Ž็—็——็—œ็—Ÿ็— ็—ก็—ค็—ง็—ฌ็—ฎ็—ฏ็—ฑ็—น็˜€็˜‚็˜ƒ็˜„็˜‡็˜ˆ็˜Š็˜Œ็˜็˜’็˜“็˜•็˜–็˜™็˜›็˜œ็˜็˜ž็˜ฃ็˜ฅ็˜ฆ็˜ฉ็˜ญ็˜ฒ็˜ณ็˜ต็˜ธ็˜น"], +["8fcea1","็˜บ็˜ผ็™Š็™€็™็™ƒ็™„็™…็™‰็™‹็™•็™™็™Ÿ็™ค็™ฅ็™ญ็™ฎ็™ฏ็™ฑ็™ด็š็š…็šŒ็š็š•็š›็šœ็š็šŸ็š ็šข",6,"็šช็šญ็šฝ็›็›…็›‰็›‹็›Œ็›Ž็›”็›™็› ็›ฆ็›จ็›ฌ็›ฐ็›ฑ็›ถ็›น็›ผ็œ€็œ†็œŠ็œŽ็œ’็œ”็œ•็œ—็œ™็œš็œœ็œข็œจ็œญ็œฎ็œฏ็œด็œต็œถ็œน็œฝ็œพ็‚็…็†็Š็็Ž็็’็–็—็œ็ž็Ÿ็ ็ข"], +["8fcfa1","็ค็ง็ช็ฌ็ฐ็ฒ็ณ็ด็บ็ฝ็ž€็ž„็žŒ็ž็ž”็ž•็ž–็žš็žŸ็žข็žง็žช็žฎ็žฏ็žฑ็žต็žพ็Ÿƒ็Ÿ‰็Ÿ‘็Ÿ’็Ÿ•็Ÿ™็Ÿž็ŸŸ็Ÿ ็Ÿค็Ÿฆ็Ÿช็Ÿฌ็Ÿฐ็Ÿฑ็Ÿด็Ÿธ็Ÿป็ …็ †็ ‰็ ็ Ž็ ‘็ ็ ก็ ข็ ฃ็ ญ็ ฎ็ ฐ็ ต็ ท็กƒ็ก„็ก‡็กˆ็กŒ็กŽ็ก’็กœ็กž็ก ็กก็กฃ็กค็กจ็กช็กฎ็กบ็กพ็ขŠ็ข็ข”็ข˜็ขก็ข็ขž็ขŸ็ขค็ขจ็ขฌ็ขญ็ขฐ็ขฑ็ขฒ็ขณ"], +["8fd0a1","็ขป็ขฝ็ขฟ็ฃ‡็ฃˆ็ฃ‰็ฃŒ็ฃŽ็ฃ’็ฃ“็ฃ•็ฃ–็ฃค็ฃ›็ฃŸ็ฃ ็ฃก็ฃฆ็ฃช็ฃฒ็ฃณ็ค€็ฃถ็ฃท็ฃบ็ฃป็ฃฟ็ค†็คŒ็ค็คš็คœ็คž็คŸ็ค ็คฅ็คง็คฉ็คญ็คฑ็คด็คต็คป็คฝ็คฟ็ฅ„็ฅ…็ฅ†็ฅŠ็ฅ‹็ฅ็ฅ‘็ฅ”็ฅ˜็ฅ›็ฅœ็ฅง็ฅฉ็ฅซ็ฅฒ็ฅน็ฅป็ฅผ็ฅพ็ฆ‹็ฆŒ็ฆ‘็ฆ“็ฆ”็ฆ•็ฆ–็ฆ˜็ฆ›็ฆœ็ฆก็ฆจ็ฆฉ็ฆซ็ฆฏ็ฆฑ็ฆด็ฆธ็ฆป็ง‚็ง„็ง‡็งˆ็งŠ็ง็ง”็ง–็งš็ง็งž"], +["8fd1a1","็ง ็งข็งฅ็งช็งซ็งญ็งฑ็งธ็งผ็จ‚็จƒ็จ‡็จ‰็จŠ็จŒ็จ‘็จ•็จ›็จž็จก็จง็จซ็จญ็จฏ็จฐ็จด็จต็จธ็จน็จบ็ฉ„็ฉ…็ฉ‡็ฉˆ็ฉŒ็ฉ•็ฉ–็ฉ™็ฉœ็ฉ็ฉŸ็ฉ ็ฉฅ็ฉง็ฉช็ฉญ็ฉต็ฉธ็ฉพ็ช€็ช‚็ช…็ช†็ชŠ็ช‹็ช็ช‘็ช”็ชž็ช ็ชฃ็ชฌ็ชณ็ชต็ชน็ชป็ชผ็ซ†็ซ‰็ซŒ็ซŽ็ซ‘็ซ›็ซจ็ซฉ็ซซ็ซฌ็ซฑ็ซด็ซป็ซฝ็ซพ็ฌ‡็ฌ”็ฌŸ็ฌฃ็ฌง็ฌฉ็ฌช็ฌซ็ฌญ็ฌฎ็ฌฏ็ฌฐ"], +["8fd2a1","็ฌฑ็ฌด็ฌฝ็ฌฟ็ญ€็ญ็ญ‡็ญŽ็ญ•็ญ ็ญค็ญฆ็ญฉ็ญช็ญญ็ญฏ็ญฒ็ญณ็ญท็ฎ„็ฎ‰็ฎŽ็ฎ็ฎ‘็ฎ–็ฎ›็ฎž็ฎ ็ฎฅ็ฎฌ็ฎฏ็ฎฐ็ฎฒ็ฎต็ฎถ็ฎบ็ฎป็ฎผ็ฎฝ็ฏ‚็ฏ…็ฏˆ็ฏŠ็ฏ”็ฏ–็ฏ—็ฏ™็ฏš็ฏ›็ฏจ็ฏช็ฏฒ็ฏด็ฏต็ฏธ็ฏน็ฏบ็ฏผ็ฏพ็ฐ็ฐ‚็ฐƒ็ฐ„็ฐ†็ฐ‰็ฐ‹็ฐŒ็ฐŽ็ฐ็ฐ™็ฐ›็ฐ ็ฐฅ็ฐฆ็ฐจ็ฐฌ็ฐฑ็ฐณ็ฐด็ฐถ็ฐน็ฐบ็ฑ†็ฑŠ็ฑ•็ฑ‘็ฑ’็ฑ“็ฑ™",5], +["8fd3a1","็ฑก็ฑฃ็ฑง็ฑฉ็ฑญ็ฑฎ็ฑฐ็ฑฒ็ฑน็ฑผ็ฑฝ็ฒ†็ฒ‡็ฒ็ฒ”็ฒž็ฒ ็ฒฆ็ฒฐ็ฒถ็ฒท็ฒบ็ฒป็ฒผ็ฒฟ็ณ„็ณ‡็ณˆ็ณ‰็ณ็ณ็ณ“็ณ”็ณ•็ณ—็ณ™็ณš็ณ็ณฆ็ณฉ็ณซ็ณต็ดƒ็ด‡็ดˆ็ด‰็ด็ด‘็ด’็ด“็ด–็ด็ดž็ดฃ็ดฆ็ดช็ดญ็ดฑ็ดผ็ดฝ็ดพ็ต€็ต็ต‡็ตˆ็ต็ต‘็ต“็ต—็ต™็ตš็ตœ็ต็ตฅ็ตง็ตช็ตฐ็ตธ็ตบ็ตป็ตฟ็ถ็ถ‚็ถƒ็ถ…็ถ†็ถˆ็ถ‹็ถŒ็ถ็ถ‘็ถ–็ถ—็ถ"], +["8fd4a1","็ถž็ถฆ็ถง็ถช็ถณ็ถถ็ถท็ถน็ท‚",4,"็ทŒ็ท็ทŽ็ท—็ท™็ธ€็ทข็ทฅ็ทฆ็ทช็ทซ็ทญ็ทฑ็ทต็ทถ็ทน็ทบ็ธˆ็ธ็ธ‘็ธ•็ธ—็ธœ็ธ็ธ ็ธง็ธจ็ธฌ็ธญ็ธฏ็ธณ็ธถ็ธฟ็น„็น…็น‡็นŽ็น็น’็น˜็นŸ็นก็นข็นฅ็นซ็นฎ็นฏ็นณ็นธ็นพ็บ็บ†็บ‡็บŠ็บ็บ‘็บ•็บ˜็บš็บ็บž็ผผ็ผป็ผฝ็ผพ็ผฟ็ฝƒ็ฝ„็ฝ‡็ฝ็ฝ’็ฝ“็ฝ›็ฝœ็ฝ็ฝก็ฝฃ็ฝค็ฝฅ็ฝฆ็ฝญ"], +["8fd5a1","็ฝฑ็ฝฝ็ฝพ็ฝฟ็พ€็พ‹็พ็พ็พ็พ‘็พ–็พ—็พœ็พก็พข็พฆ็พช็พญ็พด็พผ็พฟ็ฟ€็ฟƒ็ฟˆ็ฟŽ็ฟ็ฟ›็ฟŸ็ฟฃ็ฟฅ็ฟจ็ฟฌ็ฟฎ็ฟฏ็ฟฒ็ฟบ็ฟฝ็ฟพ็ฟฟ่€‡่€ˆ่€Š่€่€Ž่€่€‘่€“่€”่€–่€่€ž่€Ÿ่€ ่€ค่€ฆ่€ฌ่€ฎ่€ฐ่€ด่€ต่€ท่€น่€บ่€ผ่€พ่€่„่ ่ค่ฆ่ญ่ฑ่ต่‚่‚ˆ่‚Ž่‚œ่‚ž่‚ฆ่‚ง่‚ซ่‚ธ่‚น่ƒˆ่ƒ่ƒ่ƒ’่ƒ”่ƒ•่ƒ—่ƒ˜่ƒ ่ƒญ่ƒฎ"], +["8fd6a1","่ƒฐ่ƒฒ่ƒณ่ƒถ่ƒน่ƒบ่ƒพ่„ƒ่„‹่„–่„—่„˜่„œ่„ž่„ ่„ค่„ง่„ฌ่„ฐ่„ต่„บ่„ผ่……่…‡่…Š่…Œ่…’่…—่… ่…ก่…ง่…จ่…ฉ่…ญ่…ฏ่…ท่†่†่†„่†…่††่†‹่†Ž่†–่†˜่†›่†ž่†ข่†ฎ่†ฒ่†ด่†ป่‡‹่‡ƒ่‡…่‡Š่‡Ž่‡่‡•่‡—่‡›่‡่‡ž่‡ก่‡ค่‡ซ่‡ฌ่‡ฐ่‡ฑ่‡ฒ่‡ต่‡ถ่‡ธ่‡น่‡ฝ่‡ฟ่ˆ€่ˆƒ่ˆ่ˆ“่ˆ”่ˆ™่ˆš่ˆ่ˆก่ˆข่ˆจ่ˆฒ่ˆด่ˆบ่‰ƒ่‰„่‰…่‰†"], +["8fd7a1","่‰‹่‰Ž่‰่‰‘่‰–่‰œ่‰ ่‰ฃ่‰ง่‰ญ่‰ด่‰ป่‰ฝ่‰ฟ่Š€่Ё่Šƒ่Š„่Ї่Љ่ŠŠ่ŠŽ่Š‘่Š”่Š–่Š˜่Šš่Š›่Š ่Šก่Šฃ่Šค่Šง่Šจ่Šฉ่Šช่Šฎ่Šฐ่Šฒ่Šด่Šท่Šบ่Šผ่Šพ่Šฟ่‹†่‹่‹•่‹š่‹ ่‹ข่‹ค่‹จ่‹ช่‹ญ่‹ฏ่‹ถ่‹ท่‹ฝ่‹พ่Œ€่Œ่Œ‡่Œˆ่ŒŠ่Œ‹่”่Œ›่Œ่Œž่ŒŸ่Œก่Œข่Œฌ่Œญ่Œฎ่Œฐ่Œณ่Œท่Œบ่Œผ่Œฝ่‚่ƒ่„่‡่่Ž่‘่•่–่—่ฐ่ธ"], +["8fd8a1","่ฝ่ฟ่Ž€่Ž‚่Ž„่ކ่Ž่Ž’่Ž”่Ž•่Ž˜่Ž™่Ž›่Žœ่Ž่Žฆ่Žง่Žฉ่Žฌ่Žพ่Žฟ่€่‡่‰่่่‘่”่่“่จ่ช่ถ่ธ่น่ผ่่†่Š่่‘่•่™่Žญ่ฏ่น่‘…่‘‡่‘ˆ่‘Š่‘่‘่‘‘่‘’่‘–่‘˜่‘™่‘š่‘œ่‘ ่‘ค่‘ฅ่‘ง่‘ช่‘ฐ่‘ณ่‘ด่‘ถ่‘ธ่‘ผ่‘ฝ่’่’…่’’่’“่’•่’ž่’ฆ่’จ่’ฉ่’ช่’ฏ่’ฑ่’ด่’บ่’ฝ่’พ่“€่“‚่“‡่“ˆ่“Œ่“่““"], +["8fd9a1","่“œ่“ง่“ช่“ฏ่“ฐ่“ฑ่“ฒ่“ท่”ฒ่“บ่“ป่“ฝ่”‚่”ƒ่”‡่”Œ่”Ž่”่”œ่”ž่”ข่”ฃ่”ค่”ฅ่”ง่”ช่”ซ่”ฏ่”ณ่”ด่”ถ่”ฟ่•†่•",4,"่•–่•™่•œ",6,"่•ค่•ซ่•ฏ่•น่•บ่•ป่•ฝ่•ฟ่–่–…่–†่–‰่–‹่–Œ่–่–“่–˜่–่–Ÿ่– ่–ข่–ฅ่–ง่–ด่–ถ่–ท่–ธ่–ผ่–ฝ่–พ่–ฟ่—‚่—‡่—Š่—‹่—Ž่–ญ่—˜่—š่—Ÿ่— ่—ฆ่—จ่—ญ่—ณ่—ถ่—ผ"], +["8fdaa1","่—ฟ่˜€่˜„่˜…่˜่˜Ž่˜่˜‘่˜’่˜˜่˜™่˜›่˜ž่˜ก่˜ง่˜ฉ่˜ถ่˜ธ่˜บ่˜ผ่˜ฝ่™€่™‚่™†่™’่™“่™–่™—่™˜่™™่™่™ ",4,"่™ฉ่™ฌ่™ฏ่™ต่™ถ่™ท่™บ่š่š‘่š–่š˜่šš่šœ่šก่šฆ่šง่šจ่šญ่šฑ่šณ่šด่šต่šท่šธ่šน่šฟ่›€่›่›ƒ่›…่›‘่›’่›•่›—่›š่›œ่› ่›ฃ่›ฅ่›ง่šˆ่›บ่›ผ่›ฝ่œ„่œ…่œ‡่œ‹่œŽ่œ่œ่œ“่œ”่œ™่œž่œŸ่œก่œฃ"], +["8fdba1","่œจ่œฎ่œฏ่œฑ่œฒ่œน่œบ่œผ่œฝ่œพ่€่ƒ่…่่˜่่ก่ค่ฅ่ฏ่ฑ่ฒ่ป่žƒ",6,"่ž‹่žŒ่ž่ž“่ž•่ž—่ž˜่ž™่žž่ž ่žฃ่žง่žฌ่žญ่žฎ่žฑ่žต่žพ่žฟ่Ÿ่Ÿˆ่Ÿ‰่ŸŠ่ŸŽ่Ÿ•่Ÿ–่Ÿ™่Ÿš่Ÿœ่ŸŸ่Ÿข่Ÿฃ่Ÿค่Ÿช่Ÿซ่Ÿญ่Ÿฑ่Ÿณ่Ÿธ่Ÿบ่Ÿฟ่ ่ ƒ่ †่ ‰่ Š่ ‹่ ่ ™่ ’่ “่ ”่ ˜่ š่ ›่ œ่ ž่ Ÿ่ จ่ ญ่ ฎ่ ฐ่ ฒ่ ต"], +["8fdca1","่ บ่ ผ่ก่กƒ่ก…่กˆ่ก‰่กŠ่ก‹่กŽ่ก‘่ก•่ก–่ก˜่กš่กœ่กŸ่ก ่กค่กฉ่กฑ่กน่กป่ข€่ข˜่ขš่ข›่ขœ่ขŸ่ข ่ขจ่ขช่ขบ่ขฝ่ขพ่ฃ€่ฃŠ",4,"่ฃ‘่ฃ’่ฃ“่ฃ›่ฃž่ฃง่ฃฏ่ฃฐ่ฃฑ่ฃต่ฃท่ค่ค†่ค่คŽ่ค่ค•่ค–่ค˜่ค™่คš่คœ่ค ่คฆ่คง่คจ่คฐ่คฑ่คฒ่คต่คน่คบ่คพ่ฅ€่ฅ‚่ฅ…่ฅ†่ฅ‰่ฅ่ฅ’่ฅ—่ฅš่ฅ›่ฅœ่ฅก่ฅข่ฅฃ่ฅซ่ฅฎ่ฅฐ่ฅณ่ฅต่ฅบ"], +["8fdda1","่ฅป่ฅผ่ฅฝ่ฆ‰่ฆ่ฆ่ฆ”่ฆ•่ฆ›่ฆœ่ฆŸ่ฆ ่ฆฅ่ฆฐ่ฆด่ฆต่ฆถ่ฆท่ฆผ่ง”",4,"่งฅ่งฉ่งซ่งญ่งฑ่งณ่งถ่งน่งฝ่งฟ่จ„่จ…่จ‡่จ่จ‘่จ’่จ”่จ•่จž่จ ่จข่จค่จฆ่จซ่จฌ่จฏ่จต่จท่จฝ่จพ่ฉ€่ฉƒ่ฉ…่ฉ‡่ฉ‰่ฉ่ฉŽ่ฉ“่ฉ–่ฉ—่ฉ˜่ฉœ่ฉ่ฉก่ฉฅ่ฉง่ฉต่ฉถ่ฉท่ฉน่ฉบ่ฉป่ฉพ่ฉฟ่ช€่ชƒ่ช†่ช‹่ช่ช่ช’่ช–่ช—่ช™่ชŸ่ชง่ชฉ่ชฎ่ชฏ่ชณ"], +["8fdea1","่ชถ่ชท่ชป่ชพ่ซƒ่ซ†่ซˆ่ซ‰่ซŠ่ซ‘่ซ“่ซ”่ซ•่ซ—่ซ่ซŸ่ซฌ่ซฐ่ซด่ซต่ซถ่ซผ่ซฟ่ฌ…่ฌ†่ฌ‹่ฌ‘่ฌœ่ฌž่ฌŸ่ฌŠ่ฌญ่ฌฐ่ฌท่ฌผ่ญ‚",4,"่ญˆ่ญ’่ญ“่ญ”่ญ™่ญ่ญž่ญฃ่ญญ่ญถ่ญธ่ญน่ญผ่ญพ่ฎ่ฎ„่ฎ…่ฎ‹่ฎ่ฎ่ฎ”่ฎ•่ฎœ่ฎž่ฎŸ่ฐธ่ฐน่ฐฝ่ฐพ่ฑ…่ฑ‡่ฑ‰่ฑ‹่ฑ่ฑ‘่ฑ“่ฑ”่ฑ—่ฑ˜่ฑ›่ฑ่ฑ™่ฑฃ่ฑค่ฑฆ่ฑจ่ฑฉ่ฑญ่ฑณ่ฑต่ฑถ่ฑป่ฑพ่ฒ†"], +["8fdfa1","่ฒ‡่ฒ‹่ฒ่ฒ’่ฒ“่ฒ™่ฒ›่ฒœ่ฒค่ฒน่ฒบ่ณ…่ณ†่ณ‰่ณ‹่ณ่ณ–่ณ•่ณ™่ณ่ณก่ณจ่ณฌ่ณฏ่ณฐ่ณฒ่ณต่ณท่ณธ่ณพ่ณฟ่ด่ดƒ่ด‰่ด’่ด—่ด›่ตฅ่ตฉ่ตฌ่ตฎ่ตฟ่ถ‚่ถ„่ถˆ่ถ่ถ่ถ‘่ถ•่ถž่ถŸ่ถ ่ถฆ่ถซ่ถฌ่ถฏ่ถฒ่ถต่ถท่ถน่ถป่ท€่ท…่ท†่ท‡่ทˆ่ทŠ่ทŽ่ท‘่ท”่ท•่ท—่ท™่ทค่ทฅ่ทง่ทฌ่ทฐ่ถผ่ทฑ่ทฒ่ทด่ทฝ่ธ่ธ„่ธ…่ธ†่ธ‹่ธ‘่ธ”่ธ–่ธ ่ธก่ธข"], +["8fe0a1","่ธฃ่ธฆ่ธง่ธฑ่ธณ่ธถ่ธท่ธธ่ธน่ธฝ่น€่น่น‹่น่นŽ่น่น”่น›่นœ่น่นž่นก่นข่นฉ่นฌ่นญ่นฏ่นฐ่นฑ่นน่นบ่นป่บ‚่บƒ่บ‰่บ่บ’่บ•่บš่บ›่บ่บž่บข่บง่บฉ่บญ่บฎ่บณ่บต่บบ่บป่ป€่ป่ปƒ่ป„่ป‡่ป่ป‘่ป”่ปœ่ปจ่ปฎ่ปฐ่ปฑ่ปท่ปน่ปบ่ปญ่ผ€่ผ‚่ผ‡่ผˆ่ผ่ผ่ผ–่ผ—่ผ˜่ผž่ผ ่ผก่ผฃ่ผฅ่ผง่ผจ่ผฌ่ผญ่ผฎ่ผด่ผต่ผถ่ผท่ผบ่ฝ€่ฝ"], +["8fe1a1","่ฝƒ่ฝ‡่ฝ่ฝ‘",4,"่ฝ˜่ฝ่ฝž่ฝฅ่พ่พ ่พก่พค่พฅ่พฆ่พต่พถ่พธ่พพ่ฟ€่ฟ่ฟ†่ฟŠ่ฟ‹่ฟ่ฟ่ฟ’่ฟ“่ฟ•่ฟ ่ฟฃ่ฟค่ฟจ่ฟฎ่ฟฑ่ฟต่ฟถ่ฟป่ฟพ้€‚้€„้€ˆ้€Œ้€˜้€›้€จ้€ฉ้€ฏ้€ช้€ฌ้€ญ้€ณ้€ด้€ท้€ฟ้ƒ้„้Œ้›้้ข้ฆ้ง้ฌ้ฐ้ด้น้‚…้‚ˆ้‚‹้‚Œ้‚Ž้‚้‚•้‚—้‚˜้‚™้‚›้‚ ้‚ก้‚ข้‚ฅ้‚ฐ้‚ฒ้‚ณ้‚ด้‚ถ้‚ฝ้ƒŒ้‚พ้ƒƒ"], +["8fe2a1","้ƒ„้ƒ…้ƒ‡้ƒˆ้ƒ•้ƒ—้ƒ˜้ƒ™้ƒœ้ƒ้ƒŸ้ƒฅ้ƒ’้ƒถ้ƒซ้ƒฏ้ƒฐ้ƒด้ƒพ้ƒฟ้„€้„„้„…้„†้„ˆ้„้„้„”้„–้„—้„˜้„š้„œ้„ž้„ ้„ฅ้„ข้„ฃ้„ง้„ฉ้„ฎ้„ฏ้„ฑ้„ด้„ถ้„ท้„น้„บ้„ผ้„ฝ้…ƒ้…‡้…ˆ้…้…“้…—้…™้…š้…›้…ก้…ค้…ง้…ญ้…ด้…น้…บ้…ป้†้†ƒ้†…้††้†Š้†Ž้†‘้†“้†”้†•้†˜้†ž้†ก้†ฆ้†จ้†ฌ้†ญ้†ฎ้†ฐ้†ฑ้†ฒ้†ณ้†ถ้†ป้†ผ้†ฝ้†ฟ"], +["8fe3a1","้‡‚้‡ƒ้‡…้‡“้‡”้‡—้‡™้‡š้‡ž้‡ค้‡ฅ้‡ฉ้‡ช้‡ฌ",5,"้‡ท้‡น้‡ป้‡ฝ้ˆ€้ˆ้ˆ„้ˆ…้ˆ†้ˆ‡้ˆ‰้ˆŠ้ˆŒ้ˆ้ˆ’้ˆ“้ˆ–้ˆ˜้ˆœ้ˆ้ˆฃ้ˆค้ˆฅ้ˆฆ้ˆจ้ˆฎ้ˆฏ้ˆฐ้ˆณ้ˆต้ˆถ้ˆธ้ˆน้ˆบ้ˆผ้ˆพ้‰€้‰‚้‰ƒ้‰†้‰‡้‰Š้‰้‰Ž้‰้‰‘้‰˜้‰™้‰œ้‰้‰ ้‰ก้‰ฅ้‰ง้‰จ้‰ฉ้‰ฎ้‰ฏ้‰ฐ้‰ต",4,"้‰ป้‰ผ้‰ฝ้‰ฟ้Šˆ้Љ้ŠŠ้Š้ŠŽ้Š’้Š—"], +["8fe4a1","้Š™้ŠŸ้Š ้Šค้Šฅ้Šง้Šจ้Šซ้Šฏ้Šฒ้Šถ้Šธ้Šบ้Šป้Šผ้Šฝ้Šฟ",4,"้‹…้‹†้‹‡้‹ˆ้‹‹้‹Œ้‹้‹Ž้‹้‹“้‹•้‹—้‹˜้‹™้‹œ้‹้‹Ÿ้‹ ้‹ก้‹ฃ้‹ฅ้‹ง้‹จ้‹ฌ้‹ฎ้‹ฐ้‹น้‹ป้‹ฟ้Œ€้Œ‚้Œˆ้Œ้Œ‘้Œ”้Œ•้Œœ้Œ้Œž้ŒŸ้Œก้Œค้Œฅ้Œง้Œฉ้Œช้Œณ้Œด้Œถ้Œท้‡้ˆ้‰้้‘้’้•้—้˜้š้ž้ค้ฅ้ง้ฉ้ช้ญ้ฏ้ฐ้ฑ้ณ้ด้ถ"], +["8fe5a1","้บ้ฝ้ฟ้Ž€้ށ้Ž‚้Žˆ้ŽŠ้Ž‹้Ž้Ž้Ž’้Ž•้Ž˜้Ž›้Žž้Žก้Žฃ้Žค้Žฆ้Žจ้Žซ้Žด้Žต้Žถ้Žบ้Žฉ้้„้…้†้‡้‰",4,"้“้™้œ้ž้Ÿ้ข้ฆ้ง้น้ท้ธ้บ้ป้ฝ้้‚้„้ˆ้‰้้Ž้้•้–้—้Ÿ้ฎ้ฏ้ฑ้ฒ้ณ้ด้ป้ฟ้ฝ้‘ƒ้‘…้‘ˆ้‘Š้‘Œ้‘•้‘™้‘œ้‘Ÿ้‘ก้‘ฃ้‘จ้‘ซ้‘ญ้‘ฎ้‘ฏ้‘ฑ้‘ฒ้’„้’ƒ้•ธ้•น"], +["8fe6a1","้•พ้–„้–ˆ้–Œ้–้–Ž้–้–ž้–Ÿ้–ก้–ฆ้–ฉ้–ซ้–ฌ้–ด้–ถ้–บ้–ฝ้–ฟ้—†้—ˆ้—‰้—‹้—้—‘้—’้—“้—™้—š้—้—ž้—Ÿ้— ้—ค้—ฆ้˜้˜ž้˜ข้˜ค้˜ฅ้˜ฆ้˜ฌ้˜ฑ้˜ณ้˜ท้˜ธ้˜น้˜บ้˜ผ้˜ฝ้™้™’้™”้™–้™—้™˜้™ก้™ฎ้™ด้™ป้™ผ้™พ้™ฟ้š้š‚้šƒ้š„้š‰้š‘้š–้šš้š้šŸ้šค้šฅ้šฆ้šฉ้šฎ้šฏ้šณ้šบ้›Š้›’ๅถฒ้›˜้›š้›้›ž้›Ÿ้›ฉ้›ฏ้›ฑ้›บ้œ‚"], +["8fe7a1","้œƒ้œ…้œ‰้œš้œ›้œ้œก้œข้œฃ้œจ้œฑ้œณ้้ƒ้Š้Ž้้•้—้˜้š้›้ฃ้ง้ช้ฎ้ณ้ถ้ท้ธ้ป้ฝ้ฟ้ž€้ž‰้ž•้ž–้ž—้ž™้žš้žž้žŸ้žข้žฌ้žฎ้žฑ้žฒ้žต้žถ้žธ้žน้žบ้žผ้žพ้žฟ้Ÿ้Ÿ„้Ÿ…้Ÿ‡้Ÿ‰้ŸŠ้ŸŒ้Ÿ้ŸŽ้Ÿ้Ÿ‘้Ÿ”้Ÿ—้Ÿ˜้Ÿ™้Ÿ้Ÿž้Ÿ ้Ÿ›้Ÿก้Ÿค้Ÿฏ้Ÿฑ้Ÿด้Ÿท้Ÿธ้Ÿบ้ ‡้ Š้ ™้ ้ Ž้ ”้ –้ œ้ ž้  ้ ฃ้ ฆ"], +["8fe8a1","้ ซ้ ฎ้ ฏ้ ฐ้ ฒ้ ณ้ ต้ ฅ้ พ้ก„้ก‡้กŠ้ก‘้ก’้ก“้ก–้ก—้ก™้กš้กข้กฃ้กฅ้กฆ้กช้กฌ้ขซ้ขญ้ขฎ้ขฐ้ขด้ขท้ขธ้ขบ้ขป้ขฟ้ฃ‚้ฃ…้ฃˆ้ฃŒ้ฃก้ฃฃ้ฃฅ้ฃฆ้ฃง้ฃช้ฃณ้ฃถ้ค‚้ค‡้คˆ้ค‘้ค•้ค–้ค—้คš้ค›้คœ้คŸ้คข้คฆ้คง้คซ้คฑ",4,"้คน้คบ้คป้คผ้ฅ€้ฅ้ฅ†้ฅ‡้ฅˆ้ฅ้ฅŽ้ฅ”้ฅ˜้ฅ™้ฅ›้ฅœ้ฅž้ฅŸ้ฅ ้ฆ›้ฆ้ฆŸ้ฆฆ้ฆฐ้ฆฑ้ฆฒ้ฆต"], +["8fe9a1","้ฆน้ฆบ้ฆฝ้ฆฟ้งƒ้ง‰้ง“้ง”้ง™้งš้งœ้งž้งง้งช้งซ้งฌ้งฐ้งด้งต้งน้งฝ้งพ้จ‚้จƒ้จ„้จ‹้จŒ้จ้จ‘้จ–้จž้จ ้จข้จฃ้จค้จง้จญ้จฎ้จณ้จต้จถ้จธ้ฉ‡้ฉ้ฉ„้ฉŠ้ฉ‹้ฉŒ้ฉŽ้ฉ‘้ฉ”้ฉ–้ฉ้ชช้ชฌ้ชฎ้ชฏ้ชฒ้ชด้ชต้ชถ้ชน้ชป้ชพ้ชฟ้ซ้ซƒ้ซ†้ซˆ้ซŽ้ซ้ซ’้ซ•้ซ–้ซ—้ซ›้ซœ้ซ ้ซค้ซฅ้ซง้ซฉ้ซฌ้ซฒ้ซณ้ซต้ซน้ซบ้ซฝ้ซฟ",4], +["8feaa1","้ฌ„้ฌ…้ฌˆ้ฌ‰้ฌ‹้ฌŒ้ฌ้ฌŽ้ฌ้ฌ’้ฌ–้ฌ™้ฌ›้ฌœ้ฌ ้ฌฆ้ฌซ้ฌญ้ฌณ้ฌด้ฌต้ฌท้ฌน้ฌบ้ฌฝ้ญˆ้ญ‹้ญŒ้ญ•้ญ–้ญ—้ญ›้ญž้ญก้ญฃ้ญฅ้ญฆ้ญจ้ญช",4,"้ญณ้ญต้ญท้ญธ้ญน้ญฟ้ฎ€้ฎ„้ฎ…้ฎ†้ฎ‡้ฎ‰้ฎŠ้ฎ‹้ฎ้ฎ้ฎ้ฎ”้ฎš้ฎ้ฎž้ฎฆ้ฎง้ฎฉ้ฎฌ้ฎฐ้ฎฑ้ฎฒ้ฎท้ฎธ้ฎป้ฎผ้ฎพ้ฎฟ้ฏ้ฏ‡้ฏˆ้ฏŽ้ฏ้ฏ—้ฏ˜้ฏ้ฏŸ้ฏฅ้ฏง้ฏช้ฏซ้ฏฏ้ฏณ้ฏท้ฏธ"], +["8feba1","้ฏน้ฏบ้ฏฝ้ฏฟ้ฐ€้ฐ‚้ฐ‹้ฐ้ฐ‘้ฐ–้ฐ˜้ฐ™้ฐš้ฐœ้ฐž้ฐข้ฐฃ้ฐฆ",4,"้ฐฑ้ฐต้ฐถ้ฐท้ฐฝ้ฑ้ฑƒ้ฑ„้ฑ…้ฑ‰้ฑŠ้ฑŽ้ฑ้ฑ้ฑ“้ฑ”้ฑ–้ฑ˜้ฑ›้ฑ้ฑž้ฑŸ้ฑฃ้ฑฉ้ฑช้ฑœ้ฑซ้ฑจ้ฑฎ้ฑฐ้ฑฒ้ฑต้ฑท้ฑป้ณฆ้ณฒ้ณท้ณน้ด‹้ด‚้ด‘้ด—้ด˜้ดœ้ด้ดž้ดฏ้ดฐ้ดฒ้ดณ้ดด้ดบ้ดผ้ต…้ดฝ้ต‚้ตƒ้ต‡้ตŠ้ต“้ต”้ตŸ้ตฃ้ตข้ตฅ้ตฉ้ตช้ตซ้ตฐ้ตถ้ตท้ตป"], +["8feca1","้ตผ้ตพ้ถƒ้ถ„้ถ†้ถŠ้ถ้ถŽ้ถ’้ถ“้ถ•้ถ–้ถ—้ถ˜้ถก้ถช้ถฌ้ถฎ้ถฑ้ถต้ถน้ถผ้ถฟ้ทƒ้ท‡้ท‰้ทŠ้ท”้ท•้ท–้ท—้ทš้ทž้ทŸ้ท ้ทฅ้ทง้ทฉ้ทซ้ทฎ้ทฐ้ทณ้ทด้ทพ้ธŠ้ธ‚้ธ‡้ธŽ้ธ้ธ‘้ธ’้ธ•้ธ–้ธ™้ธœ้ธ้นบ้นป้นผ้บ€้บ‚้บƒ้บ„้บ…้บ‡้บŽ้บ้บ–้บ˜้บ›้บž้บค้บจ้บฌ้บฎ้บฏ้บฐ้บณ้บด้บต้ป†้ปˆ้ป‹้ป•้ปŸ้ปค้ปง้ปฌ้ปญ้ปฎ้ปฐ้ปฑ้ปฒ้ปต"], +["8feda1","้ปธ้ปฟ้ผ‚้ผƒ้ผ‰้ผ้ผ้ผ‘้ผ’้ผ”้ผ–้ผ—้ผ™้ผš้ผ›้ผŸ้ผข้ผฆ้ผช้ผซ้ผฏ้ผฑ้ผฒ้ผด้ผท้ผน้ผบ้ผผ้ผฝ้ผฟ้ฝ้ฝƒ",4,"้ฝ“้ฝ•้ฝ–้ฝ—้ฝ˜้ฝš้ฝ้ฝž้ฝจ้ฝฉ้ฝญ",4,"้ฝณ้ฝต้ฝบ้ฝฝ้พ้พ้พ‘้พ’้พ”้พ–้พ—้พž้พก้พข้พฃ้พฅ"] +] diff --git a/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json b/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json new file mode 100644 index 0000000..85c6934 --- /dev/null +++ b/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json @@ -0,0 +1 @@ +{"uChars":[128,165,169,178,184,216,226,235,238,244,248,251,253,258,276,284,300,325,329,334,364,463,465,467,469,471,473,475,477,506,594,610,712,716,730,930,938,962,970,1026,1104,1106,8209,8215,8218,8222,8231,8241,8244,8246,8252,8365,8452,8454,8458,8471,8482,8556,8570,8596,8602,8713,8720,8722,8726,8731,8737,8740,8742,8748,8751,8760,8766,8777,8781,8787,8802,8808,8816,8854,8858,8870,8896,8979,9322,9372,9548,9588,9616,9622,9634,9652,9662,9672,9676,9680,9702,9735,9738,9793,9795,11906,11909,11913,11917,11928,11944,11947,11951,11956,11960,11964,11979,12284,12292,12312,12319,12330,12351,12436,12447,12535,12543,12586,12842,12850,12964,13200,13215,13218,13253,13263,13267,13270,13384,13428,13727,13839,13851,14617,14703,14801,14816,14964,15183,15471,15585,16471,16736,17208,17325,17330,17374,17623,17997,18018,18212,18218,18301,18318,18760,18811,18814,18820,18823,18844,18848,18872,19576,19620,19738,19887,40870,59244,59336,59367,59413,59417,59423,59431,59437,59443,59452,59460,59478,59493,63789,63866,63894,63976,63986,64016,64018,64021,64025,64034,64037,64042,65074,65093,65107,65112,65127,65132,65375,65510,65536],"gbChars":[0,36,38,45,50,81,89,95,96,100,103,104,105,109,126,133,148,172,175,179,208,306,307,308,309,310,311,312,313,341,428,443,544,545,558,741,742,749,750,805,819,820,7922,7924,7925,7927,7934,7943,7944,7945,7950,8062,8148,8149,8152,8164,8174,8236,8240,8262,8264,8374,8380,8381,8384,8388,8390,8392,8393,8394,8396,8401,8406,8416,8419,8424,8437,8439,8445,8482,8485,8496,8521,8603,8936,8946,9046,9050,9063,9066,9076,9092,9100,9108,9111,9113,9131,9162,9164,9218,9219,11329,11331,11334,11336,11346,11361,11363,11366,11370,11372,11375,11389,11682,11686,11687,11692,11694,11714,11716,11723,11725,11730,11736,11982,11989,12102,12336,12348,12350,12384,12393,12395,12397,12510,12553,12851,12962,12973,13738,13823,13919,13933,14080,14298,14585,14698,15583,15847,16318,16434,16438,16481,16729,17102,17122,17315,17320,17402,17418,17859,17909,17911,17915,17916,17936,17939,17961,18664,18703,18814,18962,19043,33469,33470,33471,33484,33485,33490,33497,33501,33505,33513,33520,33536,33550,37845,37921,37948,38029,38038,38064,38065,38066,38069,38075,38076,38078,39108,39109,39113,39114,39115,39116,39265,39394,189000]} \ No newline at end of file diff --git a/node_modules/iconv-lite/encodings/tables/gbk-added.json b/node_modules/iconv-lite/encodings/tables/gbk-added.json new file mode 100644 index 0000000..b742e36 --- /dev/null +++ b/node_modules/iconv-lite/encodings/tables/gbk-added.json @@ -0,0 +1,56 @@ +[ +["a140","๎“†",62], +["a180","๎”…",32], +["a240","๎”ฆ",62], +["a280","๎•ฅ",32], +["a2ab","๎ฆ",5], +["a2e3","โ‚ฌ๎ญ"], +["a2ef","๎ฎ๎ฏ"], +["a2fd","๎ฐ๎ฑ"], +["a340","๎–†",62], +["a380","๎—…",31,"ใ€€"], +["a440","๎—ฆ",62], +["a480","๎˜ฅ",32], +["a4f4","๎ฒ",10], +["a540","๎™†",62], +["a580","๎š…",32], +["a5f7","๎ฝ",7], +["a640","๎šฆ",62], +["a680","๎›ฅ",32], +["a6b9","๎ž…",7], +["a6d9","๎ž",6], +["a6ec","๎ž”๎ž•"], +["a6f3","๎ž–"], +["a6f6","๎ž—",8], +["a740","๎œ†",62], +["a780","๎…",32], +["a7c2","๎ž ",14], +["a7f2","๎žฏ",12], +["a896","๎žผ",10], +["a8bc","แธฟ"], +["a8bf","วน"], +["a8c1","๎Ÿ‰๎ŸŠ๎Ÿ‹๎ŸŒ"], +["a8ea","๎Ÿ",20], +["a958","๎Ÿข"], +["a95b","๎Ÿฃ"], +["a95d","๎Ÿค๎Ÿฅ๎Ÿฆ"], +["a989","ใ€พโฟฐ",11], +["a997","๎Ÿด",12], +["a9f0","๎ ",14], +["aaa1","๎€€",93], +["aba1","๎ž",93], +["aca1","๎‚ผ",93], +["ada1","๎„š",93], +["aea1","๎…ธ",93], +["afa1","๎‡–",93], +["d7fa","๎ ",4], +["f8a1","๎ˆด",93], +["f9a1","๎Š’",93], +["faa1","๎‹ฐ",93], +["fba1","๎Ž",93], +["fca1","๎Žฌ",93], +["fda1","๎Š",93], +["fe50","โบ๎ –๎ —๎ ˜โบ„ใ‘ณใ‘‡โบˆโบ‹๎ žใ–žใ˜šใ˜ŽโบŒโบ—ใฅฎใค˜๎ ฆใงใงŸใฉณใง๎ ซ๎ ฌใญŽใฑฎใณ โบง๎ ฑ๎ ฒโบชไ–ไ…ŸโบฎไŒทโบณโบถโบท๎ ปไŽฑไŽฌโบปไไ“–ไ™กไ™Œ๎กƒ"], +["fe80","ไœฃไœฉไผไžโปŠไฅ‡ไฅบไฅฝไฆ‚ไฆƒไฆ…ไฆ†ไฆŸไฆ›ไฆทไฆถ๎ก”๎ก•ไฒฃไฒŸไฒ ไฒกไฑทไฒขได“",6,"ไถฎ๎กค๎‘จ",93], +["8135f437","๎Ÿ‡"] +] diff --git a/node_modules/iconv-lite/encodings/tables/shiftjis.json b/node_modules/iconv-lite/encodings/tables/shiftjis.json new file mode 100644 index 0000000..5a3a43c --- /dev/null +++ b/node_modules/iconv-lite/encodings/tables/shiftjis.json @@ -0,0 +1,125 @@ +[ +["0","\u0000",128], +["a1","๏ฝก",62], +["8140","ใ€€ใ€ใ€‚๏ผŒ๏ผŽใƒป๏ผš๏ผ›๏ผŸ๏ผใ‚›ใ‚œยด๏ฝ€ยจ๏ผพ๏ฟฃ๏ผฟใƒฝใƒพใ‚ใ‚žใ€ƒไปใ€…ใ€†ใ€‡ใƒผโ€•โ€๏ผ๏ผผ๏ฝžโˆฅ๏ฝœโ€ฆโ€ฅโ€˜โ€™โ€œโ€๏ผˆ๏ผ‰ใ€”ใ€•๏ผป๏ผฝ๏ฝ›๏ฝใ€ˆ",9,"๏ผ‹๏ผยฑร—"], +["8180","รท๏ผโ‰ ๏ผœ๏ผžโ‰ฆโ‰งโˆžโˆดโ™‚โ™€ยฐโ€ฒโ€ณโ„ƒ๏ฟฅ๏ผ„๏ฟ ๏ฟก๏ผ…๏ผƒ๏ผ†๏ผŠ๏ผ ยงโ˜†โ˜…โ—‹โ—โ—Žโ—‡โ—†โ–กโ– โ–ณโ–ฒโ–ฝโ–ผโ€ปใ€’โ†’โ†โ†‘โ†“ใ€“"], +["81b8","โˆˆโˆ‹โІโЇโŠ‚โŠƒโˆชโˆฉ"], +["81c8","โˆงโˆจ๏ฟขโ‡’โ‡”โˆ€โˆƒ"], +["81da","โˆ โŠฅโŒ’โˆ‚โˆ‡โ‰กโ‰’โ‰ชโ‰ซโˆšโˆฝโˆโˆตโˆซโˆฌ"], +["81f0","โ„ซโ€ฐโ™ฏโ™ญโ™ชโ€ โ€กยถ"], +["81fc","โ—ฏ"], +["824f","๏ผ",9], +["8260","๏ผก",25], +["8281","๏ฝ",25], +["829f","ใ",82], +["8340","ใ‚ก",62], +["8380","ใƒ ",22], +["839f","ฮ‘",16,"ฮฃ",6], +["83bf","ฮฑ",16,"ฯƒ",6], +["8440","ะ",5,"ะะ–",25], +["8470","ะฐ",5,"ั‘ะถ",7], +["8480","ะพ",17], +["849f","โ”€โ”‚โ”Œโ”โ”˜โ””โ”œโ”ฌโ”คโ”ดโ”ผโ”โ”ƒโ”โ”“โ”›โ”—โ”ฃโ”ณโ”ซโ”ปโ•‹โ” โ”ฏโ”จโ”ทโ”ฟโ”โ”ฐโ”ฅโ”ธโ•‚"], +["8740","โ‘ ",19,"โ… ",9], +["875f","ใ‰ใŒ”ใŒขใใŒ˜ใŒงใŒƒใŒถใ‘ใ—ใŒใŒฆใŒฃใŒซใŠใŒปใŽœใŽใŽžใŽŽใŽใ„ใŽก"], +["877e","ใป"], +["8780","ใ€ใ€Ÿโ„–ใโ„กใŠค",4,"ใˆฑใˆฒใˆนใพใฝใผโ‰’โ‰กโˆซโˆฎโˆ‘โˆšโŠฅโˆ โˆŸโŠฟโˆตโˆฉโˆช"], +["889f","ไบœๅ”–ๅจƒ้˜ฟๅ“€ๆ„›ๆŒจๅงถ้€ข่‘ต่Œœ็ฉๆ‚ชๆกๆธฅๆ—ญ่‘ฆ่Šฆ้ฏตๆข“ๅœงๆ–กๆ‰ฑๅฎ›ๅง่™ป้ฃด็ตข็ถพ้ฎŽๆˆ–็ฒŸ่ขทๅฎ‰ๅบตๆŒ‰ๆš—ๆกˆ้—‡้žๆไปฅไผŠไฝไพๅ‰ๅ›ฒๅคทๅง”ๅจๅฐ‰ๆƒŸๆ„ๆ…ฐๆ˜“ๆค…็‚บ็•็•ฐ็งป็ถญ็ทฏ่ƒƒ่Ž่กฃ่ฌ‚้•้บๅŒปไบ•ไบฅๅŸŸ่‚ฒ้ƒ็ฃฏไธ€ๅฃฑๆบข้€ธ็จฒ่Œจ่Š‹้ฐฏๅ…ๅฐๅ’ฝๅ“กๅ› ๅงปๅผ•้ฃฒๆทซ่ƒค่”ญ"], +["8940","้™ข้™ฐ้š ้Ÿปๅ‹ๅณๅฎ‡็ƒ็พฝ่ฟ‚้›จๅฏ้ตœ็ชบไธ‘็ข“่‡ผๆธฆๅ˜˜ๅ”„ๆฌ่”š้ฐปๅงฅๅŽฉๆตฆ็“œ้–ๅ™‚ไบ‘้‹้›ฒ่้คŒๅกๅ–ถๅฌฐๅฝฑๆ˜ ๆ›ณๆ „ๆฐธๆณณๆดฉ็‘›็›ˆ็ฉŽ้ ด่‹ฑ่ก›่ฉ ้‹ญๆถฒ็–ซ็›Š้ง…ๆ‚ฆ่ฌ่ถŠ้–ฒๆฆŽๅŽญๅ††"], +["8980","ๅœ’ๅ ฐๅฅ„ๅฎดๅปถๆ€จๆŽฉๆดๆฒฟๆผ”็‚Ž็„”็…™็‡•็Œฟ็ธ่‰ถ่‹‘่–—้ ้‰›้ด›ๅกฉๆ–ผๆฑš็”ฅๅ‡นๅคฎๅฅฅๅพ€ๅฟœๆŠผๆ—บๆจชๆฌงๆฎด็Ž‹็ฟ่ฅ–้ดฌ้ดŽ้ป„ๅฒกๆฒ–่ปๅ„„ๅฑ‹ๆ†ถ่‡†ๆกถ็‰กไน™ไฟบๅธๆฉๆธฉ็ฉ้Ÿณไธ‹ๅŒ–ไปฎไฝ•ไผฝไพกไฝณๅŠ ๅฏๅ˜‰ๅคๅซๅฎถๅฏก็ง‘ๆš‡ๆžœๆžถๆญŒๆฒณ็ซ็‚็ฆ็ฆพ็จผ็ฎ‡่Šฑ่‹›่Œ„่ท่ฏ่“่ฆ่ชฒๅ˜ฉ่ฒจ่ฟฆ้Ž้œž่šŠไฟ„ๅณจๆˆ‘็‰™็”ป่‡ฅ่Šฝ่›พ่ณ€้›…้ค“้ง•ไป‹ไผš่งฃๅ›žๅกŠๅฃŠๅปปๅฟซๆ€ชๆ‚”ๆขๆ‡ๆˆ’ๆ‹ๆ”น"], +["8a40","้ญๆ™ฆๆขฐๆตท็ฐ็•Œ็š†็ตต่Šฅ่Ÿน้–‹้šŽ่ฒๅ‡ฑๅŠพๅค–ๅ’ณๅฎณๅด–ๆ…จๆฆ‚ๆถฏ็ข่“‹่ก—่ฉฒ้Žง้ชธๆตฌ้ฆจ่›™ๅžฃๆŸฟ่›Ž้ˆŽๅŠƒๅš‡ๅ„ๅป“ๆ‹กๆ’นๆ ผๆ ธๆฎป็ฒ็ขบ็ฉซ่ฆš่ง’่ตซ่ผƒ้ƒญ้–ฃ้š”้ฉๅญฆๅฒณๆฅฝ้ก้กŽๆŽ›็ฌ ๆจซ"], +["8a80","ๆฉฟๆขถ้ฐๆฝŸๅ‰ฒๅ–ๆฐๆ‹ฌๆดปๆธ‡ๆป‘่‘›่ค่ฝ„ไธ”้ฐนๅถๆค›ๆจบ้ž„ๆ ชๅ…œ็ซƒ่’ฒ้‡œ้ŽŒๅ™›้ดจๆ ข่Œ…่ฑ็ฒฅๅˆˆ่‹…็“ฆไนพไพƒๅ† ๅฏ’ๅˆŠๅ‹˜ๅ‹งๅทปๅ–šๅ ชๅงฆๅฎŒๅฎ˜ๅฏ›ๅนฒๅนนๆ‚ฃๆ„Ÿๆ…ฃๆ†พๆ›ๆ•ขๆŸ‘ๆก“ๆฃบๆฌพๆญ“ๆฑ—ๆผขๆพ—ๆฝ…็’ฐ็”˜็›ฃ็œ‹็ซฟ็ฎก็ฐก็ทฉ็ผถ็ฟฐ่‚่‰ฆ่Žž่ฆณ่ซŒ่ฒซ้‚„้‘‘้–“้–‘้–ข้™ฅ้Ÿ“้คจ่ˆ˜ไธธๅซๅฒธๅทŒ็Žฉ็™Œ็œผๅฒฉ็ฟซ่ด‹้›้ ‘้ก”้ก˜ไผไผŽๅฑๅ–œๅ™จๅŸบๅฅ‡ๅฌ‰ๅฏ„ๅฒๅธŒๅนพๅฟŒๆฎๆœบๆ——ๆ—ขๆœŸๆฃ‹ๆฃ„"], +["8b40","ๆฉŸๅธฐๆฏ…ๆฐ—ๆฑฝ็•ฟ็ฅˆๅญฃ็จ€็ด€ๅพฝ่ฆ่จ˜่ฒด่ตท่ปŒ่ผ้ฃข้จŽ้ฌผไบ€ๅฝๅ„€ๅฆ“ๅฎœๆˆฏๆŠ€ๆ“ฌๆฌบ็Š ็–‘็ฅ‡็พฉ่Ÿป่ชผ่ญฐๆŽฌ่Š้ž ๅ‰ๅƒๅ–ซๆก”ๆฉ˜่ฉฐ็ งๆต้ปๅดๅฎข่„š่™้€†ไธ˜ไน…ไป‡ไผ‘ๅŠๅธๅฎฎๅผ“ๆ€ฅๆ•‘"], +["8b80","ๆœฝๆฑ‚ๆฑฒๆณฃ็ธ็ƒ็ฉถ็ชฎ็ฌˆ็ดš็ณพ็ตฆๆ—ง็‰›ๅŽปๅฑ…ๅทจๆ‹’ๆ‹ ๆŒ™ๆธ ่™š่จฑ่ท้‹ธๆผ็ฆฆ้ญšไบจไบซไบฌไพ›ไพ ๅƒ‘ๅ…‡็ซถๅ…ฑๅ‡ถๅ”ๅŒกๅฟๅซๅ–ฌๅขƒๅณกๅผทๅฝŠๆ€ฏๆๆญๆŒŸๆ•™ๆฉ‹ๆณ็‹‚็‹ญ็Ÿฏ่ƒธ่„…่ˆˆ่•Ž้ƒท้ก้Ÿฟ้ฅ—้ฉšไปฐๅ‡ๅฐญๆšๆฅญๅฑ€ๆ›ฒๆฅต็މๆก็ฒๅƒ…ๅ‹คๅ‡ๅทพ้Œฆๆ–คๆฌฃๆฌฝ็ด็ฆ็ฆฝ็ญ‹็ทŠ่Šน่Œ่กฟ่ฅŸ่ฌน่ฟ‘้‡‘ๅŸ้Š€ไนๅ€ถๅฅๅŒบ็‹—็Ž–็Ÿฉ่‹ฆ่บฏ้ง†้งˆ้ง’ๅ…ทๆ„š่™žๅ–ฐ็ฉบๅถๅฏ“้‡้š…ไธฒๆซ›้‡งๅฑ‘ๅฑˆ"], +["8c40","ๆŽ˜็ชŸๆฒ“้ด่ฝก็ชช็†Š้šˆ็ฒ‚ๆ —็นฐๆก‘้ฌๅ‹ฒๅ›่–ซ่จ“็พค่ป้ƒกๅฆ่ขˆ็ฅไฟ‚ๅ‚พๅˆ‘ๅ…„ๅ•“ๅœญ็ชๅž‹ๅฅ‘ๅฝขๅพ„ๆตๆ…ถๆ…งๆ†ฉๆŽฒๆบๆ•ฌๆ™ฏๆก‚ๆธ“็•ฆ็จฝ็ณป็ตŒ็ถ™็น‹็ฝซ่ŒŽ่Š่›่จˆ่ฉฃ่ญฆ่ปฝ้ š้ถ่Šธ่ฟŽ้ฏจ"], +["8c80","ๅЇๆˆŸๆ’ƒๆฟ€้š™ๆกๅ‚‘ๆฌ ๆฑบๆฝ”็ฉด็ต่ก€่จฃๆœˆไปถๅ€นๅ€ฆๅฅๅ…ผๅˆธๅ‰ฃๅ–งๅœๅ …ๅซŒๅปบๆ†ฒๆ‡ธๆ‹ณๆฒๆคœๆจฉ็‰ฝ็Šฌ็Œฎ็ ”็กฏ็ตน็œŒ่‚ฉ่ฆ‹่ฌ™่ณข่ป’้ฃ้ต้™บ้ก•้จ“้นธๅ…ƒๅŽŸๅŽณๅนปๅผฆๆธ›ๆบ็Ž„็พ็ตƒ่ˆท่จ€่ซบ้™ไนŽๅ€‹ๅคๅ‘ผๅ›บๅง‘ๅญคๅทฑๅบซๅผงๆˆธๆ•…ๆžฏๆน–็‹็ณŠ่ขด่‚ก่ƒก่ฐ่™Ž่ช‡่ทจ้ˆท้›‡้กง้ผ“ไบ”ไบ’ไผๅˆๅ‘‰ๅพๅจฏๅพŒๅพกๆ‚ŸๆขงๆชŽ็‘š็ข่ชž่ชค่ญท้†ไนž้ฏ‰ไบคไฝผไพฏๅ€™ๅ€–ๅ…‰ๅ…ฌๅŠŸๅŠนๅ‹พๅŽšๅฃๅ‘"], +["8d40","ๅŽๅ–‰ๅ‘ๅžขๅฅฝๅญ”ๅญๅฎๅทฅๅทงๅททๅนธๅบƒๅบšๅบทๅผ˜ๆ’ๆ…ŒๆŠ—ๆ‹˜ๆŽงๆ”ปๆ˜‚ๆ™ƒๆ›ดๆญๆ กๆข—ๆง‹ๆฑŸๆดชๆตฉๆธฏๆบ็”ฒ็š‡็กฌ็จฟ็ณ ็ด…็ด˜็ตž็ถฑ่€•่€ƒ่‚ฏ่‚ฑ่…”่†่ˆช่’่กŒ่กก่ฌ›่ฒข่ณผ้ƒŠ้…ต้‰ฑ็ ฟ้‹ผ้–ค้™"], +["8d80","้ …้ฆ™้ซ˜้ดปๅ‰›ๅŠซๅทๅˆๅฃ•ๆ‹ทๆฟ ่ฑช่ฝŸ้บนๅ…‹ๅˆปๅ‘Šๅ›ฝ็ฉ€้…ท้ต ้ป’็„ๆผ‰่…ฐ็”‘ๅฟฝๆƒš้ชจ็‹›่พผๆญค้ ƒไปŠๅ›ฐๅคๅขพๅฉšๆจๆ‡‡ๆ˜ๆ˜†ๆ นๆขฑๆทท็—•็ดบ่‰ฎ้ญ‚ไบ›ไฝๅ‰ๅ”†ๅตฏๅทฆๅทฎๆŸปๆฒ™็‘ณ็ ‚่ฉ้Ž–่ฃŸๅๅบงๆŒซๅ‚ตๅ‚ฌๅ†ๆœ€ๅ“‰ๅกžๅฆปๅฎฐๅฝฉๆ‰ๆŽกๆ ฝๆญณๆธˆ็ฝ้‡‡็Š€็ •็ ฆ็ฅญๆ–Ž็ดฐ่œ่ฃ่ผ‰้š›ๅ‰คๅœจๆ็ฝช่ฒกๅ†ดๅ‚้˜ชๅ บๆฆŠ่‚ดๅ’ฒๅดŽๅŸผ็ข•้ทบไฝœๅ‰Šๅ’‹ๆพๆ˜จๆœ”ๆŸต็ช„็ญ–็ดข้Œฏๆกœ้ฎญ็ฌนๅŒ™ๅ†Šๅˆท"], +["8e40","ๅฏŸๆ‹ถๆ’ฎๆ“ฆๆœญๆฎบ่–ฉ้›‘็š้ฏ–ๆŒ้Œ†้ฎซ็šฟๆ™’ไธ‰ๅ‚˜ๅ‚ๅฑฑๆƒจๆ’’ๆ•ฃๆกŸ็‡ฆ็Š็”ฃ็ฎ—็บ‚่š•่ฎƒ่ณ›้…ธ้คๆ–ฌๆšซๆฎ‹ไป•ไป”ไผบไฝฟๅˆบๅธๅฒๅ—ฃๅ››ๅฃซๅง‹ๅง‰ๅงฟๅญๅฑๅธ‚ๅธซๅฟ—ๆ€ๆŒ‡ๆ”ฏๅญœๆ–ฏๆ–ฝๆ—จๆžๆญข"], +["8e80","ๆญปๆฐ็…็ฅ‰็ง็ณธ็ด™็ดซ่‚ข่„‚่‡ณ่ฆ–่ฉž่ฉฉ่ฉฆ่ชŒ่ซฎ่ณ‡่ณœ้›Œ้ฃผๆญฏไบ‹ไผผไพๅ…ๅญ—ๅฏบๆ…ˆๆŒๆ™‚ๆฌกๆป‹ๆฒป็ˆพ็’ฝ็—”็ฃ็คบ่€Œ่€ณ่‡ช่’”่พžๆฑ้นฟๅผ่ญ˜้ดซ็ซบ่ปธๅฎ้›ซไธƒๅฑๅŸทๅคฑๅซ‰ๅฎคๆ‚‰ๆนฟๆผ†็–พ่ณชๅฎŸ่”€็ฏ ๅฒๆŸด่Šๅฑก่•Š็ธž่ˆŽๅ†™ๅฐ„ๆจ่ตฆๆ–œ็…ฎ็คพ็ด—่€…่ฌ่ปŠ้ฎ่›‡้‚ชๅ€Ÿๅ‹บๅฐบๆ“็ผ็ˆต้…Œ้‡ˆ้Œซ่‹ฅๅฏ‚ๅผฑๆƒนไธปๅ–ๅฎˆๆ‰‹ๆœฑๆฎŠ็‹ฉ็ ็จฎ่…ซ่ถฃ้…’้ฆ–ๅ„’ๅ—ๅ‘ชๅฏฟๆŽˆๆจน็ถฌ้œ€ๅ›šๅŽๅ‘จ"], +["8f40","ๅฎ—ๅฐฑๅทžไฟฎๆ„ๆ‹พๆดฒ็ง€็ง‹็ต‚็น็ฟ’่‡ญ่ˆŸ่’่ก†่ฅฒ่ฎ่นด่ผฏ้€ฑ้…‹้…ฌ้›†้†œไป€ไฝๅ……ๅๅพ“ๆˆŽๆŸ”ๆฑๆธ‹็ฃ็ธฆ้‡้Šƒๅ”ๅค™ๅฎฟๆท‘็ฅ็ธฎ็ฒ›ๅกพ็†Ÿๅ‡บ่ก“่ฟฐไฟŠๅณปๆ˜ฅ็žฌ็ซฃ่ˆœ้งฟๅ‡†ๅพชๆ—ฌๆฅฏๆฎ‰ๆทณ"], +["8f80","ๆบ–ๆฝค็›พ็ด”ๅทก้ต้†‡้ †ๅ‡ฆๅˆๆ‰€ๆš‘ๆ›™ๆธšๅบถ็ท’็ฝฒๆ›ธ่–ฏ่—ท่ซธๅŠฉๅ™ๅฅณๅบๅพๆ•้‹ค้™คๅ‚ทๅ„Ÿๅ‹ๅŒ ๅ‡ๅฌๅ“จๅ•†ๅ”ฑๅ˜—ๅฅจๅฆพๅจผๅฎตๅฐ†ๅฐๅฐ‘ๅฐšๅบ„ๅบŠๅป ๅฝฐๆ‰ฟๆŠ„ๆ‹›ๆŽŒๆทๆ˜‡ๆ˜Œๆ˜ญๆ™ถๆพๆขขๆจŸๆจตๆฒผๆถˆๆธ‰ๆน˜็„ผ็„ฆ็…ง็—‡็œ็ก็ค็ฅฅ็งฐ็ซ ็ฌ‘็ฒง็ดน่‚–่–่’‹่•‰่ก่ฃณ่จŸ่จผ่ฉ”่ฉณ่ฑก่ณž้†ค้‰ฆ้พ้˜้šœ้ž˜ไธŠไธˆไธžไน—ๅ†—ๅ‰ฐๅŸŽๅ ดๅฃŒๅฌขๅธธๆƒ…ๆ“พๆกๆ–ๆต„็Šถ็•ณ็ฉฃ่’ธ่ญฒ้†ธ้Œ ๅ˜ฑๅŸด้ฃพ"], +["9040","ๆ‹ญๆคๆฎ–็‡ญ็น”่ท่‰ฒ่งฆ้ฃŸ่•่พฑๅฐปไผธไฟกไพตๅ”‡ๅจ ๅฏๅฏฉๅฟƒๆ…ŽๆŒฏๆ–ฐๆ™‹ๆฃฎๆฆ›ๆตธๆทฑ็”ณ็–น็œŸ็ฅž็งฆ็ดณ่‡ฃ่Šฏ่–ช่ฆช่จบ่บซ่พ›้€ฒ้‡้œ‡ไบบไปๅˆƒๅกตๅฃฌๅฐ‹็”šๅฐฝ่…Ž่จŠ่ฟ…้™ฃ้ญ็ฌฅ่ซ้ ˆ้…ขๅ›ณๅŽจ"], +["9080","้€—ๅนๅž‚ๅธฅๆŽจๆฐด็‚Š็ก็ฒ‹็ฟ ่กฐ้‚้…”้Œ้Œ˜้š็‘ž้ซ„ๅด‡ๅตฉๆ•ฐๆžข่ถจ้››ๆฎๆ‰ๆค™่…้ —้›€่ฃพๆพ„ๆ‘บๅฏธไธ–็€ฌ็•ๆ˜ฏๅ‡„ๅˆถๅ‹ขๅง“ๅพๆ€งๆˆๆ”ฟๆ•ดๆ˜Ÿๆ™ดๆฃฒๆ –ๆญฃๆธ…็‰ฒ็”Ÿ็››็ฒพ่–ๅฃฐ่ฃฝ่ฅฟ่ช ่ช“่ซ‹้€้†’้’้™ๆ–‰็จŽ่„†้šปๅธญๆƒœๆˆšๆ–ฅๆ˜”ๆž็Ÿณ็ฉ็ฑ็ธพ่„Š่ฒฌ่ตค่ทก่นŸ็ขฉๅˆ‡ๆ‹™ๆŽฅๆ‘‚ๆŠ˜่จญ็ชƒ็ฏ€่ชฌ้›ช็ตถ่ˆŒ่‰ไป™ๅ…ˆๅƒๅ ๅฎฃๅฐ‚ๅฐ–ๅทๆˆฆๆ‰‡ๆ’ฐๆ “ๆ ดๆณ‰ๆต…ๆด—ๆŸ“ๆฝœ็…Ž็…ฝๆ—‹็ฉฟ็ฎญ็ทš"], +["9140","็นŠ็พจ่…บ่ˆ›่ˆน่–ฆ่ฉฎ่ณŽ่ทต้ธ้ท้Šญ้Š‘้–ƒ้ฎฎๅ‰ๅ–„ๆผธ็„ถๅ…จ็ฆ…็น•่†ณ็ณŽๅ™Œๅก‘ๅฒจๆŽชๆ›พๆ›ฝๆฅš็‹™็–็–Ž็คŽ็ฅ–็งŸ็ฒ—็ด ็ต„่˜‡่จด้˜ป้ก้ผ ๅƒงๅ‰ตๅŒๅขๅ€‰ๅ–ชๅฃฎๅฅ็ˆฝๅฎ‹ๅฑคๅŒๆƒฃๆƒณๆœๆŽƒๆŒฟๆŽป"], +["9180","ๆ“ๆ—ฉๆ›นๅทฃๆงๆงฝๆผ•็‡ฅไบ‰็—ฉ็›ธ็ช“็ณŸ็ท็ถœ่ก่‰่˜่‘ฌ่’ผ่—ป่ฃ…่ตฐ้€้ญ้Ž—้œœ้จ’ๅƒๅข—ๆ†Ž่‡“่”ต่ดˆ้€ ไฟƒๅดๅ‰‡ๅณๆฏๆ‰ๆŸๆธฌ่ถณ้€Ÿไฟ—ๅฑž่ณŠๆ—็ถšๅ’่ข–ๅ…ถๆƒๅญ˜ๅญซๅฐŠๆๆ‘้œไป–ๅคšๅคชๆฑฐ่ฉ‘ๅ”พๅ •ๅฆฅๆƒฐๆ‰“ๆŸ่ˆตๆฅ•้™€้ง„้จจไฝ“ๅ †ๅฏพ่€ๅฒฑๅธฏๅพ…ๆ€ ๆ…‹ๆˆดๆ›ฟๆณฐๆปž่ƒŽ่…ฟ่‹”่ข‹่ฒธ้€€้€ฎ้šŠ้ป›้ฏ›ไปฃๅฐๅคง็ฌฌ้†้กŒ้ทนๆป็€งๅ“ๅ•„ๅฎ…ๆ‰˜ๆŠžๆ‹“ๆฒขๆฟฏ็ข่จ—้ธๆฟ่ซพ่Œธๅ‡ง่›ธๅช"], +["9240","ๅฉไฝ†้”่พฐๅฅช่„ฑๅทฝ็ซช่พฟๆฃš่ฐท็‹ธ้ฑˆๆจฝ่ชฐไธนๅ˜ๅ˜†ๅฆๆ‹…ๆŽขๆ—ฆๆญŽๆทกๆน›็‚ญ็Ÿญ็ซฏ็ฎช็ถป่€ฝ่ƒ†่›‹่ช•้›ๅ›ฃๅฃ‡ๅผพๆ–ญๆš–ๆช€ๆฎต็”ท่ซ‡ๅ€ค็Ÿฅๅœฐๅผ›ๆฅๆ™บๆฑ ็—ด็จš็ฝฎ่‡ด่œ˜้…้ฆณ็ฏ‰็•œ็ซน็ญ‘่“„"], +["9280","้€็งฉ็ช’่Œถๅซก็€ไธญไปฒๅฎ™ๅฟ ๆŠฝๆ˜ผๆŸฑๆณจ่™ซ่กท่จป้…Ž้‹ณ้งๆจ—็€ฆ็Œช่‹ง่‘—่ฒฏไธๅ…†ๅ‡‹ๅ–‹ๅฏตๅธ–ๅธณๅบๅผ”ๅผตๅฝซๅพดๆ‡ฒๆŒ‘ๆšขๆœๆฝฎ็‰’็”บ็œบ่ด่„น่…ธ่ถ่ชฟ่ซœ่ถ…่ทณ้Šš้•ท้ ‚้ณฅๅ‹…ๆ—็›ดๆœ•ๆฒˆ็่ณƒ้Žฎ้™ณๆดฅๅขœๆคŽๆงŒ่ฟฝ้Žš็—›้€šๅกšๆ ‚ๆŽดๆงปไฝƒๆผฌๆŸ˜่พป่”ฆ็ถด้”ๆคฟๆฝฐๅชๅฃทๅฌฌ็ดฌ็ˆชๅŠ้‡ฃ้ถดไบญไฝŽๅœๅตๅ‰ƒ่ฒžๅ‘ˆๅ คๅฎšๅธๅบ•ๅบญๅปทๅผŸๆ‚ŒๆŠตๆŒบๆๆขฏๆฑ€็ข‡็ฆŽ็จ‹็ท ่‰‡่จ‚่ซฆ่น„้€“"], +["9340","้‚ธ้„ญ้‡˜้ผŽๆณฅๆ‘˜ๆ“ขๆ•ตๆปด็š„็ฌ›้ฉ้‘ๆบบๅ“ฒๅพนๆ’ค่ฝ่ฟญ้‰„ๅ…ธๅกซๅคฉๅฑ•ๅบ—ๆทป็บ็”œ่ฒผ่ปข้ก›็‚นไผๆฎฟๆพฑ็”ฐ้›ปๅ…Žๅๅ ตๅก—ๅฆฌๅฑ ๅพ’ๆ–—ๆœๆธก็™ป่Ÿ่ณญ้€”้ƒฝ้็ ฅ็ บๅŠชๅบฆๅœŸๅฅดๆ€’ๅ€’ๅ…šๅ†ฌ"], +["9380","ๅ‡ๅˆ€ๅ”ๅก”ๅก˜ๅฅ—ๅฎ•ๅณถๅถ‹ๆ‚ผๆŠ•ๆญๆฑๆกƒๆขผๆฃŸ็›—ๆท˜ๆนฏๆถ›็ฏ็‡ˆๅฝ“็—˜็ฅท็ญ‰็ญ”็ญ’็ณ–็ตฑๅˆฐ่‘ฃ่•ฉ่—ค่จŽ่ฌ„่ฑ†่ธ้€ƒ้€้™้™ถ้ ญ้จฐ้—˜ๅƒๅ‹•ๅŒๅ ‚ๅฐŽๆ†งๆ’žๆดž็žณ็ซฅ่ƒด่„้“้Š…ๅณ ้ด‡ๅŒฟๅพ—ๅพณๆถœ็‰น็ฃ็ฆฟ็ฏคๆฏ’็‹ฌ่ชญๆ ƒๆฉกๅ‡ธ็ชๆคดๅฑŠ้ณถ่‹ซๅฏ…้…‰็€žๅ™ธๅฑฏๆƒ‡ๆ•ฆๆฒŒ่ฑš้้ “ๅ‘‘ๆ›‡้ˆๅฅˆ้‚ฃๅ†…ไนๅ‡ช่–™่ฌŽ็˜ๆบ้‹ๆฅข้ฆด็ธ„็•ทๅ—ๆฅ ่ปŸ้›ฃๆฑไบŒๅฐผๅผ่ฟฉๅŒ‚่ณ‘่‚‰่™นๅปฟๆ—ฅไนณๅ…ฅ"], +["9440","ๅฆ‚ๅฐฟ้ŸฎไปปๅฆŠๅฟ่ชๆฟก็ฆฐ็ฅขๅฏง่‘ฑ็Œซ็†ฑๅนดๅฟตๆปๆ’š็‡ƒ็ฒ˜ไนƒๅปผไน‹ๅŸœๅšขๆ‚ฉๆฟƒ็ด่ƒฝ่„ณ่†ฟ่พฒ่ฆ—่šคๅทดๆŠŠๆ’ญ่ฆ‡ๆทๆณขๆดพ็ถ็ ดๅฉ†็ฝต่Šญ้ฆฌไฟณๅปƒๆ‹ๆŽ’ๆ•—ๆฏ็›ƒ็‰Œ่ƒŒ่‚บ่ผฉ้…ๅ€ๅŸนๅช’ๆข…"], +["9480","ๆฅณ็…ค็‹ฝ่ฒทๅฃฒ่ณ ้™ช้€™่ฟ็งค็Ÿง่ฉไผฏๅ‰ฅๅšๆ‹ๆŸๆณŠ็™ฝ็ฎ”็ฒ•่ˆถ่–„่ฟซๆ›ๆผ ็ˆ†็ธ›่Žซ้ง้บฆๅ‡ฝ็ฎฑ็กฒ็ฎธ่‚‡็ญˆๆซจๅนก่‚Œ็•‘็• ๅ…ซ้‰ขๆบŒ็™บ้†—้ซชไผ็ฝฐๆŠœ็ญ้–ฅ้ณฉๅ™บๅก™่›ค้šผไผดๅˆคๅŠๅๅ›ๅธ†ๆฌๆ–‘ๆฟๆฐพๆฑŽ็‰ˆ็Šฏ็ญ็•”็น่ˆฌ่—ฉ่ฒฉ็ฏ„้‡†็…ฉ้ ’้ฃฏๆŒฝๆ™ฉ็•ช็›ค็ฃ่•ƒ่›ฎๅŒชๅ‘ๅฆๅฆƒๅบ‡ๅฝผๆ‚ฒๆ‰‰ๆ‰นๆŠซๆ–ๆฏ”ๆณŒ็–ฒ็šฎ็ข‘็ง˜็ท‹็ฝท่‚ฅ่ขซ่ชน่ฒป้ฟ้ž้ฃ›ๆจ‹็ฐธๅ‚™ๅฐพๅพฎๆž‡ๆฏ˜็ต็œ‰็พŽ"], +["9540","้ผปๆŸŠ็จ—ๅŒน็–‹้ซญๅฝฆ่†่ฑ่‚˜ๅผผๅฟ…็•ข็ญ†้€ผๆกงๅงซๅช›็ด็™พ่ฌฌไฟตๅฝชๆจ™ๆฐทๆผ‚็“ข็ฅจ่กจ่ฉ•่ฑนๅปŸๆ็—…็ง’่‹—้Œจ้‹ฒ่’œ่›ญ้ฐญๅ“ๅฝฌๆ–Œๆตœ็€•่ฒง่ณ“้ ปๆ•็“ถไธไป˜ๅŸ ๅคซๅฉฆๅฏŒๅ†จๅธƒๅบœๆ€–ๆ‰ถๆ•ท"], +["9580","ๆ–งๆ™ฎๆตฎ็ˆถ็ฌฆ่…่†š่Š™่ญœ่ฒ ่ณฆ่ตด้˜œ้™„ไพฎๆ’ซๆญฆ่ˆž่‘ก่•ช้ƒจๅฐๆฅ“้ขจ่‘บ่•—ไผๅ‰ฏๅพฉๅน…ๆœ็ฆ่…น่ค‡่ฆ†ๆทตๅผ—ๆ‰•ๆฒธไป็‰ฉ้ฎ’ๅˆ†ๅปๅ™ดๅขณๆ†คๆ‰ฎ็„šๅฅฎ็ฒ‰็ณž็ด›้›ฐๆ–‡่žไธ™ไฝตๅ…ตๅก€ๅนฃๅนณๅผŠๆŸ„ไธฆ่”ฝ้–‰้™›็ฑณ้ ๅƒปๅฃ็™–็ขงๅˆฅ็žฅ่”‘็ฎ†ๅๅค‰็‰‡็ฏ‡็ทจ่พบ่ฟ”้ไพฟๅ‹‰ๅจฉๅผ้žญไฟ่ˆ—้‹ชๅœƒๆ•ๆญฉ็”ซ่ฃœ่ผ”็ฉ‚ๅ‹Ÿๅข“ๆ…•ๆˆŠๆšฎๆฏ็ฐฟ่ฉๅ€ฃไฟธๅŒ…ๅ‘†ๅ ฑๅฅ‰ๅฎๅณฐๅณฏๅดฉๅบ–ๆŠฑๆงๆ”พๆ–นๆœ‹"], +["9640","ๆณ•ๆณก็ƒน็ ฒ็ธซ่ƒž่Šณ่Œ่“ฌ่œ‚่ค’่จช่ฑŠ้‚ฆ้‹’้ฃฝ้ณณ้ตฌไนไบกๅ‚ๅ‰–ๅŠๅฆจๅธฝๅฟ˜ๅฟ™ๆˆฟๆšดๆœ›ๆŸๆฃ’ๅ†’็ดก่‚ช่†จ่ฌ€่ฒŒ่ฒฟ้‰พ้˜ฒๅ ้ ฌๅŒ—ๅƒ•ๅœๅขจๆ’ฒๆœด็‰ง็ฆ็ฉ†้‡ฆๅ‹ƒๆฒกๆฎ†ๅ €ๅนŒๅฅ”ๆœฌ็ฟปๅ‡ก็›†"], +["9680","ๆ‘ฉ็ฃจ้ญ”้บปๅŸ‹ๅฆนๆ˜งๆžšๆฏŽๅ“ฉๆง™ๅน•่†œๆž•้ฎชๆŸพ้ฑ’ๆกไบฆไฟฃๅˆๆŠนๆœซๆฒซ่ฟ„ไพญ็นญ้บฟไธ‡ๆ…ขๆบ€ๆผซ่”“ๅ‘ณๆœช้ญ…ๅทณ็ฎ•ๅฒฌๅฏ†่œœๆนŠ่“‘็จ”่„ˆๅฆ™็ฒๆฐ‘็œ ๅ‹™ๅคข็„ก็‰Ÿ็Ÿ›้œง้ตกๆค‹ๅฉฟๅจ˜ๅ†ฅๅๅ‘ฝๆ˜Ž็›Ÿ่ฟท้Š˜้ณดๅงช็‰ๆป…ๅ…ๆฃ‰็ถฟ็ทฌ้ข้บบๆ‘ธๆจก่Œ‚ๅฆ„ๅญŸๆฏ›็Œ›็›ฒ็ถฒ่€—่’™ๅ„ฒๆœจ้ป™็›ฎๆขๅ‹ฟ้ค…ๅฐคๆˆป็ฑพ่ฒฐๅ•ๆ‚ถ็ด‹้–€ๅŒไนŸๅ†ถๅคœ็ˆบ่€ถ้‡Žๅผฅ็ŸขๅŽ„ๅฝน็ด„่–ฌ่จณ่บ้–ๆŸณ่–ฎ้‘“ๆ„‰ๆ„ˆๆฒน็™’"], +["9740","่ซญ่ผธๅ”ฏไฝ‘ๅ„ชๅ‹‡ๅ‹ๅฎฅๅนฝๆ‚ ๆ†‚ๆ–ๆœ‰ๆŸšๆนงๆถŒ็Œถ็Œท็”ฑ็ฅ่ฃ•่ช˜้Š้‚‘้ƒต้›„่žๅค•ไบˆไฝ™ไธŽ่ช‰่ผฟ้ ๅ‚ญๅนผๅฆ–ๅฎนๅบธๆšๆบๆ“ๆ›œๆฅŠๆง˜ๆด‹ๆบถ็†”็”จ็ชฏ็พŠ่€€่‘‰่“‰่ฆ่ฌก่ธŠ้ฅ้™ฝ้คŠๆ…พๆŠ‘ๆฌฒ"], +["9780","ๆฒƒๆตด็ฟŒ็ฟผๆท€็พ…่žบ่ฃธๆฅ่Žฑ้ ผ้›ทๆด›็ตก่ฝ้…ชไนฑๅตๅตๆฌ„ๆฟซ่—่˜ญ่ฆงๅˆฉๅๅฑฅๆŽๆขจ็†็’ƒ็—ข่ฃ่ฃก้‡Œ้›ข้™ธๅพ‹็އ็ซ‹่‘ŽๆŽ ็•ฅๅЉๆตๆบœ็‰็•™็กซ็ฒ’้š†็ซœ้พไพถๆ…ฎๆ—…่™œไบ†ไบฎๅƒšไธกๅ‡Œๅฏฎๆ–™ๆขๆถผ็ŒŸ็™‚็žญ็จœ็ณง่‰ฏ่ซ’้ผ้‡้™ต้ ˜ๅŠ›็ท‘ๅ€ซๅŽ˜ๆž—ๆท‹็‡็ณ่‡จ่ผช้šฃ้ฑ—้บŸ็‘ ๅกๆถ™็ดฏ้กžไปคไผถไพ‹ๅ†ทๅŠฑๅถบๆ€œ็Žฒ็คผ่‹“้ˆด้šท้›ถ้œŠ้บ—้ฝขๆšฆๆญดๅˆ—ๅŠฃ็ƒˆ่ฃ‚ๅป‰ๆ‹ๆ†ๆผฃ็…‰็ฐพ็ทด่ฏ"], +["9840","่“ฎ้€ฃ้Œฌๅ‘‚้ญฏๆซ“็‚‰่ณ‚่ทฏ้œฒๅŠดๅฉๅปŠๅผ„ๆœ—ๆฅผๆฆ”ๆตชๆผ็‰ข็‹ผ็ฏญ่€่พ่‹้ƒŽๅ…ญ้บ“็ฆ„่‚‹้Œฒ่ซ–ๅ€ญๅ’Œ่ฉฑๆญช่ณ„่„‡ๆƒ‘ๆž ้ทฒไบ™ไบ˜้ฐ่ฉซ่—่•จๆค€ๆนพ็ข—่…•"], +["989f","ๅผŒไธไธ•ไธชไธฑไธถไธผไธฟไน‚ไน–ไน˜ไบ‚ไบ…่ฑซไบŠ่ˆ’ๅผไบŽไบžไบŸไบ ไบขไบฐไบณไบถไปŽไปไป„ไป†ไป‚ไป—ไปžไปญไปŸไปทไผ‰ไฝšไผฐไฝ›ไฝไฝ—ไฝ‡ไฝถไพˆไพไพ˜ไฝปไฝฉไฝฐไพ‘ไฝฏไพ†ไพ–ๅ„˜ไฟ”ไฟŸไฟŽไฟ˜ไฟ›ไฟ‘ไฟšไฟไฟคไฟฅๅ€šๅ€จๅ€”ๅ€ชๅ€ฅๅ€…ไผœไฟถๅ€กๅ€ฉๅ€ฌไฟพไฟฏๅ€‘ๅ€†ๅƒๅ‡ๆœƒๅ•ๅๅˆๅšๅ–ๅฌๅธๅ‚€ๅ‚šๅ‚…ๅ‚ดๅ‚ฒ"], +["9940","ๅƒ‰ๅƒŠๅ‚ณๅƒ‚ๅƒ–ๅƒžๅƒฅๅƒญๅƒฃๅƒฎๅƒนๅƒตๅ„‰ๅ„ๅ„‚ๅ„–ๅ„•ๅ„”ๅ„šๅ„กๅ„บๅ„ทๅ„ผๅ„ปๅ„ฟๅ…€ๅ…’ๅ…Œๅ…”ๅ…ข็ซธๅ…ฉๅ…ชๅ…ฎๅ†€ๅ†‚ๅ›˜ๅ†Œๅ†‰ๅ†ๅ†‘ๅ†“ๅ†•ๅ†–ๅ†คๅ†ฆๅ†ขๅ†ฉๅ†ชๅ†ซๅ†ณๅ†ฑๅ†ฒๅ†ฐๅ†ตๅ†ฝๅ‡…ๅ‡‰ๅ‡›ๅ‡ ่™•ๅ‡ฉๅ‡ญ"], +["9980","ๅ‡ฐๅ‡ตๅ‡พๅˆ„ๅˆ‹ๅˆ”ๅˆŽๅˆงๅˆชๅˆฎๅˆณๅˆนๅ‰ๅ‰„ๅ‰‹ๅ‰Œๅ‰žๅ‰”ๅ‰ชๅ‰ดๅ‰ฉๅ‰ณๅ‰ฟๅ‰ฝๅŠๅŠ”ๅŠ’ๅ‰ฑๅŠˆๅŠ‘่พจ่พงๅŠฌๅŠญๅŠผๅŠตๅ‹ๅ‹ๅ‹—ๅ‹žๅ‹ฃๅ‹ฆ้ฃญๅ‹ ๅ‹ณๅ‹ตๅ‹ธๅ‹นๅŒ†ๅŒˆ็”ธๅŒๅŒๅŒๅŒ•ๅŒšๅŒฃๅŒฏๅŒฑๅŒณๅŒธๅ€ๅ†ๅ…ไธ—ๅ‰ๅๅ‡–ๅžๅฉๅฎๅค˜ๅปๅทๅŽ‚ๅŽ–ๅŽ ๅŽฆๅŽฅๅŽฎๅŽฐๅŽถๅƒ็ฐ’้›™ๅŸๆ›ผ็‡ฎๅฎๅจๅญๅบๅๅฝๅ‘€ๅฌๅญๅผๅฎๅถๅฉๅๅ‘Žๅ’ๅ‘ตๅ’Žๅ‘Ÿๅ‘ฑๅ‘ทๅ‘ฐๅ’’ๅ‘ปๅ’€ๅ‘ถๅ’„ๅ’ๅ’†ๅ“‡ๅ’ขๅ’ธๅ’ฅๅ’ฌๅ“„ๅ“ˆๅ’จ"], +["9a40","ๅ’ซๅ“‚ๅ’คๅ’พๅ’ผๅ“˜ๅ“ฅๅ“ฆๅ”ๅ””ๅ“ฝๅ“ฎๅ“ญๅ“บๅ“ขๅ”นๅ•€ๅ•ฃๅ•Œๅ”ฎๅ•œๅ•…ๅ•–ๅ•—ๅ”ธๅ”ณๅ•ๅ–™ๅ–€ๅ’ฏๅ–Šๅ–Ÿๅ•ปๅ•พๅ–˜ๅ–žๅ–ฎๅ•ผๅ–ƒๅ–ฉๅ–‡ๅ–จๅ—šๅ—…ๅ—Ÿๅ—„ๅ—œๅ—คๅ—”ๅ˜”ๅ—ทๅ˜–ๅ—พๅ—ฝๅ˜›ๅ—นๅ™Žๅ™็‡Ÿๅ˜ดๅ˜ถๅ˜ฒๅ˜ธ"], +["9a80","ๅ™ซๅ™คๅ˜ฏๅ™ฌๅ™ชๅš†ๅš€ๅšŠๅš ๅš”ๅšๅšฅๅšฎๅšถๅšดๅ›‚ๅšผๅ›ๅ›ƒๅ›€ๅ›ˆๅ›Žๅ›‘ๅ›“ๅ›—ๅ›ฎๅ›นๅœ€ๅ›ฟๅœ„ๅœ‰ๅœˆๅœ‹ๅœๅœ“ๅœ˜ๅœ–ๅ—‡ๅœœๅœฆๅœทๅœธๅŽๅœปๅ€ๅๅฉๅŸ€ๅžˆๅกๅฟๅž‰ๅž“ๅž ๅžณๅžคๅžชๅžฐๅŸƒๅŸ†ๅŸ”ๅŸ’ๅŸ“ๅ ŠๅŸ–ๅŸฃๅ ‹ๅ ™ๅ ๅกฒๅ กๅกขๅก‹ๅกฐๆฏ€ๅก’ๅ ฝๅกนๅข…ๅขนๅขŸๅขซๅขบๅฃžๅขปๅขธๅขฎๅฃ…ๅฃ“ๅฃ‘ๅฃ—ๅฃ™ๅฃ˜ๅฃฅๅฃœๅฃคๅฃŸๅฃฏๅฃบๅฃนๅฃปๅฃผๅฃฝๅค‚ๅคŠๅคๅค›ๆขฆๅคฅๅคฌๅคญๅคฒๅคธๅคพ็ซ’ๅฅ•ๅฅๅฅŽๅฅšๅฅ˜ๅฅขๅฅ ๅฅงๅฅฌๅฅฉ"], +["9b40","ๅฅธๅฆๅฆไฝžไพซๅฆฃๅฆฒๅง†ๅงจๅงœๅฆๅง™ๅงšๅจฅๅจŸๅจ‘ๅจœๅจ‰ๅจšๅฉ€ๅฉฌๅฉ‰ๅจตๅจถๅฉขๅฉชๅชšๅชผๅชพๅซ‹ๅซ‚ๅชฝๅซฃๅซ—ๅซฆๅซฉๅซ–ๅซบๅซปๅฌŒๅฌ‹ๅฌ–ๅฌฒๅซๅฌชๅฌถๅฌพๅญƒๅญ…ๅญ€ๅญ‘ๅญ•ๅญšๅญ›ๅญฅๅญฉๅญฐๅญณๅญตๅญธๆ–ˆๅญบๅฎ€"], +["9b80","ๅฎƒๅฎฆๅฎธๅฏƒๅฏ‡ๅฏ‰ๅฏ”ๅฏๅฏคๅฏฆๅฏขๅฏžๅฏฅๅฏซๅฏฐๅฏถๅฏณๅฐ…ๅฐ‡ๅฐˆๅฐๅฐ“ๅฐ ๅฐขๅฐจๅฐธๅฐนๅฑๅฑ†ๅฑŽๅฑ“ๅฑๅฑๅญฑๅฑฌๅฑฎไนขๅฑถๅฑนๅฒŒๅฒ‘ๅฒ”ๅฆ›ๅฒซๅฒปๅฒถๅฒผๅฒทๅณ…ๅฒพๅณ‡ๅณ™ๅณฉๅณฝๅณบๅณญๅถŒๅณชๅด‹ๅด•ๅด—ๅตœๅดŸๅด›ๅด‘ๅด”ๅดขๅดšๅด™ๅด˜ๅตŒๅต’ๅตŽๅต‹ๅตฌๅตณๅตถๅถ‡ๅถ„ๅถ‚ๅถขๅถๅถฌๅถฎๅถฝๅถๅถทๅถผๅท‰ๅทๅท“ๅท’ๅท–ๅท›ๅทซๅทฒๅทตๅธ‹ๅธšๅธ™ๅธ‘ๅธ›ๅธถๅธทๅน„ๅนƒๅน€ๅนŽๅน—ๅน”ๅนŸๅนขๅนคๅน‡ๅนตๅนถๅนบ้บผๅนฟๅบ ๅปๅป‚ๅปˆๅปๅป"], +["9c40","ๅป–ๅปฃๅปๅปšๅป›ๅปขๅปกๅปจๅปฉๅปฌๅปฑๅปณๅปฐๅปดๅปธๅปพๅผƒๅผ‰ๅฝๅฝœๅผ‹ๅผ‘ๅผ–ๅผฉๅผญๅผธๅฝๅฝˆๅฝŒๅฝŽๅผฏๅฝ‘ๅฝ–ๅฝ—ๅฝ™ๅฝกๅฝญๅฝณๅฝทๅพƒๅพ‚ๅฝฟๅพŠๅพˆๅพ‘ๅพ‡ๅพžๅพ™ๅพ˜ๅพ ๅพจๅพญๅพผๅฟ–ๅฟปๅฟคๅฟธๅฟฑๅฟๆ‚ณๅฟฟๆ€กๆ "], +["9c80","ๆ€™ๆ€ๆ€ฉๆ€Žๆ€ฑๆ€›ๆ€•ๆ€ซๆ€ฆๆ€ๆ€บๆšๆๆชๆทๆŸๆŠๆ†ๆๆฃๆƒๆคๆ‚ๆฌๆซๆ™ๆ‚ๆ‚ๆƒงๆ‚ƒๆ‚šๆ‚„ๆ‚›ๆ‚–ๆ‚—ๆ‚’ๆ‚งๆ‚‹ๆƒกๆ‚ธๆƒ ๆƒ“ๆ‚ดๅฟฐๆ‚ฝๆƒ†ๆ‚ตๆƒ˜ๆ…ๆ„•ๆ„†ๆƒถๆƒทๆ„€ๆƒดๆƒบๆ„ƒๆ„กๆƒปๆƒฑๆ„ๆ„Žๆ…‡ๆ„พๆ„จๆ„งๆ…Šๆ„ฟๆ„ผๆ„ฌๆ„ดๆ„ฝๆ…‚ๆ…„ๆ…ณๆ…ทๆ…˜ๆ…™ๆ…šๆ…ซๆ…ดๆ…ฏๆ…ฅๆ…ฑๆ…Ÿๆ…ๆ…“ๆ…ตๆ†™ๆ†–ๆ†‡ๆ†ฌๆ†”ๆ†šๆ†Šๆ†‘ๆ†ซๆ†ฎๆ‡Œๆ‡Šๆ‡‰ๆ‡ทๆ‡ˆๆ‡ƒๆ‡†ๆ†บๆ‡‹็ฝนๆ‡ๆ‡ฆๆ‡ฃๆ‡ถๆ‡บๆ‡ดๆ‡ฟๆ‡ฝๆ‡ผๆ‡พๆˆ€ๆˆˆๆˆ‰ๆˆๆˆŒๆˆ”ๆˆ›"], +["9d40","ๆˆžๆˆกๆˆชๆˆฎๆˆฐๆˆฒๆˆณๆ‰ๆ‰Žๆ‰žๆ‰ฃๆ‰›ๆ‰ ๆ‰จๆ‰ผๆŠ‚ๆЉๆ‰พๆŠ’ๆŠ“ๆŠ–ๆ‹”ๆŠƒๆŠ”ๆ‹—ๆ‹‘ๆŠปๆ‹ๆ‹ฟๆ‹†ๆ“”ๆ‹ˆๆ‹œๆ‹Œๆ‹Šๆ‹‚ๆ‹‡ๆŠ›ๆ‹‰ๆŒŒๆ‹ฎๆ‹ฑๆŒงๆŒ‚ๆŒˆๆ‹ฏๆ‹ตๆๆŒพๆๆœๆๆŽ–ๆŽŽๆŽ€ๆŽซๆถๆŽฃๆŽๆމๆŽŸๆŽตๆซ"], +["9d80","ๆฉๆŽพๆฉๆ€ๆ†ๆฃๆ‰ๆ’ๆถๆ„ๆ–ๆดๆ†ๆ“ๆฆๆถๆ”ๆ—ๆจๆๆ‘งๆ‘ฏๆ‘ถๆ‘Žๆ”ชๆ’•ๆ’“ๆ’ฅๆ’ฉๆ’ˆๆ’ผๆ“šๆ“’ๆ“…ๆ“‡ๆ’ปๆ“˜ๆ“‚ๆ“ฑๆ“ง่ˆ‰ๆ“ ๆ“กๆŠฌๆ“ฃๆ“ฏๆ”ฌๆ“ถๆ“ดๆ“ฒๆ“บๆ”€ๆ“ฝๆ”˜ๆ”œๆ”…ๆ”คๆ”ฃๆ”ซๆ”ดๆ”ตๆ”ทๆ”ถๆ”ธ็•‹ๆ•ˆๆ•–ๆ••ๆ•ๆ•˜ๆ•žๆ•ๆ•ฒๆ•ธๆ–‚ๆ–ƒ่ฎŠๆ–›ๆ–Ÿๆ–ซๆ–ทๆ—ƒๆ—†ๆ—ๆ—„ๆ—Œๆ—’ๆ—›ๆ—™ๆ— ๆ—กๆ—ฑๆฒๆ˜Šๆ˜ƒๆ—ปๆณๆ˜ตๆ˜ถๆ˜ดๆ˜œๆ™ๆ™„ๆ™‰ๆ™ๆ™žๆ™ๆ™คๆ™งๆ™จๆ™Ÿๆ™ขๆ™ฐๆšƒๆšˆๆšŽๆš‰ๆš„ๆš˜ๆšๆ›ๆšนๆ›‰ๆšพๆšผ"], +["9e40","ๆ›„ๆšธๆ›–ๆ›šๆ› ๆ˜ฟๆ›ฆๆ›ฉๆ›ฐๆ›ตๆ›ทๆœๆœ–ๆœžๆœฆๆœง้œธๆœฎๆœฟๆœถๆๆœธๆœทๆ†ๆžๆ ๆ™ๆฃๆคๆž‰ๆฐๆžฉๆผๆชๆžŒๆž‹ๆžฆๆžกๆž…ๆžทๆŸฏๆžดๆŸฌๆžณๆŸฉๆžธๆŸคๆŸžๆŸๆŸขๆŸฎๆžนๆŸŽๆŸ†ๆŸงๆชœๆ žๆก†ๆ ฉๆก€ๆกๆ ฒๆกŽ"], +["9e80","ๆขณๆ ซๆก™ๆกฃๆกทๆกฟๆขŸๆขๆขญๆข”ๆขๆข›ๆขƒๆชฎๆขนๆกดๆขตๆข ๆขบๆคๆขๆกพๆคๆฃŠๆคˆๆฃ˜ๆคขๆคฆๆฃกๆคŒๆฃๆฃ”ๆฃงๆฃ•ๆคถๆค’ๆค„ๆฃ—ๆฃฃๆคฅๆฃนๆฃ ๆฃฏๆคจๆคชๆคšๆคฃๆคกๆฃ†ๆฅนๆฅทๆฅœๆฅธๆฅซๆฅ”ๆฅพๆฅฎๆคนๆฅดๆคฝๆฅ™ๆคฐๆฅกๆฅžๆฅๆฆๆฅชๆฆฒๆฆฎๆงๆฆฟๆงๆง“ๆฆพๆงŽๅฏจๆงŠๆงๆฆปๆงƒๆฆงๆจฎๆฆ‘ๆฆ ๆฆœๆฆ•ๆฆดๆงžๆงจๆจ‚ๆจ›ๆงฟๆฌŠๆงนๆงฒๆงงๆจ…ๆฆฑๆจžๆงญๆจ”ๆงซๆจŠๆจ’ๆซๆจฃๆจ“ๆฉ„ๆจŒๆฉฒๆจถๆฉธๆฉ‡ๆฉขๆฉ™ๆฉฆๆฉˆๆจธๆจขๆชๆชๆช ๆช„ๆชขๆชฃ"], +["9f40","ๆช—่˜—ๆชปๆซƒๆซ‚ๆชธๆชณๆชฌๆซžๆซ‘ๆซŸๆชชๆซšๆซชๆซปๆฌ…่˜–ๆซบๆฌ’ๆฌ–้ฌฑๆฌŸๆฌธๆฌท็›œๆฌน้ฃฎๆญ‡ๆญƒๆญ‰ๆญๆญ™ๆญ”ๆญ›ๆญŸๆญกๆญธๆญนๆญฟๆฎ€ๆฎ„ๆฎƒๆฎๆฎ˜ๆฎ•ๆฎžๆฎคๆฎชๆฎซๆฎฏๆฎฒๆฎฑๆฎณๆฎทๆฎผๆฏ†ๆฏ‹ๆฏ“ๆฏŸๆฏฌๆฏซๆฏณๆฏฏ"], +["9f80","้บพๆฐˆๆฐ“ๆฐ”ๆฐ›ๆฐคๆฐฃๆฑžๆฑ•ๆฑขๆฑชๆฒ‚ๆฒๆฒšๆฒๆฒ›ๆฑพๆฑจๆฑณๆฒ’ๆฒๆณ„ๆณฑๆณ“ๆฒฝๆณ—ๆณ…ๆณๆฒฎๆฒฑๆฒพๆฒบๆณ›ๆณฏๆณ™ๆณชๆดŸ่กๆดถๆดซๆดฝๆดธๆด™ๆดตๆดณๆด’ๆดŒๆตฃๆถ“ๆตคๆตšๆตนๆต™ๆถŽๆถ•ๆฟคๆถ…ๆทนๆธ•ๆธŠๆถตๆท‡ๆทฆๆถธๆท†ๆทฌๆทžๆทŒๆทจๆท’ๆท…ๆทบๆท™ๆทคๆท•ๆทชๆทฎๆธญๆนฎๆธฎๆธ™ๆนฒๆนŸๆธพๆธฃๆนซๆธซๆนถๆนๆธŸๆนƒๆธบๆนŽๆธคๆปฟๆธๆธธๆบ‚ๆบชๆบ˜ๆป‰ๆบทๆป“ๆบฝๆบฏๆป„ๆบฒๆป”ๆป•ๆบๆบฅๆป‚ๆบŸๆฝๆผ‘็ŒๆปฌๆปธๆปพๆผฟๆปฒๆผฑๆปฏๆผฒๆปŒ"], +["e040","ๆผพๆผ“ๆปทๆพ†ๆฝบๆฝธๆพๆพ€ๆฝฏๆฝ›ๆฟณๆฝญๆพ‚ๆฝผๆฝ˜ๆพŽๆพ‘ๆฟ‚ๆฝฆๆพณๆพฃๆพกๆพคๆพนๆฟ†ๆพชๆฟŸๆฟ•ๆฟฌๆฟ”ๆฟ˜ๆฟฑๆฟฎๆฟ›็€‰็€‹ๆฟบ็€‘็€็€ๆฟพ็€›็€šๆฝด็€็€˜็€Ÿ็€ฐ็€พ็€ฒ็‘็ฃ็‚™็‚’็‚ฏ็ƒฑ็‚ฌ็‚ธ็‚ณ็‚ฎ็ƒŸ็ƒ‹็ƒ"], +["e080","็ƒ™็„‰็ƒฝ็„œ็„™็…ฅ็…•็†ˆ็…ฆ็…ข็…Œ็…–็…ฌ็†็‡ป็†„็†•็†จ็†ฌ็‡—็†น็†พ็‡’็‡‰็‡”็‡Ž็‡ ็‡ฌ็‡ง็‡ต็‡ผ็‡น็‡ฟ็ˆ็ˆ็ˆ›็ˆจ็ˆญ็ˆฌ็ˆฐ็ˆฒ็ˆป็ˆผ็ˆฟ็‰€็‰†็‰‹็‰˜็‰ด็‰พ็Š‚็Ё็Ї็Š’็Š–็Šข็Šง็Šน็Šฒ็‹ƒ็‹†็‹„็‹Ž็‹’็‹ข็‹ ็‹ก็‹น็‹ทๅ€็Œ—็ŒŠ็Œœ็Œ–็Œ็Œด็Œฏ็Œฉ็Œฅ็Œพ็Ž็้ป˜็—็ช็จ็ฐ็ธ็ต็ป็บ็ˆ็Žณ็Ž็Žป็€็ฅ็ฎ็ž็’ข็…็‘ฏ็ฅ็ธ็ฒ็บ็‘•็ฟ็‘Ÿ็‘™็‘็‘œ็‘ฉ็‘ฐ็‘ฃ็‘ช็‘ถ็‘พ็’‹็’ž็’ง็“Š็“็“”็ฑ"], +["e140","็“ ็“ฃ็“ง็“ฉ็“ฎ็“ฒ็“ฐ็“ฑ็“ธ็“ท็”„็”ƒ็”…็”Œ็”Ž็”็”•็”“็”ž็”ฆ็”ฌ็”ผ็•„็•็•Š็•‰็•›็•†็•š็•ฉ็•ค็•ง็•ซ็•ญ็•ธ็•ถ็–†็–‡็•ด็–Š็–‰็–‚็–”็–š็–็–ฅ็–ฃ็—‚็–ณ็—ƒ็–ต็–ฝ็–ธ็–ผ็–ฑ็—็—Š็—’็—™็—ฃ็—ž็—พ็—ฟ"], +["e180","็—ผ็˜็—ฐ็—บ็—ฒ็—ณ็˜‹็˜็˜‰็˜Ÿ็˜ง็˜ ็˜ก็˜ข็˜ค็˜ด็˜ฐ็˜ป็™‡็™ˆ็™†็™œ็™˜็™ก็™ข็™จ็™ฉ็™ช็™ง็™ฌ็™ฐ็™ฒ็™ถ็™ธ็™ผ็š€็šƒ็šˆ็š‹็šŽ็š–็š“็š™็šš็šฐ็šด็šธ็šน็šบ็›‚็›็›–็›’็›ž็›ก็›ฅ็›ง็›ช่˜ฏ็›ป็œˆ็œ‡็œ„็œฉ็œค็œž็œฅ็œฆ็œ›็œท็œธ็‡็š็จ็ซ็›็ฅ็ฟ็พ็น็žŽ็ž‹็ž‘็ž ็žž็žฐ็žถ็žน็žฟ็žผ็žฝ็žป็Ÿ‡็Ÿ็Ÿ—็Ÿš็Ÿœ็Ÿฃ็Ÿฎ็Ÿผ็ Œ็ ’็คฆ็  ็คช็ก…็ขŽ็กด็ข†็กผ็ขš็ขŒ็ขฃ็ขต็ขช็ขฏ็ฃ‘็ฃ†็ฃ‹็ฃ”็ขพ็ขผ็ฃ…็ฃŠ็ฃฌ"], +["e240","็ฃง็ฃš็ฃฝ็ฃด็ค‡็ค’็ค‘็ค™็คฌ็คซ็ฅ€็ฅ ็ฅ—็ฅŸ็ฅš็ฅ•็ฅ“็ฅบ็ฅฟ็ฆŠ็ฆ็ฆง้ฝ‹็ฆช็ฆฎ็ฆณ็ฆน็ฆบ็ง‰็ง•็งง็งฌ็งก็งฃ็จˆ็จ็จ˜็จ™็จ ็จŸ็ฆ€็จฑ็จป็จพ็จท็ฉƒ็ฉ—็ฉ‰็ฉก็ฉข็ฉฉ้พ็ฉฐ็ฉน็ฉฝ็ชˆ็ช—็ช•็ช˜็ช–็ชฉ็ซˆ็ชฐ"], +["e280","็ชถ็ซ…็ซ„็ชฟ้‚ƒ็ซ‡็ซŠ็ซ็ซ็ซ•็ซ“็ซ™็ซš็ซ็ซก็ซข็ซฆ็ซญ็ซฐ็ฌ‚็ฌ็ฌŠ็ฌ†็ฌณ็ฌ˜็ฌ™็ฌž็ฌต็ฌจ็ฌถ็ญ็ญบ็ฌ„็ญ็ฌ‹็ญŒ็ญ…็ญต็ญฅ็ญด็ญง็ญฐ็ญฑ็ญฌ็ญฎ็ฎ็ฎ˜็ฎŸ็ฎ็ฎœ็ฎš็ฎ‹็ฎ’็ฎ็ญ็ฎ™็ฏ‹็ฏ็ฏŒ็ฏ็ฎด็ฏ†็ฏ็ฏฉ็ฐ‘็ฐ”็ฏฆ็ฏฅ็ฑ ็ฐ€็ฐ‡็ฐ“็ฏณ็ฏท็ฐ—็ฐ็ฏถ็ฐฃ็ฐง็ฐช็ฐŸ็ฐท็ฐซ็ฐฝ็ฑŒ็ฑƒ็ฑ”็ฑ็ฑ€็ฑ็ฑ˜็ฑŸ็ฑค็ฑ–็ฑฅ็ฑฌ็ฑต็ฒƒ็ฒ็ฒค็ฒญ็ฒข็ฒซ็ฒก็ฒจ็ฒณ็ฒฒ็ฒฑ็ฒฎ็ฒน็ฒฝ็ณ€็ณ…็ณ‚็ณ˜็ณ’็ณœ็ณข้ฌป็ณฏ็ณฒ็ณด็ณถ็ณบ็ด†"], +["e340","็ด‚็ดœ็ด•็ดŠ็ต…็ต‹็ดฎ็ดฒ็ดฟ็ดต็ต†็ตณ็ต–็ตŽ็ตฒ็ตจ็ตฎ็ต็ตฃ็ถ“็ถ‰็ต›็ถ็ตฝ็ถ›็ถบ็ถฎ็ถฃ็ถต็ท‡็ถฝ็ถซ็ธฝ็ถข็ถฏ็ทœ็ถธ็ถŸ็ถฐ็ท˜็ท็ทค็ทž็ทป็ทฒ็ทก็ธ…็ธŠ็ธฃ็ธก็ธ’็ธฑ็ธŸ็ธ‰็ธ‹็ธข็น†็นฆ็ธป็ธต็ธน็นƒ็ธท"], +["e380","็ธฒ็ธบ็นง็น็น–็นž็น™็นš็นน็นช็นฉ็นผ็นป็บƒ็ท•็นฝ่พฎ็นฟ็บˆ็บ‰็บŒ็บ’็บ็บ“็บ”็บ–็บŽ็บ›็บœ็ผธ็ผบ็ฝ…็ฝŒ็ฝ็ฝŽ็ฝ็ฝ‘็ฝ•็ฝ”็ฝ˜็ฝŸ็ฝ ็ฝจ็ฝฉ็ฝง็ฝธ็พ‚็พ†็พƒ็พˆ็พ‡็พŒ็พ”็พž็พ็พš็พฃ็พฏ็พฒ็พน็พฎ็พถ็พธ่ญฑ็ฟ…็ฟ†็ฟŠ็ฟ•็ฟ”็ฟก็ฟฆ็ฟฉ็ฟณ็ฟน้ฃœ่€†่€„่€‹่€’่€˜่€™่€œ่€ก่€จ่€ฟ่€ป่Š่†่’่˜่š่Ÿ่ข่จ่ณ่ฒ่ฐ่ถ่น่ฝ่ฟ่‚„่‚†่‚…่‚›่‚“่‚š่‚ญๅ†่‚ฌ่ƒ›่ƒฅ่ƒ™่ƒ่ƒ„่ƒš่ƒ–่„‰่ƒฏ่ƒฑ่„›่„ฉ่„ฃ่„ฏ่…‹"], +["e440","้š‹่…†่„พ่…“่…‘่ƒผ่…ฑ่…ฎ่…ฅ่…ฆ่…ด่†ƒ่†ˆ่†Š่†€่†‚่† ่†•่†ค่†ฃ่…Ÿ่†“่†ฉ่†ฐ่†ต่†พ่†ธ่†ฝ่‡€่‡‚่†บ่‡‰่‡่‡‘่‡™่‡˜่‡ˆ่‡š่‡Ÿ่‡ ่‡ง่‡บ่‡ป่‡พ่ˆ่ˆ‚่ˆ…่ˆ‡่ˆŠ่ˆ่ˆ่ˆ–่ˆฉ่ˆซ่ˆธ่ˆณ่‰€่‰™่‰˜่‰่‰š่‰Ÿ่‰ค"], +["e480","่‰ข่‰จ่‰ช่‰ซ่ˆฎ่‰ฑ่‰ท่‰ธ่‰พ่Š่Š’่Šซ่ŠŸ่Šป่Šฌ่‹ก่‹ฃ่‹Ÿ่‹’่‹ด่‹ณ่‹บ่Ž“่Œƒ่‹ป่‹น่‹ž่Œ†่‹œ่Œ‰่‹™่Œต่Œด่Œ–่Œฒ่Œฑ่€่Œน่่…่Œฏ่Œซ่Œ—่Œ˜่Ž…่Žš่Žช่ŽŸ่Žข่Ž–่Œฃ่ŽŽ่އ่ŽŠ่ผ่Žต่ณ่ต่Ž ่މ่Žจ่ด่“่ซ่Ž่ฝ่ƒ่˜่‹่่ท่‡่ ่ฒ่่ข่ ่Žฝ่ธ่”†่ป่‘ญ่ช่ผ่•š่’„่‘ท่‘ซ่’ญ่‘ฎ่’‚่‘ฉ่‘†่ฌ่‘ฏ่‘น่ต่“Š่‘ข่’น่’ฟ่’Ÿ่“™่“่’ป่“š่“่“่“†่“–่’ก่”ก่“ฟ่“ด่”—่”˜่”ฌ่”Ÿ่”•่””่“ผ่•€่•ฃ่•˜่•ˆ"], +["e540","่•่˜‚่•‹่••่–€่–ค่–ˆ่–‘่–Š่–จ่•ญ่–”่–›่—ช่–‡่–œ่•ท่•พ่–่—‰่–บ่—่–น่—่—•่—่—ฅ่—œ่—น่˜Š่˜“่˜‹่—พ่—บ่˜†่˜ข่˜š่˜ฐ่˜ฟ่™ไน•่™”่™Ÿ่™ง่™ฑ่š“่šฃ่šฉ่šช่š‹่šŒ่šถ่šฏ่›„่›†่šฐ่›‰่ ฃ่šซ่›”่›ž่›ฉ่›ฌ"], +["e580","่›Ÿ่››่›ฏ่œ’่œ†่œˆ่œ€่œƒ่›ป่œ‘่œ‰่œ่›น่œŠ่œด่œฟ่œท่œป่œฅ่œฉ่œš่ ่Ÿ่ธ่Œ่Ž่ด่—่จ่ฎ่™่“่ฃ่ช่ …่žข่žŸ่ž‚่žฏ่Ÿ‹่žฝ่Ÿ€่Ÿ้›–่žซ่Ÿ„่žณ่Ÿ‡่Ÿ†่žป่Ÿฏ่Ÿฒ่Ÿ ่ ่ ่Ÿพ่Ÿถ่Ÿท่ Ž่Ÿ’่ ‘่ –่ •่ ข่ ก่ ฑ่ ถ่ น่ ง่ ป่ก„่ก‚่ก’่ก™่กž่กข่กซ่ข่กพ่ขž่กต่กฝ่ขต่กฒ่ข‚่ข—่ข’่ขฎ่ข™่ขข่ข่ขค่ขฐ่ขฟ่ขฑ่ฃƒ่ฃ„่ฃ”่ฃ˜่ฃ™่ฃ่ฃน่ค‚่ฃผ่ฃด่ฃจ่ฃฒ่ค„่คŒ่คŠ่ค“่ฅƒ่คž่คฅ่คช่คซ่ฅ่ฅ„่คป่คถ่คธ่ฅŒ่ค่ฅ ่ฅž"], +["e640","่ฅฆ่ฅค่ฅญ่ฅช่ฅฏ่ฅด่ฅท่ฅพ่ฆƒ่ฆˆ่ฆŠ่ฆ“่ฆ˜่ฆก่ฆฉ่ฆฆ่ฆฌ่ฆฏ่ฆฒ่ฆบ่ฆฝ่ฆฟ่ง€่งš่งœ่ง่งง่งด่งธ่จƒ่จ–่จ่จŒ่จ›่จ่จฅ่จถ่ฉ่ฉ›่ฉ’่ฉ†่ฉˆ่ฉผ่ฉญ่ฉฌ่ฉข่ช…่ช‚่ช„่ชจ่ชก่ช‘่ชฅ่ชฆ่ชš่ชฃ่ซ„่ซ่ซ‚่ซš่ซซ่ซณ่ซง"], +["e680","่ซค่ซฑ่ฌ”่ซ ่ซข่ซท่ซž่ซ›่ฌŒ่ฌ‡่ฌš่ซก่ฌ–่ฌ่ฌ—่ฌ ่ฌณ้žซ่ฌฆ่ฌซ่ฌพ่ฌจ่ญ่ญŒ่ญ่ญŽ่ญ‰่ญ–่ญ›่ญš่ญซ่ญŸ่ญฌ่ญฏ่ญด่ญฝ่ฎ€่ฎŒ่ฎŽ่ฎ’่ฎ“่ฎ–่ฎ™่ฎš่ฐบ่ฑ่ฐฟ่ฑˆ่ฑŒ่ฑŽ่ฑ่ฑ•่ฑข่ฑฌ่ฑธ่ฑบ่ฒ‚่ฒ‰่ฒ…่ฒŠ่ฒ่ฒŽ่ฒ”่ฑผ่ฒ˜ๆˆ่ฒญ่ฒช่ฒฝ่ฒฒ่ฒณ่ฒฎ่ฒถ่ณˆ่ณ่ณค่ณฃ่ณš่ณฝ่ณบ่ณป่ด„่ด…่ดŠ่ด‡่ด่ด่ด้ฝŽ่ด“่ณ่ด”่ด–่ตง่ตญ่ตฑ่ตณ่ถ่ถ™่ท‚่ถพ่ถบ่ท่ทš่ท–่ทŒ่ท›่ท‹่ทช่ทซ่ทŸ่ทฃ่ทผ่ธˆ่ธ‰่ทฟ่ธ่ธž่ธ่ธŸ่น‚่ธต่ธฐ่ธด่นŠ"], +["e740","่น‡่น‰่นŒ่น่นˆ่น™่นค่น ่ธช่นฃ่น•่นถ่นฒ่นผ่บ่บ‡่บ…่บ„่บ‹่บŠ่บ“่บ‘่บ”่บ™่บช่บก่บฌ่บฐ่ป†่บฑ่บพ่ป…่ปˆ่ป‹่ป›่ปฃ่ปผ่ปป่ปซ่ปพ่ผŠ่ผ…่ผ•่ผ’่ผ™่ผ“่ผœ่ผŸ่ผ›่ผŒ่ผฆ่ผณ่ผป่ผน่ฝ…่ฝ‚่ผพ่ฝŒ่ฝ‰่ฝ†่ฝŽ่ฝ—่ฝœ"], +["e780","่ฝข่ฝฃ่ฝค่พœ่พŸ่พฃ่พญ่พฏ่พท่ฟš่ฟฅ่ฟข่ฟช่ฟฏ้‚‡่ฟด้€…่ฟน่ฟบ้€‘้€•้€ก้€้€ž้€–้€‹้€ง้€ถ้€ต้€น่ฟธ้้้‘้’้€Ž้‰้€พ้–้˜้ž้จ้ฏ้ถ้šจ้ฒ้‚‚้ฝ้‚้‚€้‚Š้‚‰้‚้‚จ้‚ฏ้‚ฑ้‚ต้ƒข้ƒคๆ‰ˆ้ƒ›้„‚้„’้„™้„ฒ้„ฐ้…Š้…–้…˜้…ฃ้…ฅ้…ฉ้…ณ้…ฒ้†‹้†‰้†‚้†ข้†ซ้†ฏ้†ช้†ต้†ด้†บ้‡€้‡้‡‰้‡‹้‡้‡–้‡Ÿ้‡ก้‡›้‡ผ้‡ต้‡ถ้ˆž้‡ฟ้ˆ”้ˆฌ้ˆ•้ˆ‘้‰ž้‰—้‰…้‰‰้‰ค้‰ˆ้Š•้ˆฟ้‰‹้‰้Šœ้Š–้Š“้Š›้‰š้‹้Šน้Šท้‹ฉ้Œ้‹บ้„้Œฎ"], +["e840","้Œ™้Œข้Œš้Œฃ้Œบ้Œต้Œป้œ้ ้ผ้ฎ้–้Žฐ้Žฌ้Žญ้Ž”้Žน้–้—้จ้ฅ้˜้ƒ้้้ˆ้ค้š้”้“้ƒ้‡้้ถ้ซ้ต้ก้บ้‘้‘’้‘„้‘›้‘ ้‘ข้‘ž้‘ช้ˆฉ้‘ฐ้‘ต้‘ท้‘ฝ้‘š้‘ผ้‘พ้’้‘ฟ้–‚้–‡้–Š้–”้––้–˜้–™"], +["e880","้– ้–จ้–ง้–ญ้–ผ้–ป้–น้–พ้—Šๆฟถ้—ƒ้—้—Œ้—•้—”้—–้—œ้—ก้—ฅ้—ข้˜ก้˜จ้˜ฎ้˜ฏ้™‚้™Œ้™้™‹้™ท้™œ้™ž้™้™Ÿ้™ฆ้™ฒ้™ฌ้š้š˜้š•้š—้šช้šง้šฑ้šฒ้šฐ้šด้šถ้šธ้šน้›Ž้›‹้›‰้›่ฅ้›œ้œ้›•้›น้œ„้œ†้œˆ้œ“้œŽ้œ‘้œ้œ–้œ™้œค้œช้œฐ้œน้œฝ้œพ้„้†้ˆ้‚้‰้œ้ ้ค้ฆ้จๅ‹’้ซ้ฑ้น้ž…้ผ้ž้บ้ž†้ž‹้ž้ž้žœ้žจ้žฆ้žฃ้žณ้žด้Ÿƒ้Ÿ†้Ÿˆ้Ÿ‹้Ÿœ้Ÿญ้ฝ้Ÿฒ็ซŸ้Ÿถ้Ÿต้ ้ Œ้ ธ้ ค้ ก้ ท้ ฝ้ก†้ก้ก‹้กซ้กฏ้กฐ"], +["e940","้กฑ้กด้กณ้ขช้ขฏ้ขฑ้ขถ้ฃ„้ฃƒ้ฃ†้ฃฉ้ฃซ้คƒ้ค‰้ค’้ค”้ค˜้คก้ค้คž้คค้ค ้คฌ้คฎ้คฝ้คพ้ฅ‚้ฅ‰้ฅ…้ฅ้ฅ‹้ฅ‘้ฅ’้ฅŒ้ฅ•้ฆ—้ฆ˜้ฆฅ้ฆญ้ฆฎ้ฆผ้งŸ้ง›้ง้ง˜้ง‘้งญ้งฎ้งฑ้งฒ้งป้งธ้จ้จ้จ…้งข้จ™้จซ้จท้ฉ…้ฉ‚้ฉ€้ฉƒ"], +["e980","้จพ้ฉ•้ฉ้ฉ›้ฉ—้ฉŸ้ฉข้ฉฅ้ฉค้ฉฉ้ฉซ้ฉช้ชญ้ชฐ้ชผ้ซ€้ซ้ซ‘้ซ“้ซ”้ซž้ซŸ้ซข้ซฃ้ซฆ้ซฏ้ซซ้ซฎ้ซด้ซฑ้ซท้ซป้ฌ†้ฌ˜้ฌš้ฌŸ้ฌข้ฌฃ้ฌฅ้ฌง้ฌจ้ฌฉ้ฌช้ฌฎ้ฌฏ้ฌฒ้ญ„้ญƒ้ญ้ญ้ญŽ้ญ‘้ญ˜้ญด้ฎ“้ฎƒ้ฎ‘้ฎ–้ฎ—้ฎŸ้ฎ ้ฎจ้ฎด้ฏ€้ฏŠ้ฎน้ฏ†้ฏ้ฏ‘้ฏ’้ฏฃ้ฏข้ฏค้ฏ”้ฏก้ฐบ้ฏฒ้ฏฑ้ฏฐ้ฐ•้ฐ”้ฐ‰้ฐ“้ฐŒ้ฐ†้ฐˆ้ฐ’้ฐŠ้ฐ„้ฐฎ้ฐ›้ฐฅ้ฐค้ฐก้ฐฐ้ฑ‡้ฐฒ้ฑ†้ฐพ้ฑš้ฑ ้ฑง้ฑถ้ฑธ้ณง้ณฌ้ณฐ้ด‰้ดˆ้ณซ้ดƒ้ด†้ดช้ดฆ้ถฏ้ดฃ้ดŸ้ต„้ด•้ด’้ต้ดฟ้ดพ้ต†้ตˆ"], +["ea40","้ต้ตž้ตค้ต‘้ต้ต™้ตฒ้ถ‰้ถ‡้ถซ้ตฏ้ตบ้ถš้ถค้ถฉ้ถฒ้ท„้ท้ถป้ถธ้ถบ้ท†้ท้ท‚้ท™้ท“้ทธ้ทฆ้ทญ้ทฏ้ทฝ้ธš้ธ›้ธž้นต้นน้นฝ้บ้บˆ้บ‹้บŒ้บ’้บ•้บ‘้บ้บฅ้บฉ้บธ้บช้บญ้ก้ปŒ้ปŽ้ป้ป้ป”้ปœ้ปž้ป้ป ้ปฅ้ปจ้ปฏ"], +["ea80","้ปด้ปถ้ปท้ปน้ปป้ปผ้ปฝ้ผ‡้ผˆ็šท้ผ•้ผก้ผฌ้ผพ้ฝŠ้ฝ’้ฝ”้ฝฃ้ฝŸ้ฝ ้ฝก้ฝฆ้ฝง้ฝฌ้ฝช้ฝท้ฝฒ้ฝถ้พ•้พœ้พ ๅ ฏๆง‡้™็‘คๅ‡œ็†™"], +["ed40","็บŠ่คœ้ˆ้Šˆ่“œไฟ‰็‚ปๆ˜ฑๆฃˆ้‹นๆ›ปๅฝ…ไธจไปกไปผไผ€ไผƒไผนไฝ–ไพ’ไพŠไพšไพ”ไฟๅ€ๅ€ขไฟฟๅ€žๅ†ๅฐๅ‚ๅ‚”ๅƒดๅƒ˜ๅ…Šๅ…คๅ†ๅ†พๅ‡ฌๅˆ•ๅŠœๅŠฆๅ‹€ๅ‹›ๅŒ€ๅŒ‡ๅŒคๅฒๅŽ“ๅŽฒๅ๏จŽๅ’œๅ’Šๅ’ฉๅ“ฟๅ–†ๅ™ๅฅๅžฌๅŸˆๅŸ‡๏จ"], +["ed80","๏จๅขžๅขฒๅค‹ๅฅ“ๅฅ›ๅฅๅฅฃๅฆคๅฆบๅญ–ๅฏ€็”ฏๅฏ˜ๅฏฌๅฐžๅฒฆๅฒบๅณตๅดงๅต“๏จ‘ๅต‚ๅตญๅถธๅถนๅทๅผกๅผดๅฝงๅพทๅฟžๆๆ‚…ๆ‚Šๆƒžๆƒ•ๆ„ ๆƒฒๆ„‘ๆ„ทๆ„ฐๆ†˜ๆˆ“ๆŠฆๆตๆ‘ ๆ’ๆ“Žๆ•Žๆ˜€ๆ˜•ๆ˜ปๆ˜‰ๆ˜ฎๆ˜žๆ˜คๆ™ฅๆ™—ๆ™™๏จ’ๆ™ณๆš™ๆš ๆšฒๆšฟๆ›บๆœŽ๏คฉๆฆๆžปๆก’ๆŸ€ๆ ๆก„ๆฃ๏จ“ๆฅจ๏จ”ๆฆ˜ๆงขๆจฐๆฉซๆฉ†ๆฉณๆฉพๆซขๆซคๆฏ–ๆฐฟๆฑœๆฒ†ๆฑฏๆณšๆด„ๆถ‡ๆตฏๆถ–ๆถฌๆทๆทธๆทฒๆทผๆธนๆนœๆธงๆธผๆบฟๆพˆๆพตๆฟต็€…็€‡็€จ็‚…็‚ซ็„็„„็…œ็…†็…‡๏จ•็‡็‡พ็Šฑ"], +["ee40","็Šพ็Œค๏จ–็ท็Žฝ็‰็–็ฃ็’็‡็ต็ฆ็ช็ฉ็ฎ็‘ข็’‰็’Ÿ็”็•ฏ็š‚็šœ็šž็š›็šฆ๏จ—็†ๅŠฏ็ ก็กŽ็กค็กบ็คฐ๏จ˜๏จ™๏จš็ฆ”๏จ›็ฆ›็ซ‘็ซง๏จœ็ซซ็ฎž๏จ็ตˆ็ตœ็ถท็ถ ็ท–็น’็ฝ‡็พก๏จž่Œ่ข่ฟ่‡่ถ่‘ˆ่’ด่•“่•™"], +["ee80","่•ซ๏จŸ่–ฐ๏จ ๏จก่ ‡่ฃต่จ’่จท่ฉน่ชง่ชพ่ซŸ๏จข่ซถ่ญ“่ญฟ่ณฐ่ณด่ด’่ตถ๏จฃ่ป๏จค๏จฅ้ง้ƒž๏จฆ้„•้„ง้‡š้‡—้‡ž้‡ญ้‡ฎ้‡ค้‡ฅ้ˆ†้ˆ้ˆŠ้ˆบ้‰€้ˆผ้‰Ž้‰™้‰‘้ˆน้‰ง้Šง้‰ท้‰ธ้‹ง้‹—้‹™้‹๏จง้‹•้‹ ้‹“้Œฅ้Œก้‹ป๏จจ้Œž้‹ฟ้Œ้Œ‚้ฐ้—้Žค้†้ž้ธ้ฑ้‘…้‘ˆ้–’๏งœ๏จฉ้š้šฏ้œณ้œป้ƒ้้้‘้•้ก—้กฅ๏จช๏จซ้คง๏จฌ้ฆž้ฉŽ้ซ™้ซœ้ญต้ญฒ้ฎ้ฎฑ้ฎป้ฐ€้ตฐ้ตซ๏จญ้ธ™้ป‘"], +["eeef","โ…ฐ",9,"๏ฟข๏ฟค๏ผ‡๏ผ‚"], +["f040","๎€€",62], +["f080","๎€ฟ",124], +["f140","๎‚ผ",62], +["f180","๎ƒป",124], +["f240","๎…ธ",62], +["f280","๎†ท",124], +["f340","๎ˆด",62], +["f380","๎‰ณ",124], +["f440","๎‹ฐ",62], +["f480","๎Œฏ",124], +["f540","๎Žฌ",62], +["f580","๎ซ",124], +["f640","๎‘จ",62], +["f680","๎’ง",124], +["f740","๎”ค",62], +["f780","๎•ฃ",124], +["f840","๎— ",62], +["f880","๎˜Ÿ",124], +["f940","๎šœ"], +["fa40","โ…ฐ",9,"โ… ",9,"๏ฟข๏ฟค๏ผ‡๏ผ‚ใˆฑโ„–โ„กโˆต็บŠ่คœ้ˆ้Šˆ่“œไฟ‰็‚ปๆ˜ฑๆฃˆ้‹นๆ›ปๅฝ…ไธจไปกไปผไผ€ไผƒไผนไฝ–ไพ’ไพŠไพšไพ”ไฟๅ€ๅ€ขไฟฟๅ€žๅ†ๅฐๅ‚ๅ‚”ๅƒดๅƒ˜ๅ…Š"], +["fa80","ๅ…คๅ†ๅ†พๅ‡ฌๅˆ•ๅŠœๅŠฆๅ‹€ๅ‹›ๅŒ€ๅŒ‡ๅŒคๅฒๅŽ“ๅŽฒๅ๏จŽๅ’œๅ’Šๅ’ฉๅ“ฟๅ–†ๅ™ๅฅๅžฌๅŸˆๅŸ‡๏จ๏จๅขžๅขฒๅค‹ๅฅ“ๅฅ›ๅฅๅฅฃๅฆคๅฆบๅญ–ๅฏ€็”ฏๅฏ˜ๅฏฌๅฐžๅฒฆๅฒบๅณตๅดงๅต“๏จ‘ๅต‚ๅตญๅถธๅถนๅทๅผกๅผดๅฝงๅพทๅฟžๆๆ‚…ๆ‚Šๆƒžๆƒ•ๆ„ ๆƒฒๆ„‘ๆ„ทๆ„ฐๆ†˜ๆˆ“ๆŠฆๆตๆ‘ ๆ’ๆ“Žๆ•Žๆ˜€ๆ˜•ๆ˜ปๆ˜‰ๆ˜ฎๆ˜žๆ˜คๆ™ฅๆ™—ๆ™™๏จ’ๆ™ณๆš™ๆš ๆšฒๆšฟๆ›บๆœŽ๏คฉๆฆๆžปๆก’ๆŸ€ๆ ๆก„ๆฃ๏จ“ๆฅจ๏จ”ๆฆ˜ๆงขๆจฐๆฉซๆฉ†ๆฉณๆฉพๆซขๆซคๆฏ–ๆฐฟๆฑœๆฒ†ๆฑฏๆณšๆด„ๆถ‡ๆตฏ"], +["fb40","ๆถ–ๆถฌๆทๆทธๆทฒๆทผๆธนๆนœๆธงๆธผๆบฟๆพˆๆพตๆฟต็€…็€‡็€จ็‚…็‚ซ็„็„„็…œ็…†็…‡๏จ•็‡็‡พ็Šฑ็Šพ็Œค๏จ–็ท็Žฝ็‰็–็ฃ็’็‡็ต็ฆ็ช็ฉ็ฎ็‘ข็’‰็’Ÿ็”็•ฏ็š‚็šœ็šž็š›็šฆ๏จ—็†ๅŠฏ็ ก็กŽ็กค็กบ็คฐ๏จ˜๏จ™"], +["fb80","๏จš็ฆ”๏จ›็ฆ›็ซ‘็ซง๏จœ็ซซ็ฎž๏จ็ตˆ็ตœ็ถท็ถ ็ท–็น’็ฝ‡็พก๏จž่Œ่ข่ฟ่‡่ถ่‘ˆ่’ด่•“่•™่•ซ๏จŸ่–ฐ๏จ ๏จก่ ‡่ฃต่จ’่จท่ฉน่ชง่ชพ่ซŸ๏จข่ซถ่ญ“่ญฟ่ณฐ่ณด่ด’่ตถ๏จฃ่ป๏จค๏จฅ้ง้ƒž๏จฆ้„•้„ง้‡š้‡—้‡ž้‡ญ้‡ฎ้‡ค้‡ฅ้ˆ†้ˆ้ˆŠ้ˆบ้‰€้ˆผ้‰Ž้‰™้‰‘้ˆน้‰ง้Šง้‰ท้‰ธ้‹ง้‹—้‹™้‹๏จง้‹•้‹ ้‹“้Œฅ้Œก้‹ป๏จจ้Œž้‹ฟ้Œ้Œ‚้ฐ้—้Žค้†้ž้ธ้ฑ้‘…้‘ˆ้–’๏งœ๏จฉ้š้šฏ้œณ้œป้ƒ้้้‘้•้ก—้กฅ๏จช๏จซ้คง๏จฌ้ฆž้ฉŽ้ซ™"], +["fc40","้ซœ้ญต้ญฒ้ฎ้ฎฑ้ฎป้ฐ€้ตฐ้ตซ๏จญ้ธ™้ป‘"] +] diff --git a/node_modules/iconv-lite/encodings/utf16.js b/node_modules/iconv-lite/encodings/utf16.js new file mode 100644 index 0000000..97d0669 --- /dev/null +++ b/node_modules/iconv-lite/encodings/utf16.js @@ -0,0 +1,197 @@ +"use strict"; +var Buffer = require("safer-buffer").Buffer; + +// Note: UTF16-LE (or UCS2) codec is Node.js native. See encodings/internal.js + +// == UTF16-BE codec. ========================================================== + +exports.utf16be = Utf16BECodec; +function Utf16BECodec() { +} + +Utf16BECodec.prototype.encoder = Utf16BEEncoder; +Utf16BECodec.prototype.decoder = Utf16BEDecoder; +Utf16BECodec.prototype.bomAware = true; + + +// -- Encoding + +function Utf16BEEncoder() { +} + +Utf16BEEncoder.prototype.write = function(str) { + var buf = Buffer.from(str, 'ucs2'); + for (var i = 0; i < buf.length; i += 2) { + var tmp = buf[i]; buf[i] = buf[i+1]; buf[i+1] = tmp; + } + return buf; +} + +Utf16BEEncoder.prototype.end = function() { +} + + +// -- Decoding + +function Utf16BEDecoder() { + this.overflowByte = -1; +} + +Utf16BEDecoder.prototype.write = function(buf) { + if (buf.length == 0) + return ''; + + var buf2 = Buffer.alloc(buf.length + 1), + i = 0, j = 0; + + if (this.overflowByte !== -1) { + buf2[0] = buf[0]; + buf2[1] = this.overflowByte; + i = 1; j = 2; + } + + for (; i < buf.length-1; i += 2, j+= 2) { + buf2[j] = buf[i+1]; + buf2[j+1] = buf[i]; + } + + this.overflowByte = (i == buf.length-1) ? buf[buf.length-1] : -1; + + return buf2.slice(0, j).toString('ucs2'); +} + +Utf16BEDecoder.prototype.end = function() { + this.overflowByte = -1; +} + + +// == UTF-16 codec ============================================================= +// Decoder chooses automatically from UTF-16LE and UTF-16BE using BOM and space-based heuristic. +// Defaults to UTF-16LE, as it's prevalent and default in Node. +// http://en.wikipedia.org/wiki/UTF-16 and http://encoding.spec.whatwg.org/#utf-16le +// Decoder default can be changed: iconv.decode(buf, 'utf16', {defaultEncoding: 'utf-16be'}); + +// Encoder uses UTF-16LE and prepends BOM (which can be overridden with addBOM: false). + +exports.utf16 = Utf16Codec; +function Utf16Codec(codecOptions, iconv) { + this.iconv = iconv; +} + +Utf16Codec.prototype.encoder = Utf16Encoder; +Utf16Codec.prototype.decoder = Utf16Decoder; + + +// -- Encoding (pass-through) + +function Utf16Encoder(options, codec) { + options = options || {}; + if (options.addBOM === undefined) + options.addBOM = true; + this.encoder = codec.iconv.getEncoder('utf-16le', options); +} + +Utf16Encoder.prototype.write = function(str) { + return this.encoder.write(str); +} + +Utf16Encoder.prototype.end = function() { + return this.encoder.end(); +} + + +// -- Decoding + +function Utf16Decoder(options, codec) { + this.decoder = null; + this.initialBufs = []; + this.initialBufsLen = 0; + + this.options = options || {}; + this.iconv = codec.iconv; +} + +Utf16Decoder.prototype.write = function(buf) { + if (!this.decoder) { + // Codec is not chosen yet. Accumulate initial bytes. + this.initialBufs.push(buf); + this.initialBufsLen += buf.length; + + if (this.initialBufsLen < 16) // We need more bytes to use space heuristic (see below) + return ''; + + // We have enough bytes -> detect endianness. + var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding); + this.decoder = this.iconv.getDecoder(encoding, this.options); + + var resStr = ''; + for (var i = 0; i < this.initialBufs.length; i++) + resStr += this.decoder.write(this.initialBufs[i]); + + this.initialBufs.length = this.initialBufsLen = 0; + return resStr; + } + + return this.decoder.write(buf); +} + +Utf16Decoder.prototype.end = function() { + if (!this.decoder) { + var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding); + this.decoder = this.iconv.getDecoder(encoding, this.options); + + var resStr = ''; + for (var i = 0; i < this.initialBufs.length; i++) + resStr += this.decoder.write(this.initialBufs[i]); + + var trail = this.decoder.end(); + if (trail) + resStr += trail; + + this.initialBufs.length = this.initialBufsLen = 0; + return resStr; + } + return this.decoder.end(); +} + +function detectEncoding(bufs, defaultEncoding) { + var b = []; + var charsProcessed = 0; + var asciiCharsLE = 0, asciiCharsBE = 0; // Number of ASCII chars when decoded as LE or BE. + + outer_loop: + for (var i = 0; i < bufs.length; i++) { + var buf = bufs[i]; + for (var j = 0; j < buf.length; j++) { + b.push(buf[j]); + if (b.length === 2) { + if (charsProcessed === 0) { + // Check BOM first. + if (b[0] === 0xFF && b[1] === 0xFE) return 'utf-16le'; + if (b[0] === 0xFE && b[1] === 0xFF) return 'utf-16be'; + } + + if (b[0] === 0 && b[1] !== 0) asciiCharsBE++; + if (b[0] !== 0 && b[1] === 0) asciiCharsLE++; + + b.length = 0; + charsProcessed++; + + if (charsProcessed >= 100) { + break outer_loop; + } + } + } + } + + // Make decisions. + // Most of the time, the content has ASCII chars (U+00**), but the opposite (U+**00) is uncommon. + // So, we count ASCII as if it was LE or BE, and decide from that. + if (asciiCharsBE > asciiCharsLE) return 'utf-16be'; + if (asciiCharsBE < asciiCharsLE) return 'utf-16le'; + + // Couldn't decide (likely all zeros or not enough data). + return defaultEncoding || 'utf-16le'; +} + + diff --git a/node_modules/iconv-lite/encodings/utf32.js b/node_modules/iconv-lite/encodings/utf32.js new file mode 100644 index 0000000..2fa900a --- /dev/null +++ b/node_modules/iconv-lite/encodings/utf32.js @@ -0,0 +1,319 @@ +'use strict'; + +var Buffer = require('safer-buffer').Buffer; + +// == UTF32-LE/BE codec. ========================================================== + +exports._utf32 = Utf32Codec; + +function Utf32Codec(codecOptions, iconv) { + this.iconv = iconv; + this.bomAware = true; + this.isLE = codecOptions.isLE; +} + +exports.utf32le = { type: '_utf32', isLE: true }; +exports.utf32be = { type: '_utf32', isLE: false }; + +// Aliases +exports.ucs4le = 'utf32le'; +exports.ucs4be = 'utf32be'; + +Utf32Codec.prototype.encoder = Utf32Encoder; +Utf32Codec.prototype.decoder = Utf32Decoder; + +// -- Encoding + +function Utf32Encoder(options, codec) { + this.isLE = codec.isLE; + this.highSurrogate = 0; +} + +Utf32Encoder.prototype.write = function(str) { + var src = Buffer.from(str, 'ucs2'); + var dst = Buffer.alloc(src.length * 2); + var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE; + var offset = 0; + + for (var i = 0; i < src.length; i += 2) { + var code = src.readUInt16LE(i); + var isHighSurrogate = (0xD800 <= code && code < 0xDC00); + var isLowSurrogate = (0xDC00 <= code && code < 0xE000); + + if (this.highSurrogate) { + if (isHighSurrogate || !isLowSurrogate) { + // There shouldn't be two high surrogates in a row, nor a high surrogate which isn't followed by a low + // surrogate. If this happens, keep the pending high surrogate as a stand-alone semi-invalid character + // (technically wrong, but expected by some applications, like Windows file names). + write32.call(dst, this.highSurrogate, offset); + offset += 4; + } + else { + // Create 32-bit value from high and low surrogates; + var codepoint = (((this.highSurrogate - 0xD800) << 10) | (code - 0xDC00)) + 0x10000; + + write32.call(dst, codepoint, offset); + offset += 4; + this.highSurrogate = 0; + + continue; + } + } + + if (isHighSurrogate) + this.highSurrogate = code; + else { + // Even if the current character is a low surrogate, with no previous high surrogate, we'll + // encode it as a semi-invalid stand-alone character for the same reasons expressed above for + // unpaired high surrogates. + write32.call(dst, code, offset); + offset += 4; + this.highSurrogate = 0; + } + } + + if (offset < dst.length) + dst = dst.slice(0, offset); + + return dst; +}; + +Utf32Encoder.prototype.end = function() { + // Treat any leftover high surrogate as a semi-valid independent character. + if (!this.highSurrogate) + return; + + var buf = Buffer.alloc(4); + + if (this.isLE) + buf.writeUInt32LE(this.highSurrogate, 0); + else + buf.writeUInt32BE(this.highSurrogate, 0); + + this.highSurrogate = 0; + + return buf; +}; + +// -- Decoding + +function Utf32Decoder(options, codec) { + this.isLE = codec.isLE; + this.badChar = codec.iconv.defaultCharUnicode.charCodeAt(0); + this.overflow = []; +} + +Utf32Decoder.prototype.write = function(src) { + if (src.length === 0) + return ''; + + var i = 0; + var codepoint = 0; + var dst = Buffer.alloc(src.length + 4); + var offset = 0; + var isLE = this.isLE; + var overflow = this.overflow; + var badChar = this.badChar; + + if (overflow.length > 0) { + for (; i < src.length && overflow.length < 4; i++) + overflow.push(src[i]); + + if (overflow.length === 4) { + // NOTE: codepoint is a signed int32 and can be negative. + // NOTE: We copied this block from below to help V8 optimize it (it works with array, not buffer). + if (isLE) { + codepoint = overflow[i] | (overflow[i+1] << 8) | (overflow[i+2] << 16) | (overflow[i+3] << 24); + } else { + codepoint = overflow[i+3] | (overflow[i+2] << 8) | (overflow[i+1] << 16) | (overflow[i] << 24); + } + overflow.length = 0; + + offset = _writeCodepoint(dst, offset, codepoint, badChar); + } + } + + // Main loop. Should be as optimized as possible. + for (; i < src.length - 3; i += 4) { + // NOTE: codepoint is a signed int32 and can be negative. + if (isLE) { + codepoint = src[i] | (src[i+1] << 8) | (src[i+2] << 16) | (src[i+3] << 24); + } else { + codepoint = src[i+3] | (src[i+2] << 8) | (src[i+1] << 16) | (src[i] << 24); + } + offset = _writeCodepoint(dst, offset, codepoint, badChar); + } + + // Keep overflowing bytes. + for (; i < src.length; i++) { + overflow.push(src[i]); + } + + return dst.slice(0, offset).toString('ucs2'); +}; + +function _writeCodepoint(dst, offset, codepoint, badChar) { + // NOTE: codepoint is signed int32 and can be negative. We keep it that way to help V8 with optimizations. + if (codepoint < 0 || codepoint > 0x10FFFF) { + // Not a valid Unicode codepoint + codepoint = badChar; + } + + // Ephemeral Planes: Write high surrogate. + if (codepoint >= 0x10000) { + codepoint -= 0x10000; + + var high = 0xD800 | (codepoint >> 10); + dst[offset++] = high & 0xff; + dst[offset++] = high >> 8; + + // Low surrogate is written below. + var codepoint = 0xDC00 | (codepoint & 0x3FF); + } + + // Write BMP char or low surrogate. + dst[offset++] = codepoint & 0xff; + dst[offset++] = codepoint >> 8; + + return offset; +}; + +Utf32Decoder.prototype.end = function() { + this.overflow.length = 0; +}; + +// == UTF-32 Auto codec ============================================================= +// Decoder chooses automatically from UTF-32LE and UTF-32BE using BOM and space-based heuristic. +// Defaults to UTF-32LE. http://en.wikipedia.org/wiki/UTF-32 +// Encoder/decoder default can be changed: iconv.decode(buf, 'utf32', {defaultEncoding: 'utf-32be'}); + +// Encoder prepends BOM (which can be overridden with (addBOM: false}). + +exports.utf32 = Utf32AutoCodec; +exports.ucs4 = 'utf32'; + +function Utf32AutoCodec(options, iconv) { + this.iconv = iconv; +} + +Utf32AutoCodec.prototype.encoder = Utf32AutoEncoder; +Utf32AutoCodec.prototype.decoder = Utf32AutoDecoder; + +// -- Encoding + +function Utf32AutoEncoder(options, codec) { + options = options || {}; + + if (options.addBOM === undefined) + options.addBOM = true; + + this.encoder = codec.iconv.getEncoder(options.defaultEncoding || 'utf-32le', options); +} + +Utf32AutoEncoder.prototype.write = function(str) { + return this.encoder.write(str); +}; + +Utf32AutoEncoder.prototype.end = function() { + return this.encoder.end(); +}; + +// -- Decoding + +function Utf32AutoDecoder(options, codec) { + this.decoder = null; + this.initialBufs = []; + this.initialBufsLen = 0; + this.options = options || {}; + this.iconv = codec.iconv; +} + +Utf32AutoDecoder.prototype.write = function(buf) { + if (!this.decoder) { + // Codec is not chosen yet. Accumulate initial bytes. + this.initialBufs.push(buf); + this.initialBufsLen += buf.length; + + if (this.initialBufsLen < 32) // We need more bytes to use space heuristic (see below) + return ''; + + // We have enough bytes -> detect endianness. + var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding); + this.decoder = this.iconv.getDecoder(encoding, this.options); + + var resStr = ''; + for (var i = 0; i < this.initialBufs.length; i++) + resStr += this.decoder.write(this.initialBufs[i]); + + this.initialBufs.length = this.initialBufsLen = 0; + return resStr; + } + + return this.decoder.write(buf); +}; + +Utf32AutoDecoder.prototype.end = function() { + if (!this.decoder) { + var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding); + this.decoder = this.iconv.getDecoder(encoding, this.options); + + var resStr = ''; + for (var i = 0; i < this.initialBufs.length; i++) + resStr += this.decoder.write(this.initialBufs[i]); + + var trail = this.decoder.end(); + if (trail) + resStr += trail; + + this.initialBufs.length = this.initialBufsLen = 0; + return resStr; + } + + return this.decoder.end(); +}; + +function detectEncoding(bufs, defaultEncoding) { + var b = []; + var charsProcessed = 0; + var invalidLE = 0, invalidBE = 0; // Number of invalid chars when decoded as LE or BE. + var bmpCharsLE = 0, bmpCharsBE = 0; // Number of BMP chars when decoded as LE or BE. + + outer_loop: + for (var i = 0; i < bufs.length; i++) { + var buf = bufs[i]; + for (var j = 0; j < buf.length; j++) { + b.push(buf[j]); + if (b.length === 4) { + if (charsProcessed === 0) { + // Check BOM first. + if (b[0] === 0xFF && b[1] === 0xFE && b[2] === 0 && b[3] === 0) { + return 'utf-32le'; + } + if (b[0] === 0 && b[1] === 0 && b[2] === 0xFE && b[3] === 0xFF) { + return 'utf-32be'; + } + } + + if (b[0] !== 0 || b[1] > 0x10) invalidBE++; + if (b[3] !== 0 || b[2] > 0x10) invalidLE++; + + if (b[0] === 0 && b[1] === 0 && (b[2] !== 0 || b[3] !== 0)) bmpCharsBE++; + if ((b[0] !== 0 || b[1] !== 0) && b[2] === 0 && b[3] === 0) bmpCharsLE++; + + b.length = 0; + charsProcessed++; + + if (charsProcessed >= 100) { + break outer_loop; + } + } + } + } + + // Make decisions. + if (bmpCharsBE - invalidBE > bmpCharsLE - invalidLE) return 'utf-32be'; + if (bmpCharsBE - invalidBE < bmpCharsLE - invalidLE) return 'utf-32le'; + + // Couldn't decide (likely all zeros or not enough data). + return defaultEncoding || 'utf-32le'; +} diff --git a/node_modules/iconv-lite/encodings/utf7.js b/node_modules/iconv-lite/encodings/utf7.js new file mode 100644 index 0000000..eacae34 --- /dev/null +++ b/node_modules/iconv-lite/encodings/utf7.js @@ -0,0 +1,290 @@ +"use strict"; +var Buffer = require("safer-buffer").Buffer; + +// UTF-7 codec, according to https://tools.ietf.org/html/rfc2152 +// See also below a UTF-7-IMAP codec, according to http://tools.ietf.org/html/rfc3501#section-5.1.3 + +exports.utf7 = Utf7Codec; +exports.unicode11utf7 = 'utf7'; // Alias UNICODE-1-1-UTF-7 +function Utf7Codec(codecOptions, iconv) { + this.iconv = iconv; +}; + +Utf7Codec.prototype.encoder = Utf7Encoder; +Utf7Codec.prototype.decoder = Utf7Decoder; +Utf7Codec.prototype.bomAware = true; + + +// -- Encoding + +var nonDirectChars = /[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g; + +function Utf7Encoder(options, codec) { + this.iconv = codec.iconv; +} + +Utf7Encoder.prototype.write = function(str) { + // Naive implementation. + // Non-direct chars are encoded as "+-"; single "+" char is encoded as "+-". + return Buffer.from(str.replace(nonDirectChars, function(chunk) { + return "+" + (chunk === '+' ? '' : + this.iconv.encode(chunk, 'utf16-be').toString('base64').replace(/=+$/, '')) + + "-"; + }.bind(this))); +} + +Utf7Encoder.prototype.end = function() { +} + + +// -- Decoding + +function Utf7Decoder(options, codec) { + this.iconv = codec.iconv; + this.inBase64 = false; + this.base64Accum = ''; +} + +var base64Regex = /[A-Za-z0-9\/+]/; +var base64Chars = []; +for (var i = 0; i < 256; i++) + base64Chars[i] = base64Regex.test(String.fromCharCode(i)); + +var plusChar = '+'.charCodeAt(0), + minusChar = '-'.charCodeAt(0), + andChar = '&'.charCodeAt(0); + +Utf7Decoder.prototype.write = function(buf) { + var res = "", lastI = 0, + inBase64 = this.inBase64, + base64Accum = this.base64Accum; + + // The decoder is more involved as we must handle chunks in stream. + + for (var i = 0; i < buf.length; i++) { + if (!inBase64) { // We're in direct mode. + // Write direct chars until '+' + if (buf[i] == plusChar) { + res += this.iconv.decode(buf.slice(lastI, i), "ascii"); // Write direct chars. + lastI = i+1; + inBase64 = true; + } + } else { // We decode base64. + if (!base64Chars[buf[i]]) { // Base64 ended. + if (i == lastI && buf[i] == minusChar) {// "+-" -> "+" + res += "+"; + } else { + var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), "ascii"); + res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); + } + + if (buf[i] != minusChar) // Minus is absorbed after base64. + i--; + + lastI = i+1; + inBase64 = false; + base64Accum = ''; + } + } + } + + if (!inBase64) { + res += this.iconv.decode(buf.slice(lastI), "ascii"); // Write direct chars. + } else { + var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), "ascii"); + + var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars. + base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future. + b64str = b64str.slice(0, canBeDecoded); + + res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); + } + + this.inBase64 = inBase64; + this.base64Accum = base64Accum; + + return res; +} + +Utf7Decoder.prototype.end = function() { + var res = ""; + if (this.inBase64 && this.base64Accum.length > 0) + res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), "utf16-be"); + + this.inBase64 = false; + this.base64Accum = ''; + return res; +} + + +// UTF-7-IMAP codec. +// RFC3501 Sec. 5.1.3 Modified UTF-7 (http://tools.ietf.org/html/rfc3501#section-5.1.3) +// Differences: +// * Base64 part is started by "&" instead of "+" +// * Direct characters are 0x20-0x7E, except "&" (0x26) +// * In Base64, "," is used instead of "/" +// * Base64 must not be used to represent direct characters. +// * No implicit shift back from Base64 (should always end with '-') +// * String must end in non-shifted position. +// * "-&" while in base64 is not allowed. + + +exports.utf7imap = Utf7IMAPCodec; +function Utf7IMAPCodec(codecOptions, iconv) { + this.iconv = iconv; +}; + +Utf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder; +Utf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder; +Utf7IMAPCodec.prototype.bomAware = true; + + +// -- Encoding + +function Utf7IMAPEncoder(options, codec) { + this.iconv = codec.iconv; + this.inBase64 = false; + this.base64Accum = Buffer.alloc(6); + this.base64AccumIdx = 0; +} + +Utf7IMAPEncoder.prototype.write = function(str) { + var inBase64 = this.inBase64, + base64Accum = this.base64Accum, + base64AccumIdx = this.base64AccumIdx, + buf = Buffer.alloc(str.length*5 + 10), bufIdx = 0; + + for (var i = 0; i < str.length; i++) { + var uChar = str.charCodeAt(i); + if (0x20 <= uChar && uChar <= 0x7E) { // Direct character or '&'. + if (inBase64) { + if (base64AccumIdx > 0) { + bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString('base64').replace(/\//g, ',').replace(/=+$/, ''), bufIdx); + base64AccumIdx = 0; + } + + buf[bufIdx++] = minusChar; // Write '-', then go to direct mode. + inBase64 = false; + } + + if (!inBase64) { + buf[bufIdx++] = uChar; // Write direct character + + if (uChar === andChar) // Ampersand -> '&-' + buf[bufIdx++] = minusChar; + } + + } else { // Non-direct character + if (!inBase64) { + buf[bufIdx++] = andChar; // Write '&', then go to base64 mode. + inBase64 = true; + } + if (inBase64) { + base64Accum[base64AccumIdx++] = uChar >> 8; + base64Accum[base64AccumIdx++] = uChar & 0xFF; + + if (base64AccumIdx == base64Accum.length) { + bufIdx += buf.write(base64Accum.toString('base64').replace(/\//g, ','), bufIdx); + base64AccumIdx = 0; + } + } + } + } + + this.inBase64 = inBase64; + this.base64AccumIdx = base64AccumIdx; + + return buf.slice(0, bufIdx); +} + +Utf7IMAPEncoder.prototype.end = function() { + var buf = Buffer.alloc(10), bufIdx = 0; + if (this.inBase64) { + if (this.base64AccumIdx > 0) { + bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString('base64').replace(/\//g, ',').replace(/=+$/, ''), bufIdx); + this.base64AccumIdx = 0; + } + + buf[bufIdx++] = minusChar; // Write '-', then go to direct mode. + this.inBase64 = false; + } + + return buf.slice(0, bufIdx); +} + + +// -- Decoding + +function Utf7IMAPDecoder(options, codec) { + this.iconv = codec.iconv; + this.inBase64 = false; + this.base64Accum = ''; +} + +var base64IMAPChars = base64Chars.slice(); +base64IMAPChars[','.charCodeAt(0)] = true; + +Utf7IMAPDecoder.prototype.write = function(buf) { + var res = "", lastI = 0, + inBase64 = this.inBase64, + base64Accum = this.base64Accum; + + // The decoder is more involved as we must handle chunks in stream. + // It is forgiving, closer to standard UTF-7 (for example, '-' is optional at the end). + + for (var i = 0; i < buf.length; i++) { + if (!inBase64) { // We're in direct mode. + // Write direct chars until '&' + if (buf[i] == andChar) { + res += this.iconv.decode(buf.slice(lastI, i), "ascii"); // Write direct chars. + lastI = i+1; + inBase64 = true; + } + } else { // We decode base64. + if (!base64IMAPChars[buf[i]]) { // Base64 ended. + if (i == lastI && buf[i] == minusChar) { // "&-" -> "&" + res += "&"; + } else { + var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i), "ascii").replace(/,/g, '/'); + res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); + } + + if (buf[i] != minusChar) // Minus may be absorbed after base64. + i--; + + lastI = i+1; + inBase64 = false; + base64Accum = ''; + } + } + } + + if (!inBase64) { + res += this.iconv.decode(buf.slice(lastI), "ascii"); // Write direct chars. + } else { + var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), "ascii").replace(/,/g, '/'); + + var canBeDecoded = b64str.length - (b64str.length % 8); // Minimal chunk: 2 quads -> 2x3 bytes -> 3 chars. + base64Accum = b64str.slice(canBeDecoded); // The rest will be decoded in future. + b64str = b64str.slice(0, canBeDecoded); + + res += this.iconv.decode(Buffer.from(b64str, 'base64'), "utf16-be"); + } + + this.inBase64 = inBase64; + this.base64Accum = base64Accum; + + return res; +} + +Utf7IMAPDecoder.prototype.end = function() { + var res = ""; + if (this.inBase64 && this.base64Accum.length > 0) + res = this.iconv.decode(Buffer.from(this.base64Accum, 'base64'), "utf16-be"); + + this.inBase64 = false; + this.base64Accum = ''; + return res; +} + + diff --git a/node_modules/iconv-lite/lib/bom-handling.js b/node_modules/iconv-lite/lib/bom-handling.js new file mode 100644 index 0000000..1050872 --- /dev/null +++ b/node_modules/iconv-lite/lib/bom-handling.js @@ -0,0 +1,52 @@ +"use strict"; + +var BOMChar = '\uFEFF'; + +exports.PrependBOM = PrependBOMWrapper +function PrependBOMWrapper(encoder, options) { + this.encoder = encoder; + this.addBOM = true; +} + +PrependBOMWrapper.prototype.write = function(str) { + if (this.addBOM) { + str = BOMChar + str; + this.addBOM = false; + } + + return this.encoder.write(str); +} + +PrependBOMWrapper.prototype.end = function() { + return this.encoder.end(); +} + + +//------------------------------------------------------------------------------ + +exports.StripBOM = StripBOMWrapper; +function StripBOMWrapper(decoder, options) { + this.decoder = decoder; + this.pass = false; + this.options = options || {}; +} + +StripBOMWrapper.prototype.write = function(buf) { + var res = this.decoder.write(buf); + if (this.pass || !res) + return res; + + if (res[0] === BOMChar) { + res = res.slice(1); + if (typeof this.options.stripBOM === 'function') + this.options.stripBOM(); + } + + this.pass = true; + return res; +} + +StripBOMWrapper.prototype.end = function() { + return this.decoder.end(); +} + diff --git a/node_modules/iconv-lite/lib/index.d.ts b/node_modules/iconv-lite/lib/index.d.ts new file mode 100644 index 0000000..99f200f --- /dev/null +++ b/node_modules/iconv-lite/lib/index.d.ts @@ -0,0 +1,41 @@ +/*--------------------------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Licensed under the MIT License. + * REQUIREMENT: This definition is dependent on the @types/node definition. + * Install with `npm install @types/node --save-dev` + *--------------------------------------------------------------------------------------------*/ + +declare module 'iconv-lite' { + // Basic API + export function decode(buffer: Buffer, encoding: string, options?: Options): string; + + export function encode(content: string, encoding: string, options?: Options): Buffer; + + export function encodingExists(encoding: string): boolean; + + // Stream API + export function decodeStream(encoding: string, options?: Options): NodeJS.ReadWriteStream; + + export function encodeStream(encoding: string, options?: Options): NodeJS.ReadWriteStream; + + // Low-level stream APIs + export function getEncoder(encoding: string, options?: Options): EncoderStream; + + export function getDecoder(encoding: string, options?: Options): DecoderStream; +} + +export interface Options { + stripBOM?: boolean; + addBOM?: boolean; + defaultEncoding?: string; +} + +export interface EncoderStream { + write(str: string): Buffer; + end(): Buffer | undefined; +} + +export interface DecoderStream { + write(buf: Buffer): string; + end(): string | undefined; +} diff --git a/node_modules/iconv-lite/lib/index.js b/node_modules/iconv-lite/lib/index.js new file mode 100644 index 0000000..657701c --- /dev/null +++ b/node_modules/iconv-lite/lib/index.js @@ -0,0 +1,180 @@ +"use strict"; + +var Buffer = require("safer-buffer").Buffer; + +var bomHandling = require("./bom-handling"), + iconv = module.exports; + +// All codecs and aliases are kept here, keyed by encoding name/alias. +// They are lazy loaded in `iconv.getCodec` from `encodings/index.js`. +iconv.encodings = null; + +// Characters emitted in case of error. +iconv.defaultCharUnicode = '๏ฟฝ'; +iconv.defaultCharSingleByte = '?'; + +// Public API. +iconv.encode = function encode(str, encoding, options) { + str = "" + (str || ""); // Ensure string. + + var encoder = iconv.getEncoder(encoding, options); + + var res = encoder.write(str); + var trail = encoder.end(); + + return (trail && trail.length > 0) ? Buffer.concat([res, trail]) : res; +} + +iconv.decode = function decode(buf, encoding, options) { + if (typeof buf === 'string') { + if (!iconv.skipDecodeWarning) { + console.error('Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding'); + iconv.skipDecodeWarning = true; + } + + buf = Buffer.from("" + (buf || ""), "binary"); // Ensure buffer. + } + + var decoder = iconv.getDecoder(encoding, options); + + var res = decoder.write(buf); + var trail = decoder.end(); + + return trail ? (res + trail) : res; +} + +iconv.encodingExists = function encodingExists(enc) { + try { + iconv.getCodec(enc); + return true; + } catch (e) { + return false; + } +} + +// Legacy aliases to convert functions +iconv.toEncoding = iconv.encode; +iconv.fromEncoding = iconv.decode; + +// Search for a codec in iconv.encodings. Cache codec data in iconv._codecDataCache. +iconv._codecDataCache = {}; +iconv.getCodec = function getCodec(encoding) { + if (!iconv.encodings) + iconv.encodings = require("../encodings"); // Lazy load all encoding definitions. + + // Canonicalize encoding name: strip all non-alphanumeric chars and appended year. + var enc = iconv._canonicalizeEncoding(encoding); + + // Traverse iconv.encodings to find actual codec. + var codecOptions = {}; + while (true) { + var codec = iconv._codecDataCache[enc]; + if (codec) + return codec; + + var codecDef = iconv.encodings[enc]; + + switch (typeof codecDef) { + case "string": // Direct alias to other encoding. + enc = codecDef; + break; + + case "object": // Alias with options. Can be layered. + for (var key in codecDef) + codecOptions[key] = codecDef[key]; + + if (!codecOptions.encodingName) + codecOptions.encodingName = enc; + + enc = codecDef.type; + break; + + case "function": // Codec itself. + if (!codecOptions.encodingName) + codecOptions.encodingName = enc; + + // The codec function must load all tables and return object with .encoder and .decoder methods. + // It'll be called only once (for each different options object). + codec = new codecDef(codecOptions, iconv); + + iconv._codecDataCache[codecOptions.encodingName] = codec; // Save it to be reused later. + return codec; + + default: + throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '"+enc+"')"); + } + } +} + +iconv._canonicalizeEncoding = function(encoding) { + // Canonicalize encoding name: strip all non-alphanumeric chars and appended year. + return (''+encoding).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g, ""); +} + +iconv.getEncoder = function getEncoder(encoding, options) { + var codec = iconv.getCodec(encoding), + encoder = new codec.encoder(options, codec); + + if (codec.bomAware && options && options.addBOM) + encoder = new bomHandling.PrependBOM(encoder, options); + + return encoder; +} + +iconv.getDecoder = function getDecoder(encoding, options) { + var codec = iconv.getCodec(encoding), + decoder = new codec.decoder(options, codec); + + if (codec.bomAware && !(options && options.stripBOM === false)) + decoder = new bomHandling.StripBOM(decoder, options); + + return decoder; +} + +// Streaming API +// NOTE: Streaming API naturally depends on 'stream' module from Node.js. Unfortunately in browser environments this module can add +// up to 100Kb to the output bundle. To avoid unnecessary code bloat, we don't enable Streaming API in browser by default. +// If you would like to enable it explicitly, please add the following code to your app: +// > iconv.enableStreamingAPI(require('stream')); +iconv.enableStreamingAPI = function enableStreamingAPI(stream_module) { + if (iconv.supportsStreams) + return; + + // Dependency-inject stream module to create IconvLite stream classes. + var streams = require("./streams")(stream_module); + + // Not public API yet, but expose the stream classes. + iconv.IconvLiteEncoderStream = streams.IconvLiteEncoderStream; + iconv.IconvLiteDecoderStream = streams.IconvLiteDecoderStream; + + // Streaming API. + iconv.encodeStream = function encodeStream(encoding, options) { + return new iconv.IconvLiteEncoderStream(iconv.getEncoder(encoding, options), options); + } + + iconv.decodeStream = function decodeStream(encoding, options) { + return new iconv.IconvLiteDecoderStream(iconv.getDecoder(encoding, options), options); + } + + iconv.supportsStreams = true; +} + +// Enable Streaming API automatically if 'stream' module is available and non-empty (the majority of environments). +var stream_module; +try { + stream_module = require("stream"); +} catch (e) {} + +if (stream_module && stream_module.Transform) { + iconv.enableStreamingAPI(stream_module); + +} else { + // In rare cases where 'stream' module is not available by default, throw a helpful exception. + iconv.encodeStream = iconv.decodeStream = function() { + throw new Error("iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it."); + }; +} + +if ("ฤ€" != "\u0100") { + console.error("iconv-lite warning: js files use non-utf8 encoding. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info."); +} diff --git a/node_modules/iconv-lite/lib/streams.js b/node_modules/iconv-lite/lib/streams.js new file mode 100644 index 0000000..a150648 --- /dev/null +++ b/node_modules/iconv-lite/lib/streams.js @@ -0,0 +1,109 @@ +"use strict"; + +var Buffer = require("safer-buffer").Buffer; + +// NOTE: Due to 'stream' module being pretty large (~100Kb, significant in browser environments), +// we opt to dependency-inject it instead of creating a hard dependency. +module.exports = function(stream_module) { + var Transform = stream_module.Transform; + + // == Encoder stream ======================================================= + + function IconvLiteEncoderStream(conv, options) { + this.conv = conv; + options = options || {}; + options.decodeStrings = false; // We accept only strings, so we don't need to decode them. + Transform.call(this, options); + } + + IconvLiteEncoderStream.prototype = Object.create(Transform.prototype, { + constructor: { value: IconvLiteEncoderStream } + }); + + IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) { + if (typeof chunk != 'string') + return done(new Error("Iconv encoding stream needs strings as its input.")); + try { + var res = this.conv.write(chunk); + if (res && res.length) this.push(res); + done(); + } + catch (e) { + done(e); + } + } + + IconvLiteEncoderStream.prototype._flush = function(done) { + try { + var res = this.conv.end(); + if (res && res.length) this.push(res); + done(); + } + catch (e) { + done(e); + } + } + + IconvLiteEncoderStream.prototype.collect = function(cb) { + var chunks = []; + this.on('error', cb); + this.on('data', function(chunk) { chunks.push(chunk); }); + this.on('end', function() { + cb(null, Buffer.concat(chunks)); + }); + return this; + } + + + // == Decoder stream ======================================================= + + function IconvLiteDecoderStream(conv, options) { + this.conv = conv; + options = options || {}; + options.encoding = this.encoding = 'utf8'; // We output strings. + Transform.call(this, options); + } + + IconvLiteDecoderStream.prototype = Object.create(Transform.prototype, { + constructor: { value: IconvLiteDecoderStream } + }); + + IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) { + if (!Buffer.isBuffer(chunk) && !(chunk instanceof Uint8Array)) + return done(new Error("Iconv decoding stream needs buffers as its input.")); + try { + var res = this.conv.write(chunk); + if (res && res.length) this.push(res, this.encoding); + done(); + } + catch (e) { + done(e); + } + } + + IconvLiteDecoderStream.prototype._flush = function(done) { + try { + var res = this.conv.end(); + if (res && res.length) this.push(res, this.encoding); + done(); + } + catch (e) { + done(e); + } + } + + IconvLiteDecoderStream.prototype.collect = function(cb) { + var res = ''; + this.on('error', cb); + this.on('data', function(chunk) { res += chunk; }); + this.on('end', function() { + cb(null, res); + }); + return this; + } + + return { + IconvLiteEncoderStream: IconvLiteEncoderStream, + IconvLiteDecoderStream: IconvLiteDecoderStream, + }; +}; diff --git a/node_modules/iconv-lite/package.json b/node_modules/iconv-lite/package.json new file mode 100644 index 0000000..d351115 --- /dev/null +++ b/node_modules/iconv-lite/package.json @@ -0,0 +1,44 @@ +{ + "name": "iconv-lite", + "description": "Convert character encodings in pure javascript.", + "version": "0.6.3", + "license": "MIT", + "keywords": [ + "iconv", + "convert", + "charset", + "icu" + ], + "author": "Alexander Shtuchkin ", + "main": "./lib/index.js", + "typings": "./lib/index.d.ts", + "homepage": "https://github.com/ashtuchkin/iconv-lite", + "bugs": "https://github.com/ashtuchkin/iconv-lite/issues", + "repository": { + "type": "git", + "url": "git://github.com/ashtuchkin/iconv-lite.git" + }, + "engines": { + "node": ">=0.10.0" + }, + "scripts": { + "coverage": "c8 _mocha --grep .", + "test": "mocha --reporter spec --grep ." + }, + "browser": { + "stream": false + }, + "devDependencies": { + "async": "^3.2.0", + "c8": "^7.2.0", + "errto": "^0.2.1", + "iconv": "^2.3.5", + "mocha": "^3.5.3", + "request": "^2.88.2", + "semver": "^6.3.0", + "unorm": "^1.6.0" + }, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } +} diff --git a/node_modules/is-property/.npmignore b/node_modules/is-property/.npmignore new file mode 100644 index 0000000..8ecfa25 --- /dev/null +++ b/node_modules/is-property/.npmignore @@ -0,0 +1,17 @@ +lib-cov +*.seed +*.log +*.csv +*.dat +*.out +*.pid +*.gz + +pids +logs +results + +npm-debug.log +node_modules/* +*.DS_Store +test/* \ No newline at end of file diff --git a/node_modules/is-property/LICENSE b/node_modules/is-property/LICENSE new file mode 100644 index 0000000..8ce206a --- /dev/null +++ b/node_modules/is-property/LICENSE @@ -0,0 +1,22 @@ + +The MIT License (MIT) + +Copyright (c) 2013 Mikola Lysenko + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/is-property/README.md b/node_modules/is-property/README.md new file mode 100644 index 0000000..ef1d00b --- /dev/null +++ b/node_modules/is-property/README.md @@ -0,0 +1,28 @@ +is-property +=========== +Tests if a property of a JavaScript object can be accessed using the dot (.) notation or if it must be enclosed in brackets, (ie use x[" ... "]) + +Example +------- + +```javascript +var isProperty = require("is-property") + +console.log(isProperty("foo")) //Prints true +console.log(isProperty("0")) //Prints false +``` + +Install +------- + + npm install is-property + +### `require("is-property")(str)` +Checks if str is a property + +* `str` is a string which we will test if it is a property or not + +**Returns** true or false depending if str is a property + +## Credits +(c) 2013 Mikola Lysenko. MIT License \ No newline at end of file diff --git a/node_modules/is-property/is-property.js b/node_modules/is-property/is-property.js new file mode 100644 index 0000000..db58b47 --- /dev/null +++ b/node_modules/is-property/is-property.js @@ -0,0 +1,5 @@ +"use strict" +function isProperty(str) { + return /^[$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc][$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc0-9\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e4-\u08fe\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d02\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19b0-\u19c0\u19c8\u19c9\u19d0-\u19d9\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2-\u1cf4\u1dc0-\u1de6\u1dfc-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8d0-\ua8d9\ua8e0-\ua8f1\ua900-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f]*$/.test(str) +} +module.exports = isProperty \ No newline at end of file diff --git a/node_modules/is-property/package.json b/node_modules/is-property/package.json new file mode 100644 index 0000000..2105f7b --- /dev/null +++ b/node_modules/is-property/package.json @@ -0,0 +1,36 @@ +{ + "name": "is-property", + "version": "1.0.2", + "description": "Tests if a JSON property can be accessed using . syntax", + "main": "is-property.js", + "directories": { + "test": "test" + }, + "dependencies": {}, + "devDependencies": { + "tape": "~1.0.4" + }, + "scripts": { + "test": "tap test/*.js" + }, + "repository": { + "type": "git", + "url": "git://github.com/mikolalysenko/is-property.git" + }, + "keywords": [ + "is", + "property", + "json", + "dot", + "bracket", + ".", + "[]" + ], + "author": "Mikola Lysenko", + "license": "MIT", + "readmeFilename": "README.md", + "gitHead": "0a85ea5b6b1264ea1cdecc6e5cf186adbb3ffc50", + "bugs": { + "url": "https://github.com/mikolalysenko/is-property/issues" + } +} diff --git a/node_modules/long/LICENSE b/node_modules/long/LICENSE new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/node_modules/long/LICENSE @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/node_modules/long/README.md b/node_modules/long/README.md new file mode 100644 index 0000000..ca4b2f8 --- /dev/null +++ b/node_modules/long/README.md @@ -0,0 +1,286 @@ +# long.js + +A Long class for representing a 64 bit two's-complement integer value derived from the [Closure Library](https://github.com/google/closure-library) +for stand-alone use and extended with unsigned support. + +[![Build Status](https://img.shields.io/github/actions/workflow/status/dcodeIO/long.js/test.yml?branch=main&label=test&logo=github)](https://github.com/dcodeIO/long.js/actions/workflows/test.yml) [![Publish Status](https://img.shields.io/github/actions/workflow/status/dcodeIO/long.js/publish.yml?branch=main&label=publish&logo=github)](https://github.com/dcodeIO/long.js/actions/workflows/publish.yml) [![npm](https://img.shields.io/npm/v/long.svg?label=npm&color=007acc&logo=npm)](https://www.npmjs.com/package/long) + +## Background + +As of [ECMA-262 5th Edition](http://ecma262-5.com/ELS5_HTML.htm#Section_8.5), "all the positive and negative integers +whose magnitude is no greater than 253 are representable in the Number type", which is "representing the +doubleprecision 64-bit format IEEE 754 values as specified in the IEEE Standard for Binary Floating-Point Arithmetic". +The [maximum safe integer](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/MAX_SAFE_INTEGER) +in JavaScript is 253-1. + +Example: 264-1 is 1844674407370955**1615** but in JavaScript it evaluates to 1844674407370955**2000**. + +Furthermore, bitwise operators in JavaScript "deal only with integers in the range โˆ’231 through +231โˆ’1, inclusive, or in the range 0 through 232โˆ’1, inclusive. These operators accept any value of +the Number type but first convert each such value to one of 232 integer values." + +In some use cases, however, it is required to be able to reliably work with and perform bitwise operations on the full +64 bits. This is where long.js comes into play. + +## Usage + +The package exports an ECMAScript module with an UMD fallback. + +``` +$> npm install long +``` + +```js +import Long from "long"; + +var value = new Long(0xFFFFFFFF, 0x7FFFFFFF); +console.log(value.toString()); +... +``` + +Note that mixing ESM and CommonJS is not recommended as it yields different classes, albeit with the same functionality. + +### Usage with a CDN + +- From GitHub via [jsDelivr](https://www.jsdelivr.com):
    + `https://cdn.jsdelivr.net/gh/dcodeIO/long.js@TAG/index.js` (ESM) +- From npm via [jsDelivr](https://www.jsdelivr.com):
    + `https://cdn.jsdelivr.net/npm/long@VERSION/index.js` (ESM)
    + `https://cdn.jsdelivr.net/npm/long@VERSION/umd/index.js` (UMD) +- From npm via [unpkg](https://unpkg.com):
    + `https://unpkg.com/long@VERSION/index.js` (ESM)
    + `https://unpkg.com/long@VERSION/umd/index.js` (UMD) + +Replace `TAG` respectively `VERSION` with a [specific version](https://github.com/dcodeIO/long.js/releases) or omit it (not recommended in production) to use main/latest. + +## API + +### Constructor + +- new **Long**(low: `number`, high?: `number`, unsigned?: `boolean`)
    + Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as _signed_ integers. See the from\* functions below for more convenient ways of constructing Longs. + +### Fields + +- Long#**low**: `number`
    + The low 32 bits as a signed value. + +- Long#**high**: `number`
    + The high 32 bits as a signed value. + +- Long#**unsigned**: `boolean`
    + Whether unsigned or not. + +### Constants + +- Long.**ZERO**: `Long`
    + Signed zero. + +- Long.**ONE**: `Long`
    + Signed one. + +- Long.**NEG_ONE**: `Long`
    + Signed negative one. + +- Long.**UZERO**: `Long`
    + Unsigned zero. + +- Long.**UONE**: `Long`
    + Unsigned one. + +- Long.**MAX_VALUE**: `Long`
    + Maximum signed value. + +- Long.**MIN_VALUE**: `Long`
    + Minimum signed value. + +- Long.**MAX_UNSIGNED_VALUE**: `Long`
    + Maximum unsigned value. + +### Utility + +- type **LongLike**: `Long | number | bigint | string`
    + Any value or object that either is or can be converted to a Long. + +- Long.**isLong**(obj: `any`): `boolean`
    + Tests if the specified object is a Long. + +- Long.**fromBits**(lowBits: `number`, highBits: `number`, unsigned?: `boolean`): `Long`
    + Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is assumed to use 32 bits. + +- Long.**fromBytes**(bytes: `number[]`, unsigned?: `boolean`, le?: `boolean`): `Long`
    + Creates a Long from its byte representation. + +- Long.**fromBytesLE**(bytes: `number[]`, unsigned?: `boolean`): `Long`
    + Creates a Long from its little endian byte representation. + +- Long.**fromBytesBE**(bytes: `number[]`, unsigned?: `boolean`): `Long`
    + Creates a Long from its big endian byte representation. + +- Long.**fromInt**(value: `number`, unsigned?: `boolean`): `Long`
    + Returns a Long representing the given 32 bit integer value. + +- Long.**fromNumber**(value: `number`, unsigned?: `boolean`): `Long`
    + Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned. + +- Long.**fromBigInt**(value: `bigint`, unsigned?: `boolean`): `Long`
    + Returns a Long representing the given big integer. + +- Long.**fromString**(str: `string`, unsigned?: `boolean`, radix?: `number`)
    + Long.**fromString**(str: `string`, radix: `number`)
    + Returns a Long representation of the given string, written using the specified radix. + +- Long.**fromValue**(val: `LongLike`, unsigned?: `boolean`): `Long`
    + Converts the specified value to a Long using the appropriate from\* function for its type. + +### Methods + +- Long#**add**(addend: `LongLike`): `Long`
    + Returns the sum of this and the specified Long. + +- Long#**and**(other: `LongLike`): `Long`
    + Returns the bitwise AND of this Long and the specified. + +- Long#**compare**/**comp**(other: `LongLike`): `number`
    + Compares this Long's value with the specified's. Returns `0` if they are the same, `1` if the this is greater and `-1` if the given one is greater. + +- Long#**divide**/**div**(divisor: `LongLike`): `Long`
    + Returns this Long divided by the specified. + +- Long#**equals**/**eq**(other: `LongLike`): `boolean`
    + Tests if this Long's value equals the specified's. + +- Long#**getHighBits**(): `number`
    + Gets the high 32 bits as a signed integer. + +- Long#**getHighBitsUnsigned**(): `number`
    + Gets the high 32 bits as an unsigned integer. + +- Long#**getLowBits**(): `number`
    + Gets the low 32 bits as a signed integer. + +- Long#**getLowBitsUnsigned**(): `number`
    + Gets the low 32 bits as an unsigned integer. + +- Long#**getNumBitsAbs**(): `number`
    + Gets the number of bits needed to represent the absolute value of this Long. + +- Long#**greaterThan**/**gt**(other: `LongLike`): `boolean`
    + Tests if this Long's value is greater than the specified's. + +- Long#**greaterThanOrEqual**/**gte**/**ge**(other: `LongLike`): `boolean`
    + Tests if this Long's value is greater than or equal the specified's. + +- Long#**isEven**(): `boolean`
    + Tests if this Long's value is even. + +- Long#**isNegative**(): `boolean`
    + Tests if this Long's value is negative. + +- Long#**isOdd**(): `boolean`
    + Tests if this Long's value is odd. + +- Long#**isPositive**(): `boolean`
    + Tests if this Long's value is positive or zero. + +- Long#**isSafeInteger**(): `boolean`
    + Tests if this Long can be safely represented as a JavaScript number. + +- Long#**isZero**/**eqz**(): `boolean`
    + Tests if this Long's value equals zero. + +- Long#**lessThan**/**lt**(other: `LongLike`): `boolean`
    + Tests if this Long's value is less than the specified's. + +- Long#**lessThanOrEqual**/**lte**/**le**(other: `LongLike`): `boolean`
    + Tests if this Long's value is less than or equal the specified's. + +- Long#**modulo**/**mod**/**rem**(divisor: `LongLike`): `Long`
    + Returns this Long modulo the specified. + +- Long#**multiply**/**mul**(multiplier: `LongLike`): `Long`
    + Returns the product of this and the specified Long. + +- Long#**negate**/**neg**(): `Long`
    + Negates this Long's value. + +- Long#**not**(): `Long`
    + Returns the bitwise NOT of this Long. + +- Long#**countLeadingZeros**/**clz**(): `number`
    + Returns count leading zeros of this Long. + +- Long#**countTrailingZeros**/**ctz**(): `number`
    + Returns count trailing zeros of this Long. + +- Long#**notEquals**/**neq**/**ne**(other: `LongLike`): `boolean`
    + Tests if this Long's value differs from the specified's. + +- Long#**or**(other: `LongLike`): `Long`
    + Returns the bitwise OR of this Long and the specified. + +- Long#**shiftLeft**/**shl**(numBits: `Long | number`): `Long`
    + Returns this Long with bits shifted to the left by the given amount. + +- Long#**shiftRight**/**shr**(numBits: `Long | number`): `Long`
    + Returns this Long with bits arithmetically shifted to the right by the given amount. + +- Long#**shiftRightUnsigned**/**shru**/**shr_u**(numBits: `Long | number`): `Long`
    + Returns this Long with bits logically shifted to the right by the given amount. + +- Long#**rotateLeft**/**rotl**(numBits: `Long | number`): `Long`
    + Returns this Long with bits rotated to the left by the given amount. + +- Long#**rotateRight**/**rotr**(numBits: `Long | number`): `Long`
    + Returns this Long with bits rotated to the right by the given amount. + +- Long#**subtract**/**sub**(subtrahend: `LongLike`): `Long`
    + Returns the difference of this and the specified Long. + +- Long#**toBytes**(le?: `boolean`): `number[]`
    + Converts this Long to its byte representation. + +- Long#**toBytesLE**(): `number[]`
    + Converts this Long to its little endian byte representation. + +- Long#**toBytesBE**(): `number[]`
    + Converts this Long to its big endian byte representation. + +- Long#**toInt**(): `number`
    + Converts the Long to a 32 bit integer, assuming it is a 32 bit integer. + +- Long#**toNumber**(): `number`
    + Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa). + +- Long#**toBigInt**(): `bigint`
    + Converts the Long to its big integer representation. + +- Long#**toSigned**(): `Long`
    + Converts this Long to signed. + +- Long#**toString**(radix?: `number`): `string`
    + Converts the Long to a string written in the specified radix. + +- Long#**toUnsigned**(): `Long`
    + Converts this Long to unsigned. + +- Long#**xor**(other: `Long | number | string`): `Long`
    + Returns the bitwise XOR of this Long and the given one. + +## WebAssembly support + +[WebAssembly](http://webassembly.org) supports 64-bit integer arithmetic out of the box, hence a [tiny WebAssembly module](./wasm.wat) is used to compute operations like multiplication, division and remainder more efficiently (slow operations like division are around twice as fast), falling back to floating point based computations in JavaScript where WebAssembly is not yet supported, e.g., in older versions of node. + +## Building + +Building the UMD fallback: + +``` +$> npm run build +``` + +Running the [tests](./tests): + +``` +$> npm test +``` diff --git a/node_modules/long/index.d.ts b/node_modules/long/index.d.ts new file mode 100644 index 0000000..7d4b017 --- /dev/null +++ b/node_modules/long/index.d.ts @@ -0,0 +1,2 @@ +import { Long } from "./types.js"; +export default Long; diff --git a/node_modules/long/index.js b/node_modules/long/index.js new file mode 100644 index 0000000..9a0fe70 --- /dev/null +++ b/node_modules/long/index.js @@ -0,0 +1,1581 @@ +/** + * @license + * Copyright 2009 The Closure Library Authors + * Copyright 2020 Daniel Wirtz / The long.js Authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + +// WebAssembly optimizations to do native i64 multiplication and divide +var wasm = null; +try { + wasm = new WebAssembly.Instance( + new WebAssembly.Module( + new Uint8Array([ + // \0asm + 0, 97, 115, 109, + // version 1 + 1, 0, 0, 0, + + // section "type" + 1, 13, 2, + // 0, () => i32 + 96, 0, 1, 127, + // 1, (i32, i32, i32, i32) => i32 + 96, 4, 127, 127, 127, 127, 1, 127, + + // section "function" + 3, 7, 6, + // 0, type 0 + 0, + // 1, type 1 + 1, + // 2, type 1 + 1, + // 3, type 1 + 1, + // 4, type 1 + 1, + // 5, type 1 + 1, + + // section "global" + 6, 6, 1, + // 0, "high", mutable i32 + 127, 1, 65, 0, 11, + + // section "export" + 7, 50, 6, + // 0, "mul" + 3, 109, 117, 108, 0, 1, + // 1, "div_s" + 5, 100, 105, 118, 95, 115, 0, 2, + // 2, "div_u" + 5, 100, 105, 118, 95, 117, 0, 3, + // 3, "rem_s" + 5, 114, 101, 109, 95, 115, 0, 4, + // 4, "rem_u" + 5, 114, 101, 109, 95, 117, 0, 5, + // 5, "get_high" + 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, + + // section "code" + 10, 191, 1, 6, + // 0, "get_high" + 4, 0, 35, 0, 11, + // 1, "mul" + 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, + 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, + 167, 11, + // 2, "div_s" + 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, + 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, + 167, 11, + // 3, "div_u" + 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, + 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, + 167, 11, + // 4, "rem_s" + 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, + 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, + 167, 11, + // 5, "rem_u" + 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, + 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, + 167, 11, + ]), + ), + {}, + ).exports; +} catch { + // no wasm support :( +} + +/** + * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers. + * See the from* functions below for more convenient ways of constructing Longs. + * @exports Long + * @class A Long class for representing a 64 bit two's-complement integer value. + * @param {number} low The low (signed) 32 bits of the long + * @param {number} high The high (signed) 32 bits of the long + * @param {boolean=} unsigned Whether unsigned or not, defaults to signed + * @constructor + */ +function Long(low, high, unsigned) { + /** + * The low 32 bits as a signed value. + * @type {number} + */ + this.low = low | 0; + + /** + * The high 32 bits as a signed value. + * @type {number} + */ + this.high = high | 0; + + /** + * Whether unsigned or not. + * @type {boolean} + */ + this.unsigned = !!unsigned; +} + +// The internal representation of a long is the two given signed, 32-bit values. +// We use 32-bit pieces because these are the size of integers on which +// Javascript performs bit-operations. For operations like addition and +// multiplication, we split each number into 16 bit pieces, which can easily be +// multiplied within Javascript's floating-point representation without overflow +// or change in sign. +// +// In the algorithms below, we frequently reduce the negative case to the +// positive case by negating the input(s) and then post-processing the result. +// Note that we must ALWAYS check specially whether those values are MIN_VALUE +// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as +// a positive number, it overflows back into a negative). Not handling this +// case would often result in infinite recursion. +// +// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from* +// methods on which they depend. + +/** + * An indicator used to reliably determine if an object is a Long or not. + * @type {boolean} + * @const + * @private + */ +Long.prototype.__isLong__; + +Object.defineProperty(Long.prototype, "__isLong__", { value: true }); + +/** + * @function + * @param {*} obj Object + * @returns {boolean} + * @inner + */ +function isLong(obj) { + return (obj && obj["__isLong__"]) === true; +} + +/** + * @function + * @param {*} value number + * @returns {number} + * @inner + */ +function ctz32(value) { + var c = Math.clz32(value & -value); + return value ? 31 - c : c; +} + +/** + * Tests if the specified object is a Long. + * @function + * @param {*} obj Object + * @returns {boolean} + */ +Long.isLong = isLong; + +/** + * A cache of the Long representations of small integer values. + * @type {!Object} + * @inner + */ +var INT_CACHE = {}; + +/** + * A cache of the Long representations of small unsigned integer values. + * @type {!Object} + * @inner + */ +var UINT_CACHE = {}; + +/** + * @param {number} value + * @param {boolean=} unsigned + * @returns {!Long} + * @inner + */ +function fromInt(value, unsigned) { + var obj, cachedObj, cache; + if (unsigned) { + value >>>= 0; + if ((cache = 0 <= value && value < 256)) { + cachedObj = UINT_CACHE[value]; + if (cachedObj) return cachedObj; + } + obj = fromBits(value, 0, true); + if (cache) UINT_CACHE[value] = obj; + return obj; + } else { + value |= 0; + if ((cache = -128 <= value && value < 128)) { + cachedObj = INT_CACHE[value]; + if (cachedObj) return cachedObj; + } + obj = fromBits(value, value < 0 ? -1 : 0, false); + if (cache) INT_CACHE[value] = obj; + return obj; + } +} + +/** + * Returns a Long representing the given 32 bit integer value. + * @function + * @param {number} value The 32 bit integer in question + * @param {boolean=} unsigned Whether unsigned or not, defaults to signed + * @returns {!Long} The corresponding Long value + */ +Long.fromInt = fromInt; + +/** + * @param {number} value + * @param {boolean=} unsigned + * @returns {!Long} + * @inner + */ +function fromNumber(value, unsigned) { + if (isNaN(value)) return unsigned ? UZERO : ZERO; + if (unsigned) { + if (value < 0) return UZERO; + if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE; + } else { + if (value <= -TWO_PWR_63_DBL) return MIN_VALUE; + if (value + 1 >= TWO_PWR_63_DBL) return MAX_VALUE; + } + if (value < 0) return fromNumber(-value, unsigned).neg(); + return fromBits( + value % TWO_PWR_32_DBL | 0, + (value / TWO_PWR_32_DBL) | 0, + unsigned, + ); +} + +/** + * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned. + * @function + * @param {number} value The number in question + * @param {boolean=} unsigned Whether unsigned or not, defaults to signed + * @returns {!Long} The corresponding Long value + */ +Long.fromNumber = fromNumber; + +/** + * @param {number} lowBits + * @param {number} highBits + * @param {boolean=} unsigned + * @returns {!Long} + * @inner + */ +function fromBits(lowBits, highBits, unsigned) { + return new Long(lowBits, highBits, unsigned); +} + +/** + * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is + * assumed to use 32 bits. + * @function + * @param {number} lowBits The low 32 bits + * @param {number} highBits The high 32 bits + * @param {boolean=} unsigned Whether unsigned or not, defaults to signed + * @returns {!Long} The corresponding Long value + */ +Long.fromBits = fromBits; + +/** + * @function + * @param {number} base + * @param {number} exponent + * @returns {number} + * @inner + */ +var pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4) + +/** + * @param {string} str + * @param {(boolean|number)=} unsigned + * @param {number=} radix + * @returns {!Long} + * @inner + */ +function fromString(str, unsigned, radix) { + if (str.length === 0) throw Error("empty string"); + if (typeof unsigned === "number") { + // For goog.math.long compatibility + radix = unsigned; + unsigned = false; + } else { + unsigned = !!unsigned; + } + if ( + str === "NaN" || + str === "Infinity" || + str === "+Infinity" || + str === "-Infinity" + ) + return unsigned ? UZERO : ZERO; + radix = radix || 10; + if (radix < 2 || 36 < radix) throw RangeError("radix"); + + var p; + if ((p = str.indexOf("-")) > 0) throw Error("interior hyphen"); + else if (p === 0) { + return fromString(str.substring(1), unsigned, radix).neg(); + } + + // Do several (8) digits each time through the loop, so as to + // minimize the calls to the very expensive emulated div. + var radixToPower = fromNumber(pow_dbl(radix, 8)); + + var result = ZERO; + for (var i = 0; i < str.length; i += 8) { + var size = Math.min(8, str.length - i), + value = parseInt(str.substring(i, i + size), radix); + if (size < 8) { + var power = fromNumber(pow_dbl(radix, size)); + result = result.mul(power).add(fromNumber(value)); + } else { + result = result.mul(radixToPower); + result = result.add(fromNumber(value)); + } + } + result.unsigned = unsigned; + return result; +} + +/** + * Returns a Long representation of the given string, written using the specified radix. + * @function + * @param {string} str The textual representation of the Long + * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed + * @param {number=} radix The radix in which the text is written (2-36), defaults to 10 + * @returns {!Long} The corresponding Long value + */ +Long.fromString = fromString; + +/** + * @function + * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val + * @param {boolean=} unsigned + * @returns {!Long} + * @inner + */ +function fromValue(val, unsigned) { + if (typeof val === "number") return fromNumber(val, unsigned); + if (typeof val === "string") return fromString(val, unsigned); + // Throws for non-objects, converts non-instanceof Long: + return fromBits( + val.low, + val.high, + typeof unsigned === "boolean" ? unsigned : val.unsigned, + ); +} + +/** + * Converts the specified value to a Long using the appropriate from* function for its type. + * @function + * @param {!Long|number|bigint|string|!{low: number, high: number, unsigned: boolean}} val Value + * @param {boolean=} unsigned Whether unsigned or not, defaults to signed + * @returns {!Long} + */ +Long.fromValue = fromValue; + +// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be +// no runtime penalty for these. + +/** + * @type {number} + * @const + * @inner + */ +var TWO_PWR_16_DBL = 1 << 16; + +/** + * @type {number} + * @const + * @inner + */ +var TWO_PWR_24_DBL = 1 << 24; + +/** + * @type {number} + * @const + * @inner + */ +var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL; + +/** + * @type {number} + * @const + * @inner + */ +var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL; + +/** + * @type {number} + * @const + * @inner + */ +var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2; + +/** + * @type {!Long} + * @const + * @inner + */ +var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL); + +/** + * @type {!Long} + * @inner + */ +var ZERO = fromInt(0); + +/** + * Signed zero. + * @type {!Long} + */ +Long.ZERO = ZERO; + +/** + * @type {!Long} + * @inner + */ +var UZERO = fromInt(0, true); + +/** + * Unsigned zero. + * @type {!Long} + */ +Long.UZERO = UZERO; + +/** + * @type {!Long} + * @inner + */ +var ONE = fromInt(1); + +/** + * Signed one. + * @type {!Long} + */ +Long.ONE = ONE; + +/** + * @type {!Long} + * @inner + */ +var UONE = fromInt(1, true); + +/** + * Unsigned one. + * @type {!Long} + */ +Long.UONE = UONE; + +/** + * @type {!Long} + * @inner + */ +var NEG_ONE = fromInt(-1); + +/** + * Signed negative one. + * @type {!Long} + */ +Long.NEG_ONE = NEG_ONE; + +/** + * @type {!Long} + * @inner + */ +var MAX_VALUE = fromBits(0xffffffff | 0, 0x7fffffff | 0, false); + +/** + * Maximum signed value. + * @type {!Long} + */ +Long.MAX_VALUE = MAX_VALUE; + +/** + * @type {!Long} + * @inner + */ +var MAX_UNSIGNED_VALUE = fromBits(0xffffffff | 0, 0xffffffff | 0, true); + +/** + * Maximum unsigned value. + * @type {!Long} + */ +Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE; + +/** + * @type {!Long} + * @inner + */ +var MIN_VALUE = fromBits(0, 0x80000000 | 0, false); + +/** + * Minimum signed value. + * @type {!Long} + */ +Long.MIN_VALUE = MIN_VALUE; + +/** + * @alias Long.prototype + * @inner + */ +var LongPrototype = Long.prototype; + +/** + * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer. + * @this {!Long} + * @returns {number} + */ +LongPrototype.toInt = function toInt() { + return this.unsigned ? this.low >>> 0 : this.low; +}; + +/** + * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa). + * @this {!Long} + * @returns {number} + */ +LongPrototype.toNumber = function toNumber() { + if (this.unsigned) + return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0); + return this.high * TWO_PWR_32_DBL + (this.low >>> 0); +}; + +/** + * Converts the Long to a string written in the specified radix. + * @this {!Long} + * @param {number=} radix Radix (2-36), defaults to 10 + * @returns {string} + * @override + * @throws {RangeError} If `radix` is out of range + */ +LongPrototype.toString = function toString(radix) { + radix = radix || 10; + if (radix < 2 || 36 < radix) throw RangeError("radix"); + if (this.isZero()) return "0"; + if (this.isNegative()) { + // Unsigned Longs are never negative + if (this.eq(MIN_VALUE)) { + // We need to change the Long value before it can be negated, so we remove + // the bottom-most digit in this base and then recurse to do the rest. + var radixLong = fromNumber(radix), + div = this.div(radixLong), + rem1 = div.mul(radixLong).sub(this); + return div.toString(radix) + rem1.toInt().toString(radix); + } else return "-" + this.neg().toString(radix); + } + + // Do several (6) digits each time through the loop, so as to + // minimize the calls to the very expensive emulated div. + var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned), + rem = this; + var result = ""; + while (true) { + var remDiv = rem.div(radixToPower), + intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0, + digits = intval.toString(radix); + rem = remDiv; + if (rem.isZero()) return digits + result; + else { + while (digits.length < 6) digits = "0" + digits; + result = "" + digits + result; + } + } +}; + +/** + * Gets the high 32 bits as a signed integer. + * @this {!Long} + * @returns {number} Signed high bits + */ +LongPrototype.getHighBits = function getHighBits() { + return this.high; +}; + +/** + * Gets the high 32 bits as an unsigned integer. + * @this {!Long} + * @returns {number} Unsigned high bits + */ +LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() { + return this.high >>> 0; +}; + +/** + * Gets the low 32 bits as a signed integer. + * @this {!Long} + * @returns {number} Signed low bits + */ +LongPrototype.getLowBits = function getLowBits() { + return this.low; +}; + +/** + * Gets the low 32 bits as an unsigned integer. + * @this {!Long} + * @returns {number} Unsigned low bits + */ +LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() { + return this.low >>> 0; +}; + +/** + * Gets the number of bits needed to represent the absolute value of this Long. + * @this {!Long} + * @returns {number} + */ +LongPrototype.getNumBitsAbs = function getNumBitsAbs() { + if (this.isNegative()) + // Unsigned Longs are never negative + return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs(); + var val = this.high != 0 ? this.high : this.low; + for (var bit = 31; bit > 0; bit--) if ((val & (1 << bit)) != 0) break; + return this.high != 0 ? bit + 33 : bit + 1; +}; + +/** + * Tests if this Long can be safely represented as a JavaScript number. + * @this {!Long} + * @returns {boolean} + */ +LongPrototype.isSafeInteger = function isSafeInteger() { + // 2^53-1 is the maximum safe value + var top11Bits = this.high >> 21; + // [0, 2^53-1] + if (!top11Bits) return true; + // > 2^53-1 + if (this.unsigned) return false; + // [-2^53, -1] except -2^53 + return top11Bits === -1 && !(this.low === 0 && this.high === -0x200000); +}; + +/** + * Tests if this Long's value equals zero. + * @this {!Long} + * @returns {boolean} + */ +LongPrototype.isZero = function isZero() { + return this.high === 0 && this.low === 0; +}; + +/** + * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}. + * @returns {boolean} + */ +LongPrototype.eqz = LongPrototype.isZero; + +/** + * Tests if this Long's value is negative. + * @this {!Long} + * @returns {boolean} + */ +LongPrototype.isNegative = function isNegative() { + return !this.unsigned && this.high < 0; +}; + +/** + * Tests if this Long's value is positive or zero. + * @this {!Long} + * @returns {boolean} + */ +LongPrototype.isPositive = function isPositive() { + return this.unsigned || this.high >= 0; +}; + +/** + * Tests if this Long's value is odd. + * @this {!Long} + * @returns {boolean} + */ +LongPrototype.isOdd = function isOdd() { + return (this.low & 1) === 1; +}; + +/** + * Tests if this Long's value is even. + * @this {!Long} + * @returns {boolean} + */ +LongPrototype.isEven = function isEven() { + return (this.low & 1) === 0; +}; + +/** + * Tests if this Long's value equals the specified's. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ +LongPrototype.equals = function equals(other) { + if (!isLong(other)) other = fromValue(other); + if ( + this.unsigned !== other.unsigned && + this.high >>> 31 === 1 && + other.high >>> 31 === 1 + ) + return false; + return this.high === other.high && this.low === other.low; +}; + +/** + * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ +LongPrototype.eq = LongPrototype.equals; + +/** + * Tests if this Long's value differs from the specified's. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ +LongPrototype.notEquals = function notEquals(other) { + return !this.eq(/* validates */ other); +}; + +/** + * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ +LongPrototype.neq = LongPrototype.notEquals; + +/** + * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ +LongPrototype.ne = LongPrototype.notEquals; + +/** + * Tests if this Long's value is less than the specified's. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ +LongPrototype.lessThan = function lessThan(other) { + return this.comp(/* validates */ other) < 0; +}; + +/** + * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ +LongPrototype.lt = LongPrototype.lessThan; + +/** + * Tests if this Long's value is less than or equal the specified's. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ +LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) { + return this.comp(/* validates */ other) <= 0; +}; + +/** + * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ +LongPrototype.lte = LongPrototype.lessThanOrEqual; + +/** + * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ +LongPrototype.le = LongPrototype.lessThanOrEqual; + +/** + * Tests if this Long's value is greater than the specified's. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ +LongPrototype.greaterThan = function greaterThan(other) { + return this.comp(/* validates */ other) > 0; +}; + +/** + * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ +LongPrototype.gt = LongPrototype.greaterThan; + +/** + * Tests if this Long's value is greater than or equal the specified's. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ +LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) { + return this.comp(/* validates */ other) >= 0; +}; + +/** + * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ +LongPrototype.gte = LongPrototype.greaterThanOrEqual; + +/** + * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ +LongPrototype.ge = LongPrototype.greaterThanOrEqual; + +/** + * Compares this Long's value with the specified's. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other value + * @returns {number} 0 if they are the same, 1 if the this is greater and -1 + * if the given one is greater + */ +LongPrototype.compare = function compare(other) { + if (!isLong(other)) other = fromValue(other); + if (this.eq(other)) return 0; + var thisNeg = this.isNegative(), + otherNeg = other.isNegative(); + if (thisNeg && !otherNeg) return -1; + if (!thisNeg && otherNeg) return 1; + // At this point the sign bits are the same + if (!this.unsigned) return this.sub(other).isNegative() ? -1 : 1; + // Both are positive if at least one is unsigned + return other.high >>> 0 > this.high >>> 0 || + (other.high === this.high && other.low >>> 0 > this.low >>> 0) + ? -1 + : 1; +}; + +/** + * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {number} 0 if they are the same, 1 if the this is greater and -1 + * if the given one is greater + */ +LongPrototype.comp = LongPrototype.compare; + +/** + * Negates this Long's value. + * @this {!Long} + * @returns {!Long} Negated Long + */ +LongPrototype.negate = function negate() { + if (!this.unsigned && this.eq(MIN_VALUE)) return MIN_VALUE; + return this.not().add(ONE); +}; + +/** + * Negates this Long's value. This is an alias of {@link Long#negate}. + * @function + * @returns {!Long} Negated Long + */ +LongPrototype.neg = LongPrototype.negate; + +/** + * Returns the sum of this and the specified Long. + * @this {!Long} + * @param {!Long|number|bigint|string} addend Addend + * @returns {!Long} Sum + */ +LongPrototype.add = function add(addend) { + if (!isLong(addend)) addend = fromValue(addend); + + // Divide each number into 4 chunks of 16 bits, and then sum the chunks. + + var a48 = this.high >>> 16; + var a32 = this.high & 0xffff; + var a16 = this.low >>> 16; + var a00 = this.low & 0xffff; + + var b48 = addend.high >>> 16; + var b32 = addend.high & 0xffff; + var b16 = addend.low >>> 16; + var b00 = addend.low & 0xffff; + + var c48 = 0, + c32 = 0, + c16 = 0, + c00 = 0; + c00 += a00 + b00; + c16 += c00 >>> 16; + c00 &= 0xffff; + c16 += a16 + b16; + c32 += c16 >>> 16; + c16 &= 0xffff; + c32 += a32 + b32; + c48 += c32 >>> 16; + c32 &= 0xffff; + c48 += a48 + b48; + c48 &= 0xffff; + return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned); +}; + +/** + * Returns the difference of this and the specified Long. + * @this {!Long} + * @param {!Long|number|bigint|string} subtrahend Subtrahend + * @returns {!Long} Difference + */ +LongPrototype.subtract = function subtract(subtrahend) { + if (!isLong(subtrahend)) subtrahend = fromValue(subtrahend); + return this.add(subtrahend.neg()); +}; + +/** + * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}. + * @function + * @param {!Long|number|bigint|string} subtrahend Subtrahend + * @returns {!Long} Difference + */ +LongPrototype.sub = LongPrototype.subtract; + +/** + * Returns the product of this and the specified Long. + * @this {!Long} + * @param {!Long|number|bigint|string} multiplier Multiplier + * @returns {!Long} Product + */ +LongPrototype.multiply = function multiply(multiplier) { + if (this.isZero()) return this; + if (!isLong(multiplier)) multiplier = fromValue(multiplier); + + // use wasm support if present + if (wasm) { + var low = wasm["mul"](this.low, this.high, multiplier.low, multiplier.high); + return fromBits(low, wasm["get_high"](), this.unsigned); + } + + if (multiplier.isZero()) return this.unsigned ? UZERO : ZERO; + if (this.eq(MIN_VALUE)) return multiplier.isOdd() ? MIN_VALUE : ZERO; + if (multiplier.eq(MIN_VALUE)) return this.isOdd() ? MIN_VALUE : ZERO; + + if (this.isNegative()) { + if (multiplier.isNegative()) return this.neg().mul(multiplier.neg()); + else return this.neg().mul(multiplier).neg(); + } else if (multiplier.isNegative()) return this.mul(multiplier.neg()).neg(); + + // If both longs are small, use float multiplication + if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24)) + return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned); + + // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products. + // We can skip products that would overflow. + + var a48 = this.high >>> 16; + var a32 = this.high & 0xffff; + var a16 = this.low >>> 16; + var a00 = this.low & 0xffff; + + var b48 = multiplier.high >>> 16; + var b32 = multiplier.high & 0xffff; + var b16 = multiplier.low >>> 16; + var b00 = multiplier.low & 0xffff; + + var c48 = 0, + c32 = 0, + c16 = 0, + c00 = 0; + c00 += a00 * b00; + c16 += c00 >>> 16; + c00 &= 0xffff; + c16 += a16 * b00; + c32 += c16 >>> 16; + c16 &= 0xffff; + c16 += a00 * b16; + c32 += c16 >>> 16; + c16 &= 0xffff; + c32 += a32 * b00; + c48 += c32 >>> 16; + c32 &= 0xffff; + c32 += a16 * b16; + c48 += c32 >>> 16; + c32 &= 0xffff; + c32 += a00 * b32; + c48 += c32 >>> 16; + c32 &= 0xffff; + c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48; + c48 &= 0xffff; + return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned); +}; + +/** + * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}. + * @function + * @param {!Long|number|bigint|string} multiplier Multiplier + * @returns {!Long} Product + */ +LongPrototype.mul = LongPrototype.multiply; + +/** + * Returns this Long divided by the specified. The result is signed if this Long is signed or + * unsigned if this Long is unsigned. + * @this {!Long} + * @param {!Long|number|bigint|string} divisor Divisor + * @returns {!Long} Quotient + */ +LongPrototype.divide = function divide(divisor) { + if (!isLong(divisor)) divisor = fromValue(divisor); + if (divisor.isZero()) throw Error("division by zero"); + + // use wasm support if present + if (wasm) { + // guard against signed division overflow: the largest + // negative number / -1 would be 1 larger than the largest + // positive number, due to two's complement. + if ( + !this.unsigned && + this.high === -0x80000000 && + divisor.low === -1 && + divisor.high === -1 + ) { + // be consistent with non-wasm code path + return this; + } + var low = (this.unsigned ? wasm["div_u"] : wasm["div_s"])( + this.low, + this.high, + divisor.low, + divisor.high, + ); + return fromBits(low, wasm["get_high"](), this.unsigned); + } + + if (this.isZero()) return this.unsigned ? UZERO : ZERO; + var approx, rem, res; + if (!this.unsigned) { + // This section is only relevant for signed longs and is derived from the + // closure library as a whole. + if (this.eq(MIN_VALUE)) { + if (divisor.eq(ONE) || divisor.eq(NEG_ONE)) + return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE + else if (divisor.eq(MIN_VALUE)) return ONE; + else { + // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|. + var halfThis = this.shr(1); + approx = halfThis.div(divisor).shl(1); + if (approx.eq(ZERO)) { + return divisor.isNegative() ? ONE : NEG_ONE; + } else { + rem = this.sub(divisor.mul(approx)); + res = approx.add(rem.div(divisor)); + return res; + } + } + } else if (divisor.eq(MIN_VALUE)) return this.unsigned ? UZERO : ZERO; + if (this.isNegative()) { + if (divisor.isNegative()) return this.neg().div(divisor.neg()); + return this.neg().div(divisor).neg(); + } else if (divisor.isNegative()) return this.div(divisor.neg()).neg(); + res = ZERO; + } else { + // The algorithm below has not been made for unsigned longs. It's therefore + // required to take special care of the MSB prior to running it. + if (!divisor.unsigned) divisor = divisor.toUnsigned(); + if (divisor.gt(this)) return UZERO; + if (divisor.gt(this.shru(1))) + // 15 >>> 1 = 7 ; with divisor = 8 ; true + return UONE; + res = UZERO; + } + + // Repeat the following until the remainder is less than other: find a + // floating-point that approximates remainder / other *from below*, add this + // into the result, and subtract it from the remainder. It is critical that + // the approximate value is less than or equal to the real value so that the + // remainder never becomes negative. + rem = this; + while (rem.gte(divisor)) { + // Approximate the result of division. This may be a little greater or + // smaller than the actual value. + approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber())); + + // We will tweak the approximate result by changing it in the 48-th digit or + // the smallest non-fractional digit, whichever is larger. + var log2 = Math.ceil(Math.log(approx) / Math.LN2), + delta = log2 <= 48 ? 1 : pow_dbl(2, log2 - 48), + // Decrease the approximation until it is smaller than the remainder. Note + // that if it is too large, the product overflows and is negative. + approxRes = fromNumber(approx), + approxRem = approxRes.mul(divisor); + while (approxRem.isNegative() || approxRem.gt(rem)) { + approx -= delta; + approxRes = fromNumber(approx, this.unsigned); + approxRem = approxRes.mul(divisor); + } + + // We know the answer can't be zero... and actually, zero would cause + // infinite recursion since we would make no progress. + if (approxRes.isZero()) approxRes = ONE; + + res = res.add(approxRes); + rem = rem.sub(approxRem); + } + return res; +}; + +/** + * Returns this Long divided by the specified. This is an alias of {@link Long#divide}. + * @function + * @param {!Long|number|bigint|string} divisor Divisor + * @returns {!Long} Quotient + */ +LongPrototype.div = LongPrototype.divide; + +/** + * Returns this Long modulo the specified. + * @this {!Long} + * @param {!Long|number|bigint|string} divisor Divisor + * @returns {!Long} Remainder + */ +LongPrototype.modulo = function modulo(divisor) { + if (!isLong(divisor)) divisor = fromValue(divisor); + + // use wasm support if present + if (wasm) { + var low = (this.unsigned ? wasm["rem_u"] : wasm["rem_s"])( + this.low, + this.high, + divisor.low, + divisor.high, + ); + return fromBits(low, wasm["get_high"](), this.unsigned); + } + + return this.sub(this.div(divisor).mul(divisor)); +}; + +/** + * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}. + * @function + * @param {!Long|number|bigint|string} divisor Divisor + * @returns {!Long} Remainder + */ +LongPrototype.mod = LongPrototype.modulo; + +/** + * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}. + * @function + * @param {!Long|number|bigint|string} divisor Divisor + * @returns {!Long} Remainder + */ +LongPrototype.rem = LongPrototype.modulo; + +/** + * Returns the bitwise NOT of this Long. + * @this {!Long} + * @returns {!Long} + */ +LongPrototype.not = function not() { + return fromBits(~this.low, ~this.high, this.unsigned); +}; + +/** + * Returns count leading zeros of this Long. + * @this {!Long} + * @returns {!number} + */ +LongPrototype.countLeadingZeros = function countLeadingZeros() { + return this.high ? Math.clz32(this.high) : Math.clz32(this.low) + 32; +}; + +/** + * Returns count leading zeros. This is an alias of {@link Long#countLeadingZeros}. + * @function + * @param {!Long} + * @returns {!number} + */ +LongPrototype.clz = LongPrototype.countLeadingZeros; + +/** + * Returns count trailing zeros of this Long. + * @this {!Long} + * @returns {!number} + */ +LongPrototype.countTrailingZeros = function countTrailingZeros() { + return this.low ? ctz32(this.low) : ctz32(this.high) + 32; +}; + +/** + * Returns count trailing zeros. This is an alias of {@link Long#countTrailingZeros}. + * @function + * @param {!Long} + * @returns {!number} + */ +LongPrototype.ctz = LongPrototype.countTrailingZeros; + +/** + * Returns the bitwise AND of this Long and the specified. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other Long + * @returns {!Long} + */ +LongPrototype.and = function and(other) { + if (!isLong(other)) other = fromValue(other); + return fromBits(this.low & other.low, this.high & other.high, this.unsigned); +}; + +/** + * Returns the bitwise OR of this Long and the specified. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other Long + * @returns {!Long} + */ +LongPrototype.or = function or(other) { + if (!isLong(other)) other = fromValue(other); + return fromBits(this.low | other.low, this.high | other.high, this.unsigned); +}; + +/** + * Returns the bitwise XOR of this Long and the given one. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other Long + * @returns {!Long} + */ +LongPrototype.xor = function xor(other) { + if (!isLong(other)) other = fromValue(other); + return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned); +}; + +/** + * Returns this Long with bits shifted to the left by the given amount. + * @this {!Long} + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Shifted Long + */ +LongPrototype.shiftLeft = function shiftLeft(numBits) { + if (isLong(numBits)) numBits = numBits.toInt(); + if ((numBits &= 63) === 0) return this; + else if (numBits < 32) + return fromBits( + this.low << numBits, + (this.high << numBits) | (this.low >>> (32 - numBits)), + this.unsigned, + ); + else return fromBits(0, this.low << (numBits - 32), this.unsigned); +}; + +/** + * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}. + * @function + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Shifted Long + */ +LongPrototype.shl = LongPrototype.shiftLeft; + +/** + * Returns this Long with bits arithmetically shifted to the right by the given amount. + * @this {!Long} + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Shifted Long + */ +LongPrototype.shiftRight = function shiftRight(numBits) { + if (isLong(numBits)) numBits = numBits.toInt(); + if ((numBits &= 63) === 0) return this; + else if (numBits < 32) + return fromBits( + (this.low >>> numBits) | (this.high << (32 - numBits)), + this.high >> numBits, + this.unsigned, + ); + else + return fromBits( + this.high >> (numBits - 32), + this.high >= 0 ? 0 : -1, + this.unsigned, + ); +}; + +/** + * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}. + * @function + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Shifted Long + */ +LongPrototype.shr = LongPrototype.shiftRight; + +/** + * Returns this Long with bits logically shifted to the right by the given amount. + * @this {!Long} + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Shifted Long + */ +LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) { + if (isLong(numBits)) numBits = numBits.toInt(); + if ((numBits &= 63) === 0) return this; + if (numBits < 32) + return fromBits( + (this.low >>> numBits) | (this.high << (32 - numBits)), + this.high >>> numBits, + this.unsigned, + ); + if (numBits === 32) return fromBits(this.high, 0, this.unsigned); + return fromBits(this.high >>> (numBits - 32), 0, this.unsigned); +}; + +/** + * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}. + * @function + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Shifted Long + */ +LongPrototype.shru = LongPrototype.shiftRightUnsigned; + +/** + * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}. + * @function + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Shifted Long + */ +LongPrototype.shr_u = LongPrototype.shiftRightUnsigned; + +/** + * Returns this Long with bits rotated to the left by the given amount. + * @this {!Long} + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Rotated Long + */ +LongPrototype.rotateLeft = function rotateLeft(numBits) { + var b; + if (isLong(numBits)) numBits = numBits.toInt(); + if ((numBits &= 63) === 0) return this; + if (numBits === 32) return fromBits(this.high, this.low, this.unsigned); + if (numBits < 32) { + b = 32 - numBits; + return fromBits( + (this.low << numBits) | (this.high >>> b), + (this.high << numBits) | (this.low >>> b), + this.unsigned, + ); + } + numBits -= 32; + b = 32 - numBits; + return fromBits( + (this.high << numBits) | (this.low >>> b), + (this.low << numBits) | (this.high >>> b), + this.unsigned, + ); +}; +/** + * Returns this Long with bits rotated to the left by the given amount. This is an alias of {@link Long#rotateLeft}. + * @function + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Rotated Long + */ +LongPrototype.rotl = LongPrototype.rotateLeft; + +/** + * Returns this Long with bits rotated to the right by the given amount. + * @this {!Long} + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Rotated Long + */ +LongPrototype.rotateRight = function rotateRight(numBits) { + var b; + if (isLong(numBits)) numBits = numBits.toInt(); + if ((numBits &= 63) === 0) return this; + if (numBits === 32) return fromBits(this.high, this.low, this.unsigned); + if (numBits < 32) { + b = 32 - numBits; + return fromBits( + (this.high << b) | (this.low >>> numBits), + (this.low << b) | (this.high >>> numBits), + this.unsigned, + ); + } + numBits -= 32; + b = 32 - numBits; + return fromBits( + (this.low << b) | (this.high >>> numBits), + (this.high << b) | (this.low >>> numBits), + this.unsigned, + ); +}; +/** + * Returns this Long with bits rotated to the right by the given amount. This is an alias of {@link Long#rotateRight}. + * @function + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Rotated Long + */ +LongPrototype.rotr = LongPrototype.rotateRight; + +/** + * Converts this Long to signed. + * @this {!Long} + * @returns {!Long} Signed long + */ +LongPrototype.toSigned = function toSigned() { + if (!this.unsigned) return this; + return fromBits(this.low, this.high, false); +}; + +/** + * Converts this Long to unsigned. + * @this {!Long} + * @returns {!Long} Unsigned long + */ +LongPrototype.toUnsigned = function toUnsigned() { + if (this.unsigned) return this; + return fromBits(this.low, this.high, true); +}; + +/** + * Converts this Long to its byte representation. + * @param {boolean=} le Whether little or big endian, defaults to big endian + * @this {!Long} + * @returns {!Array.} Byte representation + */ +LongPrototype.toBytes = function toBytes(le) { + return le ? this.toBytesLE() : this.toBytesBE(); +}; + +/** + * Converts this Long to its little endian byte representation. + * @this {!Long} + * @returns {!Array.} Little endian byte representation + */ +LongPrototype.toBytesLE = function toBytesLE() { + var hi = this.high, + lo = this.low; + return [ + lo & 0xff, + (lo >>> 8) & 0xff, + (lo >>> 16) & 0xff, + lo >>> 24, + hi & 0xff, + (hi >>> 8) & 0xff, + (hi >>> 16) & 0xff, + hi >>> 24, + ]; +}; + +/** + * Converts this Long to its big endian byte representation. + * @this {!Long} + * @returns {!Array.} Big endian byte representation + */ +LongPrototype.toBytesBE = function toBytesBE() { + var hi = this.high, + lo = this.low; + return [ + hi >>> 24, + (hi >>> 16) & 0xff, + (hi >>> 8) & 0xff, + hi & 0xff, + lo >>> 24, + (lo >>> 16) & 0xff, + (lo >>> 8) & 0xff, + lo & 0xff, + ]; +}; + +/** + * Creates a Long from its byte representation. + * @param {!Array.} bytes Byte representation + * @param {boolean=} unsigned Whether unsigned or not, defaults to signed + * @param {boolean=} le Whether little or big endian, defaults to big endian + * @returns {Long} The corresponding Long value + */ +Long.fromBytes = function fromBytes(bytes, unsigned, le) { + return le + ? Long.fromBytesLE(bytes, unsigned) + : Long.fromBytesBE(bytes, unsigned); +}; + +/** + * Creates a Long from its little endian byte representation. + * @param {!Array.} bytes Little endian byte representation + * @param {boolean=} unsigned Whether unsigned or not, defaults to signed + * @returns {Long} The corresponding Long value + */ +Long.fromBytesLE = function fromBytesLE(bytes, unsigned) { + return new Long( + bytes[0] | (bytes[1] << 8) | (bytes[2] << 16) | (bytes[3] << 24), + bytes[4] | (bytes[5] << 8) | (bytes[6] << 16) | (bytes[7] << 24), + unsigned, + ); +}; + +/** + * Creates a Long from its big endian byte representation. + * @param {!Array.} bytes Big endian byte representation + * @param {boolean=} unsigned Whether unsigned or not, defaults to signed + * @returns {Long} The corresponding Long value + */ +Long.fromBytesBE = function fromBytesBE(bytes, unsigned) { + return new Long( + (bytes[4] << 24) | (bytes[5] << 16) | (bytes[6] << 8) | bytes[7], + (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3], + unsigned, + ); +}; + +// Support conversion to/from BigInt where available +if (typeof BigInt === "function") { + /** + * Returns a Long representing the given big integer. + * @function + * @param {number} value The big integer value + * @param {boolean=} unsigned Whether unsigned or not, defaults to signed + * @returns {!Long} The corresponding Long value + */ + Long.fromBigInt = function fromBigInt(value, unsigned) { + var lowBits = Number(BigInt.asIntN(32, value)); + var highBits = Number(BigInt.asIntN(32, value >> BigInt(32))); + return fromBits(lowBits, highBits, unsigned); + }; + + // Override + Long.fromValue = function fromValueWithBigInt(value, unsigned) { + if (typeof value === "bigint") return fromBigInt(value, unsigned); + return fromValue(value, unsigned); + }; + + /** + * Converts the Long to its big integer representation. + * @this {!Long} + * @returns {bigint} + */ + LongPrototype.toBigInt = function toBigInt() { + var lowBigInt = BigInt(this.low >>> 0); + var highBigInt = BigInt(this.unsigned ? this.high >>> 0 : this.high); + return (highBigInt << BigInt(32)) | lowBigInt; + }; +} + +export default Long; diff --git a/node_modules/long/package.json b/node_modules/long/package.json new file mode 100644 index 0000000..ab590cb --- /dev/null +++ b/node_modules/long/package.json @@ -0,0 +1,58 @@ +{ + "name": "long", + "version": "5.3.1", + "author": "Daniel Wirtz ", + "description": "A Long class for representing a 64-bit two's-complement integer value.", + "repository": { + "type": "git", + "url": "https://github.com/dcodeIO/long.js.git" + }, + "bugs": { + "url": "https://github.com/dcodeIO/long.js/issues" + }, + "keywords": [ + "math", + "long", + "int64" + ], + "license": "Apache-2.0", + "type": "module", + "main": "umd/index.js", + "types": "umd/index.d.ts", + "exports": { + ".": { + "import": { + "types": "./index.d.ts", + "default": "./index.js" + }, + "require": { + "types": "./umd/index.d.ts", + "default": "./umd/index.js" + } + } + }, + "scripts": { + "build": "node scripts/build.js", + "lint": "prettier --check .", + "format": "prettier --write .", + "test": "npm run test:unit && npm run test:typescript", + "test:unit": "node tests", + "test:typescript": "tsc --project tests/typescript/tsconfig.esnext.json && tsc --project tests/typescript/tsconfig.nodenext.json && tsc --project tests/typescript/tsconfig.commonjs.json && tsc --project tests/typescript/tsconfig.global.json" + }, + "files": [ + "index.js", + "index.d.ts", + "types.d.ts", + "umd/index.js", + "umd/index.d.ts", + "umd/types.d.ts", + "umd/package.json", + "LICENSE", + "README.md" + ], + "devDependencies": { + "esm2umd": "^0.3.0", + "prettier": "^3.5.0", + "typescript": "^5.7.3" + } +} diff --git a/node_modules/long/types.d.ts b/node_modules/long/types.d.ts new file mode 100644 index 0000000..7693ca4 --- /dev/null +++ b/node_modules/long/types.d.ts @@ -0,0 +1,474 @@ +// Common type definitions for both the ESM and UMD variants. The ESM variant +// reexports the Long class as its default export, whereas the UMD variant makes +// the Long class a whole-module export with a global variable fallback. + +type LongLike = + | Long + | number + | bigint + | string + | { low: number; high: number; unsigned: boolean }; + +export declare class Long { + /** + * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as signed integers. See the from* functions below for more convenient ways of constructing Longs. + */ + constructor(low: number, high?: number, unsigned?: boolean); + + /** + * Maximum unsigned value. + */ + static MAX_UNSIGNED_VALUE: Long; + + /** + * Maximum signed value. + */ + static MAX_VALUE: Long; + + /** + * Minimum signed value. + */ + static MIN_VALUE: Long; + + /** + * Signed negative one. + */ + static NEG_ONE: Long; + + /** + * Signed one. + */ + static ONE: Long; + + /** + * Unsigned one. + */ + static UONE: Long; + + /** + * Unsigned zero. + */ + static UZERO: Long; + + /** + * Signed zero + */ + static ZERO: Long; + + /** + * The high 32 bits as a signed value. + */ + high: number; + + /** + * The low 32 bits as a signed value. + */ + low: number; + + /** + * Whether unsigned or not. + */ + unsigned: boolean; + + /** + * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is assumed to use 32 bits. + */ + static fromBits(lowBits: number, highBits: number, unsigned?: boolean): Long; + + /** + * Returns a Long representing the given 32 bit integer value. + */ + static fromInt(value: number, unsigned?: boolean): Long; + + /** + * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned. + */ + static fromNumber(value: number, unsigned?: boolean): Long; + + /** + * Returns a Long representing the given big integer value. + */ + static fromBigInt(value: bigint, unsigned?: boolean): Long; + + /** + * Returns a Long representation of the given string, written using the specified radix. + */ + static fromString( + str: string, + unsigned?: boolean | number, + radix?: number, + ): Long; + + /** + * Creates a Long from its byte representation. + */ + static fromBytes(bytes: number[], unsigned?: boolean, le?: boolean): Long; + + /** + * Creates a Long from its little endian byte representation. + */ + static fromBytesLE(bytes: number[], unsigned?: boolean): Long; + + /** + * Creates a Long from its big endian byte representation. + */ + static fromBytesBE(bytes: number[], unsigned?: boolean): Long; + + /** + * Tests if the specified object is a Long. + */ + static isLong(obj: any): obj is Long; + + /** + * Converts the specified value to a Long. + */ + static fromValue(val: LongLike, unsigned?: boolean): Long; + + /** + * Returns the sum of this and the specified Long. + */ + add(addend: LongLike): Long; + + /** + * Returns the bitwise AND of this Long and the specified. + */ + and(other: LongLike): Long; + + /** + * Compares this Long's value with the specified's. + */ + compare(other: LongLike): number; + + /** + * Compares this Long's value with the specified's. + */ + comp(other: LongLike): number; + + /** + * Returns this Long divided by the specified. + */ + divide(divisor: LongLike): Long; + + /** + * Returns this Long divided by the specified. + */ + div(divisor: LongLike): Long; + + /** + * Tests if this Long's value equals the specified's. + */ + equals(other: LongLike): boolean; + + /** + * Tests if this Long's value equals the specified's. + */ + eq(other: LongLike): boolean; + + /** + * Gets the high 32 bits as a signed integer. + */ + getHighBits(): number; + + /** + * Gets the high 32 bits as an unsigned integer. + */ + getHighBitsUnsigned(): number; + + /** + * Gets the low 32 bits as a signed integer. + */ + getLowBits(): number; + + /** + * Gets the low 32 bits as an unsigned integer. + */ + getLowBitsUnsigned(): number; + + /** + * Gets the number of bits needed to represent the absolute value of this Long. + */ + getNumBitsAbs(): number; + + /** + * Tests if this Long's value is greater than the specified's. + */ + greaterThan(other: LongLike): boolean; + + /** + * Tests if this Long's value is greater than the specified's. + */ + gt(other: LongLike): boolean; + + /** + * Tests if this Long's value is greater than or equal the specified's. + */ + greaterThanOrEqual(other: LongLike): boolean; + + /** + * Tests if this Long's value is greater than or equal the specified's. + */ + gte(other: LongLike): boolean; + + /** + * Tests if this Long's value is greater than or equal the specified's. + */ + ge(other: LongLike): boolean; + + /** + * Tests if this Long's value is even. + */ + isEven(): boolean; + + /** + * Tests if this Long's value is negative. + */ + isNegative(): boolean; + + /** + * Tests if this Long's value is odd. + */ + isOdd(): boolean; + + /** + * Tests if this Long's value is positive or zero. + */ + isPositive(): boolean; + + /** + * Tests if this Long can be safely represented as a JavaScript number. + */ + isSafeInteger(): boolean; + + /** + * Tests if this Long's value equals zero. + */ + isZero(): boolean; + + /** + * Tests if this Long's value equals zero. + */ + eqz(): boolean; + + /** + * Tests if this Long's value is less than the specified's. + */ + lessThan(other: LongLike): boolean; + + /** + * Tests if this Long's value is less than the specified's. + */ + lt(other: LongLike): boolean; + + /** + * Tests if this Long's value is less than or equal the specified's. + */ + lessThanOrEqual(other: LongLike): boolean; + + /** + * Tests if this Long's value is less than or equal the specified's. + */ + lte(other: LongLike): boolean; + + /** + * Tests if this Long's value is less than or equal the specified's. + */ + le(other: LongLike): boolean; + + /** + * Returns this Long modulo the specified. + */ + modulo(other: LongLike): Long; + + /** + * Returns this Long modulo the specified. + */ + mod(other: LongLike): Long; + + /** + * Returns this Long modulo the specified. + */ + rem(other: LongLike): Long; + + /** + * Returns the product of this and the specified Long. + */ + multiply(multiplier: LongLike): Long; + + /** + * Returns the product of this and the specified Long. + */ + mul(multiplier: LongLike): Long; + + /** + * Negates this Long's value. + */ + negate(): Long; + + /** + * Negates this Long's value. + */ + neg(): Long; + + /** + * Returns the bitwise NOT of this Long. + */ + not(): Long; + + /** + * Returns count leading zeros of this Long. + */ + countLeadingZeros(): number; + + /** + * Returns count leading zeros of this Long. + */ + clz(): number; + + /** + * Returns count trailing zeros of this Long. + */ + countTrailingZeros(): number; + + /** + * Returns count trailing zeros of this Long. + */ + ctz(): number; + + /** + * Tests if this Long's value differs from the specified's. + */ + notEquals(other: LongLike): boolean; + + /** + * Tests if this Long's value differs from the specified's. + */ + neq(other: LongLike): boolean; + + /** + * Tests if this Long's value differs from the specified's. + */ + ne(other: LongLike): boolean; + + /** + * Returns the bitwise OR of this Long and the specified. + */ + or(other: LongLike): Long; + + /** + * Returns this Long with bits shifted to the left by the given amount. + */ + shiftLeft(numBits: number | Long): Long; + + /** + * Returns this Long with bits shifted to the left by the given amount. + */ + shl(numBits: number | Long): Long; + + /** + * Returns this Long with bits arithmetically shifted to the right by the given amount. + */ + shiftRight(numBits: number | Long): Long; + + /** + * Returns this Long with bits arithmetically shifted to the right by the given amount. + */ + shr(numBits: number | Long): Long; + + /** + * Returns this Long with bits logically shifted to the right by the given amount. + */ + shiftRightUnsigned(numBits: number | Long): Long; + + /** + * Returns this Long with bits logically shifted to the right by the given amount. + */ + shru(numBits: number | Long): Long; + + /** + * Returns this Long with bits logically shifted to the right by the given amount. + */ + shr_u(numBits: number | Long): Long; + + /** + * Returns this Long with bits rotated to the left by the given amount. + */ + rotateLeft(numBits: number | Long): Long; + + /** + * Returns this Long with bits rotated to the left by the given amount. + */ + rotl(numBits: number | Long): Long; + + /** + * Returns this Long with bits rotated to the right by the given amount. + */ + rotateRight(numBits: number | Long): Long; + + /** + * Returns this Long with bits rotated to the right by the given amount. + */ + rotr(numBits: number | Long): Long; + + /** + * Returns the difference of this and the specified Long. + */ + subtract(subtrahend: LongLike): Long; + + /** + * Returns the difference of this and the specified Long. + */ + sub(subtrahend: LongLike): Long; + + /** + * Converts the Long to a big integer. + */ + toBigInt(): bigint; + + /** + * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer. + */ + toInt(): number; + + /** + * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa). + */ + toNumber(): number; + + /** + * Converts this Long to its byte representation. + */ + + toBytes(le?: boolean): number[]; + + /** + * Converts this Long to its little endian byte representation. + */ + + toBytesLE(): number[]; + + /** + * Converts this Long to its big endian byte representation. + */ + + toBytesBE(): number[]; + + /** + * Converts this Long to signed. + */ + toSigned(): Long; + + /** + * Converts the Long to a string written in the specified radix. + */ + toString(radix?: number): string; + + /** + * Converts this Long to unsigned. + */ + toUnsigned(): Long; + + /** + * Returns the bitwise XOR of this Long and the given one. + */ + xor(other: LongLike): Long; +} diff --git a/node_modules/long/umd/index.d.ts b/node_modules/long/umd/index.d.ts new file mode 100644 index 0000000..5036689 --- /dev/null +++ b/node_modules/long/umd/index.d.ts @@ -0,0 +1,3 @@ +import { Long } from "./types.js"; +export = Long; +export as namespace Long; diff --git a/node_modules/long/umd/index.js b/node_modules/long/umd/index.js new file mode 100644 index 0000000..8351d62 --- /dev/null +++ b/node_modules/long/umd/index.js @@ -0,0 +1,1622 @@ +// GENERATED FILE. DO NOT EDIT. +(function (global, factory) { + function unwrapDefault(exports) { + return "default" in exports ? exports.default : exports; + } + if (typeof define === "function" && define.amd) { + define([], function () { + var exports = {}; + factory(exports); + return unwrapDefault(exports); + }); + } else if (typeof exports === "object") { + factory(exports); + if (typeof module === "object") module.exports = unwrapDefault(exports); + } else { + (function () { + var exports = {}; + factory(exports); + global.Long = unwrapDefault(exports); + })(); + } +})( + typeof globalThis !== "undefined" + ? globalThis + : typeof self !== "undefined" + ? self + : this, + function (_exports) { + "use strict"; + + Object.defineProperty(_exports, "__esModule", { + value: true, + }); + _exports.default = void 0; + /** + * @license + * Copyright 2009 The Closure Library Authors + * Copyright 2020 Daniel Wirtz / The long.js Authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + */ + + // WebAssembly optimizations to do native i64 multiplication and divide + var wasm = null; + try { + wasm = new WebAssembly.Instance( + new WebAssembly.Module( + new Uint8Array([ + // \0asm + 0, 97, 115, 109, + // version 1 + 1, 0, 0, 0, + // section "type" + 1, 13, 2, + // 0, () => i32 + 96, 0, 1, 127, + // 1, (i32, i32, i32, i32) => i32 + 96, 4, 127, 127, 127, 127, 1, 127, + // section "function" + 3, 7, 6, + // 0, type 0 + 0, + // 1, type 1 + 1, + // 2, type 1 + 1, + // 3, type 1 + 1, + // 4, type 1 + 1, + // 5, type 1 + 1, + // section "global" + 6, 6, 1, + // 0, "high", mutable i32 + 127, 1, 65, 0, 11, + // section "export" + 7, 50, 6, + // 0, "mul" + 3, 109, 117, 108, 0, 1, + // 1, "div_s" + 5, 100, 105, 118, 95, 115, 0, 2, + // 2, "div_u" + 5, 100, 105, 118, 95, 117, 0, 3, + // 3, "rem_s" + 5, 114, 101, 109, 95, 115, 0, 4, + // 4, "rem_u" + 5, 114, 101, 109, 95, 117, 0, 5, + // 5, "get_high" + 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, + // section "code" + 10, 191, 1, 6, + // 0, "get_high" + 4, 0, 35, 0, 11, + // 1, "mul" + 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, + 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, + 32, 4, 167, 11, + // 2, "div_s" + 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, + 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, + 32, 4, 167, 11, + // 3, "div_u" + 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, + 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, + 32, 4, 167, 11, + // 4, "rem_s" + 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, + 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, + 32, 4, 167, 11, + // 5, "rem_u" + 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, + 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, + 32, 4, 167, 11, + ]), + ), + {}, + ).exports; + } catch { + // no wasm support :( + } + + /** + * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers. + * See the from* functions below for more convenient ways of constructing Longs. + * @exports Long + * @class A Long class for representing a 64 bit two's-complement integer value. + * @param {number} low The low (signed) 32 bits of the long + * @param {number} high The high (signed) 32 bits of the long + * @param {boolean=} unsigned Whether unsigned or not, defaults to signed + * @constructor + */ + function Long(low, high, unsigned) { + /** + * The low 32 bits as a signed value. + * @type {number} + */ + this.low = low | 0; + + /** + * The high 32 bits as a signed value. + * @type {number} + */ + this.high = high | 0; + + /** + * Whether unsigned or not. + * @type {boolean} + */ + this.unsigned = !!unsigned; + } + + // The internal representation of a long is the two given signed, 32-bit values. + // We use 32-bit pieces because these are the size of integers on which + // Javascript performs bit-operations. For operations like addition and + // multiplication, we split each number into 16 bit pieces, which can easily be + // multiplied within Javascript's floating-point representation without overflow + // or change in sign. + // + // In the algorithms below, we frequently reduce the negative case to the + // positive case by negating the input(s) and then post-processing the result. + // Note that we must ALWAYS check specially whether those values are MIN_VALUE + // (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as + // a positive number, it overflows back into a negative). Not handling this + // case would often result in infinite recursion. + // + // Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from* + // methods on which they depend. + + /** + * An indicator used to reliably determine if an object is a Long or not. + * @type {boolean} + * @const + * @private + */ + Long.prototype.__isLong__; + Object.defineProperty(Long.prototype, "__isLong__", { + value: true, + }); + + /** + * @function + * @param {*} obj Object + * @returns {boolean} + * @inner + */ + function isLong(obj) { + return (obj && obj["__isLong__"]) === true; + } + + /** + * @function + * @param {*} value number + * @returns {number} + * @inner + */ + function ctz32(value) { + var c = Math.clz32(value & -value); + return value ? 31 - c : c; + } + + /** + * Tests if the specified object is a Long. + * @function + * @param {*} obj Object + * @returns {boolean} + */ + Long.isLong = isLong; + + /** + * A cache of the Long representations of small integer values. + * @type {!Object} + * @inner + */ + var INT_CACHE = {}; + + /** + * A cache of the Long representations of small unsigned integer values. + * @type {!Object} + * @inner + */ + var UINT_CACHE = {}; + + /** + * @param {number} value + * @param {boolean=} unsigned + * @returns {!Long} + * @inner + */ + function fromInt(value, unsigned) { + var obj, cachedObj, cache; + if (unsigned) { + value >>>= 0; + if ((cache = 0 <= value && value < 256)) { + cachedObj = UINT_CACHE[value]; + if (cachedObj) return cachedObj; + } + obj = fromBits(value, 0, true); + if (cache) UINT_CACHE[value] = obj; + return obj; + } else { + value |= 0; + if ((cache = -128 <= value && value < 128)) { + cachedObj = INT_CACHE[value]; + if (cachedObj) return cachedObj; + } + obj = fromBits(value, value < 0 ? -1 : 0, false); + if (cache) INT_CACHE[value] = obj; + return obj; + } + } + + /** + * Returns a Long representing the given 32 bit integer value. + * @function + * @param {number} value The 32 bit integer in question + * @param {boolean=} unsigned Whether unsigned or not, defaults to signed + * @returns {!Long} The corresponding Long value + */ + Long.fromInt = fromInt; + + /** + * @param {number} value + * @param {boolean=} unsigned + * @returns {!Long} + * @inner + */ + function fromNumber(value, unsigned) { + if (isNaN(value)) return unsigned ? UZERO : ZERO; + if (unsigned) { + if (value < 0) return UZERO; + if (value >= TWO_PWR_64_DBL) return MAX_UNSIGNED_VALUE; + } else { + if (value <= -TWO_PWR_63_DBL) return MIN_VALUE; + if (value + 1 >= TWO_PWR_63_DBL) return MAX_VALUE; + } + if (value < 0) return fromNumber(-value, unsigned).neg(); + return fromBits( + value % TWO_PWR_32_DBL | 0, + (value / TWO_PWR_32_DBL) | 0, + unsigned, + ); + } + + /** + * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned. + * @function + * @param {number} value The number in question + * @param {boolean=} unsigned Whether unsigned or not, defaults to signed + * @returns {!Long} The corresponding Long value + */ + Long.fromNumber = fromNumber; + + /** + * @param {number} lowBits + * @param {number} highBits + * @param {boolean=} unsigned + * @returns {!Long} + * @inner + */ + function fromBits(lowBits, highBits, unsigned) { + return new Long(lowBits, highBits, unsigned); + } + + /** + * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is + * assumed to use 32 bits. + * @function + * @param {number} lowBits The low 32 bits + * @param {number} highBits The high 32 bits + * @param {boolean=} unsigned Whether unsigned or not, defaults to signed + * @returns {!Long} The corresponding Long value + */ + Long.fromBits = fromBits; + + /** + * @function + * @param {number} base + * @param {number} exponent + * @returns {number} + * @inner + */ + var pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4) + + /** + * @param {string} str + * @param {(boolean|number)=} unsigned + * @param {number=} radix + * @returns {!Long} + * @inner + */ + function fromString(str, unsigned, radix) { + if (str.length === 0) throw Error("empty string"); + if (typeof unsigned === "number") { + // For goog.math.long compatibility + radix = unsigned; + unsigned = false; + } else { + unsigned = !!unsigned; + } + if ( + str === "NaN" || + str === "Infinity" || + str === "+Infinity" || + str === "-Infinity" + ) + return unsigned ? UZERO : ZERO; + radix = radix || 10; + if (radix < 2 || 36 < radix) throw RangeError("radix"); + var p; + if ((p = str.indexOf("-")) > 0) throw Error("interior hyphen"); + else if (p === 0) { + return fromString(str.substring(1), unsigned, radix).neg(); + } + + // Do several (8) digits each time through the loop, so as to + // minimize the calls to the very expensive emulated div. + var radixToPower = fromNumber(pow_dbl(radix, 8)); + var result = ZERO; + for (var i = 0; i < str.length; i += 8) { + var size = Math.min(8, str.length - i), + value = parseInt(str.substring(i, i + size), radix); + if (size < 8) { + var power = fromNumber(pow_dbl(radix, size)); + result = result.mul(power).add(fromNumber(value)); + } else { + result = result.mul(radixToPower); + result = result.add(fromNumber(value)); + } + } + result.unsigned = unsigned; + return result; + } + + /** + * Returns a Long representation of the given string, written using the specified radix. + * @function + * @param {string} str The textual representation of the Long + * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed + * @param {number=} radix The radix in which the text is written (2-36), defaults to 10 + * @returns {!Long} The corresponding Long value + */ + Long.fromString = fromString; + + /** + * @function + * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val + * @param {boolean=} unsigned + * @returns {!Long} + * @inner + */ + function fromValue(val, unsigned) { + if (typeof val === "number") return fromNumber(val, unsigned); + if (typeof val === "string") return fromString(val, unsigned); + // Throws for non-objects, converts non-instanceof Long: + return fromBits( + val.low, + val.high, + typeof unsigned === "boolean" ? unsigned : val.unsigned, + ); + } + + /** + * Converts the specified value to a Long using the appropriate from* function for its type. + * @function + * @param {!Long|number|bigint|string|!{low: number, high: number, unsigned: boolean}} val Value + * @param {boolean=} unsigned Whether unsigned or not, defaults to signed + * @returns {!Long} + */ + Long.fromValue = fromValue; + + // NOTE: the compiler should inline these constant values below and then remove these variables, so there should be + // no runtime penalty for these. + + /** + * @type {number} + * @const + * @inner + */ + var TWO_PWR_16_DBL = 1 << 16; + + /** + * @type {number} + * @const + * @inner + */ + var TWO_PWR_24_DBL = 1 << 24; + + /** + * @type {number} + * @const + * @inner + */ + var TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL; + + /** + * @type {number} + * @const + * @inner + */ + var TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL; + + /** + * @type {number} + * @const + * @inner + */ + var TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2; + + /** + * @type {!Long} + * @const + * @inner + */ + var TWO_PWR_24 = fromInt(TWO_PWR_24_DBL); + + /** + * @type {!Long} + * @inner + */ + var ZERO = fromInt(0); + + /** + * Signed zero. + * @type {!Long} + */ + Long.ZERO = ZERO; + + /** + * @type {!Long} + * @inner + */ + var UZERO = fromInt(0, true); + + /** + * Unsigned zero. + * @type {!Long} + */ + Long.UZERO = UZERO; + + /** + * @type {!Long} + * @inner + */ + var ONE = fromInt(1); + + /** + * Signed one. + * @type {!Long} + */ + Long.ONE = ONE; + + /** + * @type {!Long} + * @inner + */ + var UONE = fromInt(1, true); + + /** + * Unsigned one. + * @type {!Long} + */ + Long.UONE = UONE; + + /** + * @type {!Long} + * @inner + */ + var NEG_ONE = fromInt(-1); + + /** + * Signed negative one. + * @type {!Long} + */ + Long.NEG_ONE = NEG_ONE; + + /** + * @type {!Long} + * @inner + */ + var MAX_VALUE = fromBits(0xffffffff | 0, 0x7fffffff | 0, false); + + /** + * Maximum signed value. + * @type {!Long} + */ + Long.MAX_VALUE = MAX_VALUE; + + /** + * @type {!Long} + * @inner + */ + var MAX_UNSIGNED_VALUE = fromBits(0xffffffff | 0, 0xffffffff | 0, true); + + /** + * Maximum unsigned value. + * @type {!Long} + */ + Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE; + + /** + * @type {!Long} + * @inner + */ + var MIN_VALUE = fromBits(0, 0x80000000 | 0, false); + + /** + * Minimum signed value. + * @type {!Long} + */ + Long.MIN_VALUE = MIN_VALUE; + + /** + * @alias Long.prototype + * @inner + */ + var LongPrototype = Long.prototype; + + /** + * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer. + * @this {!Long} + * @returns {number} + */ + LongPrototype.toInt = function toInt() { + return this.unsigned ? this.low >>> 0 : this.low; + }; + + /** + * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa). + * @this {!Long} + * @returns {number} + */ + LongPrototype.toNumber = function toNumber() { + if (this.unsigned) + return (this.high >>> 0) * TWO_PWR_32_DBL + (this.low >>> 0); + return this.high * TWO_PWR_32_DBL + (this.low >>> 0); + }; + + /** + * Converts the Long to a string written in the specified radix. + * @this {!Long} + * @param {number=} radix Radix (2-36), defaults to 10 + * @returns {string} + * @override + * @throws {RangeError} If `radix` is out of range + */ + LongPrototype.toString = function toString(radix) { + radix = radix || 10; + if (radix < 2 || 36 < radix) throw RangeError("radix"); + if (this.isZero()) return "0"; + if (this.isNegative()) { + // Unsigned Longs are never negative + if (this.eq(MIN_VALUE)) { + // We need to change the Long value before it can be negated, so we remove + // the bottom-most digit in this base and then recurse to do the rest. + var radixLong = fromNumber(radix), + div = this.div(radixLong), + rem1 = div.mul(radixLong).sub(this); + return div.toString(radix) + rem1.toInt().toString(radix); + } else return "-" + this.neg().toString(radix); + } + + // Do several (6) digits each time through the loop, so as to + // minimize the calls to the very expensive emulated div. + var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned), + rem = this; + var result = ""; + while (true) { + var remDiv = rem.div(radixToPower), + intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0, + digits = intval.toString(radix); + rem = remDiv; + if (rem.isZero()) return digits + result; + else { + while (digits.length < 6) digits = "0" + digits; + result = "" + digits + result; + } + } + }; + + /** + * Gets the high 32 bits as a signed integer. + * @this {!Long} + * @returns {number} Signed high bits + */ + LongPrototype.getHighBits = function getHighBits() { + return this.high; + }; + + /** + * Gets the high 32 bits as an unsigned integer. + * @this {!Long} + * @returns {number} Unsigned high bits + */ + LongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() { + return this.high >>> 0; + }; + + /** + * Gets the low 32 bits as a signed integer. + * @this {!Long} + * @returns {number} Signed low bits + */ + LongPrototype.getLowBits = function getLowBits() { + return this.low; + }; + + /** + * Gets the low 32 bits as an unsigned integer. + * @this {!Long} + * @returns {number} Unsigned low bits + */ + LongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() { + return this.low >>> 0; + }; + + /** + * Gets the number of bits needed to represent the absolute value of this Long. + * @this {!Long} + * @returns {number} + */ + LongPrototype.getNumBitsAbs = function getNumBitsAbs() { + if (this.isNegative()) + // Unsigned Longs are never negative + return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs(); + var val = this.high != 0 ? this.high : this.low; + for (var bit = 31; bit > 0; bit--) if ((val & (1 << bit)) != 0) break; + return this.high != 0 ? bit + 33 : bit + 1; + }; + + /** + * Tests if this Long can be safely represented as a JavaScript number. + * @this {!Long} + * @returns {boolean} + */ + LongPrototype.isSafeInteger = function isSafeInteger() { + // 2^53-1 is the maximum safe value + var top11Bits = this.high >> 21; + // [0, 2^53-1] + if (!top11Bits) return true; + // > 2^53-1 + if (this.unsigned) return false; + // [-2^53, -1] except -2^53 + return top11Bits === -1 && !(this.low === 0 && this.high === -0x200000); + }; + + /** + * Tests if this Long's value equals zero. + * @this {!Long} + * @returns {boolean} + */ + LongPrototype.isZero = function isZero() { + return this.high === 0 && this.low === 0; + }; + + /** + * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}. + * @returns {boolean} + */ + LongPrototype.eqz = LongPrototype.isZero; + + /** + * Tests if this Long's value is negative. + * @this {!Long} + * @returns {boolean} + */ + LongPrototype.isNegative = function isNegative() { + return !this.unsigned && this.high < 0; + }; + + /** + * Tests if this Long's value is positive or zero. + * @this {!Long} + * @returns {boolean} + */ + LongPrototype.isPositive = function isPositive() { + return this.unsigned || this.high >= 0; + }; + + /** + * Tests if this Long's value is odd. + * @this {!Long} + * @returns {boolean} + */ + LongPrototype.isOdd = function isOdd() { + return (this.low & 1) === 1; + }; + + /** + * Tests if this Long's value is even. + * @this {!Long} + * @returns {boolean} + */ + LongPrototype.isEven = function isEven() { + return (this.low & 1) === 0; + }; + + /** + * Tests if this Long's value equals the specified's. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ + LongPrototype.equals = function equals(other) { + if (!isLong(other)) other = fromValue(other); + if ( + this.unsigned !== other.unsigned && + this.high >>> 31 === 1 && + other.high >>> 31 === 1 + ) + return false; + return this.high === other.high && this.low === other.low; + }; + + /** + * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ + LongPrototype.eq = LongPrototype.equals; + + /** + * Tests if this Long's value differs from the specified's. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ + LongPrototype.notEquals = function notEquals(other) { + return !this.eq(/* validates */ other); + }; + + /** + * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ + LongPrototype.neq = LongPrototype.notEquals; + + /** + * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ + LongPrototype.ne = LongPrototype.notEquals; + + /** + * Tests if this Long's value is less than the specified's. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ + LongPrototype.lessThan = function lessThan(other) { + return this.comp(/* validates */ other) < 0; + }; + + /** + * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ + LongPrototype.lt = LongPrototype.lessThan; + + /** + * Tests if this Long's value is less than or equal the specified's. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ + LongPrototype.lessThanOrEqual = function lessThanOrEqual(other) { + return this.comp(/* validates */ other) <= 0; + }; + + /** + * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ + LongPrototype.lte = LongPrototype.lessThanOrEqual; + + /** + * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ + LongPrototype.le = LongPrototype.lessThanOrEqual; + + /** + * Tests if this Long's value is greater than the specified's. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ + LongPrototype.greaterThan = function greaterThan(other) { + return this.comp(/* validates */ other) > 0; + }; + + /** + * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ + LongPrototype.gt = LongPrototype.greaterThan; + + /** + * Tests if this Long's value is greater than or equal the specified's. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ + LongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) { + return this.comp(/* validates */ other) >= 0; + }; + + /** + * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ + LongPrototype.gte = LongPrototype.greaterThanOrEqual; + + /** + * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {boolean} + */ + LongPrototype.ge = LongPrototype.greaterThanOrEqual; + + /** + * Compares this Long's value with the specified's. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other value + * @returns {number} 0 if they are the same, 1 if the this is greater and -1 + * if the given one is greater + */ + LongPrototype.compare = function compare(other) { + if (!isLong(other)) other = fromValue(other); + if (this.eq(other)) return 0; + var thisNeg = this.isNegative(), + otherNeg = other.isNegative(); + if (thisNeg && !otherNeg) return -1; + if (!thisNeg && otherNeg) return 1; + // At this point the sign bits are the same + if (!this.unsigned) return this.sub(other).isNegative() ? -1 : 1; + // Both are positive if at least one is unsigned + return other.high >>> 0 > this.high >>> 0 || + (other.high === this.high && other.low >>> 0 > this.low >>> 0) + ? -1 + : 1; + }; + + /** + * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}. + * @function + * @param {!Long|number|bigint|string} other Other value + * @returns {number} 0 if they are the same, 1 if the this is greater and -1 + * if the given one is greater + */ + LongPrototype.comp = LongPrototype.compare; + + /** + * Negates this Long's value. + * @this {!Long} + * @returns {!Long} Negated Long + */ + LongPrototype.negate = function negate() { + if (!this.unsigned && this.eq(MIN_VALUE)) return MIN_VALUE; + return this.not().add(ONE); + }; + + /** + * Negates this Long's value. This is an alias of {@link Long#negate}. + * @function + * @returns {!Long} Negated Long + */ + LongPrototype.neg = LongPrototype.negate; + + /** + * Returns the sum of this and the specified Long. + * @this {!Long} + * @param {!Long|number|bigint|string} addend Addend + * @returns {!Long} Sum + */ + LongPrototype.add = function add(addend) { + if (!isLong(addend)) addend = fromValue(addend); + + // Divide each number into 4 chunks of 16 bits, and then sum the chunks. + + var a48 = this.high >>> 16; + var a32 = this.high & 0xffff; + var a16 = this.low >>> 16; + var a00 = this.low & 0xffff; + var b48 = addend.high >>> 16; + var b32 = addend.high & 0xffff; + var b16 = addend.low >>> 16; + var b00 = addend.low & 0xffff; + var c48 = 0, + c32 = 0, + c16 = 0, + c00 = 0; + c00 += a00 + b00; + c16 += c00 >>> 16; + c00 &= 0xffff; + c16 += a16 + b16; + c32 += c16 >>> 16; + c16 &= 0xffff; + c32 += a32 + b32; + c48 += c32 >>> 16; + c32 &= 0xffff; + c48 += a48 + b48; + c48 &= 0xffff; + return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned); + }; + + /** + * Returns the difference of this and the specified Long. + * @this {!Long} + * @param {!Long|number|bigint|string} subtrahend Subtrahend + * @returns {!Long} Difference + */ + LongPrototype.subtract = function subtract(subtrahend) { + if (!isLong(subtrahend)) subtrahend = fromValue(subtrahend); + return this.add(subtrahend.neg()); + }; + + /** + * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}. + * @function + * @param {!Long|number|bigint|string} subtrahend Subtrahend + * @returns {!Long} Difference + */ + LongPrototype.sub = LongPrototype.subtract; + + /** + * Returns the product of this and the specified Long. + * @this {!Long} + * @param {!Long|number|bigint|string} multiplier Multiplier + * @returns {!Long} Product + */ + LongPrototype.multiply = function multiply(multiplier) { + if (this.isZero()) return this; + if (!isLong(multiplier)) multiplier = fromValue(multiplier); + + // use wasm support if present + if (wasm) { + var low = wasm["mul"]( + this.low, + this.high, + multiplier.low, + multiplier.high, + ); + return fromBits(low, wasm["get_high"](), this.unsigned); + } + if (multiplier.isZero()) return this.unsigned ? UZERO : ZERO; + if (this.eq(MIN_VALUE)) return multiplier.isOdd() ? MIN_VALUE : ZERO; + if (multiplier.eq(MIN_VALUE)) return this.isOdd() ? MIN_VALUE : ZERO; + if (this.isNegative()) { + if (multiplier.isNegative()) return this.neg().mul(multiplier.neg()); + else return this.neg().mul(multiplier).neg(); + } else if (multiplier.isNegative()) + return this.mul(multiplier.neg()).neg(); + + // If both longs are small, use float multiplication + if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24)) + return fromNumber( + this.toNumber() * multiplier.toNumber(), + this.unsigned, + ); + + // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products. + // We can skip products that would overflow. + + var a48 = this.high >>> 16; + var a32 = this.high & 0xffff; + var a16 = this.low >>> 16; + var a00 = this.low & 0xffff; + var b48 = multiplier.high >>> 16; + var b32 = multiplier.high & 0xffff; + var b16 = multiplier.low >>> 16; + var b00 = multiplier.low & 0xffff; + var c48 = 0, + c32 = 0, + c16 = 0, + c00 = 0; + c00 += a00 * b00; + c16 += c00 >>> 16; + c00 &= 0xffff; + c16 += a16 * b00; + c32 += c16 >>> 16; + c16 &= 0xffff; + c16 += a00 * b16; + c32 += c16 >>> 16; + c16 &= 0xffff; + c32 += a32 * b00; + c48 += c32 >>> 16; + c32 &= 0xffff; + c32 += a16 * b16; + c48 += c32 >>> 16; + c32 &= 0xffff; + c32 += a00 * b32; + c48 += c32 >>> 16; + c32 &= 0xffff; + c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48; + c48 &= 0xffff; + return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned); + }; + + /** + * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}. + * @function + * @param {!Long|number|bigint|string} multiplier Multiplier + * @returns {!Long} Product + */ + LongPrototype.mul = LongPrototype.multiply; + + /** + * Returns this Long divided by the specified. The result is signed if this Long is signed or + * unsigned if this Long is unsigned. + * @this {!Long} + * @param {!Long|number|bigint|string} divisor Divisor + * @returns {!Long} Quotient + */ + LongPrototype.divide = function divide(divisor) { + if (!isLong(divisor)) divisor = fromValue(divisor); + if (divisor.isZero()) throw Error("division by zero"); + + // use wasm support if present + if (wasm) { + // guard against signed division overflow: the largest + // negative number / -1 would be 1 larger than the largest + // positive number, due to two's complement. + if ( + !this.unsigned && + this.high === -0x80000000 && + divisor.low === -1 && + divisor.high === -1 + ) { + // be consistent with non-wasm code path + return this; + } + var low = (this.unsigned ? wasm["div_u"] : wasm["div_s"])( + this.low, + this.high, + divisor.low, + divisor.high, + ); + return fromBits(low, wasm["get_high"](), this.unsigned); + } + if (this.isZero()) return this.unsigned ? UZERO : ZERO; + var approx, rem, res; + if (!this.unsigned) { + // This section is only relevant for signed longs and is derived from the + // closure library as a whole. + if (this.eq(MIN_VALUE)) { + if (divisor.eq(ONE) || divisor.eq(NEG_ONE)) + return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE + else if (divisor.eq(MIN_VALUE)) return ONE; + else { + // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|. + var halfThis = this.shr(1); + approx = halfThis.div(divisor).shl(1); + if (approx.eq(ZERO)) { + return divisor.isNegative() ? ONE : NEG_ONE; + } else { + rem = this.sub(divisor.mul(approx)); + res = approx.add(rem.div(divisor)); + return res; + } + } + } else if (divisor.eq(MIN_VALUE)) return this.unsigned ? UZERO : ZERO; + if (this.isNegative()) { + if (divisor.isNegative()) return this.neg().div(divisor.neg()); + return this.neg().div(divisor).neg(); + } else if (divisor.isNegative()) return this.div(divisor.neg()).neg(); + res = ZERO; + } else { + // The algorithm below has not been made for unsigned longs. It's therefore + // required to take special care of the MSB prior to running it. + if (!divisor.unsigned) divisor = divisor.toUnsigned(); + if (divisor.gt(this)) return UZERO; + if (divisor.gt(this.shru(1))) + // 15 >>> 1 = 7 ; with divisor = 8 ; true + return UONE; + res = UZERO; + } + + // Repeat the following until the remainder is less than other: find a + // floating-point that approximates remainder / other *from below*, add this + // into the result, and subtract it from the remainder. It is critical that + // the approximate value is less than or equal to the real value so that the + // remainder never becomes negative. + rem = this; + while (rem.gte(divisor)) { + // Approximate the result of division. This may be a little greater or + // smaller than the actual value. + approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber())); + + // We will tweak the approximate result by changing it in the 48-th digit or + // the smallest non-fractional digit, whichever is larger. + var log2 = Math.ceil(Math.log(approx) / Math.LN2), + delta = log2 <= 48 ? 1 : pow_dbl(2, log2 - 48), + // Decrease the approximation until it is smaller than the remainder. Note + // that if it is too large, the product overflows and is negative. + approxRes = fromNumber(approx), + approxRem = approxRes.mul(divisor); + while (approxRem.isNegative() || approxRem.gt(rem)) { + approx -= delta; + approxRes = fromNumber(approx, this.unsigned); + approxRem = approxRes.mul(divisor); + } + + // We know the answer can't be zero... and actually, zero would cause + // infinite recursion since we would make no progress. + if (approxRes.isZero()) approxRes = ONE; + res = res.add(approxRes); + rem = rem.sub(approxRem); + } + return res; + }; + + /** + * Returns this Long divided by the specified. This is an alias of {@link Long#divide}. + * @function + * @param {!Long|number|bigint|string} divisor Divisor + * @returns {!Long} Quotient + */ + LongPrototype.div = LongPrototype.divide; + + /** + * Returns this Long modulo the specified. + * @this {!Long} + * @param {!Long|number|bigint|string} divisor Divisor + * @returns {!Long} Remainder + */ + LongPrototype.modulo = function modulo(divisor) { + if (!isLong(divisor)) divisor = fromValue(divisor); + + // use wasm support if present + if (wasm) { + var low = (this.unsigned ? wasm["rem_u"] : wasm["rem_s"])( + this.low, + this.high, + divisor.low, + divisor.high, + ); + return fromBits(low, wasm["get_high"](), this.unsigned); + } + return this.sub(this.div(divisor).mul(divisor)); + }; + + /** + * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}. + * @function + * @param {!Long|number|bigint|string} divisor Divisor + * @returns {!Long} Remainder + */ + LongPrototype.mod = LongPrototype.modulo; + + /** + * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}. + * @function + * @param {!Long|number|bigint|string} divisor Divisor + * @returns {!Long} Remainder + */ + LongPrototype.rem = LongPrototype.modulo; + + /** + * Returns the bitwise NOT of this Long. + * @this {!Long} + * @returns {!Long} + */ + LongPrototype.not = function not() { + return fromBits(~this.low, ~this.high, this.unsigned); + }; + + /** + * Returns count leading zeros of this Long. + * @this {!Long} + * @returns {!number} + */ + LongPrototype.countLeadingZeros = function countLeadingZeros() { + return this.high ? Math.clz32(this.high) : Math.clz32(this.low) + 32; + }; + + /** + * Returns count leading zeros. This is an alias of {@link Long#countLeadingZeros}. + * @function + * @param {!Long} + * @returns {!number} + */ + LongPrototype.clz = LongPrototype.countLeadingZeros; + + /** + * Returns count trailing zeros of this Long. + * @this {!Long} + * @returns {!number} + */ + LongPrototype.countTrailingZeros = function countTrailingZeros() { + return this.low ? ctz32(this.low) : ctz32(this.high) + 32; + }; + + /** + * Returns count trailing zeros. This is an alias of {@link Long#countTrailingZeros}. + * @function + * @param {!Long} + * @returns {!number} + */ + LongPrototype.ctz = LongPrototype.countTrailingZeros; + + /** + * Returns the bitwise AND of this Long and the specified. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other Long + * @returns {!Long} + */ + LongPrototype.and = function and(other) { + if (!isLong(other)) other = fromValue(other); + return fromBits( + this.low & other.low, + this.high & other.high, + this.unsigned, + ); + }; + + /** + * Returns the bitwise OR of this Long and the specified. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other Long + * @returns {!Long} + */ + LongPrototype.or = function or(other) { + if (!isLong(other)) other = fromValue(other); + return fromBits( + this.low | other.low, + this.high | other.high, + this.unsigned, + ); + }; + + /** + * Returns the bitwise XOR of this Long and the given one. + * @this {!Long} + * @param {!Long|number|bigint|string} other Other Long + * @returns {!Long} + */ + LongPrototype.xor = function xor(other) { + if (!isLong(other)) other = fromValue(other); + return fromBits( + this.low ^ other.low, + this.high ^ other.high, + this.unsigned, + ); + }; + + /** + * Returns this Long with bits shifted to the left by the given amount. + * @this {!Long} + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Shifted Long + */ + LongPrototype.shiftLeft = function shiftLeft(numBits) { + if (isLong(numBits)) numBits = numBits.toInt(); + if ((numBits &= 63) === 0) return this; + else if (numBits < 32) + return fromBits( + this.low << numBits, + (this.high << numBits) | (this.low >>> (32 - numBits)), + this.unsigned, + ); + else return fromBits(0, this.low << (numBits - 32), this.unsigned); + }; + + /** + * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}. + * @function + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Shifted Long + */ + LongPrototype.shl = LongPrototype.shiftLeft; + + /** + * Returns this Long with bits arithmetically shifted to the right by the given amount. + * @this {!Long} + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Shifted Long + */ + LongPrototype.shiftRight = function shiftRight(numBits) { + if (isLong(numBits)) numBits = numBits.toInt(); + if ((numBits &= 63) === 0) return this; + else if (numBits < 32) + return fromBits( + (this.low >>> numBits) | (this.high << (32 - numBits)), + this.high >> numBits, + this.unsigned, + ); + else + return fromBits( + this.high >> (numBits - 32), + this.high >= 0 ? 0 : -1, + this.unsigned, + ); + }; + + /** + * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}. + * @function + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Shifted Long + */ + LongPrototype.shr = LongPrototype.shiftRight; + + /** + * Returns this Long with bits logically shifted to the right by the given amount. + * @this {!Long} + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Shifted Long + */ + LongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) { + if (isLong(numBits)) numBits = numBits.toInt(); + if ((numBits &= 63) === 0) return this; + if (numBits < 32) + return fromBits( + (this.low >>> numBits) | (this.high << (32 - numBits)), + this.high >>> numBits, + this.unsigned, + ); + if (numBits === 32) return fromBits(this.high, 0, this.unsigned); + return fromBits(this.high >>> (numBits - 32), 0, this.unsigned); + }; + + /** + * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}. + * @function + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Shifted Long + */ + LongPrototype.shru = LongPrototype.shiftRightUnsigned; + + /** + * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}. + * @function + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Shifted Long + */ + LongPrototype.shr_u = LongPrototype.shiftRightUnsigned; + + /** + * Returns this Long with bits rotated to the left by the given amount. + * @this {!Long} + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Rotated Long + */ + LongPrototype.rotateLeft = function rotateLeft(numBits) { + var b; + if (isLong(numBits)) numBits = numBits.toInt(); + if ((numBits &= 63) === 0) return this; + if (numBits === 32) return fromBits(this.high, this.low, this.unsigned); + if (numBits < 32) { + b = 32 - numBits; + return fromBits( + (this.low << numBits) | (this.high >>> b), + (this.high << numBits) | (this.low >>> b), + this.unsigned, + ); + } + numBits -= 32; + b = 32 - numBits; + return fromBits( + (this.high << numBits) | (this.low >>> b), + (this.low << numBits) | (this.high >>> b), + this.unsigned, + ); + }; + /** + * Returns this Long with bits rotated to the left by the given amount. This is an alias of {@link Long#rotateLeft}. + * @function + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Rotated Long + */ + LongPrototype.rotl = LongPrototype.rotateLeft; + + /** + * Returns this Long with bits rotated to the right by the given amount. + * @this {!Long} + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Rotated Long + */ + LongPrototype.rotateRight = function rotateRight(numBits) { + var b; + if (isLong(numBits)) numBits = numBits.toInt(); + if ((numBits &= 63) === 0) return this; + if (numBits === 32) return fromBits(this.high, this.low, this.unsigned); + if (numBits < 32) { + b = 32 - numBits; + return fromBits( + (this.high << b) | (this.low >>> numBits), + (this.low << b) | (this.high >>> numBits), + this.unsigned, + ); + } + numBits -= 32; + b = 32 - numBits; + return fromBits( + (this.low << b) | (this.high >>> numBits), + (this.high << b) | (this.low >>> numBits), + this.unsigned, + ); + }; + /** + * Returns this Long with bits rotated to the right by the given amount. This is an alias of {@link Long#rotateRight}. + * @function + * @param {number|!Long} numBits Number of bits + * @returns {!Long} Rotated Long + */ + LongPrototype.rotr = LongPrototype.rotateRight; + + /** + * Converts this Long to signed. + * @this {!Long} + * @returns {!Long} Signed long + */ + LongPrototype.toSigned = function toSigned() { + if (!this.unsigned) return this; + return fromBits(this.low, this.high, false); + }; + + /** + * Converts this Long to unsigned. + * @this {!Long} + * @returns {!Long} Unsigned long + */ + LongPrototype.toUnsigned = function toUnsigned() { + if (this.unsigned) return this; + return fromBits(this.low, this.high, true); + }; + + /** + * Converts this Long to its byte representation. + * @param {boolean=} le Whether little or big endian, defaults to big endian + * @this {!Long} + * @returns {!Array.} Byte representation + */ + LongPrototype.toBytes = function toBytes(le) { + return le ? this.toBytesLE() : this.toBytesBE(); + }; + + /** + * Converts this Long to its little endian byte representation. + * @this {!Long} + * @returns {!Array.} Little endian byte representation + */ + LongPrototype.toBytesLE = function toBytesLE() { + var hi = this.high, + lo = this.low; + return [ + lo & 0xff, + (lo >>> 8) & 0xff, + (lo >>> 16) & 0xff, + lo >>> 24, + hi & 0xff, + (hi >>> 8) & 0xff, + (hi >>> 16) & 0xff, + hi >>> 24, + ]; + }; + + /** + * Converts this Long to its big endian byte representation. + * @this {!Long} + * @returns {!Array.} Big endian byte representation + */ + LongPrototype.toBytesBE = function toBytesBE() { + var hi = this.high, + lo = this.low; + return [ + hi >>> 24, + (hi >>> 16) & 0xff, + (hi >>> 8) & 0xff, + hi & 0xff, + lo >>> 24, + (lo >>> 16) & 0xff, + (lo >>> 8) & 0xff, + lo & 0xff, + ]; + }; + + /** + * Creates a Long from its byte representation. + * @param {!Array.} bytes Byte representation + * @param {boolean=} unsigned Whether unsigned or not, defaults to signed + * @param {boolean=} le Whether little or big endian, defaults to big endian + * @returns {Long} The corresponding Long value + */ + Long.fromBytes = function fromBytes(bytes, unsigned, le) { + return le + ? Long.fromBytesLE(bytes, unsigned) + : Long.fromBytesBE(bytes, unsigned); + }; + + /** + * Creates a Long from its little endian byte representation. + * @param {!Array.} bytes Little endian byte representation + * @param {boolean=} unsigned Whether unsigned or not, defaults to signed + * @returns {Long} The corresponding Long value + */ + Long.fromBytesLE = function fromBytesLE(bytes, unsigned) { + return new Long( + bytes[0] | (bytes[1] << 8) | (bytes[2] << 16) | (bytes[3] << 24), + bytes[4] | (bytes[5] << 8) | (bytes[6] << 16) | (bytes[7] << 24), + unsigned, + ); + }; + + /** + * Creates a Long from its big endian byte representation. + * @param {!Array.} bytes Big endian byte representation + * @param {boolean=} unsigned Whether unsigned or not, defaults to signed + * @returns {Long} The corresponding Long value + */ + Long.fromBytesBE = function fromBytesBE(bytes, unsigned) { + return new Long( + (bytes[4] << 24) | (bytes[5] << 16) | (bytes[6] << 8) | bytes[7], + (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3], + unsigned, + ); + }; + + // Support conversion to/from BigInt where available + if (typeof BigInt === "function") { + /** + * Returns a Long representing the given big integer. + * @function + * @param {number} value The big integer value + * @param {boolean=} unsigned Whether unsigned or not, defaults to signed + * @returns {!Long} The corresponding Long value + */ + Long.fromBigInt = function fromBigInt(value, unsigned) { + var lowBits = Number(BigInt.asIntN(32, value)); + var highBits = Number(BigInt.asIntN(32, value >> BigInt(32))); + return fromBits(lowBits, highBits, unsigned); + }; + + // Override + Long.fromValue = function fromValueWithBigInt(value, unsigned) { + if (typeof value === "bigint") return fromBigInt(value, unsigned); + return fromValue(value, unsigned); + }; + + /** + * Converts the Long to its big integer representation. + * @this {!Long} + * @returns {bigint} + */ + LongPrototype.toBigInt = function toBigInt() { + var lowBigInt = BigInt(this.low >>> 0); + var highBigInt = BigInt(this.unsigned ? this.high >>> 0 : this.high); + return (highBigInt << BigInt(32)) | lowBigInt; + }; + } + var _default = (_exports.default = Long); + }, +); diff --git a/node_modules/long/umd/package.json b/node_modules/long/umd/package.json new file mode 100644 index 0000000..5bbefff --- /dev/null +++ b/node_modules/long/umd/package.json @@ -0,0 +1,3 @@ +{ + "type": "commonjs" +} diff --git a/node_modules/long/umd/types.d.ts b/node_modules/long/umd/types.d.ts new file mode 100644 index 0000000..7693ca4 --- /dev/null +++ b/node_modules/long/umd/types.d.ts @@ -0,0 +1,474 @@ +// Common type definitions for both the ESM and UMD variants. The ESM variant +// reexports the Long class as its default export, whereas the UMD variant makes +// the Long class a whole-module export with a global variable fallback. + +type LongLike = + | Long + | number + | bigint + | string + | { low: number; high: number; unsigned: boolean }; + +export declare class Long { + /** + * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as signed integers. See the from* functions below for more convenient ways of constructing Longs. + */ + constructor(low: number, high?: number, unsigned?: boolean); + + /** + * Maximum unsigned value. + */ + static MAX_UNSIGNED_VALUE: Long; + + /** + * Maximum signed value. + */ + static MAX_VALUE: Long; + + /** + * Minimum signed value. + */ + static MIN_VALUE: Long; + + /** + * Signed negative one. + */ + static NEG_ONE: Long; + + /** + * Signed one. + */ + static ONE: Long; + + /** + * Unsigned one. + */ + static UONE: Long; + + /** + * Unsigned zero. + */ + static UZERO: Long; + + /** + * Signed zero + */ + static ZERO: Long; + + /** + * The high 32 bits as a signed value. + */ + high: number; + + /** + * The low 32 bits as a signed value. + */ + low: number; + + /** + * Whether unsigned or not. + */ + unsigned: boolean; + + /** + * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is assumed to use 32 bits. + */ + static fromBits(lowBits: number, highBits: number, unsigned?: boolean): Long; + + /** + * Returns a Long representing the given 32 bit integer value. + */ + static fromInt(value: number, unsigned?: boolean): Long; + + /** + * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned. + */ + static fromNumber(value: number, unsigned?: boolean): Long; + + /** + * Returns a Long representing the given big integer value. + */ + static fromBigInt(value: bigint, unsigned?: boolean): Long; + + /** + * Returns a Long representation of the given string, written using the specified radix. + */ + static fromString( + str: string, + unsigned?: boolean | number, + radix?: number, + ): Long; + + /** + * Creates a Long from its byte representation. + */ + static fromBytes(bytes: number[], unsigned?: boolean, le?: boolean): Long; + + /** + * Creates a Long from its little endian byte representation. + */ + static fromBytesLE(bytes: number[], unsigned?: boolean): Long; + + /** + * Creates a Long from its big endian byte representation. + */ + static fromBytesBE(bytes: number[], unsigned?: boolean): Long; + + /** + * Tests if the specified object is a Long. + */ + static isLong(obj: any): obj is Long; + + /** + * Converts the specified value to a Long. + */ + static fromValue(val: LongLike, unsigned?: boolean): Long; + + /** + * Returns the sum of this and the specified Long. + */ + add(addend: LongLike): Long; + + /** + * Returns the bitwise AND of this Long and the specified. + */ + and(other: LongLike): Long; + + /** + * Compares this Long's value with the specified's. + */ + compare(other: LongLike): number; + + /** + * Compares this Long's value with the specified's. + */ + comp(other: LongLike): number; + + /** + * Returns this Long divided by the specified. + */ + divide(divisor: LongLike): Long; + + /** + * Returns this Long divided by the specified. + */ + div(divisor: LongLike): Long; + + /** + * Tests if this Long's value equals the specified's. + */ + equals(other: LongLike): boolean; + + /** + * Tests if this Long's value equals the specified's. + */ + eq(other: LongLike): boolean; + + /** + * Gets the high 32 bits as a signed integer. + */ + getHighBits(): number; + + /** + * Gets the high 32 bits as an unsigned integer. + */ + getHighBitsUnsigned(): number; + + /** + * Gets the low 32 bits as a signed integer. + */ + getLowBits(): number; + + /** + * Gets the low 32 bits as an unsigned integer. + */ + getLowBitsUnsigned(): number; + + /** + * Gets the number of bits needed to represent the absolute value of this Long. + */ + getNumBitsAbs(): number; + + /** + * Tests if this Long's value is greater than the specified's. + */ + greaterThan(other: LongLike): boolean; + + /** + * Tests if this Long's value is greater than the specified's. + */ + gt(other: LongLike): boolean; + + /** + * Tests if this Long's value is greater than or equal the specified's. + */ + greaterThanOrEqual(other: LongLike): boolean; + + /** + * Tests if this Long's value is greater than or equal the specified's. + */ + gte(other: LongLike): boolean; + + /** + * Tests if this Long's value is greater than or equal the specified's. + */ + ge(other: LongLike): boolean; + + /** + * Tests if this Long's value is even. + */ + isEven(): boolean; + + /** + * Tests if this Long's value is negative. + */ + isNegative(): boolean; + + /** + * Tests if this Long's value is odd. + */ + isOdd(): boolean; + + /** + * Tests if this Long's value is positive or zero. + */ + isPositive(): boolean; + + /** + * Tests if this Long can be safely represented as a JavaScript number. + */ + isSafeInteger(): boolean; + + /** + * Tests if this Long's value equals zero. + */ + isZero(): boolean; + + /** + * Tests if this Long's value equals zero. + */ + eqz(): boolean; + + /** + * Tests if this Long's value is less than the specified's. + */ + lessThan(other: LongLike): boolean; + + /** + * Tests if this Long's value is less than the specified's. + */ + lt(other: LongLike): boolean; + + /** + * Tests if this Long's value is less than or equal the specified's. + */ + lessThanOrEqual(other: LongLike): boolean; + + /** + * Tests if this Long's value is less than or equal the specified's. + */ + lte(other: LongLike): boolean; + + /** + * Tests if this Long's value is less than or equal the specified's. + */ + le(other: LongLike): boolean; + + /** + * Returns this Long modulo the specified. + */ + modulo(other: LongLike): Long; + + /** + * Returns this Long modulo the specified. + */ + mod(other: LongLike): Long; + + /** + * Returns this Long modulo the specified. + */ + rem(other: LongLike): Long; + + /** + * Returns the product of this and the specified Long. + */ + multiply(multiplier: LongLike): Long; + + /** + * Returns the product of this and the specified Long. + */ + mul(multiplier: LongLike): Long; + + /** + * Negates this Long's value. + */ + negate(): Long; + + /** + * Negates this Long's value. + */ + neg(): Long; + + /** + * Returns the bitwise NOT of this Long. + */ + not(): Long; + + /** + * Returns count leading zeros of this Long. + */ + countLeadingZeros(): number; + + /** + * Returns count leading zeros of this Long. + */ + clz(): number; + + /** + * Returns count trailing zeros of this Long. + */ + countTrailingZeros(): number; + + /** + * Returns count trailing zeros of this Long. + */ + ctz(): number; + + /** + * Tests if this Long's value differs from the specified's. + */ + notEquals(other: LongLike): boolean; + + /** + * Tests if this Long's value differs from the specified's. + */ + neq(other: LongLike): boolean; + + /** + * Tests if this Long's value differs from the specified's. + */ + ne(other: LongLike): boolean; + + /** + * Returns the bitwise OR of this Long and the specified. + */ + or(other: LongLike): Long; + + /** + * Returns this Long with bits shifted to the left by the given amount. + */ + shiftLeft(numBits: number | Long): Long; + + /** + * Returns this Long with bits shifted to the left by the given amount. + */ + shl(numBits: number | Long): Long; + + /** + * Returns this Long with bits arithmetically shifted to the right by the given amount. + */ + shiftRight(numBits: number | Long): Long; + + /** + * Returns this Long with bits arithmetically shifted to the right by the given amount. + */ + shr(numBits: number | Long): Long; + + /** + * Returns this Long with bits logically shifted to the right by the given amount. + */ + shiftRightUnsigned(numBits: number | Long): Long; + + /** + * Returns this Long with bits logically shifted to the right by the given amount. + */ + shru(numBits: number | Long): Long; + + /** + * Returns this Long with bits logically shifted to the right by the given amount. + */ + shr_u(numBits: number | Long): Long; + + /** + * Returns this Long with bits rotated to the left by the given amount. + */ + rotateLeft(numBits: number | Long): Long; + + /** + * Returns this Long with bits rotated to the left by the given amount. + */ + rotl(numBits: number | Long): Long; + + /** + * Returns this Long with bits rotated to the right by the given amount. + */ + rotateRight(numBits: number | Long): Long; + + /** + * Returns this Long with bits rotated to the right by the given amount. + */ + rotr(numBits: number | Long): Long; + + /** + * Returns the difference of this and the specified Long. + */ + subtract(subtrahend: LongLike): Long; + + /** + * Returns the difference of this and the specified Long. + */ + sub(subtrahend: LongLike): Long; + + /** + * Converts the Long to a big integer. + */ + toBigInt(): bigint; + + /** + * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer. + */ + toInt(): number; + + /** + * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa). + */ + toNumber(): number; + + /** + * Converts this Long to its byte representation. + */ + + toBytes(le?: boolean): number[]; + + /** + * Converts this Long to its little endian byte representation. + */ + + toBytesLE(): number[]; + + /** + * Converts this Long to its big endian byte representation. + */ + + toBytesBE(): number[]; + + /** + * Converts this Long to signed. + */ + toSigned(): Long; + + /** + * Converts the Long to a string written in the specified radix. + */ + toString(radix?: number): string; + + /** + * Converts this Long to unsigned. + */ + toUnsigned(): Long; + + /** + * Returns the bitwise XOR of this Long and the given one. + */ + xor(other: LongLike): Long; +} diff --git a/node_modules/lru-cache/LICENSE b/node_modules/lru-cache/LICENSE new file mode 100644 index 0000000..f785757 --- /dev/null +++ b/node_modules/lru-cache/LICENSE @@ -0,0 +1,15 @@ +The ISC License + +Copyright (c) 2010-2023 Isaac Z. Schlueter and Contributors + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR +IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/lru-cache/README.md b/node_modules/lru-cache/README.md new file mode 100644 index 0000000..f128330 --- /dev/null +++ b/node_modules/lru-cache/README.md @@ -0,0 +1,1117 @@ +# lru-cache + +A cache object that deletes the least-recently-used items. + +Specify a max number of the most recently used items that you +want to keep, and this cache will keep that many of the most +recently accessed items. + +This is not primarily a TTL cache, and does not make strong TTL +guarantees. There is no preemptive pruning of expired items by +default, but you _may_ set a TTL on the cache or on a single +`set`. If you do so, it will treat expired items as missing, and +delete them when fetched. If you are more interested in TTL +caching than LRU caching, check out +[@isaacs/ttlcache](http://npm.im/@isaacs/ttlcache). + +As of version 7, this is one of the most performant LRU +implementations available in JavaScript, and supports a wide +diversity of use cases. However, note that using some of the +features will necessarily impact performance, by causing the +cache to have to do more work. See the "Performance" section +below. + +## Installation + +```bash +npm install lru-cache --save +``` + +## Usage + +```js +// hybrid module, either works +import LRUCache from 'lru-cache' +// or: +const LRUCache = require('lru-cache') + +// At least one of 'max', 'ttl', or 'maxSize' is required, to prevent +// unsafe unbounded storage. +// +// In most cases, it's best to specify a max for performance, so all +// the required memory allocation is done up-front. +// +// All the other options are optional, see the sections below for +// documentation on what each one does. Most of them can be +// overridden for specific items in get()/set() +const options = { + max: 500, + + // for use with tracking overall storage size + maxSize: 5000, + sizeCalculation: (value, key) => { + return 1 + }, + + // for use when you need to clean up something when objects + // are evicted from the cache + dispose: (value, key) => { + freeFromMemoryOrWhatever(value) + }, + + // how long to live in ms + ttl: 1000 * 60 * 5, + + // return stale items before removing from cache? + allowStale: false, + + updateAgeOnGet: false, + updateAgeOnHas: false, + + // async method to use for cache.fetch(), for + // stale-while-revalidate type of behavior + fetchMethod: async (key, staleValue, { options, signal }) => {}, +} + +const cache = new LRUCache(options) + +cache.set('key', 'value') +cache.get('key') // "value" + +// non-string keys ARE fully supported +// but note that it must be THE SAME object, not +// just a JSON-equivalent object. +var someObject = { a: 1 } +cache.set(someObject, 'a value') +// Object keys are not toString()-ed +cache.set('[object Object]', 'a different value') +assert.equal(cache.get(someObject), 'a value') +// A similar object with same keys/values won't work, +// because it's a different object identity +assert.equal(cache.get({ a: 1 }), undefined) + +cache.clear() // empty the cache +``` + +If you put more stuff in it, then items will fall out. + +## Options + +### `max` + +The maximum number of items that remain in the cache (assuming no +TTL pruning or explicit deletions). Note that fewer items may be +stored if size calculation is used, and `maxSize` is exceeded. +This must be a positive finite intger. + +At least one of `max`, `maxSize`, or `TTL` is required. This +must be a positive integer if set. + +**It is strongly recommended to set a `max` to prevent unbounded +growth of the cache.** See "Storage Bounds Safety" below. + +### `maxSize` + +Set to a positive integer to track the sizes of items added to +the cache, and automatically evict items in order to stay below +this size. Note that this may result in fewer than `max` items +being stored. + +Attempting to add an item to the cache whose calculated size is +greater that this amount will be a no-op. The item will not be +cached, and no other items will be evicted. + +Optional, must be a positive integer if provided. + +Sets `maxEntrySize` to the same value, unless a different value +is provided for `maxEntrySize`. + +At least one of `max`, `maxSize`, or `TTL` is required. This +must be a positive integer if set. + +Even if size tracking is enabled, **it is strongly recommended to +set a `max` to prevent unbounded growth of the cache.** See +"Storage Bounds Safety" below. + +### `maxEntrySize` + +Set to a positive integer to track the sizes of items added to +the cache, and prevent caching any item over a given size. +Attempting to add an item whose calculated size is greater than +this amount will be a no-op. The item will not be cached, and no +other items will be evicted. + +Optional, must be a positive integer if provided. Defaults to +the value of `maxSize` if provided. + +### `sizeCalculation` + +Function used to calculate the size of stored items. If you're +storing strings or buffers, then you probably want to do +something like `n => n.length`. The item is passed as the first +argument, and the key is passed as the second argument. + +This may be overridden by passing an options object to +`cache.set()`. + +Requires `maxSize` to be set. + +If the `size` (or return value of `sizeCalculation`) for a given +entry is greater than `maxEntrySize`, then the item will not be +added to the cache. + +Deprecated alias: `length` + +### `fetchMethod` + +Function that is used to make background asynchronous fetches. +Called with `fetchMethod(key, staleValue, { signal, options, +context })`. May return a Promise. + +If `fetchMethod` is not provided, then `cache.fetch(key)` is +equivalent to `Promise.resolve(cache.get(key))`. + +The `signal` object is an `AbortSignal` if that's available in +the global object, otherwise it's a pretty close polyfill. + +If at any time, `signal.aborted` is set to `true`, or if the +`signal.onabort` method is called, or if it emits an `'abort'` +event which you can listen to with `addEventListener`, then that +means that the fetch should be abandoned. This may be passed +along to async functions aware of AbortController/AbortSignal +behavior. + +The `fetchMethod` should **only** return `undefined` or a Promise +resolving to `undefined` if the AbortController signaled an +`abort` event. In all other cases, it should return or resolve +to a value suitable for adding to the cache. + +The `options` object is a union of the options that may be +provided to `set()` and `get()`. If they are modified, then that +will result in modifying the settings to `cache.set()` when the +value is resolved, and in the case of `noDeleteOnFetchRejection` +and `allowStaleOnFetchRejection`, the handling of `fetchMethod` +failures. + +For example, a DNS cache may update the TTL based on the value +returned from a remote DNS server by changing `options.ttl` in +the `fetchMethod`. + +### `fetchContext` + +Arbitrary data that can be passed to the `fetchMethod` as the +`context` option. + +Note that this will only be relevant when the `cache.fetch()` +call needs to call `fetchMethod()`. Thus, any data which will +meaningfully vary the fetch response needs to be present in the +key. This is primarily intended for including `x-request-id` +headers and the like for debugging purposes, which do not affect +the `fetchMethod()` response. + +### `noDeleteOnFetchRejection` + +If a `fetchMethod` throws an error or returns a rejected promise, +then by default, any existing stale value will be removed from +the cache. + +If `noDeleteOnFetchRejection` is set to `true`, then this +behavior is suppressed, and the stale value remains in the cache +in the case of a rejected `fetchMethod`. + +This is important in cases where a `fetchMethod` is _only_ called +as a background update while the stale value is returned, when +`allowStale` is used. + +This is implicitly in effect when `allowStaleOnFetchRejection` is +set. + +This may be set in calls to `fetch()`, or defaulted on the +constructor, or overridden by modifying the options object in the +`fetchMethod`. + +### `allowStaleOnFetchRejection` + +Set to true to return a stale value from the cache when a +`fetchMethod` throws an error or returns a rejected Promise. + +If a `fetchMethod` fails, and there is no stale value available, +the `fetch()` will resolve to `undefined`. Ie, all `fetchMethod` +errors are suppressed. + +Implies `noDeleteOnFetchRejection`. + +This may be set in calls to `fetch()`, or defaulted on the +constructor, or overridden by modifying the options object in the +`fetchMethod`. + +### `allowStaleOnFetchAbort` + +Set to true to return a stale value from the cache when the +`AbortSignal` passed to the `fetchMethod` dispatches an `'abort'` +event, whether user-triggered, or due to internal cache behavior. + +Unless `ignoreFetchAbort` is also set, the underlying +`fetchMethod` will still be considered canceled, and its return +value will be ignored and not cached. + +### `ignoreFetchAbort` + +Set to true to ignore the `abort` event emitted by the +`AbortSignal` object passed to `fetchMethod`, and still cache the +resulting resolution value, as long as it is not `undefined`. + +When used on its own, this means aborted `fetch()` calls are not +immediately resolved or rejected when they are aborted, and +instead take the full time to await. + +When used with `allowStaleOnFetchAbort`, aborted `fetch()` calls +will resolve immediately to their stale cached value or +`undefined`, and will continue to process and eventually update +the cache when they resolve, as long as the resulting value is +not `undefined`, thus supporting a "return stale on timeout while +refreshing" mechanism by passing `AbortSignal.timeout(n)` as the +signal. + +For example: + +```js +const c = new LRUCache({ + ttl: 100, + ignoreFetchAbort: true, + allowStaleOnFetchAbort: true, + fetchMethod: async (key, oldValue, { signal }) => { + // note: do NOT pass the signal to fetch()! + // let's say this fetch can take a long time. + const res = await fetch(`https://slow-backend-server/${key}`) + return await res.json() + }, +}) + +// this will return the stale value after 100ms, while still +// updating in the background for next time. +const val = await c.fetch('key', { signal: AbortSignal.timeout(100) }) +``` + +**Note**: regardless of this setting, an `abort` event _is still +emitted on the `AbortSignal` object_, so may result in invalid +results when passed to other underlying APIs that use +AbortSignals. + +This may be overridden on the `fetch()` call or in the +`fetchMethod` itself. + +### `dispose` + +Function that is called on items when they are dropped from the +cache, as `this.dispose(value, key, reason)`. + +This can be handy if you want to close file descriptors or do +other cleanup tasks when items are no longer stored in the cache. + +**NOTE**: It is called _before_ the item has been fully removed +from the cache, so if you want to put it right back in, you need +to wait until the next tick. If you try to add it back in during +the `dispose()` function call, it will break things in subtle and +weird ways. + +Unlike several other options, this may _not_ be overridden by +passing an option to `set()`, for performance reasons. If +disposal functions may vary between cache entries, then the +entire list must be scanned on every cache swap, even if no +disposal function is in use. + +The `reason` will be one of the following strings, corresponding +to the reason for the item's deletion: + +- `evict` Item was evicted to make space for a new addition +- `set` Item was overwritten by a new value +- `delete` Item was removed by explicit `cache.delete(key)` or by + calling `cache.clear()`, which deletes everything. + +The `dispose()` method is _not_ called for canceled calls to +`fetchMethod()`. If you wish to handle evictions, overwrites, +and deletes of in-flight asynchronous fetches, you must use the +`AbortSignal` provided. + +Optional, must be a function. + +### `disposeAfter` + +The same as `dispose`, but called _after_ the entry is completely +removed and the cache is once again in a clean state. + +It is safe to add an item right back into the cache at this +point. However, note that it is _very_ easy to inadvertently +create infinite recursion in this way. + +The `disposeAfter()` method is _not_ called for canceled calls to +`fetchMethod()`. If you wish to handle evictions, overwrites, +and deletes of in-flight asynchronous fetches, you must use the +`AbortSignal` provided. + +### `noDisposeOnSet` + +Set to `true` to suppress calling the `dispose()` function if the +entry key is still accessible within the cache. + +This may be overridden by passing an options object to +`cache.set()`. + +Boolean, default `false`. Only relevant if `dispose` or +`disposeAfter` options are set. + +### `ttl` + +Max time to live for items before they are considered stale. +Note that stale items are NOT preemptively removed by default, +and MAY live in the cache, contributing to its LRU max, long +after they have expired. + +Also, as this cache is optimized for LRU/MRU operations, some of +the staleness/TTL checks will reduce performance. + +This is not primarily a TTL cache, and does not make strong TTL +guarantees. There is no pre-emptive pruning of expired items, +but you _may_ set a TTL on the cache, and it will treat expired +items as missing when they are fetched, and delete them. + +Optional, but must be a positive integer in ms if specified. + +This may be overridden by passing an options object to +`cache.set()`. + +At least one of `max`, `maxSize`, or `TTL` is required. This +must be a positive integer if set. + +Even if ttl tracking is enabled, **it is strongly recommended to +set a `max` to prevent unbounded growth of the cache.** See +"Storage Bounds Safety" below. + +If ttl tracking is enabled, and `max` and `maxSize` are not set, +and `ttlAutopurge` is not set, then a warning will be emitted +cautioning about the potential for unbounded memory consumption. + +Deprecated alias: `maxAge` + +### `noUpdateTTL` + +Boolean flag to tell the cache to not update the TTL when setting +a new value for an existing key (ie, when updating a value rather +than inserting a new value). Note that the TTL value is _always_ +set (if provided) when adding a new entry into the cache. + +This may be passed as an option to `cache.set()`. + +Boolean, default false. + +### `ttlResolution` + +Minimum amount of time in ms in which to check for staleness. +Defaults to `1`, which means that the current time is checked at +most once per millisecond. + +Set to `0` to check the current time every time staleness is +tested. + +Note that setting this to a higher value _will_ improve +performance somewhat while using ttl tracking, albeit at the +expense of keeping stale items around a bit longer than intended. + +### `ttlAutopurge` + +Preemptively remove stale items from the cache. + +Note that this may _significantly_ degrade performance, +especially if the cache is storing a large number of items. It +is almost always best to just leave the stale items in the cache, +and let them fall out as new items are added. + +Note that this means that `allowStale` is a bit pointless, as +stale items will be deleted almost as soon as they expire. + +Use with caution! + +Boolean, default `false` + +### `allowStale` + +By default, if you set `ttl`, it'll only delete stale items from +the cache when you `get(key)`. That is, it's not preemptively +pruning items. + +If you set `allowStale:true`, it'll return the stale value as +well as deleting it. If you don't set this, then it'll return +`undefined` when you try to get a stale entry. + +Note that when a stale entry is fetched, _even if it is returned +due to `allowStale` being set_, it is removed from the cache +immediately. You can immediately put it back in the cache if you +wish, thus resetting the TTL. + +This may be overridden by passing an options object to +`cache.get()`. The `cache.has()` method will always return +`false` for stale items. + +Boolean, default false, only relevant if `ttl` is set. + +Deprecated alias: `stale` + +### `noDeleteOnStaleGet` + +When using time-expiring entries with `ttl`, by default stale +items will be removed from the cache when the key is accessed +with `cache.get()`. + +Setting `noDeleteOnStaleGet` to `true` will cause stale items to +remain in the cache, until they are explicitly deleted with +`cache.delete(key)`, or retrieved with `noDeleteOnStaleGet` set +to `false`. + +This may be overridden by passing an options object to +`cache.get()`. + +Boolean, default false, only relevant if `ttl` is set. + +### `updateAgeOnGet` + +When using time-expiring entries with `ttl`, setting this to +`true` will make each item's age reset to 0 whenever it is +retrieved from cache with `get()`, causing it to not expire. (It +can still fall out of cache based on recency of use, of course.) + +This may be overridden by passing an options object to +`cache.get()`. + +Boolean, default false, only relevant if `ttl` is set. + +### `updateAgeOnHas` + +When using time-expiring entries with `ttl`, setting this to +`true` will make each item's age reset to 0 whenever its presence +in the cache is checked with `has()`, causing it to not expire. +(It can still fall out of cache based on recency of use, of +course.) + +This may be overridden by passing an options object to +`cache.has()`. + +Boolean, default false, only relevant if `ttl` is set. + +## API + +### `new LRUCache(options)` + +Create a new LRUCache. All options are documented above, and are +on the cache as public members. + +### `cache.max`, `cache.maxSize`, `cache.allowStale`, + +`cache.noDisposeOnSet`, `cache.sizeCalculation`, `cache.dispose`, +`cache.maxSize`, `cache.ttl`, `cache.updateAgeOnGet`, +`cache.updateAgeOnHas` + +All option names are exposed as public members on the cache +object. + +These are intended for read access only. Changing them during +program operation can cause undefined behavior. + +### `cache.size` + +The total number of items held in the cache at the current +moment. + +### `cache.calculatedSize` + +The total size of items in cache when using size tracking. + +### `set(key, value, [{ size, sizeCalculation, ttl, noDisposeOnSet, start, status }])` + +Add a value to the cache. + +Optional options object may contain `ttl` and `sizeCalculation` +as described above, which default to the settings on the cache +object. + +If `start` is provided, then that will set the effective start +time for the TTL calculation. Note that this must be a previous +value of `performance.now()` if supported, or a previous value of +`Date.now()` if not. + +Options object may also include `size`, which will prevent +calling the `sizeCalculation` function and just use the specified +number if it is a positive integer, and `noDisposeOnSet` which +will prevent calling a `dispose` function in the case of +overwrites. + +If the `size` (or return value of `sizeCalculation`) for a given +entry is greater than `maxEntrySize`, then the item will not be +added to the cache. + +Will update the recency of the entry. + +Returns the cache object. + +For the usage of the `status` option, see **Status Tracking** +below. + +### `get(key, { updateAgeOnGet, allowStale, status } = {}) => value` + +Return a value from the cache. + +Will update the recency of the cache entry found. + +If the key is not found, `get()` will return `undefined`. This +can be confusing when setting values specifically to `undefined`, +as in `cache.set(key, undefined)`. Use `cache.has()` to +determine whether a key is present in the cache at all. + +For the usage of the `status` option, see **Status Tracking** +below. + +### `async fetch(key, options = {}) => Promise` + +The following options are supported: + +- `updateAgeOnGet` +- `allowStale` +- `size` +- `sizeCalculation` +- `ttl` +- `noDisposeOnSet` +- `forceRefresh` +- `status` - See **Status Tracking** below. +- `signal` - AbortSignal can be used to cancel the `fetch()`. + Note that the `signal` option provided to the `fetchMethod` is + a different object, because it must also respond to internal + cache state changes, but aborting this signal will abort the + one passed to `fetchMethod` as well. +- `fetchContext` - sets the `context` option passed to the + underlying `fetchMethod`. + +If the value is in the cache and not stale, then the returned +Promise resolves to the value. + +If not in the cache, or beyond its TTL staleness, then +`fetchMethod(key, staleValue, { options, signal, context })` is +called, and the value returned will be added to the cache once +resolved. + +If called with `allowStale`, and an asynchronous fetch is +currently in progress to reload a stale value, then the former +stale value will be returned. + +If called with `forceRefresh`, then the cached item will be +re-fetched, even if it is not stale. However, if `allowStale` is +set, then the old value will still be returned. This is useful +in cases where you want to force a reload of a cached value. If +a background fetch is already in progress, then `forceRefresh` +has no effect. + +Multiple fetches for the same `key` will only call `fetchMethod` +a single time, and all will be resolved when the value is +resolved, even if different options are used. + +If `fetchMethod` is not specified, then this is effectively an +alias for `Promise.resolve(cache.get(key))`. + +When the fetch method resolves to a value, if the fetch has not +been aborted due to deletion, eviction, or being overwritten, +then it is added to the cache using the options provided. + +If the key is evicted or deleted before the `fetchMethod` +resolves, then the AbortSignal passed to the `fetchMethod` will +receive an `abort` event, and the promise returned by `fetch()` +will reject with the reason for the abort. + +If a `signal` is passed to the `fetch()` call, then aborting the +signal will abort the fetch and cause the `fetch()` promise to +reject with the reason provided. + +### `peek(key, { allowStale } = {}) => value` + +Like `get()` but doesn't update recency or delete stale items. + +Returns `undefined` if the item is stale, unless `allowStale` is +set either on the cache or in the options object. + +### `has(key, { updateAgeOnHas, status } = {}) => Boolean` + +Check if a key is in the cache, without updating the recency of +use. Age is updated if `updateAgeOnHas` is set to `true` in +either the options or the constructor. + +Will return `false` if the item is stale, even though it is +technically in the cache. The difference can be determined (if +it matters) by using a `status` argument, and inspecting the +`has` field. + +For the usage of the `status` option, see **Status Tracking** +below. + +### `delete(key)` + +Deletes a key out of the cache. + +Returns `true` if the key was deleted, `false` otherwise. + +### `clear()` + +Clear the cache entirely, throwing away all values. + +Deprecated alias: `reset()` + +### `keys()` + +Return a generator yielding the keys in the cache, in order from +most recently used to least recently used. + +### `rkeys()` + +Return a generator yielding the keys in the cache, in order from +least recently used to most recently used. + +### `values()` + +Return a generator yielding the values in the cache, in order +from most recently used to least recently used. + +### `rvalues()` + +Return a generator yielding the values in the cache, in order +from least recently used to most recently used. + +### `entries()` + +Return a generator yielding `[key, value]` pairs, in order from +most recently used to least recently used. + +### `rentries()` + +Return a generator yielding `[key, value]` pairs, in order from +least recently used to most recently used. + +### `find(fn, [getOptions])` + +Find a value for which the supplied `fn` method returns a truthy +value, similar to `Array.find()`. + +`fn` is called as `fn(value, key, cache)`. + +The optional `getOptions` are applied to the resulting `get()` of +the item found. + +### `dump()` + +Return an array of `[key, entry]` objects which can be passed to +`cache.load()` + +The `start` fields are calculated relative to a portable +`Date.now()` timestamp, even if `performance.now()` is available. + +Stale entries are always included in the `dump`, even if +`allowStale` is false. + +Note: this returns an actual array, not a generator, so it can be +more easily passed around. + +### `load(entries)` + +Reset the cache and load in the items in `entries` in the order +listed. Note that the shape of the resulting cache may be +different if the same options are not used in both caches. + +The `start` fields are assumed to be calculated relative to a +portable `Date.now()` timestamp, even if `performance.now()` is +available. + +### `purgeStale()` + +Delete any stale entries. Returns `true` if anything was +removed, `false` otherwise. + +Deprecated alias: `prune` + +### `getRemainingTTL(key)` + +Return the number of ms left in the item's TTL. If item is not +in cache, returns `0`. Returns `Infinity` if item is in cache +without a defined TTL. + +### `forEach(fn, [thisp])` + +Call the `fn` function with each set of `fn(value, key, cache)` +in the LRU cache, from most recent to least recently used. + +Does not affect recency of use. + +If `thisp` is provided, function will be called in the +`this`-context of the provided object. + +### `rforEach(fn, [thisp])` + +Same as `cache.forEach(fn, thisp)`, but in order from least +recently used to most recently used. + +### `pop()` + +Evict the least recently used item, returning its value. + +Returns `undefined` if cache is empty. + +### Internal Methods and Properties + +In order to optimize performance as much as possible, "private" +members and methods are exposed on the object as normal +properties, rather than being accessed via Symbols, private +members, or closure variables. + +**Do not use or rely on these.** They will change or be removed +without notice. They will cause undefined behavior if used +inappropriately. There is no need or reason to ever call them +directly. + +This documentation is here so that it is especially clear that +this not "undocumented" because someone forgot; it _is_ +documented, and the documentation is telling you not to do it. + +**Do not report bugs that stem from using these properties.** +They will be ignored. + +- `initializeTTLTracking()` Set up the cache for tracking TTLs +- `updateItemAge(index)` Called when an item age is updated, by + internal ID +- `setItemTTL(index)` Called when an item ttl is updated, by + internal ID +- `isStale(index)` Called to check an item's staleness, by + internal ID +- `initializeSizeTracking()` Set up the cache for tracking item + size. Called automatically when a size is specified. +- `removeItemSize(index)` Updates the internal size calculation + when an item is removed or modified, by internal ID +- `addItemSize(index)` Updates the internal size calculation when + an item is added or modified, by internal ID +- `indexes()` An iterator over the non-stale internal IDs, from + most recently to least recently used. +- `rindexes()` An iterator over the non-stale internal IDs, from + least recently to most recently used. +- `newIndex()` Create a new internal ID, either reusing a deleted + ID, evicting the least recently used ID, or walking to the end + of the allotted space. +- `evict()` Evict the least recently used internal ID, returning + its ID. Does not do any bounds checking. +- `connect(p, n)` Connect the `p` and `n` internal IDs in the + linked list. +- `moveToTail(index)` Move the specified internal ID to the most + recently used position. +- `keyMap` Map of keys to internal IDs +- `keyList` List of keys by internal ID +- `valList` List of values by internal ID +- `sizes` List of calculated sizes by internal ID +- `ttls` List of TTL values by internal ID +- `starts` List of start time values by internal ID +- `next` Array of "next" pointers by internal ID +- `prev` Array of "previous" pointers by internal ID +- `head` Internal ID of least recently used item +- `tail` Internal ID of most recently used item +- `free` Stack of deleted internal IDs + +## Status Tracking + +Occasionally, it may be useful to track the internal behavior of +the cache, particularly for logging, debugging, or for behavior +within the `fetchMethod`. To do this, you can pass a `status` +object to the `get()`, `set()`, `has()`, and `fetch()` methods. + +The `status` option should be a plain JavaScript object. + +The following fields will be set appropriately: + +```ts +interface Status { + /** + * The status of a set() operation. + * + * - add: the item was not found in the cache, and was added + * - update: the item was in the cache, with the same value provided + * - replace: the item was in the cache, and replaced + * - miss: the item was not added to the cache for some reason + */ + set?: 'add' | 'update' | 'replace' | 'miss' + + /** + * the ttl stored for the item, or undefined if ttls are not used. + */ + ttl?: LRUMilliseconds + + /** + * the start time for the item, or undefined if ttls are not used. + */ + start?: LRUMilliseconds + + /** + * The timestamp used for TTL calculation + */ + now?: LRUMilliseconds + + /** + * the remaining ttl for the item, or undefined if ttls are not used. + */ + remainingTTL?: LRUMilliseconds + + /** + * The calculated size for the item, if sizes are used. + */ + size?: LRUSize + + /** + * A flag indicating that the item was not stored, due to exceeding the + * {@link maxEntrySize} + */ + maxEntrySizeExceeded?: true + + /** + * The old value, specified in the case of `set:'update'` or + * `set:'replace'` + */ + oldValue?: V + + /** + * The results of a {@link has} operation + * + * - hit: the item was found in the cache + * - stale: the item was found in the cache, but is stale + * - miss: the item was not found in the cache + */ + has?: 'hit' | 'stale' | 'miss' + + /** + * The status of a {@link fetch} operation. + * Note that this can change as the underlying fetch() moves through + * various states. + * + * - inflight: there is another fetch() for this key which is in process + * - get: there is no fetchMethod, so {@link get} was called. + * - miss: the item is not in cache, and will be fetched. + * - hit: the item is in the cache, and was resolved immediately. + * - stale: the item is in the cache, but stale. + * - refresh: the item is in the cache, and not stale, but + * {@link forceRefresh} was specified. + */ + fetch?: 'get' | 'inflight' | 'miss' | 'hit' | 'stale' | 'refresh' + + /** + * The {@link fetchMethod} was called + */ + fetchDispatched?: true + + /** + * The cached value was updated after a successful call to fetchMethod + */ + fetchUpdated?: true + + /** + * The reason for a fetch() rejection. Either the error raised by the + * {@link fetchMethod}, or the reason for an AbortSignal. + */ + fetchError?: Error + + /** + * The fetch received an abort signal + */ + fetchAborted?: true + + /** + * The abort signal received was ignored, and the fetch was allowed to + * continue. + */ + fetchAbortIgnored?: true + + /** + * The fetchMethod promise resolved successfully + */ + fetchResolved?: true + + /** + * The results of the fetchMethod promise were stored in the cache + */ + fetchUpdated?: true + + /** + * The fetchMethod promise was rejected + */ + fetchRejected?: true + + /** + * The status of a {@link get} operation. + * + * - fetching: The item is currently being fetched. If a previous value is + * present and allowed, that will be returned. + * - stale: The item is in the cache, and is stale. + * - hit: the item is in the cache + * - miss: the item is not in the cache + */ + get?: 'stale' | 'hit' | 'miss' + + /** + * A fetch or get operation returned a stale value. + */ + returnedStale?: true +} +``` + +## Storage Bounds Safety + +This implementation aims to be as flexible as possible, within +the limits of safe memory consumption and optimal performance. + +At initial object creation, storage is allocated for `max` items. +If `max` is set to zero, then some performance is lost, and item +count is unbounded. Either `maxSize` or `ttl` _must_ be set if +`max` is not specified. + +If `maxSize` is set, then this creates a safe limit on the +maximum storage consumed, but without the performance benefits of +pre-allocation. When `maxSize` is set, every item _must_ provide +a size, either via the `sizeCalculation` method provided to the +constructor, or via a `size` or `sizeCalculation` option provided +to `cache.set()`. The size of every item _must_ be a positive +integer. + +If neither `max` nor `maxSize` are set, then `ttl` tracking must +be enabled. Note that, even when tracking item `ttl`, items are +_not_ preemptively deleted when they become stale, unless +`ttlAutopurge` is enabled. Instead, they are only purged the +next time the key is requested. Thus, if `ttlAutopurge`, `max`, +and `maxSize` are all not set, then the cache will potentially +grow unbounded. + +In this case, a warning is printed to standard error. Future +versions may require the use of `ttlAutopurge` if `max` and +`maxSize` are not specified. + +If you truly wish to use a cache that is bound _only_ by TTL +expiration, consider using a `Map` object, and calling +`setTimeout` to delete entries when they expire. It will perform +much better than an LRU cache. + +Here is an implementation you may use, under the same +[license](./LICENSE) as this package: + +```js +// a storage-unbounded ttl cache that is not an lru-cache +const cache = { + data: new Map(), + timers: new Map(), + set: (k, v, ttl) => { + if (cache.timers.has(k)) { + clearTimeout(cache.timers.get(k)) + } + cache.timers.set( + k, + setTimeout(() => cache.delete(k), ttl) + ) + cache.data.set(k, v) + }, + get: k => cache.data.get(k), + has: k => cache.data.has(k), + delete: k => { + if (cache.timers.has(k)) { + clearTimeout(cache.timers.get(k)) + } + cache.timers.delete(k) + return cache.data.delete(k) + }, + clear: () => { + cache.data.clear() + for (const v of cache.timers.values()) { + clearTimeout(v) + } + cache.timers.clear() + }, +} +``` + +If that isn't to your liking, check out +[@isaacs/ttlcache](http://npm.im/@isaacs/ttlcache). + +## Performance + +As of January 2022, version 7 of this library is one of the most +performant LRU cache implementations in JavaScript. + +Benchmarks can be extremely difficult to get right. In +particular, the performance of set/get/delete operations on +objects will vary _wildly_ depending on the type of key used. V8 +is highly optimized for objects with keys that are short strings, +especially integer numeric strings. Thus any benchmark which +tests _solely_ using numbers as keys will tend to find that an +object-based approach performs the best. + +Note that coercing _anything_ to strings to use as object keys is +unsafe, unless you can be 100% certain that no other type of +value will be used. For example: + +```js +const myCache = {} +const set = (k, v) => (myCache[k] = v) +const get = k => myCache[k] + +set({}, 'please hang onto this for me') +set('[object Object]', 'oopsie') +``` + +Also beware of "Just So" stories regarding performance. Garbage +collection of large (especially: deep) object graphs can be +incredibly costly, with several "tipping points" where it +increases exponentially. As a result, putting that off until +later can make it much worse, and less predictable. If a library +performs well, but only in a scenario where the object graph is +kept shallow, then that won't help you if you are using large +objects as keys. + +In general, when attempting to use a library to improve +performance (such as a cache like this one), it's best to choose +an option that will perform well in the sorts of scenarios where +you'll actually use it. + +This library is optimized for repeated gets and minimizing +eviction time, since that is the expected need of a LRU. Set +operations are somewhat slower on average than a few other +options, in part because of that optimization. It is assumed +that you'll be caching some costly operation, ideally as rarely +as possible, so optimizing set over get would be unwise. + +If performance matters to you: + +1. If it's at all possible to use small integer values as keys, + and you can guarantee that no other types of values will be + used as keys, then do that, and use a cache such as + [lru-fast](https://npmjs.com/package/lru-fast), or + [mnemonist's + LRUCache](https://yomguithereal.github.io/mnemonist/lru-cache) + which uses an Object as its data store. +2. Failing that, if at all possible, use short non-numeric + strings (ie, less than 256 characters) as your keys, and use + [mnemonist's + LRUCache](https://yomguithereal.github.io/mnemonist/lru-cache). +3. If the types of your keys will be long strings, strings that + look like floats, `null`, objects, or some mix of types, or if + you aren't sure, then this library will work well for you. +4. Do not use a `dispose` function, size tracking, or especially + ttl behavior, unless absolutely needed. These features are + convenient, and necessary in some use cases, and every attempt + has been made to make the performance impact minimal, but it + isn't nothing. + +## Breaking Changes in Version 7 + +This library changed to a different algorithm and internal data +structure in version 7, yielding significantly better +performance, albeit with some subtle changes as a result. + +If you were relying on the internals of LRUCache in version 6 or +before, it probably will not work in version 7 and above. + +For more info, see the [change log](CHANGELOG.md). diff --git a/node_modules/lru-cache/index.d.ts b/node_modules/lru-cache/index.d.ts new file mode 100644 index 0000000..b58395e --- /dev/null +++ b/node_modules/lru-cache/index.d.ts @@ -0,0 +1,869 @@ +// Project: https://github.com/isaacs/node-lru-cache +// Based initially on @types/lru-cache +// https://github.com/DefinitelyTyped/DefinitelyTyped +// used under the terms of the MIT License, shown below. +// +// DefinitelyTyped license: +// ------ +// MIT License +// +// Copyright (c) Microsoft Corporation. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE +// ------ +// +// Changes by Isaac Z. Schlueter released under the terms found in the +// LICENSE file within this project. + +/** + * Integer greater than 0, representing some number of milliseconds, or the + * time at which a TTL started counting from. + */ +declare type LRUMilliseconds = number + +/** + * An integer greater than 0, reflecting the calculated size of items + */ +declare type LRUSize = number + +/** + * An integer greater than 0, reflecting a number of items + */ +declare type LRUCount = number + +declare class LRUCache implements Iterable<[K, V]> { + constructor(options: LRUCache.Options) + + /** + * Number of items in the cache. + * Alias for {@link size} + * + * @deprecated since 7.0 use {@link size} instead + */ + public readonly length: LRUCount + + public readonly max: LRUCount + public readonly maxSize: LRUSize + public readonly maxEntrySize: LRUSize + public readonly sizeCalculation: + | LRUCache.SizeCalculator + | undefined + public readonly dispose: LRUCache.Disposer + /** + * @since 7.4.0 + */ + public readonly disposeAfter: LRUCache.Disposer | null + public readonly noDisposeOnSet: boolean + public readonly ttl: LRUMilliseconds + public readonly ttlResolution: LRUMilliseconds + public readonly ttlAutopurge: boolean + public readonly allowStale: boolean + public readonly updateAgeOnGet: boolean + /** + * @since 7.11.0 + */ + public readonly noDeleteOnStaleGet: boolean + /** + * @since 7.6.0 + */ + public readonly fetchMethod: LRUCache.Fetcher | null + + /** + * The total number of items held in the cache at the current moment. + */ + public readonly size: LRUCount + + /** + * The total size of items in cache when using size tracking. + */ + public readonly calculatedSize: LRUSize + + /** + * Add a value to the cache. + */ + public set( + key: K, + value: V, + options?: LRUCache.SetOptions + ): this + + /** + * Return a value from the cache. Will update the recency of the cache entry + * found. + * + * If the key is not found, {@link get} will return `undefined`. This can be + * confusing when setting values specifically to `undefined`, as in + * `cache.set(key, undefined)`. Use {@link has} to determine whether a key is + * present in the cache at all. + */ + public get(key: K, options?: LRUCache.GetOptions): V | undefined + + /** + * Like {@link get} but doesn't update recency or delete stale items. + * Returns `undefined` if the item is stale, unless {@link allowStale} is set + * either on the cache or in the options object. + */ + public peek(key: K, options?: LRUCache.PeekOptions): V | undefined + + /** + * Check if a key is in the cache, without updating the recency of use. + * Will return false if the item is stale, even though it is technically + * in the cache. + * + * Will not update item age unless {@link updateAgeOnHas} is set in the + * options or constructor. + */ + public has(key: K, options?: LRUCache.HasOptions): boolean + + /** + * Deletes a key out of the cache. + * Returns true if the key was deleted, false otherwise. + */ + public delete(key: K): boolean + + /** + * Clear the cache entirely, throwing away all values. + */ + public clear(): void + + /** + * Delete any stale entries. Returns true if anything was removed, false + * otherwise. + */ + public purgeStale(): boolean + + /** + * Find a value for which the supplied fn method returns a truthy value, + * similar to Array.find(). fn is called as fn(value, key, cache). + */ + public find( + callbackFn: ( + value: V, + key: K, + cache: this + ) => boolean | undefined | void, + options?: LRUCache.GetOptions + ): V | undefined + + /** + * Call the supplied function on each item in the cache, in order from + * most recently used to least recently used. fn is called as + * fn(value, key, cache). Does not update age or recenty of use. + */ + public forEach( + callbackFn: (this: T, value: V, key: K, cache: this) => void, + thisArg?: T + ): void + + /** + * The same as {@link forEach} but items are iterated over in reverse + * order. (ie, less recently used items are iterated over first.) + */ + public rforEach( + callbackFn: (this: T, value: V, key: K, cache: this) => void, + thisArg?: T + ): void + + /** + * Return a generator yielding the keys in the cache, + * in order from most recently used to least recently used. + */ + public keys(): Generator + + /** + * Inverse order version of {@link keys} + * + * Return a generator yielding the keys in the cache, + * in order from least recently used to most recently used. + */ + public rkeys(): Generator + + /** + * Return a generator yielding the values in the cache, + * in order from most recently used to least recently used. + */ + public values(): Generator + + /** + * Inverse order version of {@link values} + * + * Return a generator yielding the values in the cache, + * in order from least recently used to most recently used. + */ + public rvalues(): Generator + + /** + * Return a generator yielding `[key, value]` pairs, + * in order from most recently used to least recently used. + */ + public entries(): Generator<[K, V], void, void> + + /** + * Inverse order version of {@link entries} + * + * Return a generator yielding `[key, value]` pairs, + * in order from least recently used to most recently used. + */ + public rentries(): Generator<[K, V], void, void> + + /** + * Iterating over the cache itself yields the same results as + * {@link entries} + */ + public [Symbol.iterator](): Generator<[K, V], void, void> + + /** + * Return an array of [key, entry] objects which can be passed to + * cache.load() + */ + public dump(): Array<[K, LRUCache.Entry]> + + /** + * Reset the cache and load in the items in entries in the order listed. + * Note that the shape of the resulting cache may be different if the + * same options are not used in both caches. + */ + public load( + cacheEntries: ReadonlyArray<[K, LRUCache.Entry]> + ): void + + /** + * Evict the least recently used item, returning its value or `undefined` + * if cache is empty. + */ + public pop(): V | undefined + + /** + * Deletes a key out of the cache. + * + * @deprecated since 7.0 use delete() instead + */ + public del(key: K): boolean + + /** + * Clear the cache entirely, throwing away all values. + * + * @deprecated since 7.0 use clear() instead + */ + public reset(): void + + /** + * Manually iterates over the entire cache proactively pruning old entries. + * + * @deprecated since 7.0 use purgeStale() instead + */ + public prune(): boolean + + /** + * Make an asynchronous cached fetch using the {@link fetchMethod} function. + * + * If multiple fetches for the same key are issued, then they will all be + * coalesced into a single call to fetchMethod. + * + * Note that this means that handling options such as + * {@link allowStaleOnFetchAbort}, {@link signal}, and + * {@link allowStaleOnFetchRejection} will be determined by the FIRST fetch() + * call for a given key. + * + * This is a known (fixable) shortcoming which will be addresed on when + * someone complains about it, as the fix would involve added complexity and + * may not be worth the costs for this edge case. + * + * since: 7.6.0 + */ + public fetch( + key: K, + options?: LRUCache.FetchOptions + ): Promise + + /** + * since: 7.6.0 + */ + public getRemainingTTL(key: K): LRUMilliseconds +} + +declare namespace LRUCache { + type DisposeReason = 'evict' | 'set' | 'delete' + + type SizeCalculator = (value: V, key: K) => LRUSize + type Disposer = ( + value: V, + key: K, + reason: DisposeReason + ) => void + type Fetcher = ( + key: K, + staleValue: V | undefined, + options: FetcherOptions + ) => Promise | V | void | undefined + + interface DeprecatedOptions { + /** + * alias for ttl + * + * @deprecated since 7.0 use options.ttl instead + */ + maxAge?: LRUMilliseconds + + /** + * alias for {@link sizeCalculation} + * + * @deprecated since 7.0 use {@link sizeCalculation} instead + */ + length?: SizeCalculator + + /** + * alias for allowStale + * + * @deprecated since 7.0 use options.allowStale instead + */ + stale?: boolean + } + + interface LimitedByCount { + /** + * The number of most recently used items to keep. + * Note that we may store fewer items than this if maxSize is hit. + */ + max: LRUCount + } + + type MaybeMaxEntrySizeLimit = + | { + /** + * The maximum allowed size for any single item in the cache. + * + * If a larger item is passed to {@link set} or returned by a + * {@link fetchMethod}, then it will not be stored in the cache. + */ + maxEntrySize: LRUSize + sizeCalculation?: SizeCalculator + } + | {} + + interface LimitedBySize { + /** + * If you wish to track item size, you must provide a maxSize + * note that we still will only keep up to max *actual items*, + * if max is set, so size tracking may cause fewer than max items + * to be stored. At the extreme, a single item of maxSize size + * will cause everything else in the cache to be dropped when it + * is added. Use with caution! + * + * Note also that size tracking can negatively impact performance, + * though for most cases, only minimally. + */ + maxSize: LRUSize + + /** + * Function to calculate size of items. Useful if storing strings or + * buffers or other items where memory size depends on the object itself. + * + * Items larger than {@link maxEntrySize} will not be stored in the cache. + * + * Note that when {@link maxSize} or {@link maxEntrySize} are set, every + * item added MUST have a size specified, either via a `sizeCalculation` in + * the constructor, or `sizeCalculation` or {@link size} options to + * {@link set}. + */ + sizeCalculation?: SizeCalculator + } + + interface LimitedByTTL { + /** + * Max time in milliseconds for items to live in cache before they are + * considered stale. Note that stale items are NOT preemptively removed + * by default, and MAY live in the cache, contributing to its LRU max, + * long after they have expired. + * + * Also, as this cache is optimized for LRU/MRU operations, some of + * the staleness/TTL checks will reduce performance, as they will incur + * overhead by deleting items. + * + * Must be an integer number of ms, defaults to 0, which means "no TTL" + */ + ttl: LRUMilliseconds + + /** + * Boolean flag to tell the cache to not update the TTL when + * setting a new value for an existing key (ie, when updating a value + * rather than inserting a new value). Note that the TTL value is + * _always_ set (if provided) when adding a new entry into the cache. + * + * @default false + * @since 7.4.0 + */ + noUpdateTTL?: boolean + + /** + * Minimum amount of time in ms in which to check for staleness. + * Defaults to 1, which means that the current time is checked + * at most once per millisecond. + * + * Set to 0 to check the current time every time staleness is tested. + * (This reduces performance, and is theoretically unnecessary.) + * + * Setting this to a higher value will improve performance somewhat + * while using ttl tracking, albeit at the expense of keeping stale + * items around a bit longer than their TTLs would indicate. + * + * @default 1 + * @since 7.1.0 + */ + ttlResolution?: LRUMilliseconds + + /** + * Preemptively remove stale items from the cache. + * Note that this may significantly degrade performance, + * especially if the cache is storing a large number of items. + * It is almost always best to just leave the stale items in + * the cache, and let them fall out as new items are added. + * + * Note that this means that {@link allowStale} is a bit pointless, + * as stale items will be deleted almost as soon as they expire. + * + * Use with caution! + * + * @default false + * @since 7.1.0 + */ + ttlAutopurge?: boolean + + /** + * Return stale items from {@link get} before disposing of them. + * Return stale values from {@link fetch} while performing a call + * to the {@link fetchMethod} in the background. + * + * @default false + */ + allowStale?: boolean + + /** + * Update the age of items on {@link get}, renewing their TTL + * + * @default false + */ + updateAgeOnGet?: boolean + + /** + * Do not delete stale items when they are retrieved with {@link get}. + * Note that the {@link get} return value will still be `undefined` unless + * allowStale is true. + * + * @default false + * @since 7.11.0 + */ + noDeleteOnStaleGet?: boolean + + /** + * Update the age of items on {@link has}, renewing their TTL + * + * @default false + */ + updateAgeOnHas?: boolean + } + + type SafetyBounds = + | LimitedByCount + | LimitedBySize + | LimitedByTTL + + // options shared by all three of the limiting scenarios + interface SharedOptions { + /** + * Function that is called on items when they are dropped from the cache. + * This can be handy if you want to close file descriptors or do other + * cleanup tasks when items are no longer accessible. Called with `key, + * value`. It's called before actually removing the item from the + * internal cache, so it is *NOT* safe to re-add them. + * Use {@link disposeAfter} if you wish to dispose items after they have + * been full removed, when it is safe to add them back to the cache. + */ + dispose?: Disposer + + /** + * The same as dispose, but called *after* the entry is completely + * removed and the cache is once again in a clean state. It is safe to + * add an item right back into the cache at this point. + * However, note that it is *very* easy to inadvertently create infinite + * recursion this way. + * + * @since 7.3.0 + */ + disposeAfter?: Disposer + + /** + * Set to true to suppress calling the dispose() function if the entry + * key is still accessible within the cache. + * This may be overridden by passing an options object to {@link set}. + * + * @default false + */ + noDisposeOnSet?: boolean + + /** + * Function that is used to make background asynchronous fetches. Called + * with `fetchMethod(key, staleValue, { signal, options, context })`. + * + * If `fetchMethod` is not provided, then {@link fetch} is + * equivalent to `Promise.resolve(cache.get(key))`. + * + * The `fetchMethod` should ONLY return `undefined` in cases where the + * abort controller has sent an abort signal. + * + * @since 7.6.0 + */ + fetchMethod?: LRUCache.Fetcher + + /** + * Set to true to suppress the deletion of stale data when a + * {@link fetchMethod} throws an error or returns a rejected promise + * + * This may be overridden in the {@link fetchMethod}. + * + * @default false + * @since 7.10.0 + */ + noDeleteOnFetchRejection?: boolean + + /** + * Set to true to allow returning stale data when a {@link fetchMethod} + * throws an error or returns a rejected promise. Note that this + * differs from using {@link allowStale} in that stale data will + * ONLY be returned in the case that the fetch fails, not any other + * times. + * + * This may be overridden in the {@link fetchMethod}. + * + * @default false + * @since 7.16.0 + */ + allowStaleOnFetchRejection?: boolean + + /** + * + * Set to true to ignore the `abort` event emitted by the `AbortSignal` + * object passed to {@link fetchMethod}, and still cache the + * resulting resolution value, as long as it is not `undefined`. + * + * When used on its own, this means aborted {@link fetch} calls are not + * immediately resolved or rejected when they are aborted, and instead take + * the full time to await. + * + * When used with {@link allowStaleOnFetchAbort}, aborted {@link fetch} + * calls will resolve immediately to their stale cached value or + * `undefined`, and will continue to process and eventually update the + * cache when they resolve, as long as the resulting value is not + * `undefined`, thus supporting a "return stale on timeout while + * refreshing" mechanism by passing `AbortSignal.timeout(n)` as the signal. + * + * **Note**: regardless of this setting, an `abort` event _is still emitted + * on the `AbortSignal` object_, so may result in invalid results when + * passed to other underlying APIs that use AbortSignals. + * + * This may be overridden in the {@link fetchMethod} or the call to + * {@link fetch}. + * + * @default false + * @since 7.17.0 + */ + ignoreFetchAbort?: boolean + + /** + * Set to true to return a stale value from the cache when the + * `AbortSignal` passed to the {@link fetchMethod} dispatches an `'abort'` + * event, whether user-triggered, or due to internal cache behavior. + * + * Unless {@link ignoreFetchAbort} is also set, the underlying + * {@link fetchMethod} will still be considered canceled, and its return + * value will be ignored and not cached. + * + * This may be overridden in the {@link fetchMethod} or the call to + * {@link fetch}. + * + * @default false + * @since 7.17.0 + */ + allowStaleOnFetchAbort?: boolean + + /** + * Set to any value in the constructor or {@link fetch} options to + * pass arbitrary data to the {@link fetchMethod} in the {@link context} + * options field. + * + * @since 7.12.0 + */ + fetchContext?: any + } + + type Options = SharedOptions & + DeprecatedOptions & + SafetyBounds & + MaybeMaxEntrySizeLimit + + /** + * options which override the options set in the LRUCache constructor + * when making calling {@link set}. + */ + interface SetOptions { + /** + * A value for the size of the entry, prevents calls to + * {@link sizeCalculation}. + * + * Items larger than {@link maxEntrySize} will not be stored in the cache. + * + * Note that when {@link maxSize} or {@link maxEntrySize} are set, every + * item added MUST have a size specified, either via a `sizeCalculation` in + * the constructor, or {@link sizeCalculation} or `size` options to + * {@link set}. + */ + size?: LRUSize + /** + * Overrides the {@link sizeCalculation} method set in the constructor. + * + * Items larger than {@link maxEntrySize} will not be stored in the cache. + * + * Note that when {@link maxSize} or {@link maxEntrySize} are set, every + * item added MUST have a size specified, either via a `sizeCalculation` in + * the constructor, or `sizeCalculation` or {@link size} options to + * {@link set}. + */ + sizeCalculation?: SizeCalculator + ttl?: LRUMilliseconds + start?: LRUMilliseconds + noDisposeOnSet?: boolean + noUpdateTTL?: boolean + status?: Status + } + + /** + * options which override the options set in the LRUCAche constructor + * when calling {@link has}. + */ + interface HasOptions { + updateAgeOnHas?: boolean + status: Status + } + + /** + * options which override the options set in the LRUCache constructor + * when calling {@link get}. + */ + interface GetOptions { + allowStale?: boolean + updateAgeOnGet?: boolean + noDeleteOnStaleGet?: boolean + status?: Status + } + + /** + * options which override the options set in the LRUCache constructor + * when calling {@link peek}. + */ + interface PeekOptions { + allowStale?: boolean + } + + /** + * Options object passed to the {@link fetchMethod} + * + * May be mutated by the {@link fetchMethod} to affect the behavior of the + * resulting {@link set} operation on resolution, or in the case of + * {@link noDeleteOnFetchRejection}, {@link ignoreFetchAbort}, and + * {@link allowStaleOnFetchRejection}, the handling of failure. + */ + interface FetcherFetchOptions { + allowStale?: boolean + updateAgeOnGet?: boolean + noDeleteOnStaleGet?: boolean + size?: LRUSize + sizeCalculation?: SizeCalculator + ttl?: LRUMilliseconds + noDisposeOnSet?: boolean + noUpdateTTL?: boolean + noDeleteOnFetchRejection?: boolean + allowStaleOnFetchRejection?: boolean + ignoreFetchAbort?: boolean + allowStaleOnFetchAbort?: boolean + status?: Status + } + + /** + * Status object that may be passed to {@link fetch}, {@link get}, + * {@link set}, and {@link has}. + */ + interface Status { + /** + * The status of a set() operation. + * + * - add: the item was not found in the cache, and was added + * - update: the item was in the cache, with the same value provided + * - replace: the item was in the cache, and replaced + * - miss: the item was not added to the cache for some reason + */ + set?: 'add' | 'update' | 'replace' | 'miss' + + /** + * the ttl stored for the item, or undefined if ttls are not used. + */ + ttl?: LRUMilliseconds + + /** + * the start time for the item, or undefined if ttls are not used. + */ + start?: LRUMilliseconds + + /** + * The timestamp used for TTL calculation + */ + now?: LRUMilliseconds + + /** + * the remaining ttl for the item, or undefined if ttls are not used. + */ + remainingTTL?: LRUMilliseconds + + /** + * The calculated size for the item, if sizes are used. + */ + size?: LRUSize + + /** + * A flag indicating that the item was not stored, due to exceeding the + * {@link maxEntrySize} + */ + maxEntrySizeExceeded?: true + + /** + * The old value, specified in the case of `set:'update'` or + * `set:'replace'` + */ + oldValue?: V + + /** + * The results of a {@link has} operation + * + * - hit: the item was found in the cache + * - stale: the item was found in the cache, but is stale + * - miss: the item was not found in the cache + */ + has?: 'hit' | 'stale' | 'miss' + + /** + * The status of a {@link fetch} operation. + * Note that this can change as the underlying fetch() moves through + * various states. + * + * - inflight: there is another fetch() for this key which is in process + * - get: there is no fetchMethod, so {@link get} was called. + * - miss: the item is not in cache, and will be fetched. + * - hit: the item is in the cache, and was resolved immediately. + * - stale: the item is in the cache, but stale. + * - refresh: the item is in the cache, and not stale, but + * {@link forceRefresh} was specified. + */ + fetch?: 'get' | 'inflight' | 'miss' | 'hit' | 'stale' | 'refresh' + + /** + * The {@link fetchMethod} was called + */ + fetchDispatched?: true + + /** + * The cached value was updated after a successful call to fetchMethod + */ + fetchUpdated?: true + + /** + * The reason for a fetch() rejection. Either the error raised by the + * {@link fetchMethod}, or the reason for an AbortSignal. + */ + fetchError?: Error + + /** + * The fetch received an abort signal + */ + fetchAborted?: true + + /** + * The abort signal received was ignored, and the fetch was allowed to + * continue. + */ + fetchAbortIgnored?: true + + /** + * The fetchMethod promise resolved successfully + */ + fetchResolved?: true + + /** + * The fetchMethod promise was rejected + */ + fetchRejected?: true + + /** + * The status of a {@link get} operation. + * + * - fetching: The item is currently being fetched. If a previous value is + * present and allowed, that will be returned. + * - stale: The item is in the cache, and is stale. + * - hit: the item is in the cache + * - miss: the item is not in the cache + */ + get?: 'stale' | 'hit' | 'miss' + + /** + * A fetch or get operation returned a stale value. + */ + returnedStale?: true + } + + /** + * options which override the options set in the LRUCache constructor + * when calling {@link fetch}. + * + * This is the union of GetOptions and SetOptions, plus + * {@link noDeleteOnFetchRejection}, {@link allowStaleOnFetchRejection}, + * {@link forceRefresh}, and {@link fetchContext} + */ + interface FetchOptions extends FetcherFetchOptions { + forceRefresh?: boolean + fetchContext?: any + signal?: AbortSignal + status?: Status + } + + interface FetcherOptions { + signal: AbortSignal + options: FetcherFetchOptions + /** + * Object provided in the {@link fetchContext} option + */ + context: any + } + + interface Entry { + value: V + ttl?: LRUMilliseconds + size?: LRUSize + start?: LRUMilliseconds + } +} + +export = LRUCache diff --git a/node_modules/lru-cache/index.js b/node_modules/lru-cache/index.js new file mode 100644 index 0000000..48e99fe --- /dev/null +++ b/node_modules/lru-cache/index.js @@ -0,0 +1,1227 @@ +const perf = + typeof performance === 'object' && + performance && + typeof performance.now === 'function' + ? performance + : Date + +const hasAbortController = typeof AbortController === 'function' + +// minimal backwards-compatibility polyfill +// this doesn't have nearly all the checks and whatnot that +// actual AbortController/Signal has, but it's enough for +// our purposes, and if used properly, behaves the same. +const AC = hasAbortController + ? AbortController + : class AbortController { + constructor() { + this.signal = new AS() + } + abort(reason = new Error('This operation was aborted')) { + this.signal.reason = this.signal.reason || reason + this.signal.aborted = true + this.signal.dispatchEvent({ + type: 'abort', + target: this.signal, + }) + } + } + +const hasAbortSignal = typeof AbortSignal === 'function' +// Some polyfills put this on the AC class, not global +const hasACAbortSignal = typeof AC.AbortSignal === 'function' +const AS = hasAbortSignal + ? AbortSignal + : hasACAbortSignal + ? AC.AbortController + : class AbortSignal { + constructor() { + this.reason = undefined + this.aborted = false + this._listeners = [] + } + dispatchEvent(e) { + if (e.type === 'abort') { + this.aborted = true + this.onabort(e) + this._listeners.forEach(f => f(e), this) + } + } + onabort() {} + addEventListener(ev, fn) { + if (ev === 'abort') { + this._listeners.push(fn) + } + } + removeEventListener(ev, fn) { + if (ev === 'abort') { + this._listeners = this._listeners.filter(f => f !== fn) + } + } + } + +const warned = new Set() +const deprecatedOption = (opt, instead) => { + const code = `LRU_CACHE_OPTION_${opt}` + if (shouldWarn(code)) { + warn(code, `${opt} option`, `options.${instead}`, LRUCache) + } +} +const deprecatedMethod = (method, instead) => { + const code = `LRU_CACHE_METHOD_${method}` + if (shouldWarn(code)) { + const { prototype } = LRUCache + const { get } = Object.getOwnPropertyDescriptor(prototype, method) + warn(code, `${method} method`, `cache.${instead}()`, get) + } +} +const deprecatedProperty = (field, instead) => { + const code = `LRU_CACHE_PROPERTY_${field}` + if (shouldWarn(code)) { + const { prototype } = LRUCache + const { get } = Object.getOwnPropertyDescriptor(prototype, field) + warn(code, `${field} property`, `cache.${instead}`, get) + } +} + +const emitWarning = (...a) => { + typeof process === 'object' && + process && + typeof process.emitWarning === 'function' + ? process.emitWarning(...a) + : console.error(...a) +} + +const shouldWarn = code => !warned.has(code) + +const warn = (code, what, instead, fn) => { + warned.add(code) + const msg = `The ${what} is deprecated. Please use ${instead} instead.` + emitWarning(msg, 'DeprecationWarning', code, fn) +} + +const isPosInt = n => n && n === Math.floor(n) && n > 0 && isFinite(n) + +/* istanbul ignore next - This is a little bit ridiculous, tbh. + * The maximum array length is 2^32-1 or thereabouts on most JS impls. + * And well before that point, you're caching the entire world, I mean, + * that's ~32GB of just integers for the next/prev links, plus whatever + * else to hold that many keys and values. Just filling the memory with + * zeroes at init time is brutal when you get that big. + * But why not be complete? + * Maybe in the future, these limits will have expanded. */ +const getUintArray = max => + !isPosInt(max) + ? null + : max <= Math.pow(2, 8) + ? Uint8Array + : max <= Math.pow(2, 16) + ? Uint16Array + : max <= Math.pow(2, 32) + ? Uint32Array + : max <= Number.MAX_SAFE_INTEGER + ? ZeroArray + : null + +class ZeroArray extends Array { + constructor(size) { + super(size) + this.fill(0) + } +} + +class Stack { + constructor(max) { + if (max === 0) { + return [] + } + const UintArray = getUintArray(max) + this.heap = new UintArray(max) + this.length = 0 + } + push(n) { + this.heap[this.length++] = n + } + pop() { + return this.heap[--this.length] + } +} + +class LRUCache { + constructor(options = {}) { + const { + max = 0, + ttl, + ttlResolution = 1, + ttlAutopurge, + updateAgeOnGet, + updateAgeOnHas, + allowStale, + dispose, + disposeAfter, + noDisposeOnSet, + noUpdateTTL, + maxSize = 0, + maxEntrySize = 0, + sizeCalculation, + fetchMethod, + fetchContext, + noDeleteOnFetchRejection, + noDeleteOnStaleGet, + allowStaleOnFetchRejection, + allowStaleOnFetchAbort, + ignoreFetchAbort, + } = options + + // deprecated options, don't trigger a warning for getting them if + // the thing being passed in is another LRUCache we're copying. + const { length, maxAge, stale } = + options instanceof LRUCache ? {} : options + + if (max !== 0 && !isPosInt(max)) { + throw new TypeError('max option must be a nonnegative integer') + } + + const UintArray = max ? getUintArray(max) : Array + if (!UintArray) { + throw new Error('invalid max value: ' + max) + } + + this.max = max + this.maxSize = maxSize + this.maxEntrySize = maxEntrySize || this.maxSize + this.sizeCalculation = sizeCalculation || length + if (this.sizeCalculation) { + if (!this.maxSize && !this.maxEntrySize) { + throw new TypeError( + 'cannot set sizeCalculation without setting maxSize or maxEntrySize' + ) + } + if (typeof this.sizeCalculation !== 'function') { + throw new TypeError('sizeCalculation set to non-function') + } + } + + this.fetchMethod = fetchMethod || null + if (this.fetchMethod && typeof this.fetchMethod !== 'function') { + throw new TypeError( + 'fetchMethod must be a function if specified' + ) + } + + this.fetchContext = fetchContext + if (!this.fetchMethod && fetchContext !== undefined) { + throw new TypeError( + 'cannot set fetchContext without fetchMethod' + ) + } + + this.keyMap = new Map() + this.keyList = new Array(max).fill(null) + this.valList = new Array(max).fill(null) + this.next = new UintArray(max) + this.prev = new UintArray(max) + this.head = 0 + this.tail = 0 + this.free = new Stack(max) + this.initialFill = 1 + this.size = 0 + + if (typeof dispose === 'function') { + this.dispose = dispose + } + if (typeof disposeAfter === 'function') { + this.disposeAfter = disposeAfter + this.disposed = [] + } else { + this.disposeAfter = null + this.disposed = null + } + this.noDisposeOnSet = !!noDisposeOnSet + this.noUpdateTTL = !!noUpdateTTL + this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection + this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection + this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort + this.ignoreFetchAbort = !!ignoreFetchAbort + + // NB: maxEntrySize is set to maxSize if it's set + if (this.maxEntrySize !== 0) { + if (this.maxSize !== 0) { + if (!isPosInt(this.maxSize)) { + throw new TypeError( + 'maxSize must be a positive integer if specified' + ) + } + } + if (!isPosInt(this.maxEntrySize)) { + throw new TypeError( + 'maxEntrySize must be a positive integer if specified' + ) + } + this.initializeSizeTracking() + } + + this.allowStale = !!allowStale || !!stale + this.noDeleteOnStaleGet = !!noDeleteOnStaleGet + this.updateAgeOnGet = !!updateAgeOnGet + this.updateAgeOnHas = !!updateAgeOnHas + this.ttlResolution = + isPosInt(ttlResolution) || ttlResolution === 0 + ? ttlResolution + : 1 + this.ttlAutopurge = !!ttlAutopurge + this.ttl = ttl || maxAge || 0 + if (this.ttl) { + if (!isPosInt(this.ttl)) { + throw new TypeError( + 'ttl must be a positive integer if specified' + ) + } + this.initializeTTLTracking() + } + + // do not allow completely unbounded caches + if (this.max === 0 && this.ttl === 0 && this.maxSize === 0) { + throw new TypeError( + 'At least one of max, maxSize, or ttl is required' + ) + } + if (!this.ttlAutopurge && !this.max && !this.maxSize) { + const code = 'LRU_CACHE_UNBOUNDED' + if (shouldWarn(code)) { + warned.add(code) + const msg = + 'TTL caching without ttlAutopurge, max, or maxSize can ' + + 'result in unbounded memory consumption.' + emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache) + } + } + + if (stale) { + deprecatedOption('stale', 'allowStale') + } + if (maxAge) { + deprecatedOption('maxAge', 'ttl') + } + if (length) { + deprecatedOption('length', 'sizeCalculation') + } + } + + getRemainingTTL(key) { + return this.has(key, { updateAgeOnHas: false }) ? Infinity : 0 + } + + initializeTTLTracking() { + this.ttls = new ZeroArray(this.max) + this.starts = new ZeroArray(this.max) + + this.setItemTTL = (index, ttl, start = perf.now()) => { + this.starts[index] = ttl !== 0 ? start : 0 + this.ttls[index] = ttl + if (ttl !== 0 && this.ttlAutopurge) { + const t = setTimeout(() => { + if (this.isStale(index)) { + this.delete(this.keyList[index]) + } + }, ttl + 1) + /* istanbul ignore else - unref() not supported on all platforms */ + if (t.unref) { + t.unref() + } + } + } + + this.updateItemAge = index => { + this.starts[index] = this.ttls[index] !== 0 ? perf.now() : 0 + } + + this.statusTTL = (status, index) => { + if (status) { + status.ttl = this.ttls[index] + status.start = this.starts[index] + status.now = cachedNow || getNow() + status.remainingTTL = status.now + status.ttl - status.start + } + } + + // debounce calls to perf.now() to 1s so we're not hitting + // that costly call repeatedly. + let cachedNow = 0 + const getNow = () => { + const n = perf.now() + if (this.ttlResolution > 0) { + cachedNow = n + const t = setTimeout( + () => (cachedNow = 0), + this.ttlResolution + ) + /* istanbul ignore else - not available on all platforms */ + if (t.unref) { + t.unref() + } + } + return n + } + + this.getRemainingTTL = key => { + const index = this.keyMap.get(key) + if (index === undefined) { + return 0 + } + return this.ttls[index] === 0 || this.starts[index] === 0 + ? Infinity + : this.starts[index] + + this.ttls[index] - + (cachedNow || getNow()) + } + + this.isStale = index => { + return ( + this.ttls[index] !== 0 && + this.starts[index] !== 0 && + (cachedNow || getNow()) - this.starts[index] > + this.ttls[index] + ) + } + } + updateItemAge(_index) {} + statusTTL(_status, _index) {} + setItemTTL(_index, _ttl, _start) {} + isStale(_index) { + return false + } + + initializeSizeTracking() { + this.calculatedSize = 0 + this.sizes = new ZeroArray(this.max) + this.removeItemSize = index => { + this.calculatedSize -= this.sizes[index] + this.sizes[index] = 0 + } + this.requireSize = (k, v, size, sizeCalculation) => { + // provisionally accept background fetches. + // actual value size will be checked when they return. + if (this.isBackgroundFetch(v)) { + return 0 + } + if (!isPosInt(size)) { + if (sizeCalculation) { + if (typeof sizeCalculation !== 'function') { + throw new TypeError('sizeCalculation must be a function') + } + size = sizeCalculation(v, k) + if (!isPosInt(size)) { + throw new TypeError( + 'sizeCalculation return invalid (expect positive integer)' + ) + } + } else { + throw new TypeError( + 'invalid size value (must be positive integer). ' + + 'When maxSize or maxEntrySize is used, sizeCalculation or size ' + + 'must be set.' + ) + } + } + return size + } + this.addItemSize = (index, size, status) => { + this.sizes[index] = size + if (this.maxSize) { + const maxSize = this.maxSize - this.sizes[index] + while (this.calculatedSize > maxSize) { + this.evict(true) + } + } + this.calculatedSize += this.sizes[index] + if (status) { + status.entrySize = size + status.totalCalculatedSize = this.calculatedSize + } + } + } + removeItemSize(_index) {} + addItemSize(_index, _size) {} + requireSize(_k, _v, size, sizeCalculation) { + if (size || sizeCalculation) { + throw new TypeError( + 'cannot set size without setting maxSize or maxEntrySize on cache' + ) + } + } + + *indexes({ allowStale = this.allowStale } = {}) { + if (this.size) { + for (let i = this.tail; true; ) { + if (!this.isValidIndex(i)) { + break + } + if (allowStale || !this.isStale(i)) { + yield i + } + if (i === this.head) { + break + } else { + i = this.prev[i] + } + } + } + } + + *rindexes({ allowStale = this.allowStale } = {}) { + if (this.size) { + for (let i = this.head; true; ) { + if (!this.isValidIndex(i)) { + break + } + if (allowStale || !this.isStale(i)) { + yield i + } + if (i === this.tail) { + break + } else { + i = this.next[i] + } + } + } + } + + isValidIndex(index) { + return ( + index !== undefined && + this.keyMap.get(this.keyList[index]) === index + ) + } + + *entries() { + for (const i of this.indexes()) { + if ( + this.valList[i] !== undefined && + this.keyList[i] !== undefined && + !this.isBackgroundFetch(this.valList[i]) + ) { + yield [this.keyList[i], this.valList[i]] + } + } + } + *rentries() { + for (const i of this.rindexes()) { + if ( + this.valList[i] !== undefined && + this.keyList[i] !== undefined && + !this.isBackgroundFetch(this.valList[i]) + ) { + yield [this.keyList[i], this.valList[i]] + } + } + } + + *keys() { + for (const i of this.indexes()) { + if ( + this.keyList[i] !== undefined && + !this.isBackgroundFetch(this.valList[i]) + ) { + yield this.keyList[i] + } + } + } + *rkeys() { + for (const i of this.rindexes()) { + if ( + this.keyList[i] !== undefined && + !this.isBackgroundFetch(this.valList[i]) + ) { + yield this.keyList[i] + } + } + } + + *values() { + for (const i of this.indexes()) { + if ( + this.valList[i] !== undefined && + !this.isBackgroundFetch(this.valList[i]) + ) { + yield this.valList[i] + } + } + } + *rvalues() { + for (const i of this.rindexes()) { + if ( + this.valList[i] !== undefined && + !this.isBackgroundFetch(this.valList[i]) + ) { + yield this.valList[i] + } + } + } + + [Symbol.iterator]() { + return this.entries() + } + + find(fn, getOptions) { + for (const i of this.indexes()) { + const v = this.valList[i] + const value = this.isBackgroundFetch(v) + ? v.__staleWhileFetching + : v + if (value === undefined) continue + if (fn(value, this.keyList[i], this)) { + return this.get(this.keyList[i], getOptions) + } + } + } + + forEach(fn, thisp = this) { + for (const i of this.indexes()) { + const v = this.valList[i] + const value = this.isBackgroundFetch(v) + ? v.__staleWhileFetching + : v + if (value === undefined) continue + fn.call(thisp, value, this.keyList[i], this) + } + } + + rforEach(fn, thisp = this) { + for (const i of this.rindexes()) { + const v = this.valList[i] + const value = this.isBackgroundFetch(v) + ? v.__staleWhileFetching + : v + if (value === undefined) continue + fn.call(thisp, value, this.keyList[i], this) + } + } + + get prune() { + deprecatedMethod('prune', 'purgeStale') + return this.purgeStale + } + + purgeStale() { + let deleted = false + for (const i of this.rindexes({ allowStale: true })) { + if (this.isStale(i)) { + this.delete(this.keyList[i]) + deleted = true + } + } + return deleted + } + + dump() { + const arr = [] + for (const i of this.indexes({ allowStale: true })) { + const key = this.keyList[i] + const v = this.valList[i] + const value = this.isBackgroundFetch(v) + ? v.__staleWhileFetching + : v + if (value === undefined) continue + const entry = { value } + if (this.ttls) { + entry.ttl = this.ttls[i] + // always dump the start relative to a portable timestamp + // it's ok for this to be a bit slow, it's a rare operation. + const age = perf.now() - this.starts[i] + entry.start = Math.floor(Date.now() - age) + } + if (this.sizes) { + entry.size = this.sizes[i] + } + arr.unshift([key, entry]) + } + return arr + } + + load(arr) { + this.clear() + for (const [key, entry] of arr) { + if (entry.start) { + // entry.start is a portable timestamp, but we may be using + // node's performance.now(), so calculate the offset. + // it's ok for this to be a bit slow, it's a rare operation. + const age = Date.now() - entry.start + entry.start = perf.now() - age + } + this.set(key, entry.value, entry) + } + } + + dispose(_v, _k, _reason) {} + + set( + k, + v, + { + ttl = this.ttl, + start, + noDisposeOnSet = this.noDisposeOnSet, + size = 0, + sizeCalculation = this.sizeCalculation, + noUpdateTTL = this.noUpdateTTL, + status, + } = {} + ) { + size = this.requireSize(k, v, size, sizeCalculation) + // if the item doesn't fit, don't do anything + // NB: maxEntrySize set to maxSize by default + if (this.maxEntrySize && size > this.maxEntrySize) { + if (status) { + status.set = 'miss' + status.maxEntrySizeExceeded = true + } + // have to delete, in case a background fetch is there already. + // in non-async cases, this is a no-op + this.delete(k) + return this + } + let index = this.size === 0 ? undefined : this.keyMap.get(k) + if (index === undefined) { + // addition + index = this.newIndex() + this.keyList[index] = k + this.valList[index] = v + this.keyMap.set(k, index) + this.next[this.tail] = index + this.prev[index] = this.tail + this.tail = index + this.size++ + this.addItemSize(index, size, status) + if (status) { + status.set = 'add' + } + noUpdateTTL = false + } else { + // update + this.moveToTail(index) + const oldVal = this.valList[index] + if (v !== oldVal) { + if (this.isBackgroundFetch(oldVal)) { + oldVal.__abortController.abort(new Error('replaced')) + } else { + if (!noDisposeOnSet) { + this.dispose(oldVal, k, 'set') + if (this.disposeAfter) { + this.disposed.push([oldVal, k, 'set']) + } + } + } + this.removeItemSize(index) + this.valList[index] = v + this.addItemSize(index, size, status) + if (status) { + status.set = 'replace' + const oldValue = + oldVal && this.isBackgroundFetch(oldVal) + ? oldVal.__staleWhileFetching + : oldVal + if (oldValue !== undefined) status.oldValue = oldValue + } + } else if (status) { + status.set = 'update' + } + } + if (ttl !== 0 && this.ttl === 0 && !this.ttls) { + this.initializeTTLTracking() + } + if (!noUpdateTTL) { + this.setItemTTL(index, ttl, start) + } + this.statusTTL(status, index) + if (this.disposeAfter) { + while (this.disposed.length) { + this.disposeAfter(...this.disposed.shift()) + } + } + return this + } + + newIndex() { + if (this.size === 0) { + return this.tail + } + if (this.size === this.max && this.max !== 0) { + return this.evict(false) + } + if (this.free.length !== 0) { + return this.free.pop() + } + // initial fill, just keep writing down the list + return this.initialFill++ + } + + pop() { + if (this.size) { + const val = this.valList[this.head] + this.evict(true) + return val + } + } + + evict(free) { + const head = this.head + const k = this.keyList[head] + const v = this.valList[head] + if (this.isBackgroundFetch(v)) { + v.__abortController.abort(new Error('evicted')) + } else { + this.dispose(v, k, 'evict') + if (this.disposeAfter) { + this.disposed.push([v, k, 'evict']) + } + } + this.removeItemSize(head) + // if we aren't about to use the index, then null these out + if (free) { + this.keyList[head] = null + this.valList[head] = null + this.free.push(head) + } + this.head = this.next[head] + this.keyMap.delete(k) + this.size-- + return head + } + + has(k, { updateAgeOnHas = this.updateAgeOnHas, status } = {}) { + const index = this.keyMap.get(k) + if (index !== undefined) { + if (!this.isStale(index)) { + if (updateAgeOnHas) { + this.updateItemAge(index) + } + if (status) status.has = 'hit' + this.statusTTL(status, index) + return true + } else if (status) { + status.has = 'stale' + this.statusTTL(status, index) + } + } else if (status) { + status.has = 'miss' + } + return false + } + + // like get(), but without any LRU updating or TTL expiration + peek(k, { allowStale = this.allowStale } = {}) { + const index = this.keyMap.get(k) + if (index !== undefined && (allowStale || !this.isStale(index))) { + const v = this.valList[index] + // either stale and allowed, or forcing a refresh of non-stale value + return this.isBackgroundFetch(v) ? v.__staleWhileFetching : v + } + } + + backgroundFetch(k, index, options, context) { + const v = index === undefined ? undefined : this.valList[index] + if (this.isBackgroundFetch(v)) { + return v + } + const ac = new AC() + if (options.signal) { + options.signal.addEventListener('abort', () => + ac.abort(options.signal.reason) + ) + } + const fetchOpts = { + signal: ac.signal, + options, + context, + } + const cb = (v, updateCache = false) => { + const { aborted } = ac.signal + const ignoreAbort = options.ignoreFetchAbort && v !== undefined + if (options.status) { + if (aborted && !updateCache) { + options.status.fetchAborted = true + options.status.fetchError = ac.signal.reason + if (ignoreAbort) options.status.fetchAbortIgnored = true + } else { + options.status.fetchResolved = true + } + } + if (aborted && !ignoreAbort && !updateCache) { + return fetchFail(ac.signal.reason) + } + // either we didn't abort, and are still here, or we did, and ignored + if (this.valList[index] === p) { + if (v === undefined) { + if (p.__staleWhileFetching) { + this.valList[index] = p.__staleWhileFetching + } else { + this.delete(k) + } + } else { + if (options.status) options.status.fetchUpdated = true + this.set(k, v, fetchOpts.options) + } + } + return v + } + const eb = er => { + if (options.status) { + options.status.fetchRejected = true + options.status.fetchError = er + } + return fetchFail(er) + } + const fetchFail = er => { + const { aborted } = ac.signal + const allowStaleAborted = + aborted && options.allowStaleOnFetchAbort + const allowStale = + allowStaleAborted || options.allowStaleOnFetchRejection + const noDelete = allowStale || options.noDeleteOnFetchRejection + if (this.valList[index] === p) { + // if we allow stale on fetch rejections, then we need to ensure that + // the stale value is not removed from the cache when the fetch fails. + const del = !noDelete || p.__staleWhileFetching === undefined + if (del) { + this.delete(k) + } else if (!allowStaleAborted) { + // still replace the *promise* with the stale value, + // since we are done with the promise at this point. + // leave it untouched if we're still waiting for an + // aborted background fetch that hasn't yet returned. + this.valList[index] = p.__staleWhileFetching + } + } + if (allowStale) { + if (options.status && p.__staleWhileFetching !== undefined) { + options.status.returnedStale = true + } + return p.__staleWhileFetching + } else if (p.__returned === p) { + throw er + } + } + const pcall = (res, rej) => { + this.fetchMethod(k, v, fetchOpts).then(v => res(v), rej) + // ignored, we go until we finish, regardless. + // defer check until we are actually aborting, + // so fetchMethod can override. + ac.signal.addEventListener('abort', () => { + if ( + !options.ignoreFetchAbort || + options.allowStaleOnFetchAbort + ) { + res() + // when it eventually resolves, update the cache. + if (options.allowStaleOnFetchAbort) { + res = v => cb(v, true) + } + } + }) + } + if (options.status) options.status.fetchDispatched = true + const p = new Promise(pcall).then(cb, eb) + p.__abortController = ac + p.__staleWhileFetching = v + p.__returned = null + if (index === undefined) { + // internal, don't expose status. + this.set(k, p, { ...fetchOpts.options, status: undefined }) + index = this.keyMap.get(k) + } else { + this.valList[index] = p + } + return p + } + + isBackgroundFetch(p) { + return ( + p && + typeof p === 'object' && + typeof p.then === 'function' && + Object.prototype.hasOwnProperty.call( + p, + '__staleWhileFetching' + ) && + Object.prototype.hasOwnProperty.call(p, '__returned') && + (p.__returned === p || p.__returned === null) + ) + } + + // this takes the union of get() and set() opts, because it does both + async fetch( + k, + { + // get options + allowStale = this.allowStale, + updateAgeOnGet = this.updateAgeOnGet, + noDeleteOnStaleGet = this.noDeleteOnStaleGet, + // set options + ttl = this.ttl, + noDisposeOnSet = this.noDisposeOnSet, + size = 0, + sizeCalculation = this.sizeCalculation, + noUpdateTTL = this.noUpdateTTL, + // fetch exclusive options + noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, + allowStaleOnFetchRejection = this.allowStaleOnFetchRejection, + ignoreFetchAbort = this.ignoreFetchAbort, + allowStaleOnFetchAbort = this.allowStaleOnFetchAbort, + fetchContext = this.fetchContext, + forceRefresh = false, + status, + signal, + } = {} + ) { + if (!this.fetchMethod) { + if (status) status.fetch = 'get' + return this.get(k, { + allowStale, + updateAgeOnGet, + noDeleteOnStaleGet, + status, + }) + } + + const options = { + allowStale, + updateAgeOnGet, + noDeleteOnStaleGet, + ttl, + noDisposeOnSet, + size, + sizeCalculation, + noUpdateTTL, + noDeleteOnFetchRejection, + allowStaleOnFetchRejection, + allowStaleOnFetchAbort, + ignoreFetchAbort, + status, + signal, + } + + let index = this.keyMap.get(k) + if (index === undefined) { + if (status) status.fetch = 'miss' + const p = this.backgroundFetch(k, index, options, fetchContext) + return (p.__returned = p) + } else { + // in cache, maybe already fetching + const v = this.valList[index] + if (this.isBackgroundFetch(v)) { + const stale = + allowStale && v.__staleWhileFetching !== undefined + if (status) { + status.fetch = 'inflight' + if (stale) status.returnedStale = true + } + return stale ? v.__staleWhileFetching : (v.__returned = v) + } + + // if we force a refresh, that means do NOT serve the cached value, + // unless we are already in the process of refreshing the cache. + const isStale = this.isStale(index) + if (!forceRefresh && !isStale) { + if (status) status.fetch = 'hit' + this.moveToTail(index) + if (updateAgeOnGet) { + this.updateItemAge(index) + } + this.statusTTL(status, index) + return v + } + + // ok, it is stale or a forced refresh, and not already fetching. + // refresh the cache. + const p = this.backgroundFetch(k, index, options, fetchContext) + const hasStale = p.__staleWhileFetching !== undefined + const staleVal = hasStale && allowStale + if (status) { + status.fetch = hasStale && isStale ? 'stale' : 'refresh' + if (staleVal && isStale) status.returnedStale = true + } + return staleVal ? p.__staleWhileFetching : (p.__returned = p) + } + } + + get( + k, + { + allowStale = this.allowStale, + updateAgeOnGet = this.updateAgeOnGet, + noDeleteOnStaleGet = this.noDeleteOnStaleGet, + status, + } = {} + ) { + const index = this.keyMap.get(k) + if (index !== undefined) { + const value = this.valList[index] + const fetching = this.isBackgroundFetch(value) + this.statusTTL(status, index) + if (this.isStale(index)) { + if (status) status.get = 'stale' + // delete only if not an in-flight background fetch + if (!fetching) { + if (!noDeleteOnStaleGet) { + this.delete(k) + } + if (status) status.returnedStale = allowStale + return allowStale ? value : undefined + } else { + if (status) { + status.returnedStale = + allowStale && value.__staleWhileFetching !== undefined + } + return allowStale ? value.__staleWhileFetching : undefined + } + } else { + if (status) status.get = 'hit' + // if we're currently fetching it, we don't actually have it yet + // it's not stale, which means this isn't a staleWhileRefetching. + // If it's not stale, and fetching, AND has a __staleWhileFetching + // value, then that means the user fetched with {forceRefresh:true}, + // so it's safe to return that value. + if (fetching) { + return value.__staleWhileFetching + } + this.moveToTail(index) + if (updateAgeOnGet) { + this.updateItemAge(index) + } + return value + } + } else if (status) { + status.get = 'miss' + } + } + + connect(p, n) { + this.prev[n] = p + this.next[p] = n + } + + moveToTail(index) { + // if tail already, nothing to do + // if head, move head to next[index] + // else + // move next[prev[index]] to next[index] (head has no prev) + // move prev[next[index]] to prev[index] + // prev[index] = tail + // next[tail] = index + // tail = index + if (index !== this.tail) { + if (index === this.head) { + this.head = this.next[index] + } else { + this.connect(this.prev[index], this.next[index]) + } + this.connect(this.tail, index) + this.tail = index + } + } + + get del() { + deprecatedMethod('del', 'delete') + return this.delete + } + + delete(k) { + let deleted = false + if (this.size !== 0) { + const index = this.keyMap.get(k) + if (index !== undefined) { + deleted = true + if (this.size === 1) { + this.clear() + } else { + this.removeItemSize(index) + const v = this.valList[index] + if (this.isBackgroundFetch(v)) { + v.__abortController.abort(new Error('deleted')) + } else { + this.dispose(v, k, 'delete') + if (this.disposeAfter) { + this.disposed.push([v, k, 'delete']) + } + } + this.keyMap.delete(k) + this.keyList[index] = null + this.valList[index] = null + if (index === this.tail) { + this.tail = this.prev[index] + } else if (index === this.head) { + this.head = this.next[index] + } else { + this.next[this.prev[index]] = this.next[index] + this.prev[this.next[index]] = this.prev[index] + } + this.size-- + this.free.push(index) + } + } + } + if (this.disposed) { + while (this.disposed.length) { + this.disposeAfter(...this.disposed.shift()) + } + } + return deleted + } + + clear() { + for (const index of this.rindexes({ allowStale: true })) { + const v = this.valList[index] + if (this.isBackgroundFetch(v)) { + v.__abortController.abort(new Error('deleted')) + } else { + const k = this.keyList[index] + this.dispose(v, k, 'delete') + if (this.disposeAfter) { + this.disposed.push([v, k, 'delete']) + } + } + } + + this.keyMap.clear() + this.valList.fill(null) + this.keyList.fill(null) + if (this.ttls) { + this.ttls.fill(0) + this.starts.fill(0) + } + if (this.sizes) { + this.sizes.fill(0) + } + this.head = 0 + this.tail = 0 + this.initialFill = 1 + this.free.length = 0 + this.calculatedSize = 0 + this.size = 0 + if (this.disposed) { + while (this.disposed.length) { + this.disposeAfter(...this.disposed.shift()) + } + } + } + + get reset() { + deprecatedMethod('reset', 'clear') + return this.clear + } + + get length() { + deprecatedProperty('length', 'size') + return this.size + } + + static get AbortController() { + return AC + } + static get AbortSignal() { + return AS + } +} + +module.exports = LRUCache diff --git a/node_modules/lru-cache/index.mjs b/node_modules/lru-cache/index.mjs new file mode 100644 index 0000000..4a0b481 --- /dev/null +++ b/node_modules/lru-cache/index.mjs @@ -0,0 +1,1227 @@ +const perf = + typeof performance === 'object' && + performance && + typeof performance.now === 'function' + ? performance + : Date + +const hasAbortController = typeof AbortController === 'function' + +// minimal backwards-compatibility polyfill +// this doesn't have nearly all the checks and whatnot that +// actual AbortController/Signal has, but it's enough for +// our purposes, and if used properly, behaves the same. +const AC = hasAbortController + ? AbortController + : class AbortController { + constructor() { + this.signal = new AS() + } + abort(reason = new Error('This operation was aborted')) { + this.signal.reason = this.signal.reason || reason + this.signal.aborted = true + this.signal.dispatchEvent({ + type: 'abort', + target: this.signal, + }) + } + } + +const hasAbortSignal = typeof AbortSignal === 'function' +// Some polyfills put this on the AC class, not global +const hasACAbortSignal = typeof AC.AbortSignal === 'function' +const AS = hasAbortSignal + ? AbortSignal + : hasACAbortSignal + ? AC.AbortController + : class AbortSignal { + constructor() { + this.reason = undefined + this.aborted = false + this._listeners = [] + } + dispatchEvent(e) { + if (e.type === 'abort') { + this.aborted = true + this.onabort(e) + this._listeners.forEach(f => f(e), this) + } + } + onabort() {} + addEventListener(ev, fn) { + if (ev === 'abort') { + this._listeners.push(fn) + } + } + removeEventListener(ev, fn) { + if (ev === 'abort') { + this._listeners = this._listeners.filter(f => f !== fn) + } + } + } + +const warned = new Set() +const deprecatedOption = (opt, instead) => { + const code = `LRU_CACHE_OPTION_${opt}` + if (shouldWarn(code)) { + warn(code, `${opt} option`, `options.${instead}`, LRUCache) + } +} +const deprecatedMethod = (method, instead) => { + const code = `LRU_CACHE_METHOD_${method}` + if (shouldWarn(code)) { + const { prototype } = LRUCache + const { get } = Object.getOwnPropertyDescriptor(prototype, method) + warn(code, `${method} method`, `cache.${instead}()`, get) + } +} +const deprecatedProperty = (field, instead) => { + const code = `LRU_CACHE_PROPERTY_${field}` + if (shouldWarn(code)) { + const { prototype } = LRUCache + const { get } = Object.getOwnPropertyDescriptor(prototype, field) + warn(code, `${field} property`, `cache.${instead}`, get) + } +} + +const emitWarning = (...a) => { + typeof process === 'object' && + process && + typeof process.emitWarning === 'function' + ? process.emitWarning(...a) + : console.error(...a) +} + +const shouldWarn = code => !warned.has(code) + +const warn = (code, what, instead, fn) => { + warned.add(code) + const msg = `The ${what} is deprecated. Please use ${instead} instead.` + emitWarning(msg, 'DeprecationWarning', code, fn) +} + +const isPosInt = n => n && n === Math.floor(n) && n > 0 && isFinite(n) + +/* istanbul ignore next - This is a little bit ridiculous, tbh. + * The maximum array length is 2^32-1 or thereabouts on most JS impls. + * And well before that point, you're caching the entire world, I mean, + * that's ~32GB of just integers for the next/prev links, plus whatever + * else to hold that many keys and values. Just filling the memory with + * zeroes at init time is brutal when you get that big. + * But why not be complete? + * Maybe in the future, these limits will have expanded. */ +const getUintArray = max => + !isPosInt(max) + ? null + : max <= Math.pow(2, 8) + ? Uint8Array + : max <= Math.pow(2, 16) + ? Uint16Array + : max <= Math.pow(2, 32) + ? Uint32Array + : max <= Number.MAX_SAFE_INTEGER + ? ZeroArray + : null + +class ZeroArray extends Array { + constructor(size) { + super(size) + this.fill(0) + } +} + +class Stack { + constructor(max) { + if (max === 0) { + return [] + } + const UintArray = getUintArray(max) + this.heap = new UintArray(max) + this.length = 0 + } + push(n) { + this.heap[this.length++] = n + } + pop() { + return this.heap[--this.length] + } +} + +class LRUCache { + constructor(options = {}) { + const { + max = 0, + ttl, + ttlResolution = 1, + ttlAutopurge, + updateAgeOnGet, + updateAgeOnHas, + allowStale, + dispose, + disposeAfter, + noDisposeOnSet, + noUpdateTTL, + maxSize = 0, + maxEntrySize = 0, + sizeCalculation, + fetchMethod, + fetchContext, + noDeleteOnFetchRejection, + noDeleteOnStaleGet, + allowStaleOnFetchRejection, + allowStaleOnFetchAbort, + ignoreFetchAbort, + } = options + + // deprecated options, don't trigger a warning for getting them if + // the thing being passed in is another LRUCache we're copying. + const { length, maxAge, stale } = + options instanceof LRUCache ? {} : options + + if (max !== 0 && !isPosInt(max)) { + throw new TypeError('max option must be a nonnegative integer') + } + + const UintArray = max ? getUintArray(max) : Array + if (!UintArray) { + throw new Error('invalid max value: ' + max) + } + + this.max = max + this.maxSize = maxSize + this.maxEntrySize = maxEntrySize || this.maxSize + this.sizeCalculation = sizeCalculation || length + if (this.sizeCalculation) { + if (!this.maxSize && !this.maxEntrySize) { + throw new TypeError( + 'cannot set sizeCalculation without setting maxSize or maxEntrySize' + ) + } + if (typeof this.sizeCalculation !== 'function') { + throw new TypeError('sizeCalculation set to non-function') + } + } + + this.fetchMethod = fetchMethod || null + if (this.fetchMethod && typeof this.fetchMethod !== 'function') { + throw new TypeError( + 'fetchMethod must be a function if specified' + ) + } + + this.fetchContext = fetchContext + if (!this.fetchMethod && fetchContext !== undefined) { + throw new TypeError( + 'cannot set fetchContext without fetchMethod' + ) + } + + this.keyMap = new Map() + this.keyList = new Array(max).fill(null) + this.valList = new Array(max).fill(null) + this.next = new UintArray(max) + this.prev = new UintArray(max) + this.head = 0 + this.tail = 0 + this.free = new Stack(max) + this.initialFill = 1 + this.size = 0 + + if (typeof dispose === 'function') { + this.dispose = dispose + } + if (typeof disposeAfter === 'function') { + this.disposeAfter = disposeAfter + this.disposed = [] + } else { + this.disposeAfter = null + this.disposed = null + } + this.noDisposeOnSet = !!noDisposeOnSet + this.noUpdateTTL = !!noUpdateTTL + this.noDeleteOnFetchRejection = !!noDeleteOnFetchRejection + this.allowStaleOnFetchRejection = !!allowStaleOnFetchRejection + this.allowStaleOnFetchAbort = !!allowStaleOnFetchAbort + this.ignoreFetchAbort = !!ignoreFetchAbort + + // NB: maxEntrySize is set to maxSize if it's set + if (this.maxEntrySize !== 0) { + if (this.maxSize !== 0) { + if (!isPosInt(this.maxSize)) { + throw new TypeError( + 'maxSize must be a positive integer if specified' + ) + } + } + if (!isPosInt(this.maxEntrySize)) { + throw new TypeError( + 'maxEntrySize must be a positive integer if specified' + ) + } + this.initializeSizeTracking() + } + + this.allowStale = !!allowStale || !!stale + this.noDeleteOnStaleGet = !!noDeleteOnStaleGet + this.updateAgeOnGet = !!updateAgeOnGet + this.updateAgeOnHas = !!updateAgeOnHas + this.ttlResolution = + isPosInt(ttlResolution) || ttlResolution === 0 + ? ttlResolution + : 1 + this.ttlAutopurge = !!ttlAutopurge + this.ttl = ttl || maxAge || 0 + if (this.ttl) { + if (!isPosInt(this.ttl)) { + throw new TypeError( + 'ttl must be a positive integer if specified' + ) + } + this.initializeTTLTracking() + } + + // do not allow completely unbounded caches + if (this.max === 0 && this.ttl === 0 && this.maxSize === 0) { + throw new TypeError( + 'At least one of max, maxSize, or ttl is required' + ) + } + if (!this.ttlAutopurge && !this.max && !this.maxSize) { + const code = 'LRU_CACHE_UNBOUNDED' + if (shouldWarn(code)) { + warned.add(code) + const msg = + 'TTL caching without ttlAutopurge, max, or maxSize can ' + + 'result in unbounded memory consumption.' + emitWarning(msg, 'UnboundedCacheWarning', code, LRUCache) + } + } + + if (stale) { + deprecatedOption('stale', 'allowStale') + } + if (maxAge) { + deprecatedOption('maxAge', 'ttl') + } + if (length) { + deprecatedOption('length', 'sizeCalculation') + } + } + + getRemainingTTL(key) { + return this.has(key, { updateAgeOnHas: false }) ? Infinity : 0 + } + + initializeTTLTracking() { + this.ttls = new ZeroArray(this.max) + this.starts = new ZeroArray(this.max) + + this.setItemTTL = (index, ttl, start = perf.now()) => { + this.starts[index] = ttl !== 0 ? start : 0 + this.ttls[index] = ttl + if (ttl !== 0 && this.ttlAutopurge) { + const t = setTimeout(() => { + if (this.isStale(index)) { + this.delete(this.keyList[index]) + } + }, ttl + 1) + /* istanbul ignore else - unref() not supported on all platforms */ + if (t.unref) { + t.unref() + } + } + } + + this.updateItemAge = index => { + this.starts[index] = this.ttls[index] !== 0 ? perf.now() : 0 + } + + this.statusTTL = (status, index) => { + if (status) { + status.ttl = this.ttls[index] + status.start = this.starts[index] + status.now = cachedNow || getNow() + status.remainingTTL = status.now + status.ttl - status.start + } + } + + // debounce calls to perf.now() to 1s so we're not hitting + // that costly call repeatedly. + let cachedNow = 0 + const getNow = () => { + const n = perf.now() + if (this.ttlResolution > 0) { + cachedNow = n + const t = setTimeout( + () => (cachedNow = 0), + this.ttlResolution + ) + /* istanbul ignore else - not available on all platforms */ + if (t.unref) { + t.unref() + } + } + return n + } + + this.getRemainingTTL = key => { + const index = this.keyMap.get(key) + if (index === undefined) { + return 0 + } + return this.ttls[index] === 0 || this.starts[index] === 0 + ? Infinity + : this.starts[index] + + this.ttls[index] - + (cachedNow || getNow()) + } + + this.isStale = index => { + return ( + this.ttls[index] !== 0 && + this.starts[index] !== 0 && + (cachedNow || getNow()) - this.starts[index] > + this.ttls[index] + ) + } + } + updateItemAge(_index) {} + statusTTL(_status, _index) {} + setItemTTL(_index, _ttl, _start) {} + isStale(_index) { + return false + } + + initializeSizeTracking() { + this.calculatedSize = 0 + this.sizes = new ZeroArray(this.max) + this.removeItemSize = index => { + this.calculatedSize -= this.sizes[index] + this.sizes[index] = 0 + } + this.requireSize = (k, v, size, sizeCalculation) => { + // provisionally accept background fetches. + // actual value size will be checked when they return. + if (this.isBackgroundFetch(v)) { + return 0 + } + if (!isPosInt(size)) { + if (sizeCalculation) { + if (typeof sizeCalculation !== 'function') { + throw new TypeError('sizeCalculation must be a function') + } + size = sizeCalculation(v, k) + if (!isPosInt(size)) { + throw new TypeError( + 'sizeCalculation return invalid (expect positive integer)' + ) + } + } else { + throw new TypeError( + 'invalid size value (must be positive integer). ' + + 'When maxSize or maxEntrySize is used, sizeCalculation or size ' + + 'must be set.' + ) + } + } + return size + } + this.addItemSize = (index, size, status) => { + this.sizes[index] = size + if (this.maxSize) { + const maxSize = this.maxSize - this.sizes[index] + while (this.calculatedSize > maxSize) { + this.evict(true) + } + } + this.calculatedSize += this.sizes[index] + if (status) { + status.entrySize = size + status.totalCalculatedSize = this.calculatedSize + } + } + } + removeItemSize(_index) {} + addItemSize(_index, _size) {} + requireSize(_k, _v, size, sizeCalculation) { + if (size || sizeCalculation) { + throw new TypeError( + 'cannot set size without setting maxSize or maxEntrySize on cache' + ) + } + } + + *indexes({ allowStale = this.allowStale } = {}) { + if (this.size) { + for (let i = this.tail; true; ) { + if (!this.isValidIndex(i)) { + break + } + if (allowStale || !this.isStale(i)) { + yield i + } + if (i === this.head) { + break + } else { + i = this.prev[i] + } + } + } + } + + *rindexes({ allowStale = this.allowStale } = {}) { + if (this.size) { + for (let i = this.head; true; ) { + if (!this.isValidIndex(i)) { + break + } + if (allowStale || !this.isStale(i)) { + yield i + } + if (i === this.tail) { + break + } else { + i = this.next[i] + } + } + } + } + + isValidIndex(index) { + return ( + index !== undefined && + this.keyMap.get(this.keyList[index]) === index + ) + } + + *entries() { + for (const i of this.indexes()) { + if ( + this.valList[i] !== undefined && + this.keyList[i] !== undefined && + !this.isBackgroundFetch(this.valList[i]) + ) { + yield [this.keyList[i], this.valList[i]] + } + } + } + *rentries() { + for (const i of this.rindexes()) { + if ( + this.valList[i] !== undefined && + this.keyList[i] !== undefined && + !this.isBackgroundFetch(this.valList[i]) + ) { + yield [this.keyList[i], this.valList[i]] + } + } + } + + *keys() { + for (const i of this.indexes()) { + if ( + this.keyList[i] !== undefined && + !this.isBackgroundFetch(this.valList[i]) + ) { + yield this.keyList[i] + } + } + } + *rkeys() { + for (const i of this.rindexes()) { + if ( + this.keyList[i] !== undefined && + !this.isBackgroundFetch(this.valList[i]) + ) { + yield this.keyList[i] + } + } + } + + *values() { + for (const i of this.indexes()) { + if ( + this.valList[i] !== undefined && + !this.isBackgroundFetch(this.valList[i]) + ) { + yield this.valList[i] + } + } + } + *rvalues() { + for (const i of this.rindexes()) { + if ( + this.valList[i] !== undefined && + !this.isBackgroundFetch(this.valList[i]) + ) { + yield this.valList[i] + } + } + } + + [Symbol.iterator]() { + return this.entries() + } + + find(fn, getOptions) { + for (const i of this.indexes()) { + const v = this.valList[i] + const value = this.isBackgroundFetch(v) + ? v.__staleWhileFetching + : v + if (value === undefined) continue + if (fn(value, this.keyList[i], this)) { + return this.get(this.keyList[i], getOptions) + } + } + } + + forEach(fn, thisp = this) { + for (const i of this.indexes()) { + const v = this.valList[i] + const value = this.isBackgroundFetch(v) + ? v.__staleWhileFetching + : v + if (value === undefined) continue + fn.call(thisp, value, this.keyList[i], this) + } + } + + rforEach(fn, thisp = this) { + for (const i of this.rindexes()) { + const v = this.valList[i] + const value = this.isBackgroundFetch(v) + ? v.__staleWhileFetching + : v + if (value === undefined) continue + fn.call(thisp, value, this.keyList[i], this) + } + } + + get prune() { + deprecatedMethod('prune', 'purgeStale') + return this.purgeStale + } + + purgeStale() { + let deleted = false + for (const i of this.rindexes({ allowStale: true })) { + if (this.isStale(i)) { + this.delete(this.keyList[i]) + deleted = true + } + } + return deleted + } + + dump() { + const arr = [] + for (const i of this.indexes({ allowStale: true })) { + const key = this.keyList[i] + const v = this.valList[i] + const value = this.isBackgroundFetch(v) + ? v.__staleWhileFetching + : v + if (value === undefined) continue + const entry = { value } + if (this.ttls) { + entry.ttl = this.ttls[i] + // always dump the start relative to a portable timestamp + // it's ok for this to be a bit slow, it's a rare operation. + const age = perf.now() - this.starts[i] + entry.start = Math.floor(Date.now() - age) + } + if (this.sizes) { + entry.size = this.sizes[i] + } + arr.unshift([key, entry]) + } + return arr + } + + load(arr) { + this.clear() + for (const [key, entry] of arr) { + if (entry.start) { + // entry.start is a portable timestamp, but we may be using + // node's performance.now(), so calculate the offset. + // it's ok for this to be a bit slow, it's a rare operation. + const age = Date.now() - entry.start + entry.start = perf.now() - age + } + this.set(key, entry.value, entry) + } + } + + dispose(_v, _k, _reason) {} + + set( + k, + v, + { + ttl = this.ttl, + start, + noDisposeOnSet = this.noDisposeOnSet, + size = 0, + sizeCalculation = this.sizeCalculation, + noUpdateTTL = this.noUpdateTTL, + status, + } = {} + ) { + size = this.requireSize(k, v, size, sizeCalculation) + // if the item doesn't fit, don't do anything + // NB: maxEntrySize set to maxSize by default + if (this.maxEntrySize && size > this.maxEntrySize) { + if (status) { + status.set = 'miss' + status.maxEntrySizeExceeded = true + } + // have to delete, in case a background fetch is there already. + // in non-async cases, this is a no-op + this.delete(k) + return this + } + let index = this.size === 0 ? undefined : this.keyMap.get(k) + if (index === undefined) { + // addition + index = this.newIndex() + this.keyList[index] = k + this.valList[index] = v + this.keyMap.set(k, index) + this.next[this.tail] = index + this.prev[index] = this.tail + this.tail = index + this.size++ + this.addItemSize(index, size, status) + if (status) { + status.set = 'add' + } + noUpdateTTL = false + } else { + // update + this.moveToTail(index) + const oldVal = this.valList[index] + if (v !== oldVal) { + if (this.isBackgroundFetch(oldVal)) { + oldVal.__abortController.abort(new Error('replaced')) + } else { + if (!noDisposeOnSet) { + this.dispose(oldVal, k, 'set') + if (this.disposeAfter) { + this.disposed.push([oldVal, k, 'set']) + } + } + } + this.removeItemSize(index) + this.valList[index] = v + this.addItemSize(index, size, status) + if (status) { + status.set = 'replace' + const oldValue = + oldVal && this.isBackgroundFetch(oldVal) + ? oldVal.__staleWhileFetching + : oldVal + if (oldValue !== undefined) status.oldValue = oldValue + } + } else if (status) { + status.set = 'update' + } + } + if (ttl !== 0 && this.ttl === 0 && !this.ttls) { + this.initializeTTLTracking() + } + if (!noUpdateTTL) { + this.setItemTTL(index, ttl, start) + } + this.statusTTL(status, index) + if (this.disposeAfter) { + while (this.disposed.length) { + this.disposeAfter(...this.disposed.shift()) + } + } + return this + } + + newIndex() { + if (this.size === 0) { + return this.tail + } + if (this.size === this.max && this.max !== 0) { + return this.evict(false) + } + if (this.free.length !== 0) { + return this.free.pop() + } + // initial fill, just keep writing down the list + return this.initialFill++ + } + + pop() { + if (this.size) { + const val = this.valList[this.head] + this.evict(true) + return val + } + } + + evict(free) { + const head = this.head + const k = this.keyList[head] + const v = this.valList[head] + if (this.isBackgroundFetch(v)) { + v.__abortController.abort(new Error('evicted')) + } else { + this.dispose(v, k, 'evict') + if (this.disposeAfter) { + this.disposed.push([v, k, 'evict']) + } + } + this.removeItemSize(head) + // if we aren't about to use the index, then null these out + if (free) { + this.keyList[head] = null + this.valList[head] = null + this.free.push(head) + } + this.head = this.next[head] + this.keyMap.delete(k) + this.size-- + return head + } + + has(k, { updateAgeOnHas = this.updateAgeOnHas, status } = {}) { + const index = this.keyMap.get(k) + if (index !== undefined) { + if (!this.isStale(index)) { + if (updateAgeOnHas) { + this.updateItemAge(index) + } + if (status) status.has = 'hit' + this.statusTTL(status, index) + return true + } else if (status) { + status.has = 'stale' + this.statusTTL(status, index) + } + } else if (status) { + status.has = 'miss' + } + return false + } + + // like get(), but without any LRU updating or TTL expiration + peek(k, { allowStale = this.allowStale } = {}) { + const index = this.keyMap.get(k) + if (index !== undefined && (allowStale || !this.isStale(index))) { + const v = this.valList[index] + // either stale and allowed, or forcing a refresh of non-stale value + return this.isBackgroundFetch(v) ? v.__staleWhileFetching : v + } + } + + backgroundFetch(k, index, options, context) { + const v = index === undefined ? undefined : this.valList[index] + if (this.isBackgroundFetch(v)) { + return v + } + const ac = new AC() + if (options.signal) { + options.signal.addEventListener('abort', () => + ac.abort(options.signal.reason) + ) + } + const fetchOpts = { + signal: ac.signal, + options, + context, + } + const cb = (v, updateCache = false) => { + const { aborted } = ac.signal + const ignoreAbort = options.ignoreFetchAbort && v !== undefined + if (options.status) { + if (aborted && !updateCache) { + options.status.fetchAborted = true + options.status.fetchError = ac.signal.reason + if (ignoreAbort) options.status.fetchAbortIgnored = true + } else { + options.status.fetchResolved = true + } + } + if (aborted && !ignoreAbort && !updateCache) { + return fetchFail(ac.signal.reason) + } + // either we didn't abort, and are still here, or we did, and ignored + if (this.valList[index] === p) { + if (v === undefined) { + if (p.__staleWhileFetching) { + this.valList[index] = p.__staleWhileFetching + } else { + this.delete(k) + } + } else { + if (options.status) options.status.fetchUpdated = true + this.set(k, v, fetchOpts.options) + } + } + return v + } + const eb = er => { + if (options.status) { + options.status.fetchRejected = true + options.status.fetchError = er + } + return fetchFail(er) + } + const fetchFail = er => { + const { aborted } = ac.signal + const allowStaleAborted = + aborted && options.allowStaleOnFetchAbort + const allowStale = + allowStaleAborted || options.allowStaleOnFetchRejection + const noDelete = allowStale || options.noDeleteOnFetchRejection + if (this.valList[index] === p) { + // if we allow stale on fetch rejections, then we need to ensure that + // the stale value is not removed from the cache when the fetch fails. + const del = !noDelete || p.__staleWhileFetching === undefined + if (del) { + this.delete(k) + } else if (!allowStaleAborted) { + // still replace the *promise* with the stale value, + // since we are done with the promise at this point. + // leave it untouched if we're still waiting for an + // aborted background fetch that hasn't yet returned. + this.valList[index] = p.__staleWhileFetching + } + } + if (allowStale) { + if (options.status && p.__staleWhileFetching !== undefined) { + options.status.returnedStale = true + } + return p.__staleWhileFetching + } else if (p.__returned === p) { + throw er + } + } + const pcall = (res, rej) => { + this.fetchMethod(k, v, fetchOpts).then(v => res(v), rej) + // ignored, we go until we finish, regardless. + // defer check until we are actually aborting, + // so fetchMethod can override. + ac.signal.addEventListener('abort', () => { + if ( + !options.ignoreFetchAbort || + options.allowStaleOnFetchAbort + ) { + res() + // when it eventually resolves, update the cache. + if (options.allowStaleOnFetchAbort) { + res = v => cb(v, true) + } + } + }) + } + if (options.status) options.status.fetchDispatched = true + const p = new Promise(pcall).then(cb, eb) + p.__abortController = ac + p.__staleWhileFetching = v + p.__returned = null + if (index === undefined) { + // internal, don't expose status. + this.set(k, p, { ...fetchOpts.options, status: undefined }) + index = this.keyMap.get(k) + } else { + this.valList[index] = p + } + return p + } + + isBackgroundFetch(p) { + return ( + p && + typeof p === 'object' && + typeof p.then === 'function' && + Object.prototype.hasOwnProperty.call( + p, + '__staleWhileFetching' + ) && + Object.prototype.hasOwnProperty.call(p, '__returned') && + (p.__returned === p || p.__returned === null) + ) + } + + // this takes the union of get() and set() opts, because it does both + async fetch( + k, + { + // get options + allowStale = this.allowStale, + updateAgeOnGet = this.updateAgeOnGet, + noDeleteOnStaleGet = this.noDeleteOnStaleGet, + // set options + ttl = this.ttl, + noDisposeOnSet = this.noDisposeOnSet, + size = 0, + sizeCalculation = this.sizeCalculation, + noUpdateTTL = this.noUpdateTTL, + // fetch exclusive options + noDeleteOnFetchRejection = this.noDeleteOnFetchRejection, + allowStaleOnFetchRejection = this.allowStaleOnFetchRejection, + ignoreFetchAbort = this.ignoreFetchAbort, + allowStaleOnFetchAbort = this.allowStaleOnFetchAbort, + fetchContext = this.fetchContext, + forceRefresh = false, + status, + signal, + } = {} + ) { + if (!this.fetchMethod) { + if (status) status.fetch = 'get' + return this.get(k, { + allowStale, + updateAgeOnGet, + noDeleteOnStaleGet, + status, + }) + } + + const options = { + allowStale, + updateAgeOnGet, + noDeleteOnStaleGet, + ttl, + noDisposeOnSet, + size, + sizeCalculation, + noUpdateTTL, + noDeleteOnFetchRejection, + allowStaleOnFetchRejection, + allowStaleOnFetchAbort, + ignoreFetchAbort, + status, + signal, + } + + let index = this.keyMap.get(k) + if (index === undefined) { + if (status) status.fetch = 'miss' + const p = this.backgroundFetch(k, index, options, fetchContext) + return (p.__returned = p) + } else { + // in cache, maybe already fetching + const v = this.valList[index] + if (this.isBackgroundFetch(v)) { + const stale = + allowStale && v.__staleWhileFetching !== undefined + if (status) { + status.fetch = 'inflight' + if (stale) status.returnedStale = true + } + return stale ? v.__staleWhileFetching : (v.__returned = v) + } + + // if we force a refresh, that means do NOT serve the cached value, + // unless we are already in the process of refreshing the cache. + const isStale = this.isStale(index) + if (!forceRefresh && !isStale) { + if (status) status.fetch = 'hit' + this.moveToTail(index) + if (updateAgeOnGet) { + this.updateItemAge(index) + } + this.statusTTL(status, index) + return v + } + + // ok, it is stale or a forced refresh, and not already fetching. + // refresh the cache. + const p = this.backgroundFetch(k, index, options, fetchContext) + const hasStale = p.__staleWhileFetching !== undefined + const staleVal = hasStale && allowStale + if (status) { + status.fetch = hasStale && isStale ? 'stale' : 'refresh' + if (staleVal && isStale) status.returnedStale = true + } + return staleVal ? p.__staleWhileFetching : (p.__returned = p) + } + } + + get( + k, + { + allowStale = this.allowStale, + updateAgeOnGet = this.updateAgeOnGet, + noDeleteOnStaleGet = this.noDeleteOnStaleGet, + status, + } = {} + ) { + const index = this.keyMap.get(k) + if (index !== undefined) { + const value = this.valList[index] + const fetching = this.isBackgroundFetch(value) + this.statusTTL(status, index) + if (this.isStale(index)) { + if (status) status.get = 'stale' + // delete only if not an in-flight background fetch + if (!fetching) { + if (!noDeleteOnStaleGet) { + this.delete(k) + } + if (status) status.returnedStale = allowStale + return allowStale ? value : undefined + } else { + if (status) { + status.returnedStale = + allowStale && value.__staleWhileFetching !== undefined + } + return allowStale ? value.__staleWhileFetching : undefined + } + } else { + if (status) status.get = 'hit' + // if we're currently fetching it, we don't actually have it yet + // it's not stale, which means this isn't a staleWhileRefetching. + // If it's not stale, and fetching, AND has a __staleWhileFetching + // value, then that means the user fetched with {forceRefresh:true}, + // so it's safe to return that value. + if (fetching) { + return value.__staleWhileFetching + } + this.moveToTail(index) + if (updateAgeOnGet) { + this.updateItemAge(index) + } + return value + } + } else if (status) { + status.get = 'miss' + } + } + + connect(p, n) { + this.prev[n] = p + this.next[p] = n + } + + moveToTail(index) { + // if tail already, nothing to do + // if head, move head to next[index] + // else + // move next[prev[index]] to next[index] (head has no prev) + // move prev[next[index]] to prev[index] + // prev[index] = tail + // next[tail] = index + // tail = index + if (index !== this.tail) { + if (index === this.head) { + this.head = this.next[index] + } else { + this.connect(this.prev[index], this.next[index]) + } + this.connect(this.tail, index) + this.tail = index + } + } + + get del() { + deprecatedMethod('del', 'delete') + return this.delete + } + + delete(k) { + let deleted = false + if (this.size !== 0) { + const index = this.keyMap.get(k) + if (index !== undefined) { + deleted = true + if (this.size === 1) { + this.clear() + } else { + this.removeItemSize(index) + const v = this.valList[index] + if (this.isBackgroundFetch(v)) { + v.__abortController.abort(new Error('deleted')) + } else { + this.dispose(v, k, 'delete') + if (this.disposeAfter) { + this.disposed.push([v, k, 'delete']) + } + } + this.keyMap.delete(k) + this.keyList[index] = null + this.valList[index] = null + if (index === this.tail) { + this.tail = this.prev[index] + } else if (index === this.head) { + this.head = this.next[index] + } else { + this.next[this.prev[index]] = this.next[index] + this.prev[this.next[index]] = this.prev[index] + } + this.size-- + this.free.push(index) + } + } + } + if (this.disposed) { + while (this.disposed.length) { + this.disposeAfter(...this.disposed.shift()) + } + } + return deleted + } + + clear() { + for (const index of this.rindexes({ allowStale: true })) { + const v = this.valList[index] + if (this.isBackgroundFetch(v)) { + v.__abortController.abort(new Error('deleted')) + } else { + const k = this.keyList[index] + this.dispose(v, k, 'delete') + if (this.disposeAfter) { + this.disposed.push([v, k, 'delete']) + } + } + } + + this.keyMap.clear() + this.valList.fill(null) + this.keyList.fill(null) + if (this.ttls) { + this.ttls.fill(0) + this.starts.fill(0) + } + if (this.sizes) { + this.sizes.fill(0) + } + this.head = 0 + this.tail = 0 + this.initialFill = 1 + this.free.length = 0 + this.calculatedSize = 0 + this.size = 0 + if (this.disposed) { + while (this.disposed.length) { + this.disposeAfter(...this.disposed.shift()) + } + } + } + + get reset() { + deprecatedMethod('reset', 'clear') + return this.clear + } + + get length() { + deprecatedProperty('length', 'size') + return this.size + } + + static get AbortController() { + return AC + } + static get AbortSignal() { + return AS + } +} + +export default LRUCache diff --git a/node_modules/lru-cache/package.json b/node_modules/lru-cache/package.json new file mode 100644 index 0000000..9684991 --- /dev/null +++ b/node_modules/lru-cache/package.json @@ -0,0 +1,96 @@ +{ + "name": "lru-cache", + "description": "A cache object that deletes the least-recently-used items.", + "version": "7.18.3", + "author": "Isaac Z. Schlueter ", + "keywords": [ + "mru", + "lru", + "cache" + ], + "sideEffects": false, + "scripts": { + "build": "npm run prepare", + "pretest": "npm run prepare", + "presnap": "npm run prepare", + "prepare": "node ./scripts/transpile-to-esm.js", + "size": "size-limit", + "test": "tap", + "snap": "tap", + "preversion": "npm test", + "postversion": "npm publish", + "prepublishOnly": "git push origin --follow-tags", + "format": "prettier --write .", + "typedoc": "typedoc ./index.d.ts" + }, + "type": "commonjs", + "main": "./index.js", + "module": "./index.mjs", + "types": "./index.d.ts", + "exports": { + ".": { + "import": { + "types": "./index.d.ts", + "default": "./index.mjs" + }, + "require": { + "types": "./index.d.ts", + "default": "./index.js" + } + }, + "./package.json": "./package.json" + }, + "repository": "git://github.com/isaacs/node-lru-cache.git", + "devDependencies": { + "@size-limit/preset-small-lib": "^7.0.8", + "@types/node": "^17.0.31", + "@types/tap": "^15.0.6", + "benchmark": "^2.1.4", + "c8": "^7.11.2", + "clock-mock": "^1.0.6", + "eslint-config-prettier": "^8.5.0", + "prettier": "^2.6.2", + "size-limit": "^7.0.8", + "tap": "^16.3.4", + "ts-node": "^10.7.0", + "tslib": "^2.4.0", + "typedoc": "^0.23.24", + "typescript": "^4.6.4" + }, + "license": "ISC", + "files": [ + "index.js", + "index.mjs", + "index.d.ts" + ], + "engines": { + "node": ">=12" + }, + "prettier": { + "semi": false, + "printWidth": 70, + "tabWidth": 2, + "useTabs": false, + "singleQuote": true, + "jsxSingleQuote": false, + "bracketSameLine": true, + "arrowParens": "avoid", + "endOfLine": "lf" + }, + "tap": { + "nyc-arg": [ + "--include=index.js" + ], + "node-arg": [ + "--expose-gc", + "--require", + "ts-node/register" + ], + "ts": false + }, + "size-limit": [ + { + "path": "./index.js" + } + ] +} diff --git a/node_modules/lru.min/LICENSE b/node_modules/lru.min/LICENSE new file mode 100644 index 0000000..e8c4fff --- /dev/null +++ b/node_modules/lru.min/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024-current Weslley Araรบjo (@wellwelwel) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/lru.min/README.md b/node_modules/lru.min/README.md new file mode 100644 index 0000000..d7c5bc0 --- /dev/null +++ b/node_modules/lru.min/README.md @@ -0,0 +1,426 @@ +

    lru.min

    +
    + +[![NPM Version](https://img.shields.io/npm/v/lru.min.svg?label=&color=70a1ff&logo=npm&logoColor=white)](https://www.npmjs.com/package/lru.min) +[![NPM Downloads](https://img.shields.io/npm/dm/lru.min.svg?label=&logo=npm&logoColor=white&color=45aaf2)](https://www.npmjs.com/package/lru.min) +[![Coverage](https://img.shields.io/codecov/c/github/wellwelwel/lru.min?label=&logo=codecov&logoColor=white&color=98cc00)](https://app.codecov.io/gh/wellwelwel/lru.min)
    +[![GitHub Workflow Status (Node.js)](https://img.shields.io/github/actions/workflow/status/wellwelwel/lru.min/ci_node.yml?event=push&label=&branch=main&logo=nodedotjs&logoColor=535c68&color=badc58)](https://github.com/wellwelwel/lru.min/actions/workflows/ci_node.yml?query=branch%3Amain) +[![GitHub Workflow Status (Bun)](https://img.shields.io/github/actions/workflow/status/wellwelwel/lru.min/ci_bun.yml?event=push&label=&branch=main&logo=bun&logoColor=ffffff&color=f368e0)](https://github.com/wellwelwel/lru.min/actions/workflows/ci_bun.yml?query=branch%3Amain) +[![GitHub Workflow Status (Deno)](https://img.shields.io/github/actions/workflow/status/wellwelwel/lru.min/ci_deno.yml?event=push&label=&branch=main&logo=deno&logoColor=ffffff&color=079992)](https://github.com/wellwelwel/lru.min/actions/workflows/ci_deno.yml?query=branch%3Amain) + +๐Ÿ”ฅ An extremely fast, efficient, and lightweight
    LRU Cache for JavaScript (Browser compatible). + +
    + +## Why another LRU? + +- ๐ŸŽ–๏ธ **lru.min** is fully compatible with both **Node.js** _(8+)_, **Bun**, **Deno** and, browser environments. All of this, while maintaining the same high performance [_(and a little more)_](https://github.com/wellwelwel/lru.min?tab=readme-ov-file#performance) as the most popular **LRU** packages. + +--- + +## Install + +```bash +# Node.js +npm i lru.min +``` + +```bash +# Bun +bun add lru.min +``` + +```bash +# Deno +deno add npm:lru.min +``` + +--- + +## Usage + +### Quickstart + +```js +import { createLRU } from 'lru.min'; + +const max = 2; +const onEviction = (key, value) => { + console.log(`Key "${key}" with value "${value}" has been evicted.`); +}; + +const LRU = createLRU({ + max, + onEviction, +}); + +LRU.set('A', 'My Value'); +LRU.set('B', 'Other Value'); +LRU.set('C', 'Another Value'); + +// => Key "A" with value "My Value" has been evicted. + +LRU.has('B'); +LRU.get('B'); +LRU.delete('B'); + +// => Key "B" with value "Other Value" has been evicted. + +LRU.peek('C'); + +LRU.clear(); // โ† recommended | LRU.evict(max) โ†’ (slower alternative) + +// => Key "C" with value "Another Value" has been evicted. + +LRU.set('D', "You're amazing ๐Ÿ’›"); + +LRU.size; // 1 +LRU.max; // 2 +LRU.available; // 1 + +LRU.resize(10); + +LRU.size; // 1 +LRU.max; // 10 +LRU.available; // 9 +``` + +> For _up-to-date_ documentation, always follow the [**README.md**](https://github.com/wellwelwel/lru.min?tab=readme-ov-file#readme) in the **GitHub** repository. + +### Import + +#### ES Modules + +```js +import { createLRU } from 'lru.min'; +``` + +#### CommonJS + +```js +const { createLRU } = require('lru.min'); +``` + +#### Browser + +> Requires **ES6**. + +```html + +``` + +- You can use tools such as [**Babel**](https://github.com/babel/babel) to increase the compatibility rate. + +### Create a new LRU Cache + +> Set maximum size when creating **LRU**. + +```ts +const LRU = createLRU({ max: 150_000 }); +``` + +Also, you can set a callback for every deletion/eviction: + +```ts +const LRU = createLRU({ + max: 150_000, + onEviction: (key, value) => { + // do something + }, +}); +``` + +### Set a cache + +Adds a key-value pair to the cache. Updates the value if the key already exists + +```ts +LRU.set('key', 'value'); +``` + +> `undefined` keys will simply be ignored. + +- Complexity: **O(1)**. + +### Get a cache + +Retrieves the value for a given key and moves the key to the most recent position. + +```ts +LRU.get('key'); +``` + +- Complexity: **O(1)**. + +### Peek a cache + +Retrieves the value for a given key without changing its position. + +```ts +LRU.peek('key'); +``` + +- Complexity: **O(1)**. + +### Check if a key exists + +```ts +LRU.has('key'); +``` + +- Complexity: **O(1)**. + +### Delete a cache + +```ts +LRU.delete('key'); +``` + +- Complexity: **O(1)**. + +### Evict from the oldest cache + +Evicts the specified number of the oldest items from the cache. + +```ts +LRU.evict(1000); +``` + +- Complexity: **O(key)** โ€”ย even if passed a number greater than the number of items, only existing items will be evicted. + +> [!TIP] +> +> - Methods that perform eviction(s) when maximum size is reached: `set` and `resize`. +> - Methods that always perform eviction(s): `delete`, `clear`, and `evict` itself. + +### Resize the cache + +Resizes the cache to a new maximum size, evicting items if necessary. + +```ts +LRU.resize(50_000); +``` + +- Complexity: + - Increasing: **O(newMax - max)**. + - Downsizing: **O(n)**. + +### Clear the cache + +Clears and disposes (if used) all key-value pairs from the cache. + +```ts +LRU.clear(); +``` + +- Complexity: + - Without `onEviction`: **O(1)**. + - Using `onEviction`: **O(entries)**. + +### Debugging + +#### Get the max size of the cache + +```ts +LRU.max; +``` + +- Complexity: **O(1)**. + +#### Get the current size of the cache + +```ts +LRU.size; +``` + +- Complexity: **O(1)**. + +#### Get the available slots in the cache + +```ts +LRU.available; +``` + +- Complexity: **O(1)**. + +### Iterating the cache + +#### Get all keys + +Iterates over all keys in the cache, from most recent to least recent. + +```ts +const keys = [...LRU.keys()]; +``` + +- Complexity: **O(keys)**. + +#### Get all values + +Iterates over all values in the cache, from most recent to least recent. + +```ts +const values = [...LRU.values()]; +``` + +- Complexity: **O(values)**. + +#### Get all entries + +Iterates over `[key, value]` pairs in the cache, from most recent to least recent. + +```ts +const entries = [...LRU.entries()]; +``` + +- Complexity: **O(entries)**. + +#### Run a callback for each entry + +Iterates over each value-key pair in the cache, from most recent to least recent. + +```ts +LRU.forEach((value, key) => { + // do something +}); +``` + +- Complexity: **O(entries)**. + +--- + +> [!NOTE] +> +> - We use `O(keys)`, `O(values)`, `O(entries)`, and `O(newMax - max)` to explicitly indicate what is being iterated over. In traditional complexity notation, this would be represented as `O(n)`. + +--- + +### TypeScript + +You can set types for both keys and values. For example: + +```ts +import { createLRU } from 'lru.min'; + +type Key = number; + +type Value = { + name: string; +}; + +const LRU = createLRU({ max: 1000 }); + +LRU.set(1, { name: 'Peter' }); +LRU.set(2, { name: 'Mary' }); +``` + +Also: + +```ts +import { createLRU, type CacheOptions } from 'lru.min'; + +type Key = number; + +type Value = { + name: string; +}; + +const options: CacheOptions = { + max: 10, + onEviction(key, value) { + console.log(key, value); + }, +}; + +// No need to repeat the type params +const LRU = createLRU(options); + +LRU.set(1, { name: 'Peter' }); +LRU.set(2, { name: 'Mary' }); +``` + +--- + +### Performance + +The benchmark is performed by comparing `1,000,000` runs through a maximum cache limit of `100,000`, getting `333,333` caches and deleting `200,000` keys 10 consecutive times, clearing the cache every run. + +> - [**lru-cache**](https://github.com/isaacs/node-lru-cache) `v11.0.0` +> - [**quick-lru**](https://github.com/sindresorhus/quick-lru) `v7.0.0` + +```sh +# Time: + lru.min: 240.45ms + lru-cache: 258.32ms + quick-lru: 279.89ms + +# CPU: + lru.min: 275558.30ยตs + lru-cache: 306858.30ยตs + quick-lru: 401318.80ยตs +``` + +- See detailed results and how the tests are run and compared in the [**benchmark**](https://github.com/wellwelwel/lru.min/tree/main/benchmark) directory. + +--- + +## Security Policy + +[![GitHub Workflow Status (with event)](https://img.shields.io/github/actions/workflow/status/wellwelwel/lru.min/ci_codeql.yml?event=push&label=&branch=main&logo=github&logoColor=white&color=f368e0)](https://github.com/wellwelwel/lru.min/actions/workflows/ci_codeql.yml?query=branch%3Amain) + +Please check the [**SECURITY.md**](https://github.com/wellwelwel/lru.min/blob/main/SECURITY.md). + +--- + +## Contributing + +See the [**Contributing Guide**](https://github.com/wellwelwel/lru.min/blob/main/CONTRIBUTING.md) and please follow our [**Code of Conduct**](https://github.com/wellwelwel/lru.min/blob/main/CODE_OF_CONDUCT.md) ๐Ÿš€ + +--- + +## Acknowledgements + +**lru.min** is based and inspired on the architecture and code of both [**lru-cache**](https://github.com/isaacs/node-lru-cache) and [**quick-lru**](https://github.com/sindresorhus/quick-lru), simplifying their core concepts for enhanced performance and compatibility. + +For more comprehensive features such as **TTL** support, consider using and supporting them ๐Ÿค + +- The architecture is mostly based on [@isaacs](https://github.com/isaacs) โ€” [**lru-cache**](https://github.com/isaacs/node-lru-cache/blob/8f51d75351cbb4ac819952eb8e9f95eda00ef800/src/index.ts). +- Most of the methods names and its functionalities were inspired by [@sindresorhus](https://github.com/sindresorhus) โ€” [**quick-lru**](https://github.com/sindresorhus/quick-lru/blob/a2262c65e1952539cb4d985a67c46363a780d234/index.js). +- [![Contributors](https://img.shields.io/github/contributors/wellwelwel/lru.min?label=Contributors)](https://github.com/wellwelwel/lru.min/graphs/contributors) + +--- + +#### What comes from [**lru-cache**](https://github.com/isaacs/node-lru-cache)? + +Architecture's essence: + +> _It's not the same code, but majority based on [this](https://github.com/isaacs/node-lru-cache/blob/8f51d75351cbb4ac819952eb8e9f95eda00ef800/src/index.ts#L1385-L1394)._ + +```ts +let free: number[] = []; + +const keyMap: Map = new Map(); +const keyList: (Key | undefined)[] = new Array(max).fill(undefined); +const valList: (Value | undefined)[] = new Array(max).fill(undefined); +const next: number[] = new Array(max).fill(0); +const prev: number[] = new Array(max).fill(0); +``` + +--- + +#### What comes from [**quick-lru**](https://github.com/sindresorhus/quick-lru)? + +Name of methods and options _(including their final functionality ideas)_: + +- `resize` +- `peek` +- `onEviction` +- `forEach` +- `entriesDescending` as `entries` + +--- + +## License + +**lru.min** is under the [**MIT License**](https://github.com/wellwelwel/lru.min/blob/main/LICENSE).
    +Copyright ยฉ 2024-present [Weslley Araรบjo](https://github.com/wellwelwel) and **lru.min** [contributors](https://github.com/wellwelwel/lru.min/graphs/contributors). diff --git a/node_modules/lru.min/browser/lru.min.js b/node_modules/lru.min/browser/lru.min.js new file mode 100644 index 0000000..82d8e99 --- /dev/null +++ b/node_modules/lru.min/browser/lru.min.js @@ -0,0 +1 @@ +"use strict";window.createLRU=function(e){var r=e.max;if(!(Number.isInteger(r)&&r>0))throw new TypeError("`max` must be a positive integer");var n=0,i=0,t=0,a=[],o=e.onEviction,l=new Map,f=new Array(r).fill(void 0),u=new Array(r).fill(void 0),v=new Array(r).fill(0),s=new Array(r).fill(0),d=function(e,r){if(e!==t){var n=v[e],a=s[e];e===i?i=n:("get"===r||0!==a)&&(v[a]=n),0!==n&&(s[n]=a),v[t]=e,s[e]=t,v[e]=0,t=e}},p=function(){var e=i,r=f[e];return null==o||o(r,u[e]),l.delete(r),f[e]=void 0,u[e]=void 0,0!==(i=v[e])&&(s[i]=0),0===--n&&(i=t=0),a.push(e),e};return{set:function(e,v){if(void 0!==e){var s=l.get(e);void 0===s?(s=n===r?p():a.length>0?a.pop():n,l.set(e,s),f[s]=e,n++):null==o||o(e,u[s]),u[s]=v,1===n?i=t=s:d(s,"set")}},get:function(e){var r=l.get(e);if(void 0!==r)return r!==t&&d(r,"get"),u[r]},peek:function(e){var r=l.get(e);return void 0!==r?u[r]:void 0},has:function(e){return l.has(e)},keys:function*(){for(var e=t,r=0;r0;)p(),r--},clear:function(){if("function"==typeof o)for(var e=l.values(),r=e.next();!r.done;r=e.next())o(f[r.value],u[r.value]);l.clear(),f.fill(void 0),u.fill(void 0),a=[],n=0,i=t=0},resize:function(e){if(!(Number.isInteger(e)&&e>0))throw new TypeError("`max` must be a positive integer");if(e!==r){if(e=0;m--)y[m]=f[d],g[m]=u[d],h[m]=m+1,w[m]=m-1,l.set(y[m],m),d=s[d];i=0,t=p-1,n=p,f.length=e,u.length=e,v.length=e,s.length=e;for(var x=0;x = { + /** Maximum number of items the cache can hold. */ + max: number; + /** Function called when an item is evicted from the cache. */ + onEviction?: (key: Key, value: Value) => unknown; +}; +export declare const createLRU: (options: CacheOptions) => { + /** Adds a key-value pair to the cache. Updates the value if the key already exists. */ + set(key: Key, value: Value): undefined; + /** Retrieves the value for a given key and moves the key to the most recent position. */ + get(key: Key): Value | undefined; + /** Retrieves the value for a given key without changing its position. */ + peek: (key: Key) => Value | undefined; + /** Checks if a key exists in the cache. */ + has: (key: Key) => boolean; + /** Iterates over all keys in the cache, from most recent to least recent. */ + keys(): IterableIterator; + /** Iterates over all values in the cache, from most recent to least recent. */ + values(): IterableIterator; + /** Iterates over `[key, value]` pairs in the cache, from most recent to least recent. */ + entries(): IterableIterator<[Key, Value]>; + /** Iterates over each value-key pair in the cache, from most recent to least recent. */ + forEach: (callback: (value: Value, key: Key) => unknown) => undefined; + /** Deletes a key-value pair from the cache. */ + delete(key: Key): boolean; + /** Evicts the oldest item or the specified number of the oldest items from the cache. */ + evict: (number: number) => undefined; + /** Clears all key-value pairs from the cache. */ + clear(): undefined; + /** Resizes the cache to a new maximum size, evicting items if necessary. */ + resize: (newMax: number) => undefined; + /** Returns the maximum number of items that can be stored in the cache. */ + readonly max: number; + /** Returns the number of items currently stored in the cache. */ + readonly size: number; + /** Returns the number of currently available slots in the cache before reaching the maximum size. */ + readonly available: number; +}; diff --git a/node_modules/lru.min/lib/index.js b/node_modules/lru.min/lib/index.js new file mode 100644 index 0000000..3b86256 --- /dev/null +++ b/node_modules/lru.min/lib/index.js @@ -0,0 +1,229 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.createLRU = void 0; +const createLRU = (options) => { + let { max } = options; + if (!(Number.isInteger(max) && max > 0)) + throw new TypeError('`max` must be a positive integer'); + let size = 0; + let head = 0; + let tail = 0; + let free = []; + const { onEviction } = options; + const keyMap = new Map(); + const keyList = new Array(max).fill(undefined); + const valList = new Array(max).fill(undefined); + const next = new Array(max).fill(0); + const prev = new Array(max).fill(0); + const setTail = (index, type) => { + if (index === tail) + return; + const nextIndex = next[index]; + const prevIndex = prev[index]; + if (index === head) + head = nextIndex; + else if (type === 'get' || prevIndex !== 0) + next[prevIndex] = nextIndex; + if (nextIndex !== 0) + prev[nextIndex] = prevIndex; + next[tail] = index; + prev[index] = tail; + next[index] = 0; + tail = index; + }; + const _evict = () => { + const evictHead = head; + const key = keyList[evictHead]; + onEviction === null || onEviction === void 0 ? void 0 : onEviction(key, valList[evictHead]); + keyMap.delete(key); + keyList[evictHead] = undefined; + valList[evictHead] = undefined; + head = next[evictHead]; + if (head !== 0) + prev[head] = 0; + size--; + if (size === 0) + head = tail = 0; + free.push(evictHead); + return evictHead; + }; + return { + /** Adds a key-value pair to the cache. Updates the value if the key already exists. */ + set(key, value) { + if (key === undefined) + return; + let index = keyMap.get(key); + if (index === undefined) { + index = size === max ? _evict() : free.length > 0 ? free.pop() : size; + keyMap.set(key, index); + keyList[index] = key; + size++; + } + else + onEviction === null || onEviction === void 0 ? void 0 : onEviction(key, valList[index]); + valList[index] = value; + if (size === 1) + head = tail = index; + else + setTail(index, 'set'); + }, + /** Retrieves the value for a given key and moves the key to the most recent position. */ + get(key) { + const index = keyMap.get(key); + if (index === undefined) + return; + if (index !== tail) + setTail(index, 'get'); + return valList[index]; + }, + /** Retrieves the value for a given key without changing its position. */ + peek: (key) => { + const index = keyMap.get(key); + return index !== undefined ? valList[index] : undefined; + }, + /** Checks if a key exists in the cache. */ + has: (key) => keyMap.has(key), + /** Iterates over all keys in the cache, from most recent to least recent. */ + *keys() { + let current = tail; + for (let i = 0; i < size; i++) { + yield keyList[current]; + current = prev[current]; + } + }, + /** Iterates over all values in the cache, from most recent to least recent. */ + *values() { + let current = tail; + for (let i = 0; i < size; i++) { + yield valList[current]; + current = prev[current]; + } + }, + /** Iterates over `[key, value]` pairs in the cache, from most recent to least recent. */ + *entries() { + let current = tail; + for (let i = 0; i < size; i++) { + yield [keyList[current], valList[current]]; + current = prev[current]; + } + }, + /** Iterates over each value-key pair in the cache, from most recent to least recent. */ + forEach: (callback) => { + let current = tail; + for (let i = 0; i < size; i++) { + const key = keyList[current]; + const value = valList[current]; + callback(value, key); + current = prev[current]; + } + }, + /** Deletes a key-value pair from the cache. */ + delete(key) { + const index = keyMap.get(key); + if (index === undefined) + return false; + onEviction === null || onEviction === void 0 ? void 0 : onEviction(key, valList[index]); + keyMap.delete(key); + free.push(index); + keyList[index] = undefined; + valList[index] = undefined; + const prevIndex = prev[index]; + const nextIndex = next[index]; + if (prevIndex !== 0) + next[prevIndex] = nextIndex; + if (nextIndex !== 0) + prev[nextIndex] = prevIndex; + if (index === head) + head = nextIndex; + if (index === tail) + tail = prevIndex; + size--; + return true; + }, + /** Evicts the oldest item or the specified number of the oldest items from the cache. */ + evict: (number) => { + let toPrune = Math.min(number, size); + while (toPrune > 0) { + _evict(); + toPrune--; + } + }, + /** Clears all key-value pairs from the cache. */ + clear() { + if (typeof onEviction === 'function') { + const iterator = keyMap.values(); + for (let result = iterator.next(); !result.done; result = iterator.next()) + onEviction(keyList[result.value], valList[result.value]); + } + keyMap.clear(); + keyList.fill(undefined); + valList.fill(undefined); + free = []; + size = 0; + head = tail = 0; + }, + /** Resizes the cache to a new maximum size, evicting items if necessary. */ + resize: (newMax) => { + if (!(Number.isInteger(newMax) && newMax > 0)) + throw new TypeError('`max` must be a positive integer'); + if (newMax === max) + return; + if (newMax < max) { + let current = tail; + const preserve = Math.min(size, newMax); + const remove = size - preserve; + const newKeyList = new Array(newMax); + const newValList = new Array(newMax); + const newNext = new Array(newMax); + const newPrev = new Array(newMax); + for (let i = 1; i <= remove; i++) + onEviction === null || onEviction === void 0 ? void 0 : onEviction(keyList[i], valList[i]); + for (let i = preserve - 1; i >= 0; i--) { + newKeyList[i] = keyList[current]; + newValList[i] = valList[current]; + newNext[i] = i + 1; + newPrev[i] = i - 1; + keyMap.set(newKeyList[i], i); + current = prev[current]; + } + head = 0; + tail = preserve - 1; + size = preserve; + keyList.length = newMax; + valList.length = newMax; + next.length = newMax; + prev.length = newMax; + for (let i = 0; i < preserve; i++) { + keyList[i] = newKeyList[i]; + valList[i] = newValList[i]; + next[i] = newNext[i]; + prev[i] = newPrev[i]; + } + free = []; + for (let i = preserve; i < newMax; i++) + free.push(i); + } + else { + const fill = newMax - max; + keyList.push(...new Array(fill).fill(undefined)); + valList.push(...new Array(fill).fill(undefined)); + next.push(...new Array(fill).fill(0)); + prev.push(...new Array(fill).fill(0)); + } + max = newMax; + }, + /** Returns the maximum number of items that can be stored in the cache. */ + get max() { + return max; + }, + /** Returns the number of items currently stored in the cache. */ + get size() { + return size; + }, + /** Returns the number of currently available slots in the cache before reaching the maximum size. */ + get available() { + return max - size; + }, + }; +}; +exports.createLRU = createLRU; diff --git a/node_modules/lru.min/lib/index.mjs b/node_modules/lru.min/lib/index.mjs new file mode 100644 index 0000000..a585360 --- /dev/null +++ b/node_modules/lru.min/lib/index.mjs @@ -0,0 +1,207 @@ +const createLRU = (options) => { + let { max } = options; + if (!(Number.isInteger(max) && max > 0)) + throw new TypeError("`max` must be a positive integer"); + let size = 0; + let head = 0; + let tail = 0; + let free = []; + const { onEviction } = options; + const keyMap = /* @__PURE__ */ new Map(); + const keyList = new Array(max).fill(void 0); + const valList = new Array(max).fill(void 0); + const next = new Array(max).fill(0); + const prev = new Array(max).fill(0); + const setTail = (index, type) => { + if (index === tail) return; + const nextIndex = next[index]; + const prevIndex = prev[index]; + if (index === head) head = nextIndex; + else if (type === "get" || prevIndex !== 0) next[prevIndex] = nextIndex; + if (nextIndex !== 0) prev[nextIndex] = prevIndex; + next[tail] = index; + prev[index] = tail; + next[index] = 0; + tail = index; + }; + const _evict = () => { + const evictHead = head; + const key = keyList[evictHead]; + onEviction == null ? void 0 : onEviction(key, valList[evictHead]); + keyMap.delete(key); + keyList[evictHead] = void 0; + valList[evictHead] = void 0; + head = next[evictHead]; + if (head !== 0) prev[head] = 0; + size--; + if (size === 0) head = tail = 0; + free.push(evictHead); + return evictHead; + }; + return { + /** Adds a key-value pair to the cache. Updates the value if the key already exists. */ + set(key, value) { + if (key === void 0) return; + let index = keyMap.get(key); + if (index === void 0) { + index = size === max ? _evict() : free.length > 0 ? free.pop() : size; + keyMap.set(key, index); + keyList[index] = key; + size++; + } else onEviction == null ? void 0 : onEviction(key, valList[index]); + valList[index] = value; + if (size === 1) head = tail = index; + else setTail(index, "set"); + }, + /** Retrieves the value for a given key and moves the key to the most recent position. */ + get(key) { + const index = keyMap.get(key); + if (index === void 0) return; + if (index !== tail) setTail(index, "get"); + return valList[index]; + }, + /** Retrieves the value for a given key without changing its position. */ + peek: (key) => { + const index = keyMap.get(key); + return index !== void 0 ? valList[index] : void 0; + }, + /** Checks if a key exists in the cache. */ + has: (key) => keyMap.has(key), + /** Iterates over all keys in the cache, from most recent to least recent. */ + *keys() { + let current = tail; + for (let i = 0; i < size; i++) { + yield keyList[current]; + current = prev[current]; + } + }, + /** Iterates over all values in the cache, from most recent to least recent. */ + *values() { + let current = tail; + for (let i = 0; i < size; i++) { + yield valList[current]; + current = prev[current]; + } + }, + /** Iterates over `[key, value]` pairs in the cache, from most recent to least recent. */ + *entries() { + let current = tail; + for (let i = 0; i < size; i++) { + yield [keyList[current], valList[current]]; + current = prev[current]; + } + }, + /** Iterates over each value-key pair in the cache, from most recent to least recent. */ + forEach: (callback) => { + let current = tail; + for (let i = 0; i < size; i++) { + const key = keyList[current]; + const value = valList[current]; + callback(value, key); + current = prev[current]; + } + }, + /** Deletes a key-value pair from the cache. */ + delete(key) { + const index = keyMap.get(key); + if (index === void 0) return false; + onEviction == null ? void 0 : onEviction(key, valList[index]); + keyMap.delete(key); + free.push(index); + keyList[index] = void 0; + valList[index] = void 0; + const prevIndex = prev[index]; + const nextIndex = next[index]; + if (prevIndex !== 0) next[prevIndex] = nextIndex; + if (nextIndex !== 0) prev[nextIndex] = prevIndex; + if (index === head) head = nextIndex; + if (index === tail) tail = prevIndex; + size--; + return true; + }, + /** Evicts the oldest item or the specified number of the oldest items from the cache. */ + evict: (number) => { + let toPrune = Math.min(number, size); + while (toPrune > 0) { + _evict(); + toPrune--; + } + }, + /** Clears all key-value pairs from the cache. */ + clear() { + if (typeof onEviction === "function") { + const iterator = keyMap.values(); + for (let result = iterator.next(); !result.done; result = iterator.next()) + onEviction(keyList[result.value], valList[result.value]); + } + keyMap.clear(); + keyList.fill(void 0); + valList.fill(void 0); + free = []; + size = 0; + head = tail = 0; + }, + /** Resizes the cache to a new maximum size, evicting items if necessary. */ + resize: (newMax) => { + if (!(Number.isInteger(newMax) && newMax > 0)) + throw new TypeError("`max` must be a positive integer"); + if (newMax === max) return; + if (newMax < max) { + let current = tail; + const preserve = Math.min(size, newMax); + const remove = size - preserve; + const newKeyList = new Array(newMax); + const newValList = new Array(newMax); + const newNext = new Array(newMax); + const newPrev = new Array(newMax); + for (let i = 1; i <= remove; i++) + onEviction == null ? void 0 : onEviction(keyList[i], valList[i]); + for (let i = preserve - 1; i >= 0; i--) { + newKeyList[i] = keyList[current]; + newValList[i] = valList[current]; + newNext[i] = i + 1; + newPrev[i] = i - 1; + keyMap.set(newKeyList[i], i); + current = prev[current]; + } + head = 0; + tail = preserve - 1; + size = preserve; + keyList.length = newMax; + valList.length = newMax; + next.length = newMax; + prev.length = newMax; + for (let i = 0; i < preserve; i++) { + keyList[i] = newKeyList[i]; + valList[i] = newValList[i]; + next[i] = newNext[i]; + prev[i] = newPrev[i]; + } + free = []; + for (let i = preserve; i < newMax; i++) free.push(i); + } else { + const fill = newMax - max; + keyList.push(...new Array(fill).fill(void 0)); + valList.push(...new Array(fill).fill(void 0)); + next.push(...new Array(fill).fill(0)); + prev.push(...new Array(fill).fill(0)); + } + max = newMax; + }, + /** Returns the maximum number of items that can be stored in the cache. */ + get max() { + return max; + }, + /** Returns the number of items currently stored in the cache. */ + get size() { + return size; + }, + /** Returns the number of currently available slots in the cache before reaching the maximum size. */ + get available() { + return max - size; + } + }; +}; +export { + createLRU +}; diff --git a/node_modules/lru.min/package.json b/node_modules/lru.min/package.json new file mode 100644 index 0000000..5047453 --- /dev/null +++ b/node_modules/lru.min/package.json @@ -0,0 +1,89 @@ +{ + "name": "lru.min", + "version": "1.1.2", + "description": "๐Ÿ”ฅ An extremely fast and efficient LRU cache for JavaScript with high compatibility (including Browsers) โ€” 6.8KB.", + "main": "./lib/index.js", + "module": "./lib/index.mjs", + "types": "./lib/index.d.ts", + "license": "MIT", + "repository": { + "type": "git", + "url": "git+https://github.com/wellwelwel/lru.min.git" + }, + "bugs": { + "url": "https://github.com/wellwelwel/lru.min/issues" + }, + "author": "https://github.com/wellwelwel", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wellwelwel" + }, + "files": [ + "browser", + "lib" + ], + "engines": { + "node": ">=8.0.0", + "bun": ">=1.0.0", + "deno": ">=1.30.0" + }, + "scripts": { + "benchmark:esm": "cd benchmark && npm ci && node index.mjs", + "benchmark:cjs": "cd benchmark && npm ci && node index.cjs", + "prebuild": "rm -rf ./browser ./lib", + "build:browser": "tsx tools/browserfy.ts", + "build:esm": "esbuild src/index.ts --outfile=lib/index.mjs --platform=node --target=node12 --format=esm", + "build": "tsc && npm run build:esm && npm run build:browser", + "test:node": "poku", + "test:bun": "bun poku", + "test:deno": "deno run -A npm:poku", + "test:coverage": "mcr --import tsx --config mcr.config.ts npm run test:node", + "lint": "npx @biomejs/biome lint && prettier --check .", + "lint:fix": "npx @biomejs/biome lint --write && prettier --write .github/workflows/*.yml .", + "update": "pu minor && npm i && npm audit fix", + "postupdate": "npm run lint:fix", + "size": "ls -lh lib/index.mjs | awk '{print $5}'" + }, + "devDependencies": { + "@babel/core": "^7.26.9", + "@babel/preset-env": "^7.26.9", + "@biomejs/biome": "^1.9.4", + "@types/babel__core": "^7.20.5", + "@types/node": "^22.13.10", + "esbuild": "^0.25.0", + "monocart-coverage-reports": "2.12.1", + "packages-update": "^2.0.0", + "poku": "^3.0.1", + "prettier": "^3.5.3", + "terser": "^5.39.0", + "tsx": "^4.19.3", + "typescript": "^5.8.2" + }, + "exports": { + ".": { + "import": { + "types": "./lib/index.d.ts", + "default": "./lib/index.mjs" + }, + "require": { + "types": "./lib/index.d.ts", + "default": "./lib/index.js" + } + } + }, + "keywords": [ + "lru", + "cache", + "caching", + "hash", + "node", + "nodejs", + "bun", + "deno", + "typescript", + "browser", + "fast", + "lru-cache", + "quick-lru" + ] +} diff --git a/node_modules/math-intrinsics/.eslintrc b/node_modules/math-intrinsics/.eslintrc new file mode 100644 index 0000000..d90a1bc --- /dev/null +++ b/node_modules/math-intrinsics/.eslintrc @@ -0,0 +1,16 @@ +{ + "root": true, + + "extends": "@ljharb", + + "rules": { + "eqeqeq": ["error", "allow-null"], + "id-length": "off", + "new-cap": ["error", { + "capIsNewExceptions": [ + "RequireObjectCoercible", + "ToObject", + ], + }], + }, +} diff --git a/node_modules/math-intrinsics/.github/FUNDING.yml b/node_modules/math-intrinsics/.github/FUNDING.yml new file mode 100644 index 0000000..868f4ff --- /dev/null +++ b/node_modules/math-intrinsics/.github/FUNDING.yml @@ -0,0 +1,12 @@ +# These are supported funding model platforms + +github: [ljharb] +patreon: # Replace with a single Patreon username +open_collective: # Replace with a single Open Collective username +ko_fi: # Replace with a single Ko-fi username +tidelift: npm/math-intrinsics +community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry +liberapay: # Replace with a single Liberapay username +issuehunt: # Replace with a single IssueHunt username +otechie: # Replace with a single Otechie username +custom: # Replace with a single custom sponsorship URL diff --git a/node_modules/math-intrinsics/CHANGELOG.md b/node_modules/math-intrinsics/CHANGELOG.md new file mode 100644 index 0000000..9cf48f5 --- /dev/null +++ b/node_modules/math-intrinsics/CHANGELOG.md @@ -0,0 +1,24 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [v1.1.0](https://github.com/es-shims/math-intrinsics/compare/v1.0.0...v1.1.0) - 2024-12-18 + +### Commits + +- [New] add `round` [`7cfb044`](https://github.com/es-shims/math-intrinsics/commit/7cfb04460c0fbdf1ca101eecbac3f59d11994130) +- [Tests] add attw [`e96be8f`](https://github.com/es-shims/math-intrinsics/commit/e96be8fbf58449eafe976446a0470e6ea561ad8d) +- [Dev Deps] update `@types/tape` [`30d0023`](https://github.com/es-shims/math-intrinsics/commit/30d00234ce8a3fa0094a61cd55d6686eb91e36ec) + +## v1.0.0 - 2024-12-11 + +### Commits + +- Initial implementation, tests, readme, types [`b898caa`](https://github.com/es-shims/math-intrinsics/commit/b898caae94e9994a94a42b8740f7bbcfd0a868fe) +- Initial commit [`02745b0`](https://github.com/es-shims/math-intrinsics/commit/02745b03a62255af8a332771987b55d127538d9c) +- [New] add `constants/maxArrayLength`, `mod` [`b978178`](https://github.com/es-shims/math-intrinsics/commit/b978178a57685bd23ed1c7efe2137f3784f5fcc5) +- npm init [`a39fc57`](https://github.com/es-shims/math-intrinsics/commit/a39fc57e5639a645d0bd52a0dc56202480223be2) +- Only apps should have lockfiles [`9451580`](https://github.com/es-shims/math-intrinsics/commit/94515800fb34db4f3cc7e99290042d45609ac7bd) diff --git a/node_modules/math-intrinsics/LICENSE b/node_modules/math-intrinsics/LICENSE new file mode 100644 index 0000000..34995e7 --- /dev/null +++ b/node_modules/math-intrinsics/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024 ECMAScript Shims + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/math-intrinsics/README.md b/node_modules/math-intrinsics/README.md new file mode 100644 index 0000000..4a66dcf --- /dev/null +++ b/node_modules/math-intrinsics/README.md @@ -0,0 +1,50 @@ +# math-intrinsics [![Version Badge][npm-version-svg]][package-url] + +[![github actions][actions-image]][actions-url] +[![coverage][codecov-image]][codecov-url] +[![License][license-image]][license-url] +[![Downloads][downloads-image]][downloads-url] + +[![npm badge][npm-badge-png]][package-url] + +ES Math-related intrinsics and helpers, robustly cached. + + - `abs` + - `floor` + - `isFinite` + - `isInteger` + - `isNaN` + - `isNegativeZero` + - `max` + - `min` + - `mod` + - `pow` + - `round` + - `sign` + - `constants/maxArrayLength` + - `constants/maxSafeInteger` + - `constants/maxValue` + + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +## Security + +Please email [@ljharb](https://github.com/ljharb) or see https://tidelift.com/security if you have a potential security vulnerability to report. + +[package-url]: https://npmjs.org/package/math-intrinsics +[npm-version-svg]: https://versionbadg.es/es-shims/math-intrinsics.svg +[deps-svg]: https://david-dm.org/es-shims/math-intrinsics.svg +[deps-url]: https://david-dm.org/es-shims/math-intrinsics +[dev-deps-svg]: https://david-dm.org/es-shims/math-intrinsics/dev-status.svg +[dev-deps-url]: https://david-dm.org/es-shims/math-intrinsics#info=devDependencies +[npm-badge-png]: https://nodei.co/npm/math-intrinsics.png?downloads=true&stars=true +[license-image]: https://img.shields.io/npm/l/math-intrinsics.svg +[license-url]: LICENSE +[downloads-image]: https://img.shields.io/npm/dm/es-object.svg +[downloads-url]: https://npm-stat.com/charts.html?package=math-intrinsics +[codecov-image]: https://codecov.io/gh/es-shims/math-intrinsics/branch/main/graphs/badge.svg +[codecov-url]: https://app.codecov.io/gh/es-shims/math-intrinsics/ +[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/es-shims/math-intrinsics +[actions-url]: https://github.com/es-shims/math-intrinsics/actions diff --git a/node_modules/math-intrinsics/abs.d.ts b/node_modules/math-intrinsics/abs.d.ts new file mode 100644 index 0000000..14ad9c6 --- /dev/null +++ b/node_modules/math-intrinsics/abs.d.ts @@ -0,0 +1 @@ +export = Math.abs; \ No newline at end of file diff --git a/node_modules/math-intrinsics/abs.js b/node_modules/math-intrinsics/abs.js new file mode 100644 index 0000000..a751424 --- /dev/null +++ b/node_modules/math-intrinsics/abs.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./abs')} */ +module.exports = Math.abs; diff --git a/node_modules/math-intrinsics/constants/maxArrayLength.d.ts b/node_modules/math-intrinsics/constants/maxArrayLength.d.ts new file mode 100644 index 0000000..b92d46b --- /dev/null +++ b/node_modules/math-intrinsics/constants/maxArrayLength.d.ts @@ -0,0 +1,3 @@ +declare const MAX_ARRAY_LENGTH: 4294967295; + +export = MAX_ARRAY_LENGTH; \ No newline at end of file diff --git a/node_modules/math-intrinsics/constants/maxArrayLength.js b/node_modules/math-intrinsics/constants/maxArrayLength.js new file mode 100644 index 0000000..cfc6aff --- /dev/null +++ b/node_modules/math-intrinsics/constants/maxArrayLength.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./maxArrayLength')} */ +module.exports = 4294967295; // Math.pow(2, 32) - 1; diff --git a/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts b/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts new file mode 100644 index 0000000..fee3f62 --- /dev/null +++ b/node_modules/math-intrinsics/constants/maxSafeInteger.d.ts @@ -0,0 +1,3 @@ +declare const MAX_SAFE_INTEGER: 9007199254740991; + +export = MAX_SAFE_INTEGER; \ No newline at end of file diff --git a/node_modules/math-intrinsics/constants/maxSafeInteger.js b/node_modules/math-intrinsics/constants/maxSafeInteger.js new file mode 100644 index 0000000..b568ad3 --- /dev/null +++ b/node_modules/math-intrinsics/constants/maxSafeInteger.js @@ -0,0 +1,5 @@ +'use strict'; + +/** @type {import('./maxSafeInteger')} */ +// eslint-disable-next-line no-extra-parens +module.exports = /** @type {import('./maxSafeInteger')} */ (Number.MAX_SAFE_INTEGER) || 9007199254740991; // Math.pow(2, 53) - 1; diff --git a/node_modules/math-intrinsics/constants/maxValue.d.ts b/node_modules/math-intrinsics/constants/maxValue.d.ts new file mode 100644 index 0000000..292cb82 --- /dev/null +++ b/node_modules/math-intrinsics/constants/maxValue.d.ts @@ -0,0 +1,3 @@ +declare const MAX_VALUE: 1.7976931348623157e+308; + +export = MAX_VALUE; diff --git a/node_modules/math-intrinsics/constants/maxValue.js b/node_modules/math-intrinsics/constants/maxValue.js new file mode 100644 index 0000000..a2202dc --- /dev/null +++ b/node_modules/math-intrinsics/constants/maxValue.js @@ -0,0 +1,5 @@ +'use strict'; + +/** @type {import('./maxValue')} */ +// eslint-disable-next-line no-extra-parens +module.exports = /** @type {import('./maxValue')} */ (Number.MAX_VALUE) || 1.7976931348623157e+308; diff --git a/node_modules/math-intrinsics/floor.d.ts b/node_modules/math-intrinsics/floor.d.ts new file mode 100644 index 0000000..9265236 --- /dev/null +++ b/node_modules/math-intrinsics/floor.d.ts @@ -0,0 +1 @@ +export = Math.floor; \ No newline at end of file diff --git a/node_modules/math-intrinsics/floor.js b/node_modules/math-intrinsics/floor.js new file mode 100644 index 0000000..ab0e5d7 --- /dev/null +++ b/node_modules/math-intrinsics/floor.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./floor')} */ +module.exports = Math.floor; diff --git a/node_modules/math-intrinsics/isFinite.d.ts b/node_modules/math-intrinsics/isFinite.d.ts new file mode 100644 index 0000000..6daae33 --- /dev/null +++ b/node_modules/math-intrinsics/isFinite.d.ts @@ -0,0 +1,3 @@ +declare function isFinite(x: unknown): x is number | bigint; + +export = isFinite; \ No newline at end of file diff --git a/node_modules/math-intrinsics/isFinite.js b/node_modules/math-intrinsics/isFinite.js new file mode 100644 index 0000000..b201a5a --- /dev/null +++ b/node_modules/math-intrinsics/isFinite.js @@ -0,0 +1,12 @@ +'use strict'; + +var $isNaN = require('./isNaN'); + +/** @type {import('./isFinite')} */ +module.exports = function isFinite(x) { + return (typeof x === 'number' || typeof x === 'bigint') + && !$isNaN(x) + && x !== Infinity + && x !== -Infinity; +}; + diff --git a/node_modules/math-intrinsics/isInteger.d.ts b/node_modules/math-intrinsics/isInteger.d.ts new file mode 100644 index 0000000..13935a8 --- /dev/null +++ b/node_modules/math-intrinsics/isInteger.d.ts @@ -0,0 +1,3 @@ +declare function isInteger(argument: unknown): argument is number; + +export = isInteger; \ No newline at end of file diff --git a/node_modules/math-intrinsics/isInteger.js b/node_modules/math-intrinsics/isInteger.js new file mode 100644 index 0000000..4b1b9a5 --- /dev/null +++ b/node_modules/math-intrinsics/isInteger.js @@ -0,0 +1,16 @@ +'use strict'; + +var $abs = require('./abs'); +var $floor = require('./floor'); + +var $isNaN = require('./isNaN'); +var $isFinite = require('./isFinite'); + +/** @type {import('./isInteger')} */ +module.exports = function isInteger(argument) { + if (typeof argument !== 'number' || $isNaN(argument) || !$isFinite(argument)) { + return false; + } + var absValue = $abs(argument); + return $floor(absValue) === absValue; +}; diff --git a/node_modules/math-intrinsics/isNaN.d.ts b/node_modules/math-intrinsics/isNaN.d.ts new file mode 100644 index 0000000..c1d4c55 --- /dev/null +++ b/node_modules/math-intrinsics/isNaN.d.ts @@ -0,0 +1 @@ +export = Number.isNaN; \ No newline at end of file diff --git a/node_modules/math-intrinsics/isNaN.js b/node_modules/math-intrinsics/isNaN.js new file mode 100644 index 0000000..e36475c --- /dev/null +++ b/node_modules/math-intrinsics/isNaN.js @@ -0,0 +1,6 @@ +'use strict'; + +/** @type {import('./isNaN')} */ +module.exports = Number.isNaN || function isNaN(a) { + return a !== a; +}; diff --git a/node_modules/math-intrinsics/isNegativeZero.d.ts b/node_modules/math-intrinsics/isNegativeZero.d.ts new file mode 100644 index 0000000..7ad8819 --- /dev/null +++ b/node_modules/math-intrinsics/isNegativeZero.d.ts @@ -0,0 +1,3 @@ +declare function isNegativeZero(x: unknown): boolean; + +export = isNegativeZero; \ No newline at end of file diff --git a/node_modules/math-intrinsics/isNegativeZero.js b/node_modules/math-intrinsics/isNegativeZero.js new file mode 100644 index 0000000..b69adcc --- /dev/null +++ b/node_modules/math-intrinsics/isNegativeZero.js @@ -0,0 +1,6 @@ +'use strict'; + +/** @type {import('./isNegativeZero')} */ +module.exports = function isNegativeZero(x) { + return x === 0 && 1 / x === 1 / -0; +}; diff --git a/node_modules/math-intrinsics/max.d.ts b/node_modules/math-intrinsics/max.d.ts new file mode 100644 index 0000000..ad6f43e --- /dev/null +++ b/node_modules/math-intrinsics/max.d.ts @@ -0,0 +1 @@ +export = Math.max; \ No newline at end of file diff --git a/node_modules/math-intrinsics/max.js b/node_modules/math-intrinsics/max.js new file mode 100644 index 0000000..edb55df --- /dev/null +++ b/node_modules/math-intrinsics/max.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./max')} */ +module.exports = Math.max; diff --git a/node_modules/math-intrinsics/min.d.ts b/node_modules/math-intrinsics/min.d.ts new file mode 100644 index 0000000..fd90f2d --- /dev/null +++ b/node_modules/math-intrinsics/min.d.ts @@ -0,0 +1 @@ +export = Math.min; \ No newline at end of file diff --git a/node_modules/math-intrinsics/min.js b/node_modules/math-intrinsics/min.js new file mode 100644 index 0000000..5a4a7c7 --- /dev/null +++ b/node_modules/math-intrinsics/min.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./min')} */ +module.exports = Math.min; diff --git a/node_modules/math-intrinsics/mod.d.ts b/node_modules/math-intrinsics/mod.d.ts new file mode 100644 index 0000000..549dbd4 --- /dev/null +++ b/node_modules/math-intrinsics/mod.d.ts @@ -0,0 +1,3 @@ +declare function mod(number: number, modulo: number): number; + +export = mod; \ No newline at end of file diff --git a/node_modules/math-intrinsics/mod.js b/node_modules/math-intrinsics/mod.js new file mode 100644 index 0000000..4a98362 --- /dev/null +++ b/node_modules/math-intrinsics/mod.js @@ -0,0 +1,9 @@ +'use strict'; + +var $floor = require('./floor'); + +/** @type {import('./mod')} */ +module.exports = function mod(number, modulo) { + var remain = number % modulo; + return $floor(remain >= 0 ? remain : remain + modulo); +}; diff --git a/node_modules/math-intrinsics/package.json b/node_modules/math-intrinsics/package.json new file mode 100644 index 0000000..0676273 --- /dev/null +++ b/node_modules/math-intrinsics/package.json @@ -0,0 +1,86 @@ +{ + "name": "math-intrinsics", + "version": "1.1.0", + "description": "ES Math-related intrinsics and helpers, robustly cached.", + "main": false, + "exports": { + "./abs": "./abs.js", + "./floor": "./floor.js", + "./isFinite": "./isFinite.js", + "./isInteger": "./isInteger.js", + "./isNaN": "./isNaN.js", + "./isNegativeZero": "./isNegativeZero.js", + "./max": "./max.js", + "./min": "./min.js", + "./mod": "./mod.js", + "./pow": "./pow.js", + "./sign": "./sign.js", + "./round": "./round.js", + "./constants/maxArrayLength": "./constants/maxArrayLength.js", + "./constants/maxSafeInteger": "./constants/maxSafeInteger.js", + "./constants/maxValue": "./constants/maxValue.js", + "./package.json": "./package.json" + }, + "sideEffects": false, + "scripts": { + "prepack": "npmignore --auto --commentLines=autogenerated", + "prepublishOnly": "safe-publish-latest", + "prepublish": "not-in-publish || npm run prepublishOnly", + "pretest": "npm run lint", + "test": "npm run tests-only", + "tests-only": "nyc tape 'test/**/*.js'", + "posttest": "npx npm@'>= 10.2' audit --production", + "prelint": "evalmd README.md && eclint check $(git ls-files | xargs find 2> /dev/null | grep -vE 'node_modules|\\.git' | grep -v dist/)", + "lint": "eslint --ext=js,mjs .", + "postlint": "tsc && attw -P", + "version": "auto-changelog && git add CHANGELOG.md", + "postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\"" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/es-shims/math-intrinsics.git" + }, + "author": "Jordan Harband ", + "license": "MIT", + "bugs": { + "url": "https://github.com/es-shims/math-intrinsics/issues" + }, + "homepage": "https://github.com/es-shims/math-intrinsics#readme", + "devDependencies": { + "@arethetypeswrong/cli": "^0.17.1", + "@ljharb/eslint-config": "^21.1.1", + "@ljharb/tsconfig": "^0.2.2", + "@types/for-each": "^0.3.3", + "@types/object-inspect": "^1.13.0", + "@types/tape": "^5.8.0", + "auto-changelog": "^2.5.0", + "eclint": "^2.8.1", + "es-value-fixtures": "^1.5.0", + "eslint": "^8.8.0", + "evalmd": "^0.0.19", + "for-each": "^0.3.3", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "nyc": "^10.3.2", + "object-inspect": "^1.13.3", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0", + "typescript": "next" + }, + "auto-changelog": { + "output": "CHANGELOG.md", + "template": "keepachangelog", + "unreleased": false, + "commitLimit": false, + "backfillLimit": false, + "hideCredit": true + }, + "publishConfig": { + "ignore": [ + ".github/workflows" + ] + }, + "engines": { + "node": ">= 0.4" + } +} diff --git a/node_modules/math-intrinsics/pow.d.ts b/node_modules/math-intrinsics/pow.d.ts new file mode 100644 index 0000000..5873c44 --- /dev/null +++ b/node_modules/math-intrinsics/pow.d.ts @@ -0,0 +1 @@ +export = Math.pow; \ No newline at end of file diff --git a/node_modules/math-intrinsics/pow.js b/node_modules/math-intrinsics/pow.js new file mode 100644 index 0000000..c0a4103 --- /dev/null +++ b/node_modules/math-intrinsics/pow.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./pow')} */ +module.exports = Math.pow; diff --git a/node_modules/math-intrinsics/round.d.ts b/node_modules/math-intrinsics/round.d.ts new file mode 100644 index 0000000..da1fde3 --- /dev/null +++ b/node_modules/math-intrinsics/round.d.ts @@ -0,0 +1 @@ +export = Math.round; \ No newline at end of file diff --git a/node_modules/math-intrinsics/round.js b/node_modules/math-intrinsics/round.js new file mode 100644 index 0000000..b792156 --- /dev/null +++ b/node_modules/math-intrinsics/round.js @@ -0,0 +1,4 @@ +'use strict'; + +/** @type {import('./round')} */ +module.exports = Math.round; diff --git a/node_modules/math-intrinsics/sign.d.ts b/node_modules/math-intrinsics/sign.d.ts new file mode 100644 index 0000000..c49ceca --- /dev/null +++ b/node_modules/math-intrinsics/sign.d.ts @@ -0,0 +1,3 @@ +declare function sign(x: number): number; + +export = sign; \ No newline at end of file diff --git a/node_modules/math-intrinsics/sign.js b/node_modules/math-intrinsics/sign.js new file mode 100644 index 0000000..9e5173c --- /dev/null +++ b/node_modules/math-intrinsics/sign.js @@ -0,0 +1,11 @@ +'use strict'; + +var $isNaN = require('./isNaN'); + +/** @type {import('./sign')} */ +module.exports = function sign(number) { + if ($isNaN(number) || number === 0) { + return number; + } + return number < 0 ? -1 : +1; +}; diff --git a/node_modules/math-intrinsics/test/index.js b/node_modules/math-intrinsics/test/index.js new file mode 100644 index 0000000..0f90a5d --- /dev/null +++ b/node_modules/math-intrinsics/test/index.js @@ -0,0 +1,192 @@ +'use strict'; + +var test = require('tape'); +var v = require('es-value-fixtures'); +var forEach = require('for-each'); +var inspect = require('object-inspect'); + +var abs = require('../abs'); +var floor = require('../floor'); +var isFinite = require('../isFinite'); +var isInteger = require('../isInteger'); +var isNaN = require('../isNaN'); +var isNegativeZero = require('../isNegativeZero'); +var max = require('../max'); +var min = require('../min'); +var mod = require('../mod'); +var pow = require('../pow'); +var round = require('../round'); +var sign = require('../sign'); + +var maxArrayLength = require('../constants/maxArrayLength'); +var maxSafeInteger = require('../constants/maxSafeInteger'); +var maxValue = require('../constants/maxValue'); + +test('abs', function (t) { + t.equal(abs(-1), 1, 'abs(-1) === 1'); + t.equal(abs(+1), 1, 'abs(+1) === 1'); + t.equal(abs(+0), +0, 'abs(+0) === +0'); + t.equal(abs(-0), +0, 'abs(-0) === +0'); + + t.end(); +}); + +test('floor', function (t) { + t.equal(floor(-1.1), -2, 'floor(-1.1) === -2'); + t.equal(floor(+1.1), 1, 'floor(+1.1) === 1'); + t.equal(floor(+0), +0, 'floor(+0) === +0'); + t.equal(floor(-0), -0, 'floor(-0) === -0'); + t.equal(floor(-Infinity), -Infinity, 'floor(-Infinity) === -Infinity'); + t.equal(floor(Number(Infinity)), Number(Infinity), 'floor(+Infinity) === +Infinity'); + t.equal(floor(NaN), NaN, 'floor(NaN) === NaN'); + t.equal(floor(0), +0, 'floor(0) === +0'); + t.equal(floor(-0), -0, 'floor(-0) === -0'); + t.equal(floor(1), 1, 'floor(1) === 1'); + t.equal(floor(-1), -1, 'floor(-1) === -1'); + t.equal(floor(1.1), 1, 'floor(1.1) === 1'); + t.equal(floor(-1.1), -2, 'floor(-1.1) === -2'); + t.equal(floor(maxValue), maxValue, 'floor(maxValue) === maxValue'); + t.equal(floor(maxSafeInteger), maxSafeInteger, 'floor(maxSafeInteger) === maxSafeInteger'); + + t.end(); +}); + +test('isFinite', function (t) { + t.equal(isFinite(0), true, 'isFinite(+0) === true'); + t.equal(isFinite(-0), true, 'isFinite(-0) === true'); + t.equal(isFinite(1), true, 'isFinite(1) === true'); + t.equal(isFinite(Infinity), false, 'isFinite(Infinity) === false'); + t.equal(isFinite(-Infinity), false, 'isFinite(-Infinity) === false'); + t.equal(isFinite(NaN), false, 'isFinite(NaN) === false'); + + forEach(v.nonNumbers, function (nonNumber) { + t.equal(isFinite(nonNumber), false, 'isFinite(' + inspect(nonNumber) + ') === false'); + }); + + t.end(); +}); + +test('isInteger', function (t) { + forEach([].concat( + // @ts-expect-error TS sucks with concat + v.nonNumbers, + v.nonIntegerNumbers + ), function (nonInteger) { + t.equal(isInteger(nonInteger), false, 'isInteger(' + inspect(nonInteger) + ') === false'); + }); + + t.end(); +}); + +test('isNaN', function (t) { + forEach([].concat( + // @ts-expect-error TS sucks with concat + v.nonNumbers, + v.infinities, + v.zeroes, + v.integerNumbers + ), function (nonNaN) { + t.equal(isNaN(nonNaN), false, 'isNaN(' + inspect(nonNaN) + ') === false'); + }); + + t.equal(isNaN(NaN), true, 'isNaN(NaN) === true'); + + t.end(); +}); + +test('isNegativeZero', function (t) { + t.equal(isNegativeZero(-0), true, 'isNegativeZero(-0) === true'); + t.equal(isNegativeZero(+0), false, 'isNegativeZero(+0) === false'); + t.equal(isNegativeZero(1), false, 'isNegativeZero(1) === false'); + t.equal(isNegativeZero(-1), false, 'isNegativeZero(-1) === false'); + t.equal(isNegativeZero(NaN), false, 'isNegativeZero(NaN) === false'); + t.equal(isNegativeZero(Infinity), false, 'isNegativeZero(Infinity) === false'); + t.equal(isNegativeZero(-Infinity), false, 'isNegativeZero(-Infinity) === false'); + + forEach(v.nonNumbers, function (nonNumber) { + t.equal(isNegativeZero(nonNumber), false, 'isNegativeZero(' + inspect(nonNumber) + ') === false'); + }); + + t.end(); +}); + +test('max', function (t) { + t.equal(max(1, 2), 2, 'max(1, 2) === 2'); + t.equal(max(1, 2, 3), 3, 'max(1, 2, 3) === 3'); + t.equal(max(1, 2, 3, 4), 4, 'max(1, 2, 3, 4) === 4'); + t.equal(max(1, 2, 3, 4, 5), 5, 'max(1, 2, 3, 4, 5) === 5'); + t.equal(max(1, 2, 3, 4, 5, 6), 6, 'max(1, 2, 3, 4, 5, 6) === 6'); + t.equal(max(1, 2, 3, 4, 5, 6, 7), 7, 'max(1, 2, 3, 4, 5, 6, 7) === 7'); + + t.end(); +}); + +test('min', function (t) { + t.equal(min(1, 2), 1, 'min(1, 2) === 1'); + t.equal(min(1, 2, 3), 1, 'min(1, 2, 3) === 1'); + t.equal(min(1, 2, 3, 4), 1, 'min(1, 2, 3, 4) === 1'); + t.equal(min(1, 2, 3, 4, 5), 1, 'min(1, 2, 3, 4, 5) === 1'); + t.equal(min(1, 2, 3, 4, 5, 6), 1, 'min(1, 2, 3, 4, 5, 6) === 1'); + + t.end(); +}); + +test('mod', function (t) { + t.equal(mod(1, 2), 1, 'mod(1, 2) === 1'); + t.equal(mod(2, 2), 0, 'mod(2, 2) === 0'); + t.equal(mod(3, 2), 1, 'mod(3, 2) === 1'); + t.equal(mod(4, 2), 0, 'mod(4, 2) === 0'); + t.equal(mod(5, 2), 1, 'mod(5, 2) === 1'); + t.equal(mod(6, 2), 0, 'mod(6, 2) === 0'); + t.equal(mod(7, 2), 1, 'mod(7, 2) === 1'); + t.equal(mod(8, 2), 0, 'mod(8, 2) === 0'); + t.equal(mod(9, 2), 1, 'mod(9, 2) === 1'); + t.equal(mod(10, 2), 0, 'mod(10, 2) === 0'); + t.equal(mod(11, 2), 1, 'mod(11, 2) === 1'); + + t.end(); +}); + +test('pow', function (t) { + t.equal(pow(2, 2), 4, 'pow(2, 2) === 4'); + t.equal(pow(2, 3), 8, 'pow(2, 3) === 8'); + t.equal(pow(2, 4), 16, 'pow(2, 4) === 16'); + t.equal(pow(2, 5), 32, 'pow(2, 5) === 32'); + t.equal(pow(2, 6), 64, 'pow(2, 6) === 64'); + t.equal(pow(2, 7), 128, 'pow(2, 7) === 128'); + t.equal(pow(2, 8), 256, 'pow(2, 8) === 256'); + t.equal(pow(2, 9), 512, 'pow(2, 9) === 512'); + t.equal(pow(2, 10), 1024, 'pow(2, 10) === 1024'); + + t.end(); +}); + +test('round', function (t) { + t.equal(round(1.1), 1, 'round(1.1) === 1'); + t.equal(round(1.5), 2, 'round(1.5) === 2'); + t.equal(round(1.9), 2, 'round(1.9) === 2'); + + t.end(); +}); + +test('sign', function (t) { + t.equal(sign(-1), -1, 'sign(-1) === -1'); + t.equal(sign(+1), +1, 'sign(+1) === +1'); + t.equal(sign(+0), +0, 'sign(+0) === +0'); + t.equal(sign(-0), -0, 'sign(-0) === -0'); + t.equal(sign(NaN), NaN, 'sign(NaN) === NaN'); + t.equal(sign(Infinity), +1, 'sign(Infinity) === +1'); + t.equal(sign(-Infinity), -1, 'sign(-Infinity) === -1'); + t.equal(sign(maxValue), +1, 'sign(maxValue) === +1'); + t.equal(sign(maxSafeInteger), +1, 'sign(maxSafeInteger) === +1'); + + t.end(); +}); + +test('constants', function (t) { + t.equal(typeof maxArrayLength, 'number', 'typeof maxArrayLength === "number"'); + t.equal(typeof maxSafeInteger, 'number', 'typeof maxSafeInteger === "number"'); + t.equal(typeof maxValue, 'number', 'typeof maxValue === "number"'); + + t.end(); +}); diff --git a/node_modules/math-intrinsics/tsconfig.json b/node_modules/math-intrinsics/tsconfig.json new file mode 100644 index 0000000..b131000 --- /dev/null +++ b/node_modules/math-intrinsics/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "@ljharb/tsconfig", +} diff --git a/node_modules/mime-db/HISTORY.md b/node_modules/mime-db/HISTORY.md new file mode 100644 index 0000000..7436f64 --- /dev/null +++ b/node_modules/mime-db/HISTORY.md @@ -0,0 +1,507 @@ +1.52.0 / 2022-02-21 +=================== + + * Add extensions from IANA for more `image/*` types + * Add extension `.asc` to `application/pgp-keys` + * Add extensions to various XML types + * Add new upstream MIME types + +1.51.0 / 2021-11-08 +=================== + + * Add new upstream MIME types + * Mark `image/vnd.microsoft.icon` as compressible + * Mark `image/vnd.ms-dds` as compressible + +1.50.0 / 2021-09-15 +=================== + + * Add deprecated iWorks mime types and extensions + * Add new upstream MIME types + +1.49.0 / 2021-07-26 +=================== + + * Add extension `.trig` to `application/trig` + * Add new upstream MIME types + +1.48.0 / 2021-05-30 +=================== + + * Add extension `.mvt` to `application/vnd.mapbox-vector-tile` + * Add new upstream MIME types + * Mark `text/yaml` as compressible + +1.47.0 / 2021-04-01 +=================== + + * Add new upstream MIME types + * Remove ambigious extensions from IANA for `application/*+xml` types + * Update primary extension to `.es` for `application/ecmascript` + +1.46.0 / 2021-02-13 +=================== + + * Add extension `.amr` to `audio/amr` + * Add extension `.m4s` to `video/iso.segment` + * Add extension `.opus` to `audio/ogg` + * Add new upstream MIME types + +1.45.0 / 2020-09-22 +=================== + + * Add `application/ubjson` with extension `.ubj` + * Add `image/avif` with extension `.avif` + * Add `image/ktx2` with extension `.ktx2` + * Add extension `.dbf` to `application/vnd.dbf` + * Add extension `.rar` to `application/vnd.rar` + * Add extension `.td` to `application/urc-targetdesc+xml` + * Add new upstream MIME types + * Fix extension of `application/vnd.apple.keynote` to be `.key` + +1.44.0 / 2020-04-22 +=================== + + * Add charsets from IANA + * Add extension `.cjs` to `application/node` + * Add new upstream MIME types + +1.43.0 / 2020-01-05 +=================== + + * Add `application/x-keepass2` with extension `.kdbx` + * Add extension `.mxmf` to `audio/mobile-xmf` + * Add extensions from IANA for `application/*+xml` types + * Add new upstream MIME types + +1.42.0 / 2019-09-25 +=================== + + * Add `image/vnd.ms-dds` with extension `.dds` + * Add new upstream MIME types + * Remove compressible from `multipart/mixed` + +1.41.0 / 2019-08-30 +=================== + + * Add new upstream MIME types + * Add `application/toml` with extension `.toml` + * Mark `font/ttf` as compressible + +1.40.0 / 2019-04-20 +=================== + + * Add extensions from IANA for `model/*` types + * Add `text/mdx` with extension `.mdx` + +1.39.0 / 2019-04-04 +=================== + + * Add extensions `.siv` and `.sieve` to `application/sieve` + * Add new upstream MIME types + +1.38.0 / 2019-02-04 +=================== + + * Add extension `.nq` to `application/n-quads` + * Add extension `.nt` to `application/n-triples` + * Add new upstream MIME types + * Mark `text/less` as compressible + +1.37.0 / 2018-10-19 +=================== + + * Add extensions to HEIC image types + * Add new upstream MIME types + +1.36.0 / 2018-08-20 +=================== + + * Add Apple file extensions from IANA + * Add extensions from IANA for `image/*` types + * Add new upstream MIME types + +1.35.0 / 2018-07-15 +=================== + + * Add extension `.owl` to `application/rdf+xml` + * Add new upstream MIME types + - Removes extension `.woff` from `application/font-woff` + +1.34.0 / 2018-06-03 +=================== + + * Add extension `.csl` to `application/vnd.citationstyles.style+xml` + * Add extension `.es` to `application/ecmascript` + * Add new upstream MIME types + * Add `UTF-8` as default charset for `text/turtle` + * Mark all XML-derived types as compressible + +1.33.0 / 2018-02-15 +=================== + + * Add extensions from IANA for `message/*` types + * Add new upstream MIME types + * Fix some incorrect OOXML types + * Remove `application/font-woff2` + +1.32.0 / 2017-11-29 +=================== + + * Add new upstream MIME types + * Update `text/hjson` to registered `application/hjson` + * Add `text/shex` with extension `.shex` + +1.31.0 / 2017-10-25 +=================== + + * Add `application/raml+yaml` with extension `.raml` + * Add `application/wasm` with extension `.wasm` + * Add new `font` type from IANA + * Add new upstream font extensions + * Add new upstream MIME types + * Add extensions for JPEG-2000 images + +1.30.0 / 2017-08-27 +=================== + + * Add `application/vnd.ms-outlook` + * Add `application/x-arj` + * Add extension `.mjs` to `application/javascript` + * Add glTF types and extensions + * Add new upstream MIME types + * Add `text/x-org` + * Add VirtualBox MIME types + * Fix `source` records for `video/*` types that are IANA + * Update `font/opentype` to registered `font/otf` + +1.29.0 / 2017-07-10 +=================== + + * Add `application/fido.trusted-apps+json` + * Add extension `.wadl` to `application/vnd.sun.wadl+xml` + * Add new upstream MIME types + * Add `UTF-8` as default charset for `text/css` + +1.28.0 / 2017-05-14 +=================== + + * Add new upstream MIME types + * Add extension `.gz` to `application/gzip` + * Update extensions `.md` and `.markdown` to be `text/markdown` + +1.27.0 / 2017-03-16 +=================== + + * Add new upstream MIME types + * Add `image/apng` with extension `.apng` + +1.26.0 / 2017-01-14 +=================== + + * Add new upstream MIME types + * Add extension `.geojson` to `application/geo+json` + +1.25.0 / 2016-11-11 +=================== + + * Add new upstream MIME types + +1.24.0 / 2016-09-18 +=================== + + * Add `audio/mp3` + * Add new upstream MIME types + +1.23.0 / 2016-05-01 +=================== + + * Add new upstream MIME types + * Add extension `.3gpp` to `audio/3gpp` + +1.22.0 / 2016-02-15 +=================== + + * Add `text/slim` + * Add extension `.rng` to `application/xml` + * Add new upstream MIME types + * Fix extension of `application/dash+xml` to be `.mpd` + * Update primary extension to `.m4a` for `audio/mp4` + +1.21.0 / 2016-01-06 +=================== + + * Add Google document types + * Add new upstream MIME types + +1.20.0 / 2015-11-10 +=================== + + * Add `text/x-suse-ymp` + * Add new upstream MIME types + +1.19.0 / 2015-09-17 +=================== + + * Add `application/vnd.apple.pkpass` + * Add new upstream MIME types + +1.18.0 / 2015-09-03 +=================== + + * Add new upstream MIME types + +1.17.0 / 2015-08-13 +=================== + + * Add `application/x-msdos-program` + * Add `audio/g711-0` + * Add `image/vnd.mozilla.apng` + * Add extension `.exe` to `application/x-msdos-program` + +1.16.0 / 2015-07-29 +=================== + + * Add `application/vnd.uri-map` + +1.15.0 / 2015-07-13 +=================== + + * Add `application/x-httpd-php` + +1.14.0 / 2015-06-25 +=================== + + * Add `application/scim+json` + * Add `application/vnd.3gpp.ussd+xml` + * Add `application/vnd.biopax.rdf+xml` + * Add `text/x-processing` + +1.13.0 / 2015-06-07 +=================== + + * Add nginx as a source + * Add `application/x-cocoa` + * Add `application/x-java-archive-diff` + * Add `application/x-makeself` + * Add `application/x-perl` + * Add `application/x-pilot` + * Add `application/x-redhat-package-manager` + * Add `application/x-sea` + * Add `audio/x-m4a` + * Add `audio/x-realaudio` + * Add `image/x-jng` + * Add `text/mathml` + +1.12.0 / 2015-06-05 +=================== + + * Add `application/bdoc` + * Add `application/vnd.hyperdrive+json` + * Add `application/x-bdoc` + * Add extension `.rtf` to `text/rtf` + +1.11.0 / 2015-05-31 +=================== + + * Add `audio/wav` + * Add `audio/wave` + * Add extension `.litcoffee` to `text/coffeescript` + * Add extension `.sfd-hdstx` to `application/vnd.hydrostatix.sof-data` + * Add extension `.n-gage` to `application/vnd.nokia.n-gage.symbian.install` + +1.10.0 / 2015-05-19 +=================== + + * Add `application/vnd.balsamiq.bmpr` + * Add `application/vnd.microsoft.portable-executable` + * Add `application/x-ns-proxy-autoconfig` + +1.9.1 / 2015-04-19 +================== + + * Remove `.json` extension from `application/manifest+json` + - This is causing bugs downstream + +1.9.0 / 2015-04-19 +================== + + * Add `application/manifest+json` + * Add `application/vnd.micro+json` + * Add `image/vnd.zbrush.pcx` + * Add `image/x-ms-bmp` + +1.8.0 / 2015-03-13 +================== + + * Add `application/vnd.citationstyles.style+xml` + * Add `application/vnd.fastcopy-disk-image` + * Add `application/vnd.gov.sk.xmldatacontainer+xml` + * Add extension `.jsonld` to `application/ld+json` + +1.7.0 / 2015-02-08 +================== + + * Add `application/vnd.gerber` + * Add `application/vnd.msa-disk-image` + +1.6.1 / 2015-02-05 +================== + + * Community extensions ownership transferred from `node-mime` + +1.6.0 / 2015-01-29 +================== + + * Add `application/jose` + * Add `application/jose+json` + * Add `application/json-seq` + * Add `application/jwk+json` + * Add `application/jwk-set+json` + * Add `application/jwt` + * Add `application/rdap+json` + * Add `application/vnd.gov.sk.e-form+xml` + * Add `application/vnd.ims.imsccv1p3` + +1.5.0 / 2014-12-30 +================== + + * Add `application/vnd.oracle.resource+json` + * Fix various invalid MIME type entries + - `application/mbox+xml` + - `application/oscp-response` + - `application/vwg-multiplexed` + - `audio/g721` + +1.4.0 / 2014-12-21 +================== + + * Add `application/vnd.ims.imsccv1p2` + * Fix various invalid MIME type entries + - `application/vnd-acucobol` + - `application/vnd-curl` + - `application/vnd-dart` + - `application/vnd-dxr` + - `application/vnd-fdf` + - `application/vnd-mif` + - `application/vnd-sema` + - `application/vnd-wap-wmlc` + - `application/vnd.adobe.flash-movie` + - `application/vnd.dece-zip` + - `application/vnd.dvb_service` + - `application/vnd.micrografx-igx` + - `application/vnd.sealed-doc` + - `application/vnd.sealed-eml` + - `application/vnd.sealed-mht` + - `application/vnd.sealed-ppt` + - `application/vnd.sealed-tiff` + - `application/vnd.sealed-xls` + - `application/vnd.sealedmedia.softseal-html` + - `application/vnd.sealedmedia.softseal-pdf` + - `application/vnd.wap-slc` + - `application/vnd.wap-wbxml` + - `audio/vnd.sealedmedia.softseal-mpeg` + - `image/vnd-djvu` + - `image/vnd-svf` + - `image/vnd-wap-wbmp` + - `image/vnd.sealed-png` + - `image/vnd.sealedmedia.softseal-gif` + - `image/vnd.sealedmedia.softseal-jpg` + - `model/vnd-dwf` + - `model/vnd.parasolid.transmit-binary` + - `model/vnd.parasolid.transmit-text` + - `text/vnd-a` + - `text/vnd-curl` + - `text/vnd.wap-wml` + * Remove example template MIME types + - `application/example` + - `audio/example` + - `image/example` + - `message/example` + - `model/example` + - `multipart/example` + - `text/example` + - `video/example` + +1.3.1 / 2014-12-16 +================== + + * Fix missing extensions + - `application/json5` + - `text/hjson` + +1.3.0 / 2014-12-07 +================== + + * Add `application/a2l` + * Add `application/aml` + * Add `application/atfx` + * Add `application/atxml` + * Add `application/cdfx+xml` + * Add `application/dii` + * Add `application/json5` + * Add `application/lxf` + * Add `application/mf4` + * Add `application/vnd.apache.thrift.compact` + * Add `application/vnd.apache.thrift.json` + * Add `application/vnd.coffeescript` + * Add `application/vnd.enphase.envoy` + * Add `application/vnd.ims.imsccv1p1` + * Add `text/csv-schema` + * Add `text/hjson` + * Add `text/markdown` + * Add `text/yaml` + +1.2.0 / 2014-11-09 +================== + + * Add `application/cea` + * Add `application/dit` + * Add `application/vnd.gov.sk.e-form+zip` + * Add `application/vnd.tmd.mediaflex.api+xml` + * Type `application/epub+zip` is now IANA-registered + +1.1.2 / 2014-10-23 +================== + + * Rebuild database for `application/x-www-form-urlencoded` change + +1.1.1 / 2014-10-20 +================== + + * Mark `application/x-www-form-urlencoded` as compressible. + +1.1.0 / 2014-09-28 +================== + + * Add `application/font-woff2` + +1.0.3 / 2014-09-25 +================== + + * Fix engine requirement in package + +1.0.2 / 2014-09-25 +================== + + * Add `application/coap-group+json` + * Add `application/dcd` + * Add `application/vnd.apache.thrift.binary` + * Add `image/vnd.tencent.tap` + * Mark all JSON-derived types as compressible + * Update `text/vtt` data + +1.0.1 / 2014-08-30 +================== + + * Fix extension ordering + +1.0.0 / 2014-08-30 +================== + + * Add `application/atf` + * Add `application/merge-patch+json` + * Add `multipart/x-mixed-replace` + * Add `source: 'apache'` metadata + * Add `source: 'iana'` metadata + * Remove badly-assumed charset data diff --git a/node_modules/mime-db/LICENSE b/node_modules/mime-db/LICENSE new file mode 100644 index 0000000..0751cb1 --- /dev/null +++ b/node_modules/mime-db/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015-2022 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/mime-db/README.md b/node_modules/mime-db/README.md new file mode 100644 index 0000000..5a8fcfe --- /dev/null +++ b/node_modules/mime-db/README.md @@ -0,0 +1,100 @@ +# mime-db + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-image]][node-url] +[![Build Status][ci-image]][ci-url] +[![Coverage Status][coveralls-image]][coveralls-url] + +This is a large database of mime types and information about them. +It consists of a single, public JSON file and does not include any logic, +allowing it to remain as un-opinionated as possible with an API. +It aggregates data from the following sources: + +- http://www.iana.org/assignments/media-types/media-types.xhtml +- http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types +- http://hg.nginx.org/nginx/raw-file/default/conf/mime.types + +## Installation + +```bash +npm install mime-db +``` + +### Database Download + +If you're crazy enough to use this in the browser, you can just grab the +JSON file using [jsDelivr](https://www.jsdelivr.com/). It is recommended to +replace `master` with [a release tag](https://github.com/jshttp/mime-db/tags) +as the JSON format may change in the future. + +``` +https://cdn.jsdelivr.net/gh/jshttp/mime-db@master/db.json +``` + +## Usage + +```js +var db = require('mime-db') + +// grab data on .js files +var data = db['application/javascript'] +``` + +## Data Structure + +The JSON file is a map lookup for lowercased mime types. +Each mime type has the following properties: + +- `.source` - where the mime type is defined. + If not set, it's probably a custom media type. + - `apache` - [Apache common media types](http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types) + - `iana` - [IANA-defined media types](http://www.iana.org/assignments/media-types/media-types.xhtml) + - `nginx` - [nginx media types](http://hg.nginx.org/nginx/raw-file/default/conf/mime.types) +- `.extensions[]` - known extensions associated with this mime type. +- `.compressible` - whether a file of this type can be gzipped. +- `.charset` - the default charset associated with this type, if any. + +If unknown, every property could be `undefined`. + +## Contributing + +To edit the database, only make PRs against `src/custom-types.json` or +`src/custom-suffix.json`. + +The `src/custom-types.json` file is a JSON object with the MIME type as the +keys and the values being an object with the following keys: + +- `compressible` - leave out if you don't know, otherwise `true`/`false` to + indicate whether the data represented by the type is typically compressible. +- `extensions` - include an array of file extensions that are associated with + the type. +- `notes` - human-readable notes about the type, typically what the type is. +- `sources` - include an array of URLs of where the MIME type and the associated + extensions are sourced from. This needs to be a [primary source](https://en.wikipedia.org/wiki/Primary_source); + links to type aggregating sites and Wikipedia are _not acceptable_. + +To update the build, run `npm run build`. + +### Adding Custom Media Types + +The best way to get new media types included in this library is to register +them with the IANA. The community registration procedure is outlined in +[RFC 6838 section 5](http://tools.ietf.org/html/rfc6838#section-5). Types +registered with the IANA are automatically pulled into this library. + +If that is not possible / feasible, they can be added directly here as a +"custom" type. To do this, it is required to have a primary source that +definitively lists the media type. If an extension is going to be listed as +associateed with this media type, the source must definitively link the +media type and extension as well. + +[ci-image]: https://badgen.net/github/checks/jshttp/mime-db/master?label=ci +[ci-url]: https://github.com/jshttp/mime-db/actions?query=workflow%3Aci +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-db/master +[coveralls-url]: https://coveralls.io/r/jshttp/mime-db?branch=master +[node-image]: https://badgen.net/npm/node/mime-db +[node-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/mime-db +[npm-url]: https://npmjs.org/package/mime-db +[npm-version-image]: https://badgen.net/npm/v/mime-db diff --git a/node_modules/mime-db/db.json b/node_modules/mime-db/db.json new file mode 100644 index 0000000..eb9c42c --- /dev/null +++ b/node_modules/mime-db/db.json @@ -0,0 +1,8519 @@ +{ + "application/1d-interleaved-parityfec": { + "source": "iana" + }, + "application/3gpdash-qoe-report+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/3gpp-ims+xml": { + "source": "iana", + "compressible": true + }, + "application/3gpphal+json": { + "source": "iana", + "compressible": true + }, + "application/3gpphalforms+json": { + "source": "iana", + "compressible": true + }, + "application/a2l": { + "source": "iana" + }, + "application/ace+cbor": { + "source": "iana" + }, + "application/activemessage": { + "source": "iana" + }, + "application/activity+json": { + "source": "iana", + "compressible": true + }, + "application/alto-costmap+json": { + "source": "iana", + "compressible": true + }, + "application/alto-costmapfilter+json": { + "source": "iana", + "compressible": true + }, + "application/alto-directory+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointcost+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointcostparams+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointprop+json": { + "source": "iana", + "compressible": true + }, + "application/alto-endpointpropparams+json": { + "source": "iana", + "compressible": true + }, + "application/alto-error+json": { + "source": "iana", + "compressible": true + }, + "application/alto-networkmap+json": { + "source": "iana", + "compressible": true + }, + "application/alto-networkmapfilter+json": { + "source": "iana", + "compressible": true + }, + "application/alto-updatestreamcontrol+json": { + "source": "iana", + "compressible": true + }, + "application/alto-updatestreamparams+json": { + "source": "iana", + "compressible": true + }, + "application/aml": { + "source": "iana" + }, + "application/andrew-inset": { + "source": "iana", + "extensions": ["ez"] + }, + "application/applefile": { + "source": "iana" + }, + "application/applixware": { + "source": "apache", + "extensions": ["aw"] + }, + "application/at+jwt": { + "source": "iana" + }, + "application/atf": { + "source": "iana" + }, + "application/atfx": { + "source": "iana" + }, + "application/atom+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atom"] + }, + "application/atomcat+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomcat"] + }, + "application/atomdeleted+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomdeleted"] + }, + "application/atomicmail": { + "source": "iana" + }, + "application/atomsvc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["atomsvc"] + }, + "application/atsc-dwd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dwd"] + }, + "application/atsc-dynamic-event-message": { + "source": "iana" + }, + "application/atsc-held+xml": { + "source": "iana", + "compressible": true, + "extensions": ["held"] + }, + "application/atsc-rdt+json": { + "source": "iana", + "compressible": true + }, + "application/atsc-rsat+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rsat"] + }, + "application/atxml": { + "source": "iana" + }, + "application/auth-policy+xml": { + "source": "iana", + "compressible": true + }, + "application/bacnet-xdd+zip": { + "source": "iana", + "compressible": false + }, + "application/batch-smtp": { + "source": "iana" + }, + "application/bdoc": { + "compressible": false, + "extensions": ["bdoc"] + }, + "application/beep+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/calendar+json": { + "source": "iana", + "compressible": true + }, + "application/calendar+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xcs"] + }, + "application/call-completion": { + "source": "iana" + }, + "application/cals-1840": { + "source": "iana" + }, + "application/captive+json": { + "source": "iana", + "compressible": true + }, + "application/cbor": { + "source": "iana" + }, + "application/cbor-seq": { + "source": "iana" + }, + "application/cccex": { + "source": "iana" + }, + "application/ccmp+xml": { + "source": "iana", + "compressible": true + }, + "application/ccxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ccxml"] + }, + "application/cdfx+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cdfx"] + }, + "application/cdmi-capability": { + "source": "iana", + "extensions": ["cdmia"] + }, + "application/cdmi-container": { + "source": "iana", + "extensions": ["cdmic"] + }, + "application/cdmi-domain": { + "source": "iana", + "extensions": ["cdmid"] + }, + "application/cdmi-object": { + "source": "iana", + "extensions": ["cdmio"] + }, + "application/cdmi-queue": { + "source": "iana", + "extensions": ["cdmiq"] + }, + "application/cdni": { + "source": "iana" + }, + "application/cea": { + "source": "iana" + }, + "application/cea-2018+xml": { + "source": "iana", + "compressible": true + }, + "application/cellml+xml": { + "source": "iana", + "compressible": true + }, + "application/cfw": { + "source": "iana" + }, + "application/city+json": { + "source": "iana", + "compressible": true + }, + "application/clr": { + "source": "iana" + }, + "application/clue+xml": { + "source": "iana", + "compressible": true + }, + "application/clue_info+xml": { + "source": "iana", + "compressible": true + }, + "application/cms": { + "source": "iana" + }, + "application/cnrp+xml": { + "source": "iana", + "compressible": true + }, + "application/coap-group+json": { + "source": "iana", + "compressible": true + }, + "application/coap-payload": { + "source": "iana" + }, + "application/commonground": { + "source": "iana" + }, + "application/conference-info+xml": { + "source": "iana", + "compressible": true + }, + "application/cose": { + "source": "iana" + }, + "application/cose-key": { + "source": "iana" + }, + "application/cose-key-set": { + "source": "iana" + }, + "application/cpl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cpl"] + }, + "application/csrattrs": { + "source": "iana" + }, + "application/csta+xml": { + "source": "iana", + "compressible": true + }, + "application/cstadata+xml": { + "source": "iana", + "compressible": true + }, + "application/csvm+json": { + "source": "iana", + "compressible": true + }, + "application/cu-seeme": { + "source": "apache", + "extensions": ["cu"] + }, + "application/cwt": { + "source": "iana" + }, + "application/cybercash": { + "source": "iana" + }, + "application/dart": { + "compressible": true + }, + "application/dash+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpd"] + }, + "application/dash-patch+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpp"] + }, + "application/dashdelta": { + "source": "iana" + }, + "application/davmount+xml": { + "source": "iana", + "compressible": true, + "extensions": ["davmount"] + }, + "application/dca-rft": { + "source": "iana" + }, + "application/dcd": { + "source": "iana" + }, + "application/dec-dx": { + "source": "iana" + }, + "application/dialog-info+xml": { + "source": "iana", + "compressible": true + }, + "application/dicom": { + "source": "iana" + }, + "application/dicom+json": { + "source": "iana", + "compressible": true + }, + "application/dicom+xml": { + "source": "iana", + "compressible": true + }, + "application/dii": { + "source": "iana" + }, + "application/dit": { + "source": "iana" + }, + "application/dns": { + "source": "iana" + }, + "application/dns+json": { + "source": "iana", + "compressible": true + }, + "application/dns-message": { + "source": "iana" + }, + "application/docbook+xml": { + "source": "apache", + "compressible": true, + "extensions": ["dbk"] + }, + "application/dots+cbor": { + "source": "iana" + }, + "application/dskpp+xml": { + "source": "iana", + "compressible": true + }, + "application/dssc+der": { + "source": "iana", + "extensions": ["dssc"] + }, + "application/dssc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdssc"] + }, + "application/dvcs": { + "source": "iana" + }, + "application/ecmascript": { + "source": "iana", + "compressible": true, + "extensions": ["es","ecma"] + }, + "application/edi-consent": { + "source": "iana" + }, + "application/edi-x12": { + "source": "iana", + "compressible": false + }, + "application/edifact": { + "source": "iana", + "compressible": false + }, + "application/efi": { + "source": "iana" + }, + "application/elm+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/elm+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.cap+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/emergencycalldata.comment+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.control+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.deviceinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.ecall.msd": { + "source": "iana" + }, + "application/emergencycalldata.providerinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.serviceinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.subscriberinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/emergencycalldata.veds+xml": { + "source": "iana", + "compressible": true + }, + "application/emma+xml": { + "source": "iana", + "compressible": true, + "extensions": ["emma"] + }, + "application/emotionml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["emotionml"] + }, + "application/encaprtp": { + "source": "iana" + }, + "application/epp+xml": { + "source": "iana", + "compressible": true + }, + "application/epub+zip": { + "source": "iana", + "compressible": false, + "extensions": ["epub"] + }, + "application/eshop": { + "source": "iana" + }, + "application/exi": { + "source": "iana", + "extensions": ["exi"] + }, + "application/expect-ct-report+json": { + "source": "iana", + "compressible": true + }, + "application/express": { + "source": "iana", + "extensions": ["exp"] + }, + "application/fastinfoset": { + "source": "iana" + }, + "application/fastsoap": { + "source": "iana" + }, + "application/fdt+xml": { + "source": "iana", + "compressible": true, + "extensions": ["fdt"] + }, + "application/fhir+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/fhir+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/fido.trusted-apps+json": { + "compressible": true + }, + "application/fits": { + "source": "iana" + }, + "application/flexfec": { + "source": "iana" + }, + "application/font-sfnt": { + "source": "iana" + }, + "application/font-tdpfr": { + "source": "iana", + "extensions": ["pfr"] + }, + "application/font-woff": { + "source": "iana", + "compressible": false + }, + "application/framework-attributes+xml": { + "source": "iana", + "compressible": true + }, + "application/geo+json": { + "source": "iana", + "compressible": true, + "extensions": ["geojson"] + }, + "application/geo+json-seq": { + "source": "iana" + }, + "application/geopackage+sqlite3": { + "source": "iana" + }, + "application/geoxacml+xml": { + "source": "iana", + "compressible": true + }, + "application/gltf-buffer": { + "source": "iana" + }, + "application/gml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["gml"] + }, + "application/gpx+xml": { + "source": "apache", + "compressible": true, + "extensions": ["gpx"] + }, + "application/gxf": { + "source": "apache", + "extensions": ["gxf"] + }, + "application/gzip": { + "source": "iana", + "compressible": false, + "extensions": ["gz"] + }, + "application/h224": { + "source": "iana" + }, + "application/held+xml": { + "source": "iana", + "compressible": true + }, + "application/hjson": { + "extensions": ["hjson"] + }, + "application/http": { + "source": "iana" + }, + "application/hyperstudio": { + "source": "iana", + "extensions": ["stk"] + }, + "application/ibe-key-request+xml": { + "source": "iana", + "compressible": true + }, + "application/ibe-pkg-reply+xml": { + "source": "iana", + "compressible": true + }, + "application/ibe-pp-data": { + "source": "iana" + }, + "application/iges": { + "source": "iana" + }, + "application/im-iscomposing+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/index": { + "source": "iana" + }, + "application/index.cmd": { + "source": "iana" + }, + "application/index.obj": { + "source": "iana" + }, + "application/index.response": { + "source": "iana" + }, + "application/index.vnd": { + "source": "iana" + }, + "application/inkml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ink","inkml"] + }, + "application/iotp": { + "source": "iana" + }, + "application/ipfix": { + "source": "iana", + "extensions": ["ipfix"] + }, + "application/ipp": { + "source": "iana" + }, + "application/isup": { + "source": "iana" + }, + "application/its+xml": { + "source": "iana", + "compressible": true, + "extensions": ["its"] + }, + "application/java-archive": { + "source": "apache", + "compressible": false, + "extensions": ["jar","war","ear"] + }, + "application/java-serialized-object": { + "source": "apache", + "compressible": false, + "extensions": ["ser"] + }, + "application/java-vm": { + "source": "apache", + "compressible": false, + "extensions": ["class"] + }, + "application/javascript": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["js","mjs"] + }, + "application/jf2feed+json": { + "source": "iana", + "compressible": true + }, + "application/jose": { + "source": "iana" + }, + "application/jose+json": { + "source": "iana", + "compressible": true + }, + "application/jrd+json": { + "source": "iana", + "compressible": true + }, + "application/jscalendar+json": { + "source": "iana", + "compressible": true + }, + "application/json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["json","map"] + }, + "application/json-patch+json": { + "source": "iana", + "compressible": true + }, + "application/json-seq": { + "source": "iana" + }, + "application/json5": { + "extensions": ["json5"] + }, + "application/jsonml+json": { + "source": "apache", + "compressible": true, + "extensions": ["jsonml"] + }, + "application/jwk+json": { + "source": "iana", + "compressible": true + }, + "application/jwk-set+json": { + "source": "iana", + "compressible": true + }, + "application/jwt": { + "source": "iana" + }, + "application/kpml-request+xml": { + "source": "iana", + "compressible": true + }, + "application/kpml-response+xml": { + "source": "iana", + "compressible": true + }, + "application/ld+json": { + "source": "iana", + "compressible": true, + "extensions": ["jsonld"] + }, + "application/lgr+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lgr"] + }, + "application/link-format": { + "source": "iana" + }, + "application/load-control+xml": { + "source": "iana", + "compressible": true + }, + "application/lost+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lostxml"] + }, + "application/lostsync+xml": { + "source": "iana", + "compressible": true + }, + "application/lpf+zip": { + "source": "iana", + "compressible": false + }, + "application/lxf": { + "source": "iana" + }, + "application/mac-binhex40": { + "source": "iana", + "extensions": ["hqx"] + }, + "application/mac-compactpro": { + "source": "apache", + "extensions": ["cpt"] + }, + "application/macwriteii": { + "source": "iana" + }, + "application/mads+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mads"] + }, + "application/manifest+json": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["webmanifest"] + }, + "application/marc": { + "source": "iana", + "extensions": ["mrc"] + }, + "application/marcxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mrcx"] + }, + "application/mathematica": { + "source": "iana", + "extensions": ["ma","nb","mb"] + }, + "application/mathml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mathml"] + }, + "application/mathml-content+xml": { + "source": "iana", + "compressible": true + }, + "application/mathml-presentation+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-associated-procedure-description+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-deregister+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-envelope+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-msk+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-msk-response+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-protection-description+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-reception-report+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-register+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-register-response+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-schedule+xml": { + "source": "iana", + "compressible": true + }, + "application/mbms-user-service-description+xml": { + "source": "iana", + "compressible": true + }, + "application/mbox": { + "source": "iana", + "extensions": ["mbox"] + }, + "application/media-policy-dataset+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpf"] + }, + "application/media_control+xml": { + "source": "iana", + "compressible": true + }, + "application/mediaservercontrol+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mscml"] + }, + "application/merge-patch+json": { + "source": "iana", + "compressible": true + }, + "application/metalink+xml": { + "source": "apache", + "compressible": true, + "extensions": ["metalink"] + }, + "application/metalink4+xml": { + "source": "iana", + "compressible": true, + "extensions": ["meta4"] + }, + "application/mets+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mets"] + }, + "application/mf4": { + "source": "iana" + }, + "application/mikey": { + "source": "iana" + }, + "application/mipc": { + "source": "iana" + }, + "application/missing-blocks+cbor-seq": { + "source": "iana" + }, + "application/mmt-aei+xml": { + "source": "iana", + "compressible": true, + "extensions": ["maei"] + }, + "application/mmt-usd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["musd"] + }, + "application/mods+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mods"] + }, + "application/moss-keys": { + "source": "iana" + }, + "application/moss-signature": { + "source": "iana" + }, + "application/mosskey-data": { + "source": "iana" + }, + "application/mosskey-request": { + "source": "iana" + }, + "application/mp21": { + "source": "iana", + "extensions": ["m21","mp21"] + }, + "application/mp4": { + "source": "iana", + "extensions": ["mp4s","m4p"] + }, + "application/mpeg4-generic": { + "source": "iana" + }, + "application/mpeg4-iod": { + "source": "iana" + }, + "application/mpeg4-iod-xmt": { + "source": "iana" + }, + "application/mrb-consumer+xml": { + "source": "iana", + "compressible": true + }, + "application/mrb-publish+xml": { + "source": "iana", + "compressible": true + }, + "application/msc-ivr+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/msc-mixer+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/msword": { + "source": "iana", + "compressible": false, + "extensions": ["doc","dot"] + }, + "application/mud+json": { + "source": "iana", + "compressible": true + }, + "application/multipart-core": { + "source": "iana" + }, + "application/mxf": { + "source": "iana", + "extensions": ["mxf"] + }, + "application/n-quads": { + "source": "iana", + "extensions": ["nq"] + }, + "application/n-triples": { + "source": "iana", + "extensions": ["nt"] + }, + "application/nasdata": { + "source": "iana" + }, + "application/news-checkgroups": { + "source": "iana", + "charset": "US-ASCII" + }, + "application/news-groupinfo": { + "source": "iana", + "charset": "US-ASCII" + }, + "application/news-transmission": { + "source": "iana" + }, + "application/nlsml+xml": { + "source": "iana", + "compressible": true + }, + "application/node": { + "source": "iana", + "extensions": ["cjs"] + }, + "application/nss": { + "source": "iana" + }, + "application/oauth-authz-req+jwt": { + "source": "iana" + }, + "application/oblivious-dns-message": { + "source": "iana" + }, + "application/ocsp-request": { + "source": "iana" + }, + "application/ocsp-response": { + "source": "iana" + }, + "application/octet-stream": { + "source": "iana", + "compressible": false, + "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"] + }, + "application/oda": { + "source": "iana", + "extensions": ["oda"] + }, + "application/odm+xml": { + "source": "iana", + "compressible": true + }, + "application/odx": { + "source": "iana" + }, + "application/oebps-package+xml": { + "source": "iana", + "compressible": true, + "extensions": ["opf"] + }, + "application/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["ogx"] + }, + "application/omdoc+xml": { + "source": "apache", + "compressible": true, + "extensions": ["omdoc"] + }, + "application/onenote": { + "source": "apache", + "extensions": ["onetoc","onetoc2","onetmp","onepkg"] + }, + "application/opc-nodeset+xml": { + "source": "iana", + "compressible": true + }, + "application/oscore": { + "source": "iana" + }, + "application/oxps": { + "source": "iana", + "extensions": ["oxps"] + }, + "application/p21": { + "source": "iana" + }, + "application/p21+zip": { + "source": "iana", + "compressible": false + }, + "application/p2p-overlay+xml": { + "source": "iana", + "compressible": true, + "extensions": ["relo"] + }, + "application/parityfec": { + "source": "iana" + }, + "application/passport": { + "source": "iana" + }, + "application/patch-ops-error+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xer"] + }, + "application/pdf": { + "source": "iana", + "compressible": false, + "extensions": ["pdf"] + }, + "application/pdx": { + "source": "iana" + }, + "application/pem-certificate-chain": { + "source": "iana" + }, + "application/pgp-encrypted": { + "source": "iana", + "compressible": false, + "extensions": ["pgp"] + }, + "application/pgp-keys": { + "source": "iana", + "extensions": ["asc"] + }, + "application/pgp-signature": { + "source": "iana", + "extensions": ["asc","sig"] + }, + "application/pics-rules": { + "source": "apache", + "extensions": ["prf"] + }, + "application/pidf+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/pidf-diff+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/pkcs10": { + "source": "iana", + "extensions": ["p10"] + }, + "application/pkcs12": { + "source": "iana" + }, + "application/pkcs7-mime": { + "source": "iana", + "extensions": ["p7m","p7c"] + }, + "application/pkcs7-signature": { + "source": "iana", + "extensions": ["p7s"] + }, + "application/pkcs8": { + "source": "iana", + "extensions": ["p8"] + }, + "application/pkcs8-encrypted": { + "source": "iana" + }, + "application/pkix-attr-cert": { + "source": "iana", + "extensions": ["ac"] + }, + "application/pkix-cert": { + "source": "iana", + "extensions": ["cer"] + }, + "application/pkix-crl": { + "source": "iana", + "extensions": ["crl"] + }, + "application/pkix-pkipath": { + "source": "iana", + "extensions": ["pkipath"] + }, + "application/pkixcmp": { + "source": "iana", + "extensions": ["pki"] + }, + "application/pls+xml": { + "source": "iana", + "compressible": true, + "extensions": ["pls"] + }, + "application/poc-settings+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/postscript": { + "source": "iana", + "compressible": true, + "extensions": ["ai","eps","ps"] + }, + "application/ppsp-tracker+json": { + "source": "iana", + "compressible": true + }, + "application/problem+json": { + "source": "iana", + "compressible": true + }, + "application/problem+xml": { + "source": "iana", + "compressible": true + }, + "application/provenance+xml": { + "source": "iana", + "compressible": true, + "extensions": ["provx"] + }, + "application/prs.alvestrand.titrax-sheet": { + "source": "iana" + }, + "application/prs.cww": { + "source": "iana", + "extensions": ["cww"] + }, + "application/prs.cyn": { + "source": "iana", + "charset": "7-BIT" + }, + "application/prs.hpub+zip": { + "source": "iana", + "compressible": false + }, + "application/prs.nprend": { + "source": "iana" + }, + "application/prs.plucker": { + "source": "iana" + }, + "application/prs.rdf-xml-crypt": { + "source": "iana" + }, + "application/prs.xsf+xml": { + "source": "iana", + "compressible": true + }, + "application/pskc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["pskcxml"] + }, + "application/pvd+json": { + "source": "iana", + "compressible": true + }, + "application/qsig": { + "source": "iana" + }, + "application/raml+yaml": { + "compressible": true, + "extensions": ["raml"] + }, + "application/raptorfec": { + "source": "iana" + }, + "application/rdap+json": { + "source": "iana", + "compressible": true + }, + "application/rdf+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rdf","owl"] + }, + "application/reginfo+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rif"] + }, + "application/relax-ng-compact-syntax": { + "source": "iana", + "extensions": ["rnc"] + }, + "application/remote-printing": { + "source": "iana" + }, + "application/reputon+json": { + "source": "iana", + "compressible": true + }, + "application/resource-lists+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rl"] + }, + "application/resource-lists-diff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rld"] + }, + "application/rfc+xml": { + "source": "iana", + "compressible": true + }, + "application/riscos": { + "source": "iana" + }, + "application/rlmi+xml": { + "source": "iana", + "compressible": true + }, + "application/rls-services+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rs"] + }, + "application/route-apd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rapd"] + }, + "application/route-s-tsid+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sls"] + }, + "application/route-usd+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rusd"] + }, + "application/rpki-ghostbusters": { + "source": "iana", + "extensions": ["gbr"] + }, + "application/rpki-manifest": { + "source": "iana", + "extensions": ["mft"] + }, + "application/rpki-publication": { + "source": "iana" + }, + "application/rpki-roa": { + "source": "iana", + "extensions": ["roa"] + }, + "application/rpki-updown": { + "source": "iana" + }, + "application/rsd+xml": { + "source": "apache", + "compressible": true, + "extensions": ["rsd"] + }, + "application/rss+xml": { + "source": "apache", + "compressible": true, + "extensions": ["rss"] + }, + "application/rtf": { + "source": "iana", + "compressible": true, + "extensions": ["rtf"] + }, + "application/rtploopback": { + "source": "iana" + }, + "application/rtx": { + "source": "iana" + }, + "application/samlassertion+xml": { + "source": "iana", + "compressible": true + }, + "application/samlmetadata+xml": { + "source": "iana", + "compressible": true + }, + "application/sarif+json": { + "source": "iana", + "compressible": true + }, + "application/sarif-external-properties+json": { + "source": "iana", + "compressible": true + }, + "application/sbe": { + "source": "iana" + }, + "application/sbml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sbml"] + }, + "application/scaip+xml": { + "source": "iana", + "compressible": true + }, + "application/scim+json": { + "source": "iana", + "compressible": true + }, + "application/scvp-cv-request": { + "source": "iana", + "extensions": ["scq"] + }, + "application/scvp-cv-response": { + "source": "iana", + "extensions": ["scs"] + }, + "application/scvp-vp-request": { + "source": "iana", + "extensions": ["spq"] + }, + "application/scvp-vp-response": { + "source": "iana", + "extensions": ["spp"] + }, + "application/sdp": { + "source": "iana", + "extensions": ["sdp"] + }, + "application/secevent+jwt": { + "source": "iana" + }, + "application/senml+cbor": { + "source": "iana" + }, + "application/senml+json": { + "source": "iana", + "compressible": true + }, + "application/senml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["senmlx"] + }, + "application/senml-etch+cbor": { + "source": "iana" + }, + "application/senml-etch+json": { + "source": "iana", + "compressible": true + }, + "application/senml-exi": { + "source": "iana" + }, + "application/sensml+cbor": { + "source": "iana" + }, + "application/sensml+json": { + "source": "iana", + "compressible": true + }, + "application/sensml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sensmlx"] + }, + "application/sensml-exi": { + "source": "iana" + }, + "application/sep+xml": { + "source": "iana", + "compressible": true + }, + "application/sep-exi": { + "source": "iana" + }, + "application/session-info": { + "source": "iana" + }, + "application/set-payment": { + "source": "iana" + }, + "application/set-payment-initiation": { + "source": "iana", + "extensions": ["setpay"] + }, + "application/set-registration": { + "source": "iana" + }, + "application/set-registration-initiation": { + "source": "iana", + "extensions": ["setreg"] + }, + "application/sgml": { + "source": "iana" + }, + "application/sgml-open-catalog": { + "source": "iana" + }, + "application/shf+xml": { + "source": "iana", + "compressible": true, + "extensions": ["shf"] + }, + "application/sieve": { + "source": "iana", + "extensions": ["siv","sieve"] + }, + "application/simple-filter+xml": { + "source": "iana", + "compressible": true + }, + "application/simple-message-summary": { + "source": "iana" + }, + "application/simplesymbolcontainer": { + "source": "iana" + }, + "application/sipc": { + "source": "iana" + }, + "application/slate": { + "source": "iana" + }, + "application/smil": { + "source": "iana" + }, + "application/smil+xml": { + "source": "iana", + "compressible": true, + "extensions": ["smi","smil"] + }, + "application/smpte336m": { + "source": "iana" + }, + "application/soap+fastinfoset": { + "source": "iana" + }, + "application/soap+xml": { + "source": "iana", + "compressible": true + }, + "application/sparql-query": { + "source": "iana", + "extensions": ["rq"] + }, + "application/sparql-results+xml": { + "source": "iana", + "compressible": true, + "extensions": ["srx"] + }, + "application/spdx+json": { + "source": "iana", + "compressible": true + }, + "application/spirits-event+xml": { + "source": "iana", + "compressible": true + }, + "application/sql": { + "source": "iana" + }, + "application/srgs": { + "source": "iana", + "extensions": ["gram"] + }, + "application/srgs+xml": { + "source": "iana", + "compressible": true, + "extensions": ["grxml"] + }, + "application/sru+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sru"] + }, + "application/ssdl+xml": { + "source": "apache", + "compressible": true, + "extensions": ["ssdl"] + }, + "application/ssml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ssml"] + }, + "application/stix+json": { + "source": "iana", + "compressible": true + }, + "application/swid+xml": { + "source": "iana", + "compressible": true, + "extensions": ["swidtag"] + }, + "application/tamp-apex-update": { + "source": "iana" + }, + "application/tamp-apex-update-confirm": { + "source": "iana" + }, + "application/tamp-community-update": { + "source": "iana" + }, + "application/tamp-community-update-confirm": { + "source": "iana" + }, + "application/tamp-error": { + "source": "iana" + }, + "application/tamp-sequence-adjust": { + "source": "iana" + }, + "application/tamp-sequence-adjust-confirm": { + "source": "iana" + }, + "application/tamp-status-query": { + "source": "iana" + }, + "application/tamp-status-response": { + "source": "iana" + }, + "application/tamp-update": { + "source": "iana" + }, + "application/tamp-update-confirm": { + "source": "iana" + }, + "application/tar": { + "compressible": true + }, + "application/taxii+json": { + "source": "iana", + "compressible": true + }, + "application/td+json": { + "source": "iana", + "compressible": true + }, + "application/tei+xml": { + "source": "iana", + "compressible": true, + "extensions": ["tei","teicorpus"] + }, + "application/tetra_isi": { + "source": "iana" + }, + "application/thraud+xml": { + "source": "iana", + "compressible": true, + "extensions": ["tfi"] + }, + "application/timestamp-query": { + "source": "iana" + }, + "application/timestamp-reply": { + "source": "iana" + }, + "application/timestamped-data": { + "source": "iana", + "extensions": ["tsd"] + }, + "application/tlsrpt+gzip": { + "source": "iana" + }, + "application/tlsrpt+json": { + "source": "iana", + "compressible": true + }, + "application/tnauthlist": { + "source": "iana" + }, + "application/token-introspection+jwt": { + "source": "iana" + }, + "application/toml": { + "compressible": true, + "extensions": ["toml"] + }, + "application/trickle-ice-sdpfrag": { + "source": "iana" + }, + "application/trig": { + "source": "iana", + "extensions": ["trig"] + }, + "application/ttml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ttml"] + }, + "application/tve-trigger": { + "source": "iana" + }, + "application/tzif": { + "source": "iana" + }, + "application/tzif-leap": { + "source": "iana" + }, + "application/ubjson": { + "compressible": false, + "extensions": ["ubj"] + }, + "application/ulpfec": { + "source": "iana" + }, + "application/urc-grpsheet+xml": { + "source": "iana", + "compressible": true + }, + "application/urc-ressheet+xml": { + "source": "iana", + "compressible": true, + "extensions": ["rsheet"] + }, + "application/urc-targetdesc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["td"] + }, + "application/urc-uisocketdesc+xml": { + "source": "iana", + "compressible": true + }, + "application/vcard+json": { + "source": "iana", + "compressible": true + }, + "application/vcard+xml": { + "source": "iana", + "compressible": true + }, + "application/vemmi": { + "source": "iana" + }, + "application/vividence.scriptfile": { + "source": "apache" + }, + "application/vnd.1000minds.decision-model+xml": { + "source": "iana", + "compressible": true, + "extensions": ["1km"] + }, + "application/vnd.3gpp-prose+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp-prose-pc3ch+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp-v2x-local-service-information": { + "source": "iana" + }, + "application/vnd.3gpp.5gnas": { + "source": "iana" + }, + "application/vnd.3gpp.access-transfer-events+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.bsf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.gmop+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.gtpc": { + "source": "iana" + }, + "application/vnd.3gpp.interworking-data": { + "source": "iana" + }, + "application/vnd.3gpp.lpp": { + "source": "iana" + }, + "application/vnd.3gpp.mc-signalling-ear": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-payload": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-signalling": { + "source": "iana" + }, + "application/vnd.3gpp.mcdata-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcdata-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-floor-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-location-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-mbms-usage-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-signed+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-ue-init-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcptt-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-affiliation-command+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-affiliation-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-location-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-service-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-transmission-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-ue-config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mcvideo-user-profile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.mid-call+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.ngap": { + "source": "iana" + }, + "application/vnd.3gpp.pfcp": { + "source": "iana" + }, + "application/vnd.3gpp.pic-bw-large": { + "source": "iana", + "extensions": ["plb"] + }, + "application/vnd.3gpp.pic-bw-small": { + "source": "iana", + "extensions": ["psb"] + }, + "application/vnd.3gpp.pic-bw-var": { + "source": "iana", + "extensions": ["pvb"] + }, + "application/vnd.3gpp.s1ap": { + "source": "iana" + }, + "application/vnd.3gpp.sms": { + "source": "iana" + }, + "application/vnd.3gpp.sms+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.srvcc-ext+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.srvcc-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.state-and-event-info+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp.ussd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp2.bcmcsinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.3gpp2.sms": { + "source": "iana" + }, + "application/vnd.3gpp2.tcap": { + "source": "iana", + "extensions": ["tcap"] + }, + "application/vnd.3lightssoftware.imagescal": { + "source": "iana" + }, + "application/vnd.3m.post-it-notes": { + "source": "iana", + "extensions": ["pwn"] + }, + "application/vnd.accpac.simply.aso": { + "source": "iana", + "extensions": ["aso"] + }, + "application/vnd.accpac.simply.imp": { + "source": "iana", + "extensions": ["imp"] + }, + "application/vnd.acucobol": { + "source": "iana", + "extensions": ["acu"] + }, + "application/vnd.acucorp": { + "source": "iana", + "extensions": ["atc","acutc"] + }, + "application/vnd.adobe.air-application-installer-package+zip": { + "source": "apache", + "compressible": false, + "extensions": ["air"] + }, + "application/vnd.adobe.flash.movie": { + "source": "iana" + }, + "application/vnd.adobe.formscentral.fcdt": { + "source": "iana", + "extensions": ["fcdt"] + }, + "application/vnd.adobe.fxp": { + "source": "iana", + "extensions": ["fxp","fxpl"] + }, + "application/vnd.adobe.partial-upload": { + "source": "iana" + }, + "application/vnd.adobe.xdp+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdp"] + }, + "application/vnd.adobe.xfdf": { + "source": "iana", + "extensions": ["xfdf"] + }, + "application/vnd.aether.imp": { + "source": "iana" + }, + "application/vnd.afpc.afplinedata": { + "source": "iana" + }, + "application/vnd.afpc.afplinedata-pagedef": { + "source": "iana" + }, + "application/vnd.afpc.cmoca-cmresource": { + "source": "iana" + }, + "application/vnd.afpc.foca-charset": { + "source": "iana" + }, + "application/vnd.afpc.foca-codedfont": { + "source": "iana" + }, + "application/vnd.afpc.foca-codepage": { + "source": "iana" + }, + "application/vnd.afpc.modca": { + "source": "iana" + }, + "application/vnd.afpc.modca-cmtable": { + "source": "iana" + }, + "application/vnd.afpc.modca-formdef": { + "source": "iana" + }, + "application/vnd.afpc.modca-mediummap": { + "source": "iana" + }, + "application/vnd.afpc.modca-objectcontainer": { + "source": "iana" + }, + "application/vnd.afpc.modca-overlay": { + "source": "iana" + }, + "application/vnd.afpc.modca-pagesegment": { + "source": "iana" + }, + "application/vnd.age": { + "source": "iana", + "extensions": ["age"] + }, + "application/vnd.ah-barcode": { + "source": "iana" + }, + "application/vnd.ahead.space": { + "source": "iana", + "extensions": ["ahead"] + }, + "application/vnd.airzip.filesecure.azf": { + "source": "iana", + "extensions": ["azf"] + }, + "application/vnd.airzip.filesecure.azs": { + "source": "iana", + "extensions": ["azs"] + }, + "application/vnd.amadeus+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.amazon.ebook": { + "source": "apache", + "extensions": ["azw"] + }, + "application/vnd.amazon.mobi8-ebook": { + "source": "iana" + }, + "application/vnd.americandynamics.acc": { + "source": "iana", + "extensions": ["acc"] + }, + "application/vnd.amiga.ami": { + "source": "iana", + "extensions": ["ami"] + }, + "application/vnd.amundsen.maze+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.android.ota": { + "source": "iana" + }, + "application/vnd.android.package-archive": { + "source": "apache", + "compressible": false, + "extensions": ["apk"] + }, + "application/vnd.anki": { + "source": "iana" + }, + "application/vnd.anser-web-certificate-issue-initiation": { + "source": "iana", + "extensions": ["cii"] + }, + "application/vnd.anser-web-funds-transfer-initiation": { + "source": "apache", + "extensions": ["fti"] + }, + "application/vnd.antix.game-component": { + "source": "iana", + "extensions": ["atx"] + }, + "application/vnd.apache.arrow.file": { + "source": "iana" + }, + "application/vnd.apache.arrow.stream": { + "source": "iana" + }, + "application/vnd.apache.thrift.binary": { + "source": "iana" + }, + "application/vnd.apache.thrift.compact": { + "source": "iana" + }, + "application/vnd.apache.thrift.json": { + "source": "iana" + }, + "application/vnd.api+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.aplextor.warrp+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.apothekende.reservation+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.apple.installer+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mpkg"] + }, + "application/vnd.apple.keynote": { + "source": "iana", + "extensions": ["key"] + }, + "application/vnd.apple.mpegurl": { + "source": "iana", + "extensions": ["m3u8"] + }, + "application/vnd.apple.numbers": { + "source": "iana", + "extensions": ["numbers"] + }, + "application/vnd.apple.pages": { + "source": "iana", + "extensions": ["pages"] + }, + "application/vnd.apple.pkpass": { + "compressible": false, + "extensions": ["pkpass"] + }, + "application/vnd.arastra.swi": { + "source": "iana" + }, + "application/vnd.aristanetworks.swi": { + "source": "iana", + "extensions": ["swi"] + }, + "application/vnd.artisan+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.artsquare": { + "source": "iana" + }, + "application/vnd.astraea-software.iota": { + "source": "iana", + "extensions": ["iota"] + }, + "application/vnd.audiograph": { + "source": "iana", + "extensions": ["aep"] + }, + "application/vnd.autopackage": { + "source": "iana" + }, + "application/vnd.avalon+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.avistar+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.balsamiq.bmml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["bmml"] + }, + "application/vnd.balsamiq.bmpr": { + "source": "iana" + }, + "application/vnd.banana-accounting": { + "source": "iana" + }, + "application/vnd.bbf.usp.error": { + "source": "iana" + }, + "application/vnd.bbf.usp.msg": { + "source": "iana" + }, + "application/vnd.bbf.usp.msg+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.bekitzur-stech+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.bint.med-content": { + "source": "iana" + }, + "application/vnd.biopax.rdf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.blink-idb-value-wrapper": { + "source": "iana" + }, + "application/vnd.blueice.multipass": { + "source": "iana", + "extensions": ["mpm"] + }, + "application/vnd.bluetooth.ep.oob": { + "source": "iana" + }, + "application/vnd.bluetooth.le.oob": { + "source": "iana" + }, + "application/vnd.bmi": { + "source": "iana", + "extensions": ["bmi"] + }, + "application/vnd.bpf": { + "source": "iana" + }, + "application/vnd.bpf3": { + "source": "iana" + }, + "application/vnd.businessobjects": { + "source": "iana", + "extensions": ["rep"] + }, + "application/vnd.byu.uapi+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cab-jscript": { + "source": "iana" + }, + "application/vnd.canon-cpdl": { + "source": "iana" + }, + "application/vnd.canon-lips": { + "source": "iana" + }, + "application/vnd.capasystems-pg+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cendio.thinlinc.clientconf": { + "source": "iana" + }, + "application/vnd.century-systems.tcp_stream": { + "source": "iana" + }, + "application/vnd.chemdraw+xml": { + "source": "iana", + "compressible": true, + "extensions": ["cdxml"] + }, + "application/vnd.chess-pgn": { + "source": "iana" + }, + "application/vnd.chipnuts.karaoke-mmd": { + "source": "iana", + "extensions": ["mmd"] + }, + "application/vnd.ciedi": { + "source": "iana" + }, + "application/vnd.cinderella": { + "source": "iana", + "extensions": ["cdy"] + }, + "application/vnd.cirpack.isdn-ext": { + "source": "iana" + }, + "application/vnd.citationstyles.style+xml": { + "source": "iana", + "compressible": true, + "extensions": ["csl"] + }, + "application/vnd.claymore": { + "source": "iana", + "extensions": ["cla"] + }, + "application/vnd.cloanto.rp9": { + "source": "iana", + "extensions": ["rp9"] + }, + "application/vnd.clonk.c4group": { + "source": "iana", + "extensions": ["c4g","c4d","c4f","c4p","c4u"] + }, + "application/vnd.cluetrust.cartomobile-config": { + "source": "iana", + "extensions": ["c11amc"] + }, + "application/vnd.cluetrust.cartomobile-config-pkg": { + "source": "iana", + "extensions": ["c11amz"] + }, + "application/vnd.coffeescript": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.document": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.document-template": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.presentation": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.presentation-template": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.spreadsheet": { + "source": "iana" + }, + "application/vnd.collabio.xodocuments.spreadsheet-template": { + "source": "iana" + }, + "application/vnd.collection+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.collection.doc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.collection.next+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.comicbook+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.comicbook-rar": { + "source": "iana" + }, + "application/vnd.commerce-battelle": { + "source": "iana" + }, + "application/vnd.commonspace": { + "source": "iana", + "extensions": ["csp"] + }, + "application/vnd.contact.cmsg": { + "source": "iana", + "extensions": ["cdbcmsg"] + }, + "application/vnd.coreos.ignition+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cosmocaller": { + "source": "iana", + "extensions": ["cmc"] + }, + "application/vnd.crick.clicker": { + "source": "iana", + "extensions": ["clkx"] + }, + "application/vnd.crick.clicker.keyboard": { + "source": "iana", + "extensions": ["clkk"] + }, + "application/vnd.crick.clicker.palette": { + "source": "iana", + "extensions": ["clkp"] + }, + "application/vnd.crick.clicker.template": { + "source": "iana", + "extensions": ["clkt"] + }, + "application/vnd.crick.clicker.wordbank": { + "source": "iana", + "extensions": ["clkw"] + }, + "application/vnd.criticaltools.wbs+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wbs"] + }, + "application/vnd.cryptii.pipe+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.crypto-shade-file": { + "source": "iana" + }, + "application/vnd.cryptomator.encrypted": { + "source": "iana" + }, + "application/vnd.cryptomator.vault": { + "source": "iana" + }, + "application/vnd.ctc-posml": { + "source": "iana", + "extensions": ["pml"] + }, + "application/vnd.ctct.ws+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.cups-pdf": { + "source": "iana" + }, + "application/vnd.cups-postscript": { + "source": "iana" + }, + "application/vnd.cups-ppd": { + "source": "iana", + "extensions": ["ppd"] + }, + "application/vnd.cups-raster": { + "source": "iana" + }, + "application/vnd.cups-raw": { + "source": "iana" + }, + "application/vnd.curl": { + "source": "iana" + }, + "application/vnd.curl.car": { + "source": "apache", + "extensions": ["car"] + }, + "application/vnd.curl.pcurl": { + "source": "apache", + "extensions": ["pcurl"] + }, + "application/vnd.cyan.dean.root+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.cybank": { + "source": "iana" + }, + "application/vnd.cyclonedx+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.cyclonedx+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.d2l.coursepackage1p0+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.d3m-dataset": { + "source": "iana" + }, + "application/vnd.d3m-problem": { + "source": "iana" + }, + "application/vnd.dart": { + "source": "iana", + "compressible": true, + "extensions": ["dart"] + }, + "application/vnd.data-vision.rdz": { + "source": "iana", + "extensions": ["rdz"] + }, + "application/vnd.datapackage+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dataresource+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dbf": { + "source": "iana", + "extensions": ["dbf"] + }, + "application/vnd.debian.binary-package": { + "source": "iana" + }, + "application/vnd.dece.data": { + "source": "iana", + "extensions": ["uvf","uvvf","uvd","uvvd"] + }, + "application/vnd.dece.ttml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["uvt","uvvt"] + }, + "application/vnd.dece.unspecified": { + "source": "iana", + "extensions": ["uvx","uvvx"] + }, + "application/vnd.dece.zip": { + "source": "iana", + "extensions": ["uvz","uvvz"] + }, + "application/vnd.denovo.fcselayout-link": { + "source": "iana", + "extensions": ["fe_launch"] + }, + "application/vnd.desmume.movie": { + "source": "iana" + }, + "application/vnd.dir-bi.plate-dl-nosuffix": { + "source": "iana" + }, + "application/vnd.dm.delegation+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dna": { + "source": "iana", + "extensions": ["dna"] + }, + "application/vnd.document+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.dolby.mlp": { + "source": "apache", + "extensions": ["mlp"] + }, + "application/vnd.dolby.mobile.1": { + "source": "iana" + }, + "application/vnd.dolby.mobile.2": { + "source": "iana" + }, + "application/vnd.doremir.scorecloud-binary-document": { + "source": "iana" + }, + "application/vnd.dpgraph": { + "source": "iana", + "extensions": ["dpg"] + }, + "application/vnd.dreamfactory": { + "source": "iana", + "extensions": ["dfac"] + }, + "application/vnd.drive+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ds-keypoint": { + "source": "apache", + "extensions": ["kpxx"] + }, + "application/vnd.dtg.local": { + "source": "iana" + }, + "application/vnd.dtg.local.flash": { + "source": "iana" + }, + "application/vnd.dtg.local.html": { + "source": "iana" + }, + "application/vnd.dvb.ait": { + "source": "iana", + "extensions": ["ait"] + }, + "application/vnd.dvb.dvbisl+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.dvbj": { + "source": "iana" + }, + "application/vnd.dvb.esgcontainer": { + "source": "iana" + }, + "application/vnd.dvb.ipdcdftnotifaccess": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgaccess": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgaccess2": { + "source": "iana" + }, + "application/vnd.dvb.ipdcesgpdd": { + "source": "iana" + }, + "application/vnd.dvb.ipdcroaming": { + "source": "iana" + }, + "application/vnd.dvb.iptv.alfec-base": { + "source": "iana" + }, + "application/vnd.dvb.iptv.alfec-enhancement": { + "source": "iana" + }, + "application/vnd.dvb.notif-aggregate-root+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-container+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-generic+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-ia-msglist+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-ia-registration-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-ia-registration-response+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.notif-init+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.dvb.pfr": { + "source": "iana" + }, + "application/vnd.dvb.service": { + "source": "iana", + "extensions": ["svc"] + }, + "application/vnd.dxr": { + "source": "iana" + }, + "application/vnd.dynageo": { + "source": "iana", + "extensions": ["geo"] + }, + "application/vnd.dzr": { + "source": "iana" + }, + "application/vnd.easykaraoke.cdgdownload": { + "source": "iana" + }, + "application/vnd.ecdis-update": { + "source": "iana" + }, + "application/vnd.ecip.rlp": { + "source": "iana" + }, + "application/vnd.eclipse.ditto+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ecowin.chart": { + "source": "iana", + "extensions": ["mag"] + }, + "application/vnd.ecowin.filerequest": { + "source": "iana" + }, + "application/vnd.ecowin.fileupdate": { + "source": "iana" + }, + "application/vnd.ecowin.series": { + "source": "iana" + }, + "application/vnd.ecowin.seriesrequest": { + "source": "iana" + }, + "application/vnd.ecowin.seriesupdate": { + "source": "iana" + }, + "application/vnd.efi.img": { + "source": "iana" + }, + "application/vnd.efi.iso": { + "source": "iana" + }, + "application/vnd.emclient.accessrequest+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.enliven": { + "source": "iana", + "extensions": ["nml"] + }, + "application/vnd.enphase.envoy": { + "source": "iana" + }, + "application/vnd.eprints.data+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.epson.esf": { + "source": "iana", + "extensions": ["esf"] + }, + "application/vnd.epson.msf": { + "source": "iana", + "extensions": ["msf"] + }, + "application/vnd.epson.quickanime": { + "source": "iana", + "extensions": ["qam"] + }, + "application/vnd.epson.salt": { + "source": "iana", + "extensions": ["slt"] + }, + "application/vnd.epson.ssf": { + "source": "iana", + "extensions": ["ssf"] + }, + "application/vnd.ericsson.quickcall": { + "source": "iana" + }, + "application/vnd.espass-espass+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.eszigno3+xml": { + "source": "iana", + "compressible": true, + "extensions": ["es3","et3"] + }, + "application/vnd.etsi.aoc+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.asic-e+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.etsi.asic-s+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.etsi.cug+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvcommand+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvdiscovery+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsad-bc+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsad-cod+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsad-npvr+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvservice+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvsync+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.iptvueprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.mcid+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.mheg5": { + "source": "iana" + }, + "application/vnd.etsi.overload-control-policy-dataset+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.pstn+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.sci+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.simservs+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.timestamp-token": { + "source": "iana" + }, + "application/vnd.etsi.tsl+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.etsi.tsl.der": { + "source": "iana" + }, + "application/vnd.eu.kasparian.car+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.eudora.data": { + "source": "iana" + }, + "application/vnd.evolv.ecig.profile": { + "source": "iana" + }, + "application/vnd.evolv.ecig.settings": { + "source": "iana" + }, + "application/vnd.evolv.ecig.theme": { + "source": "iana" + }, + "application/vnd.exstream-empower+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.exstream-package": { + "source": "iana" + }, + "application/vnd.ezpix-album": { + "source": "iana", + "extensions": ["ez2"] + }, + "application/vnd.ezpix-package": { + "source": "iana", + "extensions": ["ez3"] + }, + "application/vnd.f-secure.mobile": { + "source": "iana" + }, + "application/vnd.familysearch.gedcom+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.fastcopy-disk-image": { + "source": "iana" + }, + "application/vnd.fdf": { + "source": "iana", + "extensions": ["fdf"] + }, + "application/vnd.fdsn.mseed": { + "source": "iana", + "extensions": ["mseed"] + }, + "application/vnd.fdsn.seed": { + "source": "iana", + "extensions": ["seed","dataless"] + }, + "application/vnd.ffsns": { + "source": "iana" + }, + "application/vnd.ficlab.flb+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.filmit.zfc": { + "source": "iana" + }, + "application/vnd.fints": { + "source": "iana" + }, + "application/vnd.firemonkeys.cloudcell": { + "source": "iana" + }, + "application/vnd.flographit": { + "source": "iana", + "extensions": ["gph"] + }, + "application/vnd.fluxtime.clip": { + "source": "iana", + "extensions": ["ftc"] + }, + "application/vnd.font-fontforge-sfd": { + "source": "iana" + }, + "application/vnd.framemaker": { + "source": "iana", + "extensions": ["fm","frame","maker","book"] + }, + "application/vnd.frogans.fnc": { + "source": "iana", + "extensions": ["fnc"] + }, + "application/vnd.frogans.ltf": { + "source": "iana", + "extensions": ["ltf"] + }, + "application/vnd.fsc.weblaunch": { + "source": "iana", + "extensions": ["fsc"] + }, + "application/vnd.fujifilm.fb.docuworks": { + "source": "iana" + }, + "application/vnd.fujifilm.fb.docuworks.binder": { + "source": "iana" + }, + "application/vnd.fujifilm.fb.docuworks.container": { + "source": "iana" + }, + "application/vnd.fujifilm.fb.jfi+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.fujitsu.oasys": { + "source": "iana", + "extensions": ["oas"] + }, + "application/vnd.fujitsu.oasys2": { + "source": "iana", + "extensions": ["oa2"] + }, + "application/vnd.fujitsu.oasys3": { + "source": "iana", + "extensions": ["oa3"] + }, + "application/vnd.fujitsu.oasysgp": { + "source": "iana", + "extensions": ["fg5"] + }, + "application/vnd.fujitsu.oasysprs": { + "source": "iana", + "extensions": ["bh2"] + }, + "application/vnd.fujixerox.art-ex": { + "source": "iana" + }, + "application/vnd.fujixerox.art4": { + "source": "iana" + }, + "application/vnd.fujixerox.ddd": { + "source": "iana", + "extensions": ["ddd"] + }, + "application/vnd.fujixerox.docuworks": { + "source": "iana", + "extensions": ["xdw"] + }, + "application/vnd.fujixerox.docuworks.binder": { + "source": "iana", + "extensions": ["xbd"] + }, + "application/vnd.fujixerox.docuworks.container": { + "source": "iana" + }, + "application/vnd.fujixerox.hbpl": { + "source": "iana" + }, + "application/vnd.fut-misnet": { + "source": "iana" + }, + "application/vnd.futoin+cbor": { + "source": "iana" + }, + "application/vnd.futoin+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.fuzzysheet": { + "source": "iana", + "extensions": ["fzs"] + }, + "application/vnd.genomatix.tuxedo": { + "source": "iana", + "extensions": ["txd"] + }, + "application/vnd.gentics.grd+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.geo+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.geocube+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.geogebra.file": { + "source": "iana", + "extensions": ["ggb"] + }, + "application/vnd.geogebra.slides": { + "source": "iana" + }, + "application/vnd.geogebra.tool": { + "source": "iana", + "extensions": ["ggt"] + }, + "application/vnd.geometry-explorer": { + "source": "iana", + "extensions": ["gex","gre"] + }, + "application/vnd.geonext": { + "source": "iana", + "extensions": ["gxt"] + }, + "application/vnd.geoplan": { + "source": "iana", + "extensions": ["g2w"] + }, + "application/vnd.geospace": { + "source": "iana", + "extensions": ["g3w"] + }, + "application/vnd.gerber": { + "source": "iana" + }, + "application/vnd.globalplatform.card-content-mgt": { + "source": "iana" + }, + "application/vnd.globalplatform.card-content-mgt-response": { + "source": "iana" + }, + "application/vnd.gmx": { + "source": "iana", + "extensions": ["gmx"] + }, + "application/vnd.google-apps.document": { + "compressible": false, + "extensions": ["gdoc"] + }, + "application/vnd.google-apps.presentation": { + "compressible": false, + "extensions": ["gslides"] + }, + "application/vnd.google-apps.spreadsheet": { + "compressible": false, + "extensions": ["gsheet"] + }, + "application/vnd.google-earth.kml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["kml"] + }, + "application/vnd.google-earth.kmz": { + "source": "iana", + "compressible": false, + "extensions": ["kmz"] + }, + "application/vnd.gov.sk.e-form+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.gov.sk.e-form+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.gov.sk.xmldatacontainer+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.grafeq": { + "source": "iana", + "extensions": ["gqf","gqs"] + }, + "application/vnd.gridmp": { + "source": "iana" + }, + "application/vnd.groove-account": { + "source": "iana", + "extensions": ["gac"] + }, + "application/vnd.groove-help": { + "source": "iana", + "extensions": ["ghf"] + }, + "application/vnd.groove-identity-message": { + "source": "iana", + "extensions": ["gim"] + }, + "application/vnd.groove-injector": { + "source": "iana", + "extensions": ["grv"] + }, + "application/vnd.groove-tool-message": { + "source": "iana", + "extensions": ["gtm"] + }, + "application/vnd.groove-tool-template": { + "source": "iana", + "extensions": ["tpl"] + }, + "application/vnd.groove-vcard": { + "source": "iana", + "extensions": ["vcg"] + }, + "application/vnd.hal+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hal+xml": { + "source": "iana", + "compressible": true, + "extensions": ["hal"] + }, + "application/vnd.handheld-entertainment+xml": { + "source": "iana", + "compressible": true, + "extensions": ["zmm"] + }, + "application/vnd.hbci": { + "source": "iana", + "extensions": ["hbci"] + }, + "application/vnd.hc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hcl-bireports": { + "source": "iana" + }, + "application/vnd.hdt": { + "source": "iana" + }, + "application/vnd.heroku+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hhe.lesson-player": { + "source": "iana", + "extensions": ["les"] + }, + "application/vnd.hl7cda+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.hl7v2+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.hp-hpgl": { + "source": "iana", + "extensions": ["hpgl"] + }, + "application/vnd.hp-hpid": { + "source": "iana", + "extensions": ["hpid"] + }, + "application/vnd.hp-hps": { + "source": "iana", + "extensions": ["hps"] + }, + "application/vnd.hp-jlyt": { + "source": "iana", + "extensions": ["jlt"] + }, + "application/vnd.hp-pcl": { + "source": "iana", + "extensions": ["pcl"] + }, + "application/vnd.hp-pclxl": { + "source": "iana", + "extensions": ["pclxl"] + }, + "application/vnd.httphone": { + "source": "iana" + }, + "application/vnd.hydrostatix.sof-data": { + "source": "iana", + "extensions": ["sfd-hdstx"] + }, + "application/vnd.hyper+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hyper-item+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hyperdrive+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.hzn-3d-crossword": { + "source": "iana" + }, + "application/vnd.ibm.afplinedata": { + "source": "iana" + }, + "application/vnd.ibm.electronic-media": { + "source": "iana" + }, + "application/vnd.ibm.minipay": { + "source": "iana", + "extensions": ["mpy"] + }, + "application/vnd.ibm.modcap": { + "source": "iana", + "extensions": ["afp","listafp","list3820"] + }, + "application/vnd.ibm.rights-management": { + "source": "iana", + "extensions": ["irm"] + }, + "application/vnd.ibm.secure-container": { + "source": "iana", + "extensions": ["sc"] + }, + "application/vnd.iccprofile": { + "source": "iana", + "extensions": ["icc","icm"] + }, + "application/vnd.ieee.1905": { + "source": "iana" + }, + "application/vnd.igloader": { + "source": "iana", + "extensions": ["igl"] + }, + "application/vnd.imagemeter.folder+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.imagemeter.image+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.immervision-ivp": { + "source": "iana", + "extensions": ["ivp"] + }, + "application/vnd.immervision-ivu": { + "source": "iana", + "extensions": ["ivu"] + }, + "application/vnd.ims.imsccv1p1": { + "source": "iana" + }, + "application/vnd.ims.imsccv1p2": { + "source": "iana" + }, + "application/vnd.ims.imsccv1p3": { + "source": "iana" + }, + "application/vnd.ims.lis.v2.result+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolconsumerprofile+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolproxy+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolproxy.id+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolsettings+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ims.lti.v2.toolsettings.simple+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.informedcontrol.rms+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.informix-visionary": { + "source": "iana" + }, + "application/vnd.infotech.project": { + "source": "iana" + }, + "application/vnd.infotech.project+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.innopath.wamp.notification": { + "source": "iana" + }, + "application/vnd.insors.igm": { + "source": "iana", + "extensions": ["igm"] + }, + "application/vnd.intercon.formnet": { + "source": "iana", + "extensions": ["xpw","xpx"] + }, + "application/vnd.intergeo": { + "source": "iana", + "extensions": ["i2g"] + }, + "application/vnd.intertrust.digibox": { + "source": "iana" + }, + "application/vnd.intertrust.nncp": { + "source": "iana" + }, + "application/vnd.intu.qbo": { + "source": "iana", + "extensions": ["qbo"] + }, + "application/vnd.intu.qfx": { + "source": "iana", + "extensions": ["qfx"] + }, + "application/vnd.iptc.g2.catalogitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.conceptitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.knowledgeitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.newsitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.newsmessage+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.packageitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.iptc.g2.planningitem+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ipunplugged.rcprofile": { + "source": "iana", + "extensions": ["rcprofile"] + }, + "application/vnd.irepository.package+xml": { + "source": "iana", + "compressible": true, + "extensions": ["irp"] + }, + "application/vnd.is-xpr": { + "source": "iana", + "extensions": ["xpr"] + }, + "application/vnd.isac.fcs": { + "source": "iana", + "extensions": ["fcs"] + }, + "application/vnd.iso11783-10+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.jam": { + "source": "iana", + "extensions": ["jam"] + }, + "application/vnd.japannet-directory-service": { + "source": "iana" + }, + "application/vnd.japannet-jpnstore-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-payment-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-registration": { + "source": "iana" + }, + "application/vnd.japannet-registration-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-setstore-wakeup": { + "source": "iana" + }, + "application/vnd.japannet-verification": { + "source": "iana" + }, + "application/vnd.japannet-verification-wakeup": { + "source": "iana" + }, + "application/vnd.jcp.javame.midlet-rms": { + "source": "iana", + "extensions": ["rms"] + }, + "application/vnd.jisp": { + "source": "iana", + "extensions": ["jisp"] + }, + "application/vnd.joost.joda-archive": { + "source": "iana", + "extensions": ["joda"] + }, + "application/vnd.jsk.isdn-ngn": { + "source": "iana" + }, + "application/vnd.kahootz": { + "source": "iana", + "extensions": ["ktz","ktr"] + }, + "application/vnd.kde.karbon": { + "source": "iana", + "extensions": ["karbon"] + }, + "application/vnd.kde.kchart": { + "source": "iana", + "extensions": ["chrt"] + }, + "application/vnd.kde.kformula": { + "source": "iana", + "extensions": ["kfo"] + }, + "application/vnd.kde.kivio": { + "source": "iana", + "extensions": ["flw"] + }, + "application/vnd.kde.kontour": { + "source": "iana", + "extensions": ["kon"] + }, + "application/vnd.kde.kpresenter": { + "source": "iana", + "extensions": ["kpr","kpt"] + }, + "application/vnd.kde.kspread": { + "source": "iana", + "extensions": ["ksp"] + }, + "application/vnd.kde.kword": { + "source": "iana", + "extensions": ["kwd","kwt"] + }, + "application/vnd.kenameaapp": { + "source": "iana", + "extensions": ["htke"] + }, + "application/vnd.kidspiration": { + "source": "iana", + "extensions": ["kia"] + }, + "application/vnd.kinar": { + "source": "iana", + "extensions": ["kne","knp"] + }, + "application/vnd.koan": { + "source": "iana", + "extensions": ["skp","skd","skt","skm"] + }, + "application/vnd.kodak-descriptor": { + "source": "iana", + "extensions": ["sse"] + }, + "application/vnd.las": { + "source": "iana" + }, + "application/vnd.las.las+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.las.las+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lasxml"] + }, + "application/vnd.laszip": { + "source": "iana" + }, + "application/vnd.leap+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.liberty-request+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.llamagraphics.life-balance.desktop": { + "source": "iana", + "extensions": ["lbd"] + }, + "application/vnd.llamagraphics.life-balance.exchange+xml": { + "source": "iana", + "compressible": true, + "extensions": ["lbe"] + }, + "application/vnd.logipipe.circuit+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.loom": { + "source": "iana" + }, + "application/vnd.lotus-1-2-3": { + "source": "iana", + "extensions": ["123"] + }, + "application/vnd.lotus-approach": { + "source": "iana", + "extensions": ["apr"] + }, + "application/vnd.lotus-freelance": { + "source": "iana", + "extensions": ["pre"] + }, + "application/vnd.lotus-notes": { + "source": "iana", + "extensions": ["nsf"] + }, + "application/vnd.lotus-organizer": { + "source": "iana", + "extensions": ["org"] + }, + "application/vnd.lotus-screencam": { + "source": "iana", + "extensions": ["scm"] + }, + "application/vnd.lotus-wordpro": { + "source": "iana", + "extensions": ["lwp"] + }, + "application/vnd.macports.portpkg": { + "source": "iana", + "extensions": ["portpkg"] + }, + "application/vnd.mapbox-vector-tile": { + "source": "iana", + "extensions": ["mvt"] + }, + "application/vnd.marlin.drm.actiontoken+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.marlin.drm.conftoken+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.marlin.drm.license+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.marlin.drm.mdcf": { + "source": "iana" + }, + "application/vnd.mason+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.maxar.archive.3tz+zip": { + "source": "iana", + "compressible": false + }, + "application/vnd.maxmind.maxmind-db": { + "source": "iana" + }, + "application/vnd.mcd": { + "source": "iana", + "extensions": ["mcd"] + }, + "application/vnd.medcalcdata": { + "source": "iana", + "extensions": ["mc1"] + }, + "application/vnd.mediastation.cdkey": { + "source": "iana", + "extensions": ["cdkey"] + }, + "application/vnd.meridian-slingshot": { + "source": "iana" + }, + "application/vnd.mfer": { + "source": "iana", + "extensions": ["mwf"] + }, + "application/vnd.mfmp": { + "source": "iana", + "extensions": ["mfm"] + }, + "application/vnd.micro+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.micrografx.flo": { + "source": "iana", + "extensions": ["flo"] + }, + "application/vnd.micrografx.igx": { + "source": "iana", + "extensions": ["igx"] + }, + "application/vnd.microsoft.portable-executable": { + "source": "iana" + }, + "application/vnd.microsoft.windows.thumbnail-cache": { + "source": "iana" + }, + "application/vnd.miele+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.mif": { + "source": "iana", + "extensions": ["mif"] + }, + "application/vnd.minisoft-hp3000-save": { + "source": "iana" + }, + "application/vnd.mitsubishi.misty-guard.trustweb": { + "source": "iana" + }, + "application/vnd.mobius.daf": { + "source": "iana", + "extensions": ["daf"] + }, + "application/vnd.mobius.dis": { + "source": "iana", + "extensions": ["dis"] + }, + "application/vnd.mobius.mbk": { + "source": "iana", + "extensions": ["mbk"] + }, + "application/vnd.mobius.mqy": { + "source": "iana", + "extensions": ["mqy"] + }, + "application/vnd.mobius.msl": { + "source": "iana", + "extensions": ["msl"] + }, + "application/vnd.mobius.plc": { + "source": "iana", + "extensions": ["plc"] + }, + "application/vnd.mobius.txf": { + "source": "iana", + "extensions": ["txf"] + }, + "application/vnd.mophun.application": { + "source": "iana", + "extensions": ["mpn"] + }, + "application/vnd.mophun.certificate": { + "source": "iana", + "extensions": ["mpc"] + }, + "application/vnd.motorola.flexsuite": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.adsi": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.fis": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.gotap": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.kmr": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.ttc": { + "source": "iana" + }, + "application/vnd.motorola.flexsuite.wem": { + "source": "iana" + }, + "application/vnd.motorola.iprm": { + "source": "iana" + }, + "application/vnd.mozilla.xul+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xul"] + }, + "application/vnd.ms-3mfdocument": { + "source": "iana" + }, + "application/vnd.ms-artgalry": { + "source": "iana", + "extensions": ["cil"] + }, + "application/vnd.ms-asf": { + "source": "iana" + }, + "application/vnd.ms-cab-compressed": { + "source": "iana", + "extensions": ["cab"] + }, + "application/vnd.ms-color.iccprofile": { + "source": "apache" + }, + "application/vnd.ms-excel": { + "source": "iana", + "compressible": false, + "extensions": ["xls","xlm","xla","xlc","xlt","xlw"] + }, + "application/vnd.ms-excel.addin.macroenabled.12": { + "source": "iana", + "extensions": ["xlam"] + }, + "application/vnd.ms-excel.sheet.binary.macroenabled.12": { + "source": "iana", + "extensions": ["xlsb"] + }, + "application/vnd.ms-excel.sheet.macroenabled.12": { + "source": "iana", + "extensions": ["xlsm"] + }, + "application/vnd.ms-excel.template.macroenabled.12": { + "source": "iana", + "extensions": ["xltm"] + }, + "application/vnd.ms-fontobject": { + "source": "iana", + "compressible": true, + "extensions": ["eot"] + }, + "application/vnd.ms-htmlhelp": { + "source": "iana", + "extensions": ["chm"] + }, + "application/vnd.ms-ims": { + "source": "iana", + "extensions": ["ims"] + }, + "application/vnd.ms-lrm": { + "source": "iana", + "extensions": ["lrm"] + }, + "application/vnd.ms-office.activex+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-officetheme": { + "source": "iana", + "extensions": ["thmx"] + }, + "application/vnd.ms-opentype": { + "source": "apache", + "compressible": true + }, + "application/vnd.ms-outlook": { + "compressible": false, + "extensions": ["msg"] + }, + "application/vnd.ms-package.obfuscated-opentype": { + "source": "apache" + }, + "application/vnd.ms-pki.seccat": { + "source": "apache", + "extensions": ["cat"] + }, + "application/vnd.ms-pki.stl": { + "source": "apache", + "extensions": ["stl"] + }, + "application/vnd.ms-playready.initiator+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-powerpoint": { + "source": "iana", + "compressible": false, + "extensions": ["ppt","pps","pot"] + }, + "application/vnd.ms-powerpoint.addin.macroenabled.12": { + "source": "iana", + "extensions": ["ppam"] + }, + "application/vnd.ms-powerpoint.presentation.macroenabled.12": { + "source": "iana", + "extensions": ["pptm"] + }, + "application/vnd.ms-powerpoint.slide.macroenabled.12": { + "source": "iana", + "extensions": ["sldm"] + }, + "application/vnd.ms-powerpoint.slideshow.macroenabled.12": { + "source": "iana", + "extensions": ["ppsm"] + }, + "application/vnd.ms-powerpoint.template.macroenabled.12": { + "source": "iana", + "extensions": ["potm"] + }, + "application/vnd.ms-printdevicecapabilities+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-printing.printticket+xml": { + "source": "apache", + "compressible": true + }, + "application/vnd.ms-printschematicket+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.ms-project": { + "source": "iana", + "extensions": ["mpp","mpt"] + }, + "application/vnd.ms-tnef": { + "source": "iana" + }, + "application/vnd.ms-windows.devicepairing": { + "source": "iana" + }, + "application/vnd.ms-windows.nwprinting.oob": { + "source": "iana" + }, + "application/vnd.ms-windows.printerpairing": { + "source": "iana" + }, + "application/vnd.ms-windows.wsd.oob": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.lic-chlg-req": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.lic-resp": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.meter-chlg-req": { + "source": "iana" + }, + "application/vnd.ms-wmdrm.meter-resp": { + "source": "iana" + }, + "application/vnd.ms-word.document.macroenabled.12": { + "source": "iana", + "extensions": ["docm"] + }, + "application/vnd.ms-word.template.macroenabled.12": { + "source": "iana", + "extensions": ["dotm"] + }, + "application/vnd.ms-works": { + "source": "iana", + "extensions": ["wps","wks","wcm","wdb"] + }, + "application/vnd.ms-wpl": { + "source": "iana", + "extensions": ["wpl"] + }, + "application/vnd.ms-xpsdocument": { + "source": "iana", + "compressible": false, + "extensions": ["xps"] + }, + "application/vnd.msa-disk-image": { + "source": "iana" + }, + "application/vnd.mseq": { + "source": "iana", + "extensions": ["mseq"] + }, + "application/vnd.msign": { + "source": "iana" + }, + "application/vnd.multiad.creator": { + "source": "iana" + }, + "application/vnd.multiad.creator.cif": { + "source": "iana" + }, + "application/vnd.music-niff": { + "source": "iana" + }, + "application/vnd.musician": { + "source": "iana", + "extensions": ["mus"] + }, + "application/vnd.muvee.style": { + "source": "iana", + "extensions": ["msty"] + }, + "application/vnd.mynfc": { + "source": "iana", + "extensions": ["taglet"] + }, + "application/vnd.nacamar.ybrid+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.ncd.control": { + "source": "iana" + }, + "application/vnd.ncd.reference": { + "source": "iana" + }, + "application/vnd.nearst.inv+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.nebumind.line": { + "source": "iana" + }, + "application/vnd.nervana": { + "source": "iana" + }, + "application/vnd.netfpx": { + "source": "iana" + }, + "application/vnd.neurolanguage.nlu": { + "source": "iana", + "extensions": ["nlu"] + }, + "application/vnd.nimn": { + "source": "iana" + }, + "application/vnd.nintendo.nitro.rom": { + "source": "iana" + }, + "application/vnd.nintendo.snes.rom": { + "source": "iana" + }, + "application/vnd.nitf": { + "source": "iana", + "extensions": ["ntf","nitf"] + }, + "application/vnd.noblenet-directory": { + "source": "iana", + "extensions": ["nnd"] + }, + "application/vnd.noblenet-sealer": { + "source": "iana", + "extensions": ["nns"] + }, + "application/vnd.noblenet-web": { + "source": "iana", + "extensions": ["nnw"] + }, + "application/vnd.nokia.catalogs": { + "source": "iana" + }, + "application/vnd.nokia.conml+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.conml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.iptv.config+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.isds-radio-presets": { + "source": "iana" + }, + "application/vnd.nokia.landmark+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.landmark+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.landmarkcollection+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.n-gage.ac+xml": { + "source": "iana", + "compressible": true, + "extensions": ["ac"] + }, + "application/vnd.nokia.n-gage.data": { + "source": "iana", + "extensions": ["ngdat"] + }, + "application/vnd.nokia.n-gage.symbian.install": { + "source": "iana", + "extensions": ["n-gage"] + }, + "application/vnd.nokia.ncd": { + "source": "iana" + }, + "application/vnd.nokia.pcd+wbxml": { + "source": "iana" + }, + "application/vnd.nokia.pcd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.nokia.radio-preset": { + "source": "iana", + "extensions": ["rpst"] + }, + "application/vnd.nokia.radio-presets": { + "source": "iana", + "extensions": ["rpss"] + }, + "application/vnd.novadigm.edm": { + "source": "iana", + "extensions": ["edm"] + }, + "application/vnd.novadigm.edx": { + "source": "iana", + "extensions": ["edx"] + }, + "application/vnd.novadigm.ext": { + "source": "iana", + "extensions": ["ext"] + }, + "application/vnd.ntt-local.content-share": { + "source": "iana" + }, + "application/vnd.ntt-local.file-transfer": { + "source": "iana" + }, + "application/vnd.ntt-local.ogw_remote-access": { + "source": "iana" + }, + "application/vnd.ntt-local.sip-ta_remote": { + "source": "iana" + }, + "application/vnd.ntt-local.sip-ta_tcp_stream": { + "source": "iana" + }, + "application/vnd.oasis.opendocument.chart": { + "source": "iana", + "extensions": ["odc"] + }, + "application/vnd.oasis.opendocument.chart-template": { + "source": "iana", + "extensions": ["otc"] + }, + "application/vnd.oasis.opendocument.database": { + "source": "iana", + "extensions": ["odb"] + }, + "application/vnd.oasis.opendocument.formula": { + "source": "iana", + "extensions": ["odf"] + }, + "application/vnd.oasis.opendocument.formula-template": { + "source": "iana", + "extensions": ["odft"] + }, + "application/vnd.oasis.opendocument.graphics": { + "source": "iana", + "compressible": false, + "extensions": ["odg"] + }, + "application/vnd.oasis.opendocument.graphics-template": { + "source": "iana", + "extensions": ["otg"] + }, + "application/vnd.oasis.opendocument.image": { + "source": "iana", + "extensions": ["odi"] + }, + "application/vnd.oasis.opendocument.image-template": { + "source": "iana", + "extensions": ["oti"] + }, + "application/vnd.oasis.opendocument.presentation": { + "source": "iana", + "compressible": false, + "extensions": ["odp"] + }, + "application/vnd.oasis.opendocument.presentation-template": { + "source": "iana", + "extensions": ["otp"] + }, + "application/vnd.oasis.opendocument.spreadsheet": { + "source": "iana", + "compressible": false, + "extensions": ["ods"] + }, + "application/vnd.oasis.opendocument.spreadsheet-template": { + "source": "iana", + "extensions": ["ots"] + }, + "application/vnd.oasis.opendocument.text": { + "source": "iana", + "compressible": false, + "extensions": ["odt"] + }, + "application/vnd.oasis.opendocument.text-master": { + "source": "iana", + "extensions": ["odm"] + }, + "application/vnd.oasis.opendocument.text-template": { + "source": "iana", + "extensions": ["ott"] + }, + "application/vnd.oasis.opendocument.text-web": { + "source": "iana", + "extensions": ["oth"] + }, + "application/vnd.obn": { + "source": "iana" + }, + "application/vnd.ocf+cbor": { + "source": "iana" + }, + "application/vnd.oci.image.manifest.v1+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oftn.l10n+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.contentaccessdownload+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.contentaccessstreaming+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.cspg-hexbinary": { + "source": "iana" + }, + "application/vnd.oipf.dae.svg+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.dae.xhtml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.mippvcontrolmessage+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.pae.gem": { + "source": "iana" + }, + "application/vnd.oipf.spdiscovery+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.spdlist+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.ueprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oipf.userprofile+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.olpc-sugar": { + "source": "iana", + "extensions": ["xo"] + }, + "application/vnd.oma-scws-config": { + "source": "iana" + }, + "application/vnd.oma-scws-http-request": { + "source": "iana" + }, + "application/vnd.oma-scws-http-response": { + "source": "iana" + }, + "application/vnd.oma.bcast.associated-procedure-parameter+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.drm-trigger+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.imd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.ltkm": { + "source": "iana" + }, + "application/vnd.oma.bcast.notification+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.provisioningtrigger": { + "source": "iana" + }, + "application/vnd.oma.bcast.sgboot": { + "source": "iana" + }, + "application/vnd.oma.bcast.sgdd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.sgdu": { + "source": "iana" + }, + "application/vnd.oma.bcast.simple-symbol-container": { + "source": "iana" + }, + "application/vnd.oma.bcast.smartcard-trigger+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.sprov+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.bcast.stkm": { + "source": "iana" + }, + "application/vnd.oma.cab-address-book+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-feature-handler+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-pcc+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-subs-invite+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.cab-user-prefs+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.dcd": { + "source": "iana" + }, + "application/vnd.oma.dcdc": { + "source": "iana" + }, + "application/vnd.oma.dd2+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dd2"] + }, + "application/vnd.oma.drm.risd+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.group-usage-list+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.lwm2m+cbor": { + "source": "iana" + }, + "application/vnd.oma.lwm2m+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.lwm2m+tlv": { + "source": "iana" + }, + "application/vnd.oma.pal+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.detailed-progress-report+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.final-report+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.groups+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.invocation-descriptor+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.poc.optimized-progress-report+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.push": { + "source": "iana" + }, + "application/vnd.oma.scidm.messages+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oma.xcap-directory+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.omads-email+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.omads-file+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.omads-folder+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.omaloc-supl-init": { + "source": "iana" + }, + "application/vnd.onepager": { + "source": "iana" + }, + "application/vnd.onepagertamp": { + "source": "iana" + }, + "application/vnd.onepagertamx": { + "source": "iana" + }, + "application/vnd.onepagertat": { + "source": "iana" + }, + "application/vnd.onepagertatp": { + "source": "iana" + }, + "application/vnd.onepagertatx": { + "source": "iana" + }, + "application/vnd.openblox.game+xml": { + "source": "iana", + "compressible": true, + "extensions": ["obgx"] + }, + "application/vnd.openblox.game-binary": { + "source": "iana" + }, + "application/vnd.openeye.oeb": { + "source": "iana" + }, + "application/vnd.openofficeorg.extension": { + "source": "apache", + "extensions": ["oxt"] + }, + "application/vnd.openstreetmap.data+xml": { + "source": "iana", + "compressible": true, + "extensions": ["osm"] + }, + "application/vnd.opentimestamps.ots": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.custom-properties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawing+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.extended-properties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation": { + "source": "iana", + "compressible": false, + "extensions": ["pptx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide": { + "source": "iana", + "extensions": ["sldx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow": { + "source": "iana", + "extensions": ["ppsx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.template": { + "source": "iana", + "extensions": ["potx"] + }, + "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": { + "source": "iana", + "compressible": false, + "extensions": ["xlsx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template": { + "source": "iana", + "extensions": ["xltx"] + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.theme+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.themeoverride+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.vmldrawing": { + "source": "iana" + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document": { + "source": "iana", + "compressible": false, + "extensions": ["docx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template": { + "source": "iana", + "extensions": ["dotx"] + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-package.core-properties+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.openxmlformats-package.relationships+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oracle.resource+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.orange.indata": { + "source": "iana" + }, + "application/vnd.osa.netdeploy": { + "source": "iana" + }, + "application/vnd.osgeo.mapguide.package": { + "source": "iana", + "extensions": ["mgp"] + }, + "application/vnd.osgi.bundle": { + "source": "iana" + }, + "application/vnd.osgi.dp": { + "source": "iana", + "extensions": ["dp"] + }, + "application/vnd.osgi.subsystem": { + "source": "iana", + "extensions": ["esa"] + }, + "application/vnd.otps.ct-kip+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.oxli.countgraph": { + "source": "iana" + }, + "application/vnd.pagerduty+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.palm": { + "source": "iana", + "extensions": ["pdb","pqa","oprc"] + }, + "application/vnd.panoply": { + "source": "iana" + }, + "application/vnd.paos.xml": { + "source": "iana" + }, + "application/vnd.patentdive": { + "source": "iana" + }, + "application/vnd.patientecommsdoc": { + "source": "iana" + }, + "application/vnd.pawaafile": { + "source": "iana", + "extensions": ["paw"] + }, + "application/vnd.pcos": { + "source": "iana" + }, + "application/vnd.pg.format": { + "source": "iana", + "extensions": ["str"] + }, + "application/vnd.pg.osasli": { + "source": "iana", + "extensions": ["ei6"] + }, + "application/vnd.piaccess.application-licence": { + "source": "iana" + }, + "application/vnd.picsel": { + "source": "iana", + "extensions": ["efif"] + }, + "application/vnd.pmi.widget": { + "source": "iana", + "extensions": ["wg"] + }, + "application/vnd.poc.group-advertisement+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.pocketlearn": { + "source": "iana", + "extensions": ["plf"] + }, + "application/vnd.powerbuilder6": { + "source": "iana", + "extensions": ["pbd"] + }, + "application/vnd.powerbuilder6-s": { + "source": "iana" + }, + "application/vnd.powerbuilder7": { + "source": "iana" + }, + "application/vnd.powerbuilder7-s": { + "source": "iana" + }, + "application/vnd.powerbuilder75": { + "source": "iana" + }, + "application/vnd.powerbuilder75-s": { + "source": "iana" + }, + "application/vnd.preminet": { + "source": "iana" + }, + "application/vnd.previewsystems.box": { + "source": "iana", + "extensions": ["box"] + }, + "application/vnd.proteus.magazine": { + "source": "iana", + "extensions": ["mgz"] + }, + "application/vnd.psfs": { + "source": "iana" + }, + "application/vnd.publishare-delta-tree": { + "source": "iana", + "extensions": ["qps"] + }, + "application/vnd.pvi.ptid1": { + "source": "iana", + "extensions": ["ptid"] + }, + "application/vnd.pwg-multiplexed": { + "source": "iana" + }, + "application/vnd.pwg-xhtml-print+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.qualcomm.brew-app-res": { + "source": "iana" + }, + "application/vnd.quarantainenet": { + "source": "iana" + }, + "application/vnd.quark.quarkxpress": { + "source": "iana", + "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"] + }, + "application/vnd.quobject-quoxdocument": { + "source": "iana" + }, + "application/vnd.radisys.moml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-conf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-conn+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-dialog+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-audit-stream+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-conf+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-base+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-fax-detect+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-group+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-speech+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.radisys.msml-dialog-transform+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.rainstor.data": { + "source": "iana" + }, + "application/vnd.rapid": { + "source": "iana" + }, + "application/vnd.rar": { + "source": "iana", + "extensions": ["rar"] + }, + "application/vnd.realvnc.bed": { + "source": "iana", + "extensions": ["bed"] + }, + "application/vnd.recordare.musicxml": { + "source": "iana", + "extensions": ["mxl"] + }, + "application/vnd.recordare.musicxml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["musicxml"] + }, + "application/vnd.renlearn.rlprint": { + "source": "iana" + }, + "application/vnd.resilient.logic": { + "source": "iana" + }, + "application/vnd.restful+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.rig.cryptonote": { + "source": "iana", + "extensions": ["cryptonote"] + }, + "application/vnd.rim.cod": { + "source": "apache", + "extensions": ["cod"] + }, + "application/vnd.rn-realmedia": { + "source": "apache", + "extensions": ["rm"] + }, + "application/vnd.rn-realmedia-vbr": { + "source": "apache", + "extensions": ["rmvb"] + }, + "application/vnd.route66.link66+xml": { + "source": "iana", + "compressible": true, + "extensions": ["link66"] + }, + "application/vnd.rs-274x": { + "source": "iana" + }, + "application/vnd.ruckus.download": { + "source": "iana" + }, + "application/vnd.s3sms": { + "source": "iana" + }, + "application/vnd.sailingtracker.track": { + "source": "iana", + "extensions": ["st"] + }, + "application/vnd.sar": { + "source": "iana" + }, + "application/vnd.sbm.cid": { + "source": "iana" + }, + "application/vnd.sbm.mid2": { + "source": "iana" + }, + "application/vnd.scribus": { + "source": "iana" + }, + "application/vnd.sealed.3df": { + "source": "iana" + }, + "application/vnd.sealed.csf": { + "source": "iana" + }, + "application/vnd.sealed.doc": { + "source": "iana" + }, + "application/vnd.sealed.eml": { + "source": "iana" + }, + "application/vnd.sealed.mht": { + "source": "iana" + }, + "application/vnd.sealed.net": { + "source": "iana" + }, + "application/vnd.sealed.ppt": { + "source": "iana" + }, + "application/vnd.sealed.tiff": { + "source": "iana" + }, + "application/vnd.sealed.xls": { + "source": "iana" + }, + "application/vnd.sealedmedia.softseal.html": { + "source": "iana" + }, + "application/vnd.sealedmedia.softseal.pdf": { + "source": "iana" + }, + "application/vnd.seemail": { + "source": "iana", + "extensions": ["see"] + }, + "application/vnd.seis+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.sema": { + "source": "iana", + "extensions": ["sema"] + }, + "application/vnd.semd": { + "source": "iana", + "extensions": ["semd"] + }, + "application/vnd.semf": { + "source": "iana", + "extensions": ["semf"] + }, + "application/vnd.shade-save-file": { + "source": "iana" + }, + "application/vnd.shana.informed.formdata": { + "source": "iana", + "extensions": ["ifm"] + }, + "application/vnd.shana.informed.formtemplate": { + "source": "iana", + "extensions": ["itp"] + }, + "application/vnd.shana.informed.interchange": { + "source": "iana", + "extensions": ["iif"] + }, + "application/vnd.shana.informed.package": { + "source": "iana", + "extensions": ["ipk"] + }, + "application/vnd.shootproof+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.shopkick+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.shp": { + "source": "iana" + }, + "application/vnd.shx": { + "source": "iana" + }, + "application/vnd.sigrok.session": { + "source": "iana" + }, + "application/vnd.simtech-mindmapper": { + "source": "iana", + "extensions": ["twd","twds"] + }, + "application/vnd.siren+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.smaf": { + "source": "iana", + "extensions": ["mmf"] + }, + "application/vnd.smart.notebook": { + "source": "iana" + }, + "application/vnd.smart.teacher": { + "source": "iana", + "extensions": ["teacher"] + }, + "application/vnd.snesdev-page-table": { + "source": "iana" + }, + "application/vnd.software602.filler.form+xml": { + "source": "iana", + "compressible": true, + "extensions": ["fo"] + }, + "application/vnd.software602.filler.form-xml-zip": { + "source": "iana" + }, + "application/vnd.solent.sdkm+xml": { + "source": "iana", + "compressible": true, + "extensions": ["sdkm","sdkd"] + }, + "application/vnd.spotfire.dxp": { + "source": "iana", + "extensions": ["dxp"] + }, + "application/vnd.spotfire.sfs": { + "source": "iana", + "extensions": ["sfs"] + }, + "application/vnd.sqlite3": { + "source": "iana" + }, + "application/vnd.sss-cod": { + "source": "iana" + }, + "application/vnd.sss-dtf": { + "source": "iana" + }, + "application/vnd.sss-ntf": { + "source": "iana" + }, + "application/vnd.stardivision.calc": { + "source": "apache", + "extensions": ["sdc"] + }, + "application/vnd.stardivision.draw": { + "source": "apache", + "extensions": ["sda"] + }, + "application/vnd.stardivision.impress": { + "source": "apache", + "extensions": ["sdd"] + }, + "application/vnd.stardivision.math": { + "source": "apache", + "extensions": ["smf"] + }, + "application/vnd.stardivision.writer": { + "source": "apache", + "extensions": ["sdw","vor"] + }, + "application/vnd.stardivision.writer-global": { + "source": "apache", + "extensions": ["sgl"] + }, + "application/vnd.stepmania.package": { + "source": "iana", + "extensions": ["smzip"] + }, + "application/vnd.stepmania.stepchart": { + "source": "iana", + "extensions": ["sm"] + }, + "application/vnd.street-stream": { + "source": "iana" + }, + "application/vnd.sun.wadl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wadl"] + }, + "application/vnd.sun.xml.calc": { + "source": "apache", + "extensions": ["sxc"] + }, + "application/vnd.sun.xml.calc.template": { + "source": "apache", + "extensions": ["stc"] + }, + "application/vnd.sun.xml.draw": { + "source": "apache", + "extensions": ["sxd"] + }, + "application/vnd.sun.xml.draw.template": { + "source": "apache", + "extensions": ["std"] + }, + "application/vnd.sun.xml.impress": { + "source": "apache", + "extensions": ["sxi"] + }, + "application/vnd.sun.xml.impress.template": { + "source": "apache", + "extensions": ["sti"] + }, + "application/vnd.sun.xml.math": { + "source": "apache", + "extensions": ["sxm"] + }, + "application/vnd.sun.xml.writer": { + "source": "apache", + "extensions": ["sxw"] + }, + "application/vnd.sun.xml.writer.global": { + "source": "apache", + "extensions": ["sxg"] + }, + "application/vnd.sun.xml.writer.template": { + "source": "apache", + "extensions": ["stw"] + }, + "application/vnd.sus-calendar": { + "source": "iana", + "extensions": ["sus","susp"] + }, + "application/vnd.svd": { + "source": "iana", + "extensions": ["svd"] + }, + "application/vnd.swiftview-ics": { + "source": "iana" + }, + "application/vnd.sycle+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.syft+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.symbian.install": { + "source": "apache", + "extensions": ["sis","sisx"] + }, + "application/vnd.syncml+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["xsm"] + }, + "application/vnd.syncml.dm+wbxml": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["bdm"] + }, + "application/vnd.syncml.dm+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["xdm"] + }, + "application/vnd.syncml.dm.notification": { + "source": "iana" + }, + "application/vnd.syncml.dmddf+wbxml": { + "source": "iana" + }, + "application/vnd.syncml.dmddf+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["ddf"] + }, + "application/vnd.syncml.dmtnds+wbxml": { + "source": "iana" + }, + "application/vnd.syncml.dmtnds+xml": { + "source": "iana", + "charset": "UTF-8", + "compressible": true + }, + "application/vnd.syncml.ds.notification": { + "source": "iana" + }, + "application/vnd.tableschema+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.tao.intent-module-archive": { + "source": "iana", + "extensions": ["tao"] + }, + "application/vnd.tcpdump.pcap": { + "source": "iana", + "extensions": ["pcap","cap","dmp"] + }, + "application/vnd.think-cell.ppttc+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.tmd.mediaflex.api+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.tml": { + "source": "iana" + }, + "application/vnd.tmobile-livetv": { + "source": "iana", + "extensions": ["tmo"] + }, + "application/vnd.tri.onesource": { + "source": "iana" + }, + "application/vnd.trid.tpt": { + "source": "iana", + "extensions": ["tpt"] + }, + "application/vnd.triscape.mxs": { + "source": "iana", + "extensions": ["mxs"] + }, + "application/vnd.trueapp": { + "source": "iana", + "extensions": ["tra"] + }, + "application/vnd.truedoc": { + "source": "iana" + }, + "application/vnd.ubisoft.webplayer": { + "source": "iana" + }, + "application/vnd.ufdl": { + "source": "iana", + "extensions": ["ufd","ufdl"] + }, + "application/vnd.uiq.theme": { + "source": "iana", + "extensions": ["utz"] + }, + "application/vnd.umajin": { + "source": "iana", + "extensions": ["umj"] + }, + "application/vnd.unity": { + "source": "iana", + "extensions": ["unityweb"] + }, + "application/vnd.uoml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["uoml"] + }, + "application/vnd.uplanet.alert": { + "source": "iana" + }, + "application/vnd.uplanet.alert-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.bearer-choice": { + "source": "iana" + }, + "application/vnd.uplanet.bearer-choice-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.cacheop": { + "source": "iana" + }, + "application/vnd.uplanet.cacheop-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.channel": { + "source": "iana" + }, + "application/vnd.uplanet.channel-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.list": { + "source": "iana" + }, + "application/vnd.uplanet.list-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.listcmd": { + "source": "iana" + }, + "application/vnd.uplanet.listcmd-wbxml": { + "source": "iana" + }, + "application/vnd.uplanet.signal": { + "source": "iana" + }, + "application/vnd.uri-map": { + "source": "iana" + }, + "application/vnd.valve.source.material": { + "source": "iana" + }, + "application/vnd.vcx": { + "source": "iana", + "extensions": ["vcx"] + }, + "application/vnd.vd-study": { + "source": "iana" + }, + "application/vnd.vectorworks": { + "source": "iana" + }, + "application/vnd.vel+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.verimatrix.vcas": { + "source": "iana" + }, + "application/vnd.veritone.aion+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.veryant.thin": { + "source": "iana" + }, + "application/vnd.ves.encrypted": { + "source": "iana" + }, + "application/vnd.vidsoft.vidconference": { + "source": "iana" + }, + "application/vnd.visio": { + "source": "iana", + "extensions": ["vsd","vst","vss","vsw"] + }, + "application/vnd.visionary": { + "source": "iana", + "extensions": ["vis"] + }, + "application/vnd.vividence.scriptfile": { + "source": "iana" + }, + "application/vnd.vsf": { + "source": "iana", + "extensions": ["vsf"] + }, + "application/vnd.wap.sic": { + "source": "iana" + }, + "application/vnd.wap.slc": { + "source": "iana" + }, + "application/vnd.wap.wbxml": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["wbxml"] + }, + "application/vnd.wap.wmlc": { + "source": "iana", + "extensions": ["wmlc"] + }, + "application/vnd.wap.wmlscriptc": { + "source": "iana", + "extensions": ["wmlsc"] + }, + "application/vnd.webturbo": { + "source": "iana", + "extensions": ["wtb"] + }, + "application/vnd.wfa.dpp": { + "source": "iana" + }, + "application/vnd.wfa.p2p": { + "source": "iana" + }, + "application/vnd.wfa.wsc": { + "source": "iana" + }, + "application/vnd.windows.devicepairing": { + "source": "iana" + }, + "application/vnd.wmc": { + "source": "iana" + }, + "application/vnd.wmf.bootstrap": { + "source": "iana" + }, + "application/vnd.wolfram.mathematica": { + "source": "iana" + }, + "application/vnd.wolfram.mathematica.package": { + "source": "iana" + }, + "application/vnd.wolfram.player": { + "source": "iana", + "extensions": ["nbp"] + }, + "application/vnd.wordperfect": { + "source": "iana", + "extensions": ["wpd"] + }, + "application/vnd.wqd": { + "source": "iana", + "extensions": ["wqd"] + }, + "application/vnd.wrq-hp3000-labelled": { + "source": "iana" + }, + "application/vnd.wt.stf": { + "source": "iana", + "extensions": ["stf"] + }, + "application/vnd.wv.csp+wbxml": { + "source": "iana" + }, + "application/vnd.wv.csp+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.wv.ssp+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.xacml+json": { + "source": "iana", + "compressible": true + }, + "application/vnd.xara": { + "source": "iana", + "extensions": ["xar"] + }, + "application/vnd.xfdl": { + "source": "iana", + "extensions": ["xfdl"] + }, + "application/vnd.xfdl.webform": { + "source": "iana" + }, + "application/vnd.xmi+xml": { + "source": "iana", + "compressible": true + }, + "application/vnd.xmpie.cpkg": { + "source": "iana" + }, + "application/vnd.xmpie.dpkg": { + "source": "iana" + }, + "application/vnd.xmpie.plan": { + "source": "iana" + }, + "application/vnd.xmpie.ppkg": { + "source": "iana" + }, + "application/vnd.xmpie.xlim": { + "source": "iana" + }, + "application/vnd.yamaha.hv-dic": { + "source": "iana", + "extensions": ["hvd"] + }, + "application/vnd.yamaha.hv-script": { + "source": "iana", + "extensions": ["hvs"] + }, + "application/vnd.yamaha.hv-voice": { + "source": "iana", + "extensions": ["hvp"] + }, + "application/vnd.yamaha.openscoreformat": { + "source": "iana", + "extensions": ["osf"] + }, + "application/vnd.yamaha.openscoreformat.osfpvg+xml": { + "source": "iana", + "compressible": true, + "extensions": ["osfpvg"] + }, + "application/vnd.yamaha.remote-setup": { + "source": "iana" + }, + "application/vnd.yamaha.smaf-audio": { + "source": "iana", + "extensions": ["saf"] + }, + "application/vnd.yamaha.smaf-phrase": { + "source": "iana", + "extensions": ["spf"] + }, + "application/vnd.yamaha.through-ngn": { + "source": "iana" + }, + "application/vnd.yamaha.tunnel-udpencap": { + "source": "iana" + }, + "application/vnd.yaoweme": { + "source": "iana" + }, + "application/vnd.yellowriver-custom-menu": { + "source": "iana", + "extensions": ["cmp"] + }, + "application/vnd.youtube.yt": { + "source": "iana" + }, + "application/vnd.zul": { + "source": "iana", + "extensions": ["zir","zirz"] + }, + "application/vnd.zzazz.deck+xml": { + "source": "iana", + "compressible": true, + "extensions": ["zaz"] + }, + "application/voicexml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["vxml"] + }, + "application/voucher-cms+json": { + "source": "iana", + "compressible": true + }, + "application/vq-rtcpxr": { + "source": "iana" + }, + "application/wasm": { + "source": "iana", + "compressible": true, + "extensions": ["wasm"] + }, + "application/watcherinfo+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wif"] + }, + "application/webpush-options+json": { + "source": "iana", + "compressible": true + }, + "application/whoispp-query": { + "source": "iana" + }, + "application/whoispp-response": { + "source": "iana" + }, + "application/widget": { + "source": "iana", + "extensions": ["wgt"] + }, + "application/winhlp": { + "source": "apache", + "extensions": ["hlp"] + }, + "application/wita": { + "source": "iana" + }, + "application/wordperfect5.1": { + "source": "iana" + }, + "application/wsdl+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wsdl"] + }, + "application/wspolicy+xml": { + "source": "iana", + "compressible": true, + "extensions": ["wspolicy"] + }, + "application/x-7z-compressed": { + "source": "apache", + "compressible": false, + "extensions": ["7z"] + }, + "application/x-abiword": { + "source": "apache", + "extensions": ["abw"] + }, + "application/x-ace-compressed": { + "source": "apache", + "extensions": ["ace"] + }, + "application/x-amf": { + "source": "apache" + }, + "application/x-apple-diskimage": { + "source": "apache", + "extensions": ["dmg"] + }, + "application/x-arj": { + "compressible": false, + "extensions": ["arj"] + }, + "application/x-authorware-bin": { + "source": "apache", + "extensions": ["aab","x32","u32","vox"] + }, + "application/x-authorware-map": { + "source": "apache", + "extensions": ["aam"] + }, + "application/x-authorware-seg": { + "source": "apache", + "extensions": ["aas"] + }, + "application/x-bcpio": { + "source": "apache", + "extensions": ["bcpio"] + }, + "application/x-bdoc": { + "compressible": false, + "extensions": ["bdoc"] + }, + "application/x-bittorrent": { + "source": "apache", + "extensions": ["torrent"] + }, + "application/x-blorb": { + "source": "apache", + "extensions": ["blb","blorb"] + }, + "application/x-bzip": { + "source": "apache", + "compressible": false, + "extensions": ["bz"] + }, + "application/x-bzip2": { + "source": "apache", + "compressible": false, + "extensions": ["bz2","boz"] + }, + "application/x-cbr": { + "source": "apache", + "extensions": ["cbr","cba","cbt","cbz","cb7"] + }, + "application/x-cdlink": { + "source": "apache", + "extensions": ["vcd"] + }, + "application/x-cfs-compressed": { + "source": "apache", + "extensions": ["cfs"] + }, + "application/x-chat": { + "source": "apache", + "extensions": ["chat"] + }, + "application/x-chess-pgn": { + "source": "apache", + "extensions": ["pgn"] + }, + "application/x-chrome-extension": { + "extensions": ["crx"] + }, + "application/x-cocoa": { + "source": "nginx", + "extensions": ["cco"] + }, + "application/x-compress": { + "source": "apache" + }, + "application/x-conference": { + "source": "apache", + "extensions": ["nsc"] + }, + "application/x-cpio": { + "source": "apache", + "extensions": ["cpio"] + }, + "application/x-csh": { + "source": "apache", + "extensions": ["csh"] + }, + "application/x-deb": { + "compressible": false + }, + "application/x-debian-package": { + "source": "apache", + "extensions": ["deb","udeb"] + }, + "application/x-dgc-compressed": { + "source": "apache", + "extensions": ["dgc"] + }, + "application/x-director": { + "source": "apache", + "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"] + }, + "application/x-doom": { + "source": "apache", + "extensions": ["wad"] + }, + "application/x-dtbncx+xml": { + "source": "apache", + "compressible": true, + "extensions": ["ncx"] + }, + "application/x-dtbook+xml": { + "source": "apache", + "compressible": true, + "extensions": ["dtb"] + }, + "application/x-dtbresource+xml": { + "source": "apache", + "compressible": true, + "extensions": ["res"] + }, + "application/x-dvi": { + "source": "apache", + "compressible": false, + "extensions": ["dvi"] + }, + "application/x-envoy": { + "source": "apache", + "extensions": ["evy"] + }, + "application/x-eva": { + "source": "apache", + "extensions": ["eva"] + }, + "application/x-font-bdf": { + "source": "apache", + "extensions": ["bdf"] + }, + "application/x-font-dos": { + "source": "apache" + }, + "application/x-font-framemaker": { + "source": "apache" + }, + "application/x-font-ghostscript": { + "source": "apache", + "extensions": ["gsf"] + }, + "application/x-font-libgrx": { + "source": "apache" + }, + "application/x-font-linux-psf": { + "source": "apache", + "extensions": ["psf"] + }, + "application/x-font-pcf": { + "source": "apache", + "extensions": ["pcf"] + }, + "application/x-font-snf": { + "source": "apache", + "extensions": ["snf"] + }, + "application/x-font-speedo": { + "source": "apache" + }, + "application/x-font-sunos-news": { + "source": "apache" + }, + "application/x-font-type1": { + "source": "apache", + "extensions": ["pfa","pfb","pfm","afm"] + }, + "application/x-font-vfont": { + "source": "apache" + }, + "application/x-freearc": { + "source": "apache", + "extensions": ["arc"] + }, + "application/x-futuresplash": { + "source": "apache", + "extensions": ["spl"] + }, + "application/x-gca-compressed": { + "source": "apache", + "extensions": ["gca"] + }, + "application/x-glulx": { + "source": "apache", + "extensions": ["ulx"] + }, + "application/x-gnumeric": { + "source": "apache", + "extensions": ["gnumeric"] + }, + "application/x-gramps-xml": { + "source": "apache", + "extensions": ["gramps"] + }, + "application/x-gtar": { + "source": "apache", + "extensions": ["gtar"] + }, + "application/x-gzip": { + "source": "apache" + }, + "application/x-hdf": { + "source": "apache", + "extensions": ["hdf"] + }, + "application/x-httpd-php": { + "compressible": true, + "extensions": ["php"] + }, + "application/x-install-instructions": { + "source": "apache", + "extensions": ["install"] + }, + "application/x-iso9660-image": { + "source": "apache", + "extensions": ["iso"] + }, + "application/x-iwork-keynote-sffkey": { + "extensions": ["key"] + }, + "application/x-iwork-numbers-sffnumbers": { + "extensions": ["numbers"] + }, + "application/x-iwork-pages-sffpages": { + "extensions": ["pages"] + }, + "application/x-java-archive-diff": { + "source": "nginx", + "extensions": ["jardiff"] + }, + "application/x-java-jnlp-file": { + "source": "apache", + "compressible": false, + "extensions": ["jnlp"] + }, + "application/x-javascript": { + "compressible": true + }, + "application/x-keepass2": { + "extensions": ["kdbx"] + }, + "application/x-latex": { + "source": "apache", + "compressible": false, + "extensions": ["latex"] + }, + "application/x-lua-bytecode": { + "extensions": ["luac"] + }, + "application/x-lzh-compressed": { + "source": "apache", + "extensions": ["lzh","lha"] + }, + "application/x-makeself": { + "source": "nginx", + "extensions": ["run"] + }, + "application/x-mie": { + "source": "apache", + "extensions": ["mie"] + }, + "application/x-mobipocket-ebook": { + "source": "apache", + "extensions": ["prc","mobi"] + }, + "application/x-mpegurl": { + "compressible": false + }, + "application/x-ms-application": { + "source": "apache", + "extensions": ["application"] + }, + "application/x-ms-shortcut": { + "source": "apache", + "extensions": ["lnk"] + }, + "application/x-ms-wmd": { + "source": "apache", + "extensions": ["wmd"] + }, + "application/x-ms-wmz": { + "source": "apache", + "extensions": ["wmz"] + }, + "application/x-ms-xbap": { + "source": "apache", + "extensions": ["xbap"] + }, + "application/x-msaccess": { + "source": "apache", + "extensions": ["mdb"] + }, + "application/x-msbinder": { + "source": "apache", + "extensions": ["obd"] + }, + "application/x-mscardfile": { + "source": "apache", + "extensions": ["crd"] + }, + "application/x-msclip": { + "source": "apache", + "extensions": ["clp"] + }, + "application/x-msdos-program": { + "extensions": ["exe"] + }, + "application/x-msdownload": { + "source": "apache", + "extensions": ["exe","dll","com","bat","msi"] + }, + "application/x-msmediaview": { + "source": "apache", + "extensions": ["mvb","m13","m14"] + }, + "application/x-msmetafile": { + "source": "apache", + "extensions": ["wmf","wmz","emf","emz"] + }, + "application/x-msmoney": { + "source": "apache", + "extensions": ["mny"] + }, + "application/x-mspublisher": { + "source": "apache", + "extensions": ["pub"] + }, + "application/x-msschedule": { + "source": "apache", + "extensions": ["scd"] + }, + "application/x-msterminal": { + "source": "apache", + "extensions": ["trm"] + }, + "application/x-mswrite": { + "source": "apache", + "extensions": ["wri"] + }, + "application/x-netcdf": { + "source": "apache", + "extensions": ["nc","cdf"] + }, + "application/x-ns-proxy-autoconfig": { + "compressible": true, + "extensions": ["pac"] + }, + "application/x-nzb": { + "source": "apache", + "extensions": ["nzb"] + }, + "application/x-perl": { + "source": "nginx", + "extensions": ["pl","pm"] + }, + "application/x-pilot": { + "source": "nginx", + "extensions": ["prc","pdb"] + }, + "application/x-pkcs12": { + "source": "apache", + "compressible": false, + "extensions": ["p12","pfx"] + }, + "application/x-pkcs7-certificates": { + "source": "apache", + "extensions": ["p7b","spc"] + }, + "application/x-pkcs7-certreqresp": { + "source": "apache", + "extensions": ["p7r"] + }, + "application/x-pki-message": { + "source": "iana" + }, + "application/x-rar-compressed": { + "source": "apache", + "compressible": false, + "extensions": ["rar"] + }, + "application/x-redhat-package-manager": { + "source": "nginx", + "extensions": ["rpm"] + }, + "application/x-research-info-systems": { + "source": "apache", + "extensions": ["ris"] + }, + "application/x-sea": { + "source": "nginx", + "extensions": ["sea"] + }, + "application/x-sh": { + "source": "apache", + "compressible": true, + "extensions": ["sh"] + }, + "application/x-shar": { + "source": "apache", + "extensions": ["shar"] + }, + "application/x-shockwave-flash": { + "source": "apache", + "compressible": false, + "extensions": ["swf"] + }, + "application/x-silverlight-app": { + "source": "apache", + "extensions": ["xap"] + }, + "application/x-sql": { + "source": "apache", + "extensions": ["sql"] + }, + "application/x-stuffit": { + "source": "apache", + "compressible": false, + "extensions": ["sit"] + }, + "application/x-stuffitx": { + "source": "apache", + "extensions": ["sitx"] + }, + "application/x-subrip": { + "source": "apache", + "extensions": ["srt"] + }, + "application/x-sv4cpio": { + "source": "apache", + "extensions": ["sv4cpio"] + }, + "application/x-sv4crc": { + "source": "apache", + "extensions": ["sv4crc"] + }, + "application/x-t3vm-image": { + "source": "apache", + "extensions": ["t3"] + }, + "application/x-tads": { + "source": "apache", + "extensions": ["gam"] + }, + "application/x-tar": { + "source": "apache", + "compressible": true, + "extensions": ["tar"] + }, + "application/x-tcl": { + "source": "apache", + "extensions": ["tcl","tk"] + }, + "application/x-tex": { + "source": "apache", + "extensions": ["tex"] + }, + "application/x-tex-tfm": { + "source": "apache", + "extensions": ["tfm"] + }, + "application/x-texinfo": { + "source": "apache", + "extensions": ["texinfo","texi"] + }, + "application/x-tgif": { + "source": "apache", + "extensions": ["obj"] + }, + "application/x-ustar": { + "source": "apache", + "extensions": ["ustar"] + }, + "application/x-virtualbox-hdd": { + "compressible": true, + "extensions": ["hdd"] + }, + "application/x-virtualbox-ova": { + "compressible": true, + "extensions": ["ova"] + }, + "application/x-virtualbox-ovf": { + "compressible": true, + "extensions": ["ovf"] + }, + "application/x-virtualbox-vbox": { + "compressible": true, + "extensions": ["vbox"] + }, + "application/x-virtualbox-vbox-extpack": { + "compressible": false, + "extensions": ["vbox-extpack"] + }, + "application/x-virtualbox-vdi": { + "compressible": true, + "extensions": ["vdi"] + }, + "application/x-virtualbox-vhd": { + "compressible": true, + "extensions": ["vhd"] + }, + "application/x-virtualbox-vmdk": { + "compressible": true, + "extensions": ["vmdk"] + }, + "application/x-wais-source": { + "source": "apache", + "extensions": ["src"] + }, + "application/x-web-app-manifest+json": { + "compressible": true, + "extensions": ["webapp"] + }, + "application/x-www-form-urlencoded": { + "source": "iana", + "compressible": true + }, + "application/x-x509-ca-cert": { + "source": "iana", + "extensions": ["der","crt","pem"] + }, + "application/x-x509-ca-ra-cert": { + "source": "iana" + }, + "application/x-x509-next-ca-cert": { + "source": "iana" + }, + "application/x-xfig": { + "source": "apache", + "extensions": ["fig"] + }, + "application/x-xliff+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xlf"] + }, + "application/x-xpinstall": { + "source": "apache", + "compressible": false, + "extensions": ["xpi"] + }, + "application/x-xz": { + "source": "apache", + "extensions": ["xz"] + }, + "application/x-zmachine": { + "source": "apache", + "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"] + }, + "application/x400-bp": { + "source": "iana" + }, + "application/xacml+xml": { + "source": "iana", + "compressible": true + }, + "application/xaml+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xaml"] + }, + "application/xcap-att+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xav"] + }, + "application/xcap-caps+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xca"] + }, + "application/xcap-diff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xdf"] + }, + "application/xcap-el+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xel"] + }, + "application/xcap-error+xml": { + "source": "iana", + "compressible": true + }, + "application/xcap-ns+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xns"] + }, + "application/xcon-conference-info+xml": { + "source": "iana", + "compressible": true + }, + "application/xcon-conference-info-diff+xml": { + "source": "iana", + "compressible": true + }, + "application/xenc+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xenc"] + }, + "application/xhtml+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xhtml","xht"] + }, + "application/xhtml-voice+xml": { + "source": "apache", + "compressible": true + }, + "application/xliff+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xlf"] + }, + "application/xml": { + "source": "iana", + "compressible": true, + "extensions": ["xml","xsl","xsd","rng"] + }, + "application/xml-dtd": { + "source": "iana", + "compressible": true, + "extensions": ["dtd"] + }, + "application/xml-external-parsed-entity": { + "source": "iana" + }, + "application/xml-patch+xml": { + "source": "iana", + "compressible": true + }, + "application/xmpp+xml": { + "source": "iana", + "compressible": true + }, + "application/xop+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xop"] + }, + "application/xproc+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xpl"] + }, + "application/xslt+xml": { + "source": "iana", + "compressible": true, + "extensions": ["xsl","xslt"] + }, + "application/xspf+xml": { + "source": "apache", + "compressible": true, + "extensions": ["xspf"] + }, + "application/xv+xml": { + "source": "iana", + "compressible": true, + "extensions": ["mxml","xhvml","xvml","xvm"] + }, + "application/yang": { + "source": "iana", + "extensions": ["yang"] + }, + "application/yang-data+json": { + "source": "iana", + "compressible": true + }, + "application/yang-data+xml": { + "source": "iana", + "compressible": true + }, + "application/yang-patch+json": { + "source": "iana", + "compressible": true + }, + "application/yang-patch+xml": { + "source": "iana", + "compressible": true + }, + "application/yin+xml": { + "source": "iana", + "compressible": true, + "extensions": ["yin"] + }, + "application/zip": { + "source": "iana", + "compressible": false, + "extensions": ["zip"] + }, + "application/zlib": { + "source": "iana" + }, + "application/zstd": { + "source": "iana" + }, + "audio/1d-interleaved-parityfec": { + "source": "iana" + }, + "audio/32kadpcm": { + "source": "iana" + }, + "audio/3gpp": { + "source": "iana", + "compressible": false, + "extensions": ["3gpp"] + }, + "audio/3gpp2": { + "source": "iana" + }, + "audio/aac": { + "source": "iana" + }, + "audio/ac3": { + "source": "iana" + }, + "audio/adpcm": { + "source": "apache", + "extensions": ["adp"] + }, + "audio/amr": { + "source": "iana", + "extensions": ["amr"] + }, + "audio/amr-wb": { + "source": "iana" + }, + "audio/amr-wb+": { + "source": "iana" + }, + "audio/aptx": { + "source": "iana" + }, + "audio/asc": { + "source": "iana" + }, + "audio/atrac-advanced-lossless": { + "source": "iana" + }, + "audio/atrac-x": { + "source": "iana" + }, + "audio/atrac3": { + "source": "iana" + }, + "audio/basic": { + "source": "iana", + "compressible": false, + "extensions": ["au","snd"] + }, + "audio/bv16": { + "source": "iana" + }, + "audio/bv32": { + "source": "iana" + }, + "audio/clearmode": { + "source": "iana" + }, + "audio/cn": { + "source": "iana" + }, + "audio/dat12": { + "source": "iana" + }, + "audio/dls": { + "source": "iana" + }, + "audio/dsr-es201108": { + "source": "iana" + }, + "audio/dsr-es202050": { + "source": "iana" + }, + "audio/dsr-es202211": { + "source": "iana" + }, + "audio/dsr-es202212": { + "source": "iana" + }, + "audio/dv": { + "source": "iana" + }, + "audio/dvi4": { + "source": "iana" + }, + "audio/eac3": { + "source": "iana" + }, + "audio/encaprtp": { + "source": "iana" + }, + "audio/evrc": { + "source": "iana" + }, + "audio/evrc-qcp": { + "source": "iana" + }, + "audio/evrc0": { + "source": "iana" + }, + "audio/evrc1": { + "source": "iana" + }, + "audio/evrcb": { + "source": "iana" + }, + "audio/evrcb0": { + "source": "iana" + }, + "audio/evrcb1": { + "source": "iana" + }, + "audio/evrcnw": { + "source": "iana" + }, + "audio/evrcnw0": { + "source": "iana" + }, + "audio/evrcnw1": { + "source": "iana" + }, + "audio/evrcwb": { + "source": "iana" + }, + "audio/evrcwb0": { + "source": "iana" + }, + "audio/evrcwb1": { + "source": "iana" + }, + "audio/evs": { + "source": "iana" + }, + "audio/flexfec": { + "source": "iana" + }, + "audio/fwdred": { + "source": "iana" + }, + "audio/g711-0": { + "source": "iana" + }, + "audio/g719": { + "source": "iana" + }, + "audio/g722": { + "source": "iana" + }, + "audio/g7221": { + "source": "iana" + }, + "audio/g723": { + "source": "iana" + }, + "audio/g726-16": { + "source": "iana" + }, + "audio/g726-24": { + "source": "iana" + }, + "audio/g726-32": { + "source": "iana" + }, + "audio/g726-40": { + "source": "iana" + }, + "audio/g728": { + "source": "iana" + }, + "audio/g729": { + "source": "iana" + }, + "audio/g7291": { + "source": "iana" + }, + "audio/g729d": { + "source": "iana" + }, + "audio/g729e": { + "source": "iana" + }, + "audio/gsm": { + "source": "iana" + }, + "audio/gsm-efr": { + "source": "iana" + }, + "audio/gsm-hr-08": { + "source": "iana" + }, + "audio/ilbc": { + "source": "iana" + }, + "audio/ip-mr_v2.5": { + "source": "iana" + }, + "audio/isac": { + "source": "apache" + }, + "audio/l16": { + "source": "iana" + }, + "audio/l20": { + "source": "iana" + }, + "audio/l24": { + "source": "iana", + "compressible": false + }, + "audio/l8": { + "source": "iana" + }, + "audio/lpc": { + "source": "iana" + }, + "audio/melp": { + "source": "iana" + }, + "audio/melp1200": { + "source": "iana" + }, + "audio/melp2400": { + "source": "iana" + }, + "audio/melp600": { + "source": "iana" + }, + "audio/mhas": { + "source": "iana" + }, + "audio/midi": { + "source": "apache", + "extensions": ["mid","midi","kar","rmi"] + }, + "audio/mobile-xmf": { + "source": "iana", + "extensions": ["mxmf"] + }, + "audio/mp3": { + "compressible": false, + "extensions": ["mp3"] + }, + "audio/mp4": { + "source": "iana", + "compressible": false, + "extensions": ["m4a","mp4a"] + }, + "audio/mp4a-latm": { + "source": "iana" + }, + "audio/mpa": { + "source": "iana" + }, + "audio/mpa-robust": { + "source": "iana" + }, + "audio/mpeg": { + "source": "iana", + "compressible": false, + "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"] + }, + "audio/mpeg4-generic": { + "source": "iana" + }, + "audio/musepack": { + "source": "apache" + }, + "audio/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["oga","ogg","spx","opus"] + }, + "audio/opus": { + "source": "iana" + }, + "audio/parityfec": { + "source": "iana" + }, + "audio/pcma": { + "source": "iana" + }, + "audio/pcma-wb": { + "source": "iana" + }, + "audio/pcmu": { + "source": "iana" + }, + "audio/pcmu-wb": { + "source": "iana" + }, + "audio/prs.sid": { + "source": "iana" + }, + "audio/qcelp": { + "source": "iana" + }, + "audio/raptorfec": { + "source": "iana" + }, + "audio/red": { + "source": "iana" + }, + "audio/rtp-enc-aescm128": { + "source": "iana" + }, + "audio/rtp-midi": { + "source": "iana" + }, + "audio/rtploopback": { + "source": "iana" + }, + "audio/rtx": { + "source": "iana" + }, + "audio/s3m": { + "source": "apache", + "extensions": ["s3m"] + }, + "audio/scip": { + "source": "iana" + }, + "audio/silk": { + "source": "apache", + "extensions": ["sil"] + }, + "audio/smv": { + "source": "iana" + }, + "audio/smv-qcp": { + "source": "iana" + }, + "audio/smv0": { + "source": "iana" + }, + "audio/sofa": { + "source": "iana" + }, + "audio/sp-midi": { + "source": "iana" + }, + "audio/speex": { + "source": "iana" + }, + "audio/t140c": { + "source": "iana" + }, + "audio/t38": { + "source": "iana" + }, + "audio/telephone-event": { + "source": "iana" + }, + "audio/tetra_acelp": { + "source": "iana" + }, + "audio/tetra_acelp_bb": { + "source": "iana" + }, + "audio/tone": { + "source": "iana" + }, + "audio/tsvcis": { + "source": "iana" + }, + "audio/uemclip": { + "source": "iana" + }, + "audio/ulpfec": { + "source": "iana" + }, + "audio/usac": { + "source": "iana" + }, + "audio/vdvi": { + "source": "iana" + }, + "audio/vmr-wb": { + "source": "iana" + }, + "audio/vnd.3gpp.iufp": { + "source": "iana" + }, + "audio/vnd.4sb": { + "source": "iana" + }, + "audio/vnd.audiokoz": { + "source": "iana" + }, + "audio/vnd.celp": { + "source": "iana" + }, + "audio/vnd.cisco.nse": { + "source": "iana" + }, + "audio/vnd.cmles.radio-events": { + "source": "iana" + }, + "audio/vnd.cns.anp1": { + "source": "iana" + }, + "audio/vnd.cns.inf1": { + "source": "iana" + }, + "audio/vnd.dece.audio": { + "source": "iana", + "extensions": ["uva","uvva"] + }, + "audio/vnd.digital-winds": { + "source": "iana", + "extensions": ["eol"] + }, + "audio/vnd.dlna.adts": { + "source": "iana" + }, + "audio/vnd.dolby.heaac.1": { + "source": "iana" + }, + "audio/vnd.dolby.heaac.2": { + "source": "iana" + }, + "audio/vnd.dolby.mlp": { + "source": "iana" + }, + "audio/vnd.dolby.mps": { + "source": "iana" + }, + "audio/vnd.dolby.pl2": { + "source": "iana" + }, + "audio/vnd.dolby.pl2x": { + "source": "iana" + }, + "audio/vnd.dolby.pl2z": { + "source": "iana" + }, + "audio/vnd.dolby.pulse.1": { + "source": "iana" + }, + "audio/vnd.dra": { + "source": "iana", + "extensions": ["dra"] + }, + "audio/vnd.dts": { + "source": "iana", + "extensions": ["dts"] + }, + "audio/vnd.dts.hd": { + "source": "iana", + "extensions": ["dtshd"] + }, + "audio/vnd.dts.uhd": { + "source": "iana" + }, + "audio/vnd.dvb.file": { + "source": "iana" + }, + "audio/vnd.everad.plj": { + "source": "iana" + }, + "audio/vnd.hns.audio": { + "source": "iana" + }, + "audio/vnd.lucent.voice": { + "source": "iana", + "extensions": ["lvp"] + }, + "audio/vnd.ms-playready.media.pya": { + "source": "iana", + "extensions": ["pya"] + }, + "audio/vnd.nokia.mobile-xmf": { + "source": "iana" + }, + "audio/vnd.nortel.vbk": { + "source": "iana" + }, + "audio/vnd.nuera.ecelp4800": { + "source": "iana", + "extensions": ["ecelp4800"] + }, + "audio/vnd.nuera.ecelp7470": { + "source": "iana", + "extensions": ["ecelp7470"] + }, + "audio/vnd.nuera.ecelp9600": { + "source": "iana", + "extensions": ["ecelp9600"] + }, + "audio/vnd.octel.sbc": { + "source": "iana" + }, + "audio/vnd.presonus.multitrack": { + "source": "iana" + }, + "audio/vnd.qcelp": { + "source": "iana" + }, + "audio/vnd.rhetorex.32kadpcm": { + "source": "iana" + }, + "audio/vnd.rip": { + "source": "iana", + "extensions": ["rip"] + }, + "audio/vnd.rn-realaudio": { + "compressible": false + }, + "audio/vnd.sealedmedia.softseal.mpeg": { + "source": "iana" + }, + "audio/vnd.vmx.cvsd": { + "source": "iana" + }, + "audio/vnd.wave": { + "compressible": false + }, + "audio/vorbis": { + "source": "iana", + "compressible": false + }, + "audio/vorbis-config": { + "source": "iana" + }, + "audio/wav": { + "compressible": false, + "extensions": ["wav"] + }, + "audio/wave": { + "compressible": false, + "extensions": ["wav"] + }, + "audio/webm": { + "source": "apache", + "compressible": false, + "extensions": ["weba"] + }, + "audio/x-aac": { + "source": "apache", + "compressible": false, + "extensions": ["aac"] + }, + "audio/x-aiff": { + "source": "apache", + "extensions": ["aif","aiff","aifc"] + }, + "audio/x-caf": { + "source": "apache", + "compressible": false, + "extensions": ["caf"] + }, + "audio/x-flac": { + "source": "apache", + "extensions": ["flac"] + }, + "audio/x-m4a": { + "source": "nginx", + "extensions": ["m4a"] + }, + "audio/x-matroska": { + "source": "apache", + "extensions": ["mka"] + }, + "audio/x-mpegurl": { + "source": "apache", + "extensions": ["m3u"] + }, + "audio/x-ms-wax": { + "source": "apache", + "extensions": ["wax"] + }, + "audio/x-ms-wma": { + "source": "apache", + "extensions": ["wma"] + }, + "audio/x-pn-realaudio": { + "source": "apache", + "extensions": ["ram","ra"] + }, + "audio/x-pn-realaudio-plugin": { + "source": "apache", + "extensions": ["rmp"] + }, + "audio/x-realaudio": { + "source": "nginx", + "extensions": ["ra"] + }, + "audio/x-tta": { + "source": "apache" + }, + "audio/x-wav": { + "source": "apache", + "extensions": ["wav"] + }, + "audio/xm": { + "source": "apache", + "extensions": ["xm"] + }, + "chemical/x-cdx": { + "source": "apache", + "extensions": ["cdx"] + }, + "chemical/x-cif": { + "source": "apache", + "extensions": ["cif"] + }, + "chemical/x-cmdf": { + "source": "apache", + "extensions": ["cmdf"] + }, + "chemical/x-cml": { + "source": "apache", + "extensions": ["cml"] + }, + "chemical/x-csml": { + "source": "apache", + "extensions": ["csml"] + }, + "chemical/x-pdb": { + "source": "apache" + }, + "chemical/x-xyz": { + "source": "apache", + "extensions": ["xyz"] + }, + "font/collection": { + "source": "iana", + "extensions": ["ttc"] + }, + "font/otf": { + "source": "iana", + "compressible": true, + "extensions": ["otf"] + }, + "font/sfnt": { + "source": "iana" + }, + "font/ttf": { + "source": "iana", + "compressible": true, + "extensions": ["ttf"] + }, + "font/woff": { + "source": "iana", + "extensions": ["woff"] + }, + "font/woff2": { + "source": "iana", + "extensions": ["woff2"] + }, + "image/aces": { + "source": "iana", + "extensions": ["exr"] + }, + "image/apng": { + "compressible": false, + "extensions": ["apng"] + }, + "image/avci": { + "source": "iana", + "extensions": ["avci"] + }, + "image/avcs": { + "source": "iana", + "extensions": ["avcs"] + }, + "image/avif": { + "source": "iana", + "compressible": false, + "extensions": ["avif"] + }, + "image/bmp": { + "source": "iana", + "compressible": true, + "extensions": ["bmp"] + }, + "image/cgm": { + "source": "iana", + "extensions": ["cgm"] + }, + "image/dicom-rle": { + "source": "iana", + "extensions": ["drle"] + }, + "image/emf": { + "source": "iana", + "extensions": ["emf"] + }, + "image/fits": { + "source": "iana", + "extensions": ["fits"] + }, + "image/g3fax": { + "source": "iana", + "extensions": ["g3"] + }, + "image/gif": { + "source": "iana", + "compressible": false, + "extensions": ["gif"] + }, + "image/heic": { + "source": "iana", + "extensions": ["heic"] + }, + "image/heic-sequence": { + "source": "iana", + "extensions": ["heics"] + }, + "image/heif": { + "source": "iana", + "extensions": ["heif"] + }, + "image/heif-sequence": { + "source": "iana", + "extensions": ["heifs"] + }, + "image/hej2k": { + "source": "iana", + "extensions": ["hej2"] + }, + "image/hsj2": { + "source": "iana", + "extensions": ["hsj2"] + }, + "image/ief": { + "source": "iana", + "extensions": ["ief"] + }, + "image/jls": { + "source": "iana", + "extensions": ["jls"] + }, + "image/jp2": { + "source": "iana", + "compressible": false, + "extensions": ["jp2","jpg2"] + }, + "image/jpeg": { + "source": "iana", + "compressible": false, + "extensions": ["jpeg","jpg","jpe"] + }, + "image/jph": { + "source": "iana", + "extensions": ["jph"] + }, + "image/jphc": { + "source": "iana", + "extensions": ["jhc"] + }, + "image/jpm": { + "source": "iana", + "compressible": false, + "extensions": ["jpm"] + }, + "image/jpx": { + "source": "iana", + "compressible": false, + "extensions": ["jpx","jpf"] + }, + "image/jxr": { + "source": "iana", + "extensions": ["jxr"] + }, + "image/jxra": { + "source": "iana", + "extensions": ["jxra"] + }, + "image/jxrs": { + "source": "iana", + "extensions": ["jxrs"] + }, + "image/jxs": { + "source": "iana", + "extensions": ["jxs"] + }, + "image/jxsc": { + "source": "iana", + "extensions": ["jxsc"] + }, + "image/jxsi": { + "source": "iana", + "extensions": ["jxsi"] + }, + "image/jxss": { + "source": "iana", + "extensions": ["jxss"] + }, + "image/ktx": { + "source": "iana", + "extensions": ["ktx"] + }, + "image/ktx2": { + "source": "iana", + "extensions": ["ktx2"] + }, + "image/naplps": { + "source": "iana" + }, + "image/pjpeg": { + "compressible": false + }, + "image/png": { + "source": "iana", + "compressible": false, + "extensions": ["png"] + }, + "image/prs.btif": { + "source": "iana", + "extensions": ["btif"] + }, + "image/prs.pti": { + "source": "iana", + "extensions": ["pti"] + }, + "image/pwg-raster": { + "source": "iana" + }, + "image/sgi": { + "source": "apache", + "extensions": ["sgi"] + }, + "image/svg+xml": { + "source": "iana", + "compressible": true, + "extensions": ["svg","svgz"] + }, + "image/t38": { + "source": "iana", + "extensions": ["t38"] + }, + "image/tiff": { + "source": "iana", + "compressible": false, + "extensions": ["tif","tiff"] + }, + "image/tiff-fx": { + "source": "iana", + "extensions": ["tfx"] + }, + "image/vnd.adobe.photoshop": { + "source": "iana", + "compressible": true, + "extensions": ["psd"] + }, + "image/vnd.airzip.accelerator.azv": { + "source": "iana", + "extensions": ["azv"] + }, + "image/vnd.cns.inf2": { + "source": "iana" + }, + "image/vnd.dece.graphic": { + "source": "iana", + "extensions": ["uvi","uvvi","uvg","uvvg"] + }, + "image/vnd.djvu": { + "source": "iana", + "extensions": ["djvu","djv"] + }, + "image/vnd.dvb.subtitle": { + "source": "iana", + "extensions": ["sub"] + }, + "image/vnd.dwg": { + "source": "iana", + "extensions": ["dwg"] + }, + "image/vnd.dxf": { + "source": "iana", + "extensions": ["dxf"] + }, + "image/vnd.fastbidsheet": { + "source": "iana", + "extensions": ["fbs"] + }, + "image/vnd.fpx": { + "source": "iana", + "extensions": ["fpx"] + }, + "image/vnd.fst": { + "source": "iana", + "extensions": ["fst"] + }, + "image/vnd.fujixerox.edmics-mmr": { + "source": "iana", + "extensions": ["mmr"] + }, + "image/vnd.fujixerox.edmics-rlc": { + "source": "iana", + "extensions": ["rlc"] + }, + "image/vnd.globalgraphics.pgb": { + "source": "iana" + }, + "image/vnd.microsoft.icon": { + "source": "iana", + "compressible": true, + "extensions": ["ico"] + }, + "image/vnd.mix": { + "source": "iana" + }, + "image/vnd.mozilla.apng": { + "source": "iana" + }, + "image/vnd.ms-dds": { + "compressible": true, + "extensions": ["dds"] + }, + "image/vnd.ms-modi": { + "source": "iana", + "extensions": ["mdi"] + }, + "image/vnd.ms-photo": { + "source": "apache", + "extensions": ["wdp"] + }, + "image/vnd.net-fpx": { + "source": "iana", + "extensions": ["npx"] + }, + "image/vnd.pco.b16": { + "source": "iana", + "extensions": ["b16"] + }, + "image/vnd.radiance": { + "source": "iana" + }, + "image/vnd.sealed.png": { + "source": "iana" + }, + "image/vnd.sealedmedia.softseal.gif": { + "source": "iana" + }, + "image/vnd.sealedmedia.softseal.jpg": { + "source": "iana" + }, + "image/vnd.svf": { + "source": "iana" + }, + "image/vnd.tencent.tap": { + "source": "iana", + "extensions": ["tap"] + }, + "image/vnd.valve.source.texture": { + "source": "iana", + "extensions": ["vtf"] + }, + "image/vnd.wap.wbmp": { + "source": "iana", + "extensions": ["wbmp"] + }, + "image/vnd.xiff": { + "source": "iana", + "extensions": ["xif"] + }, + "image/vnd.zbrush.pcx": { + "source": "iana", + "extensions": ["pcx"] + }, + "image/webp": { + "source": "apache", + "extensions": ["webp"] + }, + "image/wmf": { + "source": "iana", + "extensions": ["wmf"] + }, + "image/x-3ds": { + "source": "apache", + "extensions": ["3ds"] + }, + "image/x-cmu-raster": { + "source": "apache", + "extensions": ["ras"] + }, + "image/x-cmx": { + "source": "apache", + "extensions": ["cmx"] + }, + "image/x-freehand": { + "source": "apache", + "extensions": ["fh","fhc","fh4","fh5","fh7"] + }, + "image/x-icon": { + "source": "apache", + "compressible": true, + "extensions": ["ico"] + }, + "image/x-jng": { + "source": "nginx", + "extensions": ["jng"] + }, + "image/x-mrsid-image": { + "source": "apache", + "extensions": ["sid"] + }, + "image/x-ms-bmp": { + "source": "nginx", + "compressible": true, + "extensions": ["bmp"] + }, + "image/x-pcx": { + "source": "apache", + "extensions": ["pcx"] + }, + "image/x-pict": { + "source": "apache", + "extensions": ["pic","pct"] + }, + "image/x-portable-anymap": { + "source": "apache", + "extensions": ["pnm"] + }, + "image/x-portable-bitmap": { + "source": "apache", + "extensions": ["pbm"] + }, + "image/x-portable-graymap": { + "source": "apache", + "extensions": ["pgm"] + }, + "image/x-portable-pixmap": { + "source": "apache", + "extensions": ["ppm"] + }, + "image/x-rgb": { + "source": "apache", + "extensions": ["rgb"] + }, + "image/x-tga": { + "source": "apache", + "extensions": ["tga"] + }, + "image/x-xbitmap": { + "source": "apache", + "extensions": ["xbm"] + }, + "image/x-xcf": { + "compressible": false + }, + "image/x-xpixmap": { + "source": "apache", + "extensions": ["xpm"] + }, + "image/x-xwindowdump": { + "source": "apache", + "extensions": ["xwd"] + }, + "message/cpim": { + "source": "iana" + }, + "message/delivery-status": { + "source": "iana" + }, + "message/disposition-notification": { + "source": "iana", + "extensions": [ + "disposition-notification" + ] + }, + "message/external-body": { + "source": "iana" + }, + "message/feedback-report": { + "source": "iana" + }, + "message/global": { + "source": "iana", + "extensions": ["u8msg"] + }, + "message/global-delivery-status": { + "source": "iana", + "extensions": ["u8dsn"] + }, + "message/global-disposition-notification": { + "source": "iana", + "extensions": ["u8mdn"] + }, + "message/global-headers": { + "source": "iana", + "extensions": ["u8hdr"] + }, + "message/http": { + "source": "iana", + "compressible": false + }, + "message/imdn+xml": { + "source": "iana", + "compressible": true + }, + "message/news": { + "source": "iana" + }, + "message/partial": { + "source": "iana", + "compressible": false + }, + "message/rfc822": { + "source": "iana", + "compressible": true, + "extensions": ["eml","mime"] + }, + "message/s-http": { + "source": "iana" + }, + "message/sip": { + "source": "iana" + }, + "message/sipfrag": { + "source": "iana" + }, + "message/tracking-status": { + "source": "iana" + }, + "message/vnd.si.simp": { + "source": "iana" + }, + "message/vnd.wfa.wsc": { + "source": "iana", + "extensions": ["wsc"] + }, + "model/3mf": { + "source": "iana", + "extensions": ["3mf"] + }, + "model/e57": { + "source": "iana" + }, + "model/gltf+json": { + "source": "iana", + "compressible": true, + "extensions": ["gltf"] + }, + "model/gltf-binary": { + "source": "iana", + "compressible": true, + "extensions": ["glb"] + }, + "model/iges": { + "source": "iana", + "compressible": false, + "extensions": ["igs","iges"] + }, + "model/mesh": { + "source": "iana", + "compressible": false, + "extensions": ["msh","mesh","silo"] + }, + "model/mtl": { + "source": "iana", + "extensions": ["mtl"] + }, + "model/obj": { + "source": "iana", + "extensions": ["obj"] + }, + "model/step": { + "source": "iana" + }, + "model/step+xml": { + "source": "iana", + "compressible": true, + "extensions": ["stpx"] + }, + "model/step+zip": { + "source": "iana", + "compressible": false, + "extensions": ["stpz"] + }, + "model/step-xml+zip": { + "source": "iana", + "compressible": false, + "extensions": ["stpxz"] + }, + "model/stl": { + "source": "iana", + "extensions": ["stl"] + }, + "model/vnd.collada+xml": { + "source": "iana", + "compressible": true, + "extensions": ["dae"] + }, + "model/vnd.dwf": { + "source": "iana", + "extensions": ["dwf"] + }, + "model/vnd.flatland.3dml": { + "source": "iana" + }, + "model/vnd.gdl": { + "source": "iana", + "extensions": ["gdl"] + }, + "model/vnd.gs-gdl": { + "source": "apache" + }, + "model/vnd.gs.gdl": { + "source": "iana" + }, + "model/vnd.gtw": { + "source": "iana", + "extensions": ["gtw"] + }, + "model/vnd.moml+xml": { + "source": "iana", + "compressible": true + }, + "model/vnd.mts": { + "source": "iana", + "extensions": ["mts"] + }, + "model/vnd.opengex": { + "source": "iana", + "extensions": ["ogex"] + }, + "model/vnd.parasolid.transmit.binary": { + "source": "iana", + "extensions": ["x_b"] + }, + "model/vnd.parasolid.transmit.text": { + "source": "iana", + "extensions": ["x_t"] + }, + "model/vnd.pytha.pyox": { + "source": "iana" + }, + "model/vnd.rosette.annotated-data-model": { + "source": "iana" + }, + "model/vnd.sap.vds": { + "source": "iana", + "extensions": ["vds"] + }, + "model/vnd.usdz+zip": { + "source": "iana", + "compressible": false, + "extensions": ["usdz"] + }, + "model/vnd.valve.source.compiled-map": { + "source": "iana", + "extensions": ["bsp"] + }, + "model/vnd.vtu": { + "source": "iana", + "extensions": ["vtu"] + }, + "model/vrml": { + "source": "iana", + "compressible": false, + "extensions": ["wrl","vrml"] + }, + "model/x3d+binary": { + "source": "apache", + "compressible": false, + "extensions": ["x3db","x3dbz"] + }, + "model/x3d+fastinfoset": { + "source": "iana", + "extensions": ["x3db"] + }, + "model/x3d+vrml": { + "source": "apache", + "compressible": false, + "extensions": ["x3dv","x3dvz"] + }, + "model/x3d+xml": { + "source": "iana", + "compressible": true, + "extensions": ["x3d","x3dz"] + }, + "model/x3d-vrml": { + "source": "iana", + "extensions": ["x3dv"] + }, + "multipart/alternative": { + "source": "iana", + "compressible": false + }, + "multipart/appledouble": { + "source": "iana" + }, + "multipart/byteranges": { + "source": "iana" + }, + "multipart/digest": { + "source": "iana" + }, + "multipart/encrypted": { + "source": "iana", + "compressible": false + }, + "multipart/form-data": { + "source": "iana", + "compressible": false + }, + "multipart/header-set": { + "source": "iana" + }, + "multipart/mixed": { + "source": "iana" + }, + "multipart/multilingual": { + "source": "iana" + }, + "multipart/parallel": { + "source": "iana" + }, + "multipart/related": { + "source": "iana", + "compressible": false + }, + "multipart/report": { + "source": "iana" + }, + "multipart/signed": { + "source": "iana", + "compressible": false + }, + "multipart/vnd.bint.med-plus": { + "source": "iana" + }, + "multipart/voice-message": { + "source": "iana" + }, + "multipart/x-mixed-replace": { + "source": "iana" + }, + "text/1d-interleaved-parityfec": { + "source": "iana" + }, + "text/cache-manifest": { + "source": "iana", + "compressible": true, + "extensions": ["appcache","manifest"] + }, + "text/calendar": { + "source": "iana", + "extensions": ["ics","ifb"] + }, + "text/calender": { + "compressible": true + }, + "text/cmd": { + "compressible": true + }, + "text/coffeescript": { + "extensions": ["coffee","litcoffee"] + }, + "text/cql": { + "source": "iana" + }, + "text/cql-expression": { + "source": "iana" + }, + "text/cql-identifier": { + "source": "iana" + }, + "text/css": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["css"] + }, + "text/csv": { + "source": "iana", + "compressible": true, + "extensions": ["csv"] + }, + "text/csv-schema": { + "source": "iana" + }, + "text/directory": { + "source": "iana" + }, + "text/dns": { + "source": "iana" + }, + "text/ecmascript": { + "source": "iana" + }, + "text/encaprtp": { + "source": "iana" + }, + "text/enriched": { + "source": "iana" + }, + "text/fhirpath": { + "source": "iana" + }, + "text/flexfec": { + "source": "iana" + }, + "text/fwdred": { + "source": "iana" + }, + "text/gff3": { + "source": "iana" + }, + "text/grammar-ref-list": { + "source": "iana" + }, + "text/html": { + "source": "iana", + "compressible": true, + "extensions": ["html","htm","shtml"] + }, + "text/jade": { + "extensions": ["jade"] + }, + "text/javascript": { + "source": "iana", + "compressible": true + }, + "text/jcr-cnd": { + "source": "iana" + }, + "text/jsx": { + "compressible": true, + "extensions": ["jsx"] + }, + "text/less": { + "compressible": true, + "extensions": ["less"] + }, + "text/markdown": { + "source": "iana", + "compressible": true, + "extensions": ["markdown","md"] + }, + "text/mathml": { + "source": "nginx", + "extensions": ["mml"] + }, + "text/mdx": { + "compressible": true, + "extensions": ["mdx"] + }, + "text/mizar": { + "source": "iana" + }, + "text/n3": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["n3"] + }, + "text/parameters": { + "source": "iana", + "charset": "UTF-8" + }, + "text/parityfec": { + "source": "iana" + }, + "text/plain": { + "source": "iana", + "compressible": true, + "extensions": ["txt","text","conf","def","list","log","in","ini"] + }, + "text/provenance-notation": { + "source": "iana", + "charset": "UTF-8" + }, + "text/prs.fallenstein.rst": { + "source": "iana" + }, + "text/prs.lines.tag": { + "source": "iana", + "extensions": ["dsc"] + }, + "text/prs.prop.logic": { + "source": "iana" + }, + "text/raptorfec": { + "source": "iana" + }, + "text/red": { + "source": "iana" + }, + "text/rfc822-headers": { + "source": "iana" + }, + "text/richtext": { + "source": "iana", + "compressible": true, + "extensions": ["rtx"] + }, + "text/rtf": { + "source": "iana", + "compressible": true, + "extensions": ["rtf"] + }, + "text/rtp-enc-aescm128": { + "source": "iana" + }, + "text/rtploopback": { + "source": "iana" + }, + "text/rtx": { + "source": "iana" + }, + "text/sgml": { + "source": "iana", + "extensions": ["sgml","sgm"] + }, + "text/shaclc": { + "source": "iana" + }, + "text/shex": { + "source": "iana", + "extensions": ["shex"] + }, + "text/slim": { + "extensions": ["slim","slm"] + }, + "text/spdx": { + "source": "iana", + "extensions": ["spdx"] + }, + "text/strings": { + "source": "iana" + }, + "text/stylus": { + "extensions": ["stylus","styl"] + }, + "text/t140": { + "source": "iana" + }, + "text/tab-separated-values": { + "source": "iana", + "compressible": true, + "extensions": ["tsv"] + }, + "text/troff": { + "source": "iana", + "extensions": ["t","tr","roff","man","me","ms"] + }, + "text/turtle": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["ttl"] + }, + "text/ulpfec": { + "source": "iana" + }, + "text/uri-list": { + "source": "iana", + "compressible": true, + "extensions": ["uri","uris","urls"] + }, + "text/vcard": { + "source": "iana", + "compressible": true, + "extensions": ["vcard"] + }, + "text/vnd.a": { + "source": "iana" + }, + "text/vnd.abc": { + "source": "iana" + }, + "text/vnd.ascii-art": { + "source": "iana" + }, + "text/vnd.curl": { + "source": "iana", + "extensions": ["curl"] + }, + "text/vnd.curl.dcurl": { + "source": "apache", + "extensions": ["dcurl"] + }, + "text/vnd.curl.mcurl": { + "source": "apache", + "extensions": ["mcurl"] + }, + "text/vnd.curl.scurl": { + "source": "apache", + "extensions": ["scurl"] + }, + "text/vnd.debian.copyright": { + "source": "iana", + "charset": "UTF-8" + }, + "text/vnd.dmclientscript": { + "source": "iana" + }, + "text/vnd.dvb.subtitle": { + "source": "iana", + "extensions": ["sub"] + }, + "text/vnd.esmertec.theme-descriptor": { + "source": "iana", + "charset": "UTF-8" + }, + "text/vnd.familysearch.gedcom": { + "source": "iana", + "extensions": ["ged"] + }, + "text/vnd.ficlab.flt": { + "source": "iana" + }, + "text/vnd.fly": { + "source": "iana", + "extensions": ["fly"] + }, + "text/vnd.fmi.flexstor": { + "source": "iana", + "extensions": ["flx"] + }, + "text/vnd.gml": { + "source": "iana" + }, + "text/vnd.graphviz": { + "source": "iana", + "extensions": ["gv"] + }, + "text/vnd.hans": { + "source": "iana" + }, + "text/vnd.hgl": { + "source": "iana" + }, + "text/vnd.in3d.3dml": { + "source": "iana", + "extensions": ["3dml"] + }, + "text/vnd.in3d.spot": { + "source": "iana", + "extensions": ["spot"] + }, + "text/vnd.iptc.newsml": { + "source": "iana" + }, + "text/vnd.iptc.nitf": { + "source": "iana" + }, + "text/vnd.latex-z": { + "source": "iana" + }, + "text/vnd.motorola.reflex": { + "source": "iana" + }, + "text/vnd.ms-mediapackage": { + "source": "iana" + }, + "text/vnd.net2phone.commcenter.command": { + "source": "iana" + }, + "text/vnd.radisys.msml-basic-layout": { + "source": "iana" + }, + "text/vnd.senx.warpscript": { + "source": "iana" + }, + "text/vnd.si.uricatalogue": { + "source": "iana" + }, + "text/vnd.sosi": { + "source": "iana" + }, + "text/vnd.sun.j2me.app-descriptor": { + "source": "iana", + "charset": "UTF-8", + "extensions": ["jad"] + }, + "text/vnd.trolltech.linguist": { + "source": "iana", + "charset": "UTF-8" + }, + "text/vnd.wap.si": { + "source": "iana" + }, + "text/vnd.wap.sl": { + "source": "iana" + }, + "text/vnd.wap.wml": { + "source": "iana", + "extensions": ["wml"] + }, + "text/vnd.wap.wmlscript": { + "source": "iana", + "extensions": ["wmls"] + }, + "text/vtt": { + "source": "iana", + "charset": "UTF-8", + "compressible": true, + "extensions": ["vtt"] + }, + "text/x-asm": { + "source": "apache", + "extensions": ["s","asm"] + }, + "text/x-c": { + "source": "apache", + "extensions": ["c","cc","cxx","cpp","h","hh","dic"] + }, + "text/x-component": { + "source": "nginx", + "extensions": ["htc"] + }, + "text/x-fortran": { + "source": "apache", + "extensions": ["f","for","f77","f90"] + }, + "text/x-gwt-rpc": { + "compressible": true + }, + "text/x-handlebars-template": { + "extensions": ["hbs"] + }, + "text/x-java-source": { + "source": "apache", + "extensions": ["java"] + }, + "text/x-jquery-tmpl": { + "compressible": true + }, + "text/x-lua": { + "extensions": ["lua"] + }, + "text/x-markdown": { + "compressible": true, + "extensions": ["mkd"] + }, + "text/x-nfo": { + "source": "apache", + "extensions": ["nfo"] + }, + "text/x-opml": { + "source": "apache", + "extensions": ["opml"] + }, + "text/x-org": { + "compressible": true, + "extensions": ["org"] + }, + "text/x-pascal": { + "source": "apache", + "extensions": ["p","pas"] + }, + "text/x-processing": { + "compressible": true, + "extensions": ["pde"] + }, + "text/x-sass": { + "extensions": ["sass"] + }, + "text/x-scss": { + "extensions": ["scss"] + }, + "text/x-setext": { + "source": "apache", + "extensions": ["etx"] + }, + "text/x-sfv": { + "source": "apache", + "extensions": ["sfv"] + }, + "text/x-suse-ymp": { + "compressible": true, + "extensions": ["ymp"] + }, + "text/x-uuencode": { + "source": "apache", + "extensions": ["uu"] + }, + "text/x-vcalendar": { + "source": "apache", + "extensions": ["vcs"] + }, + "text/x-vcard": { + "source": "apache", + "extensions": ["vcf"] + }, + "text/xml": { + "source": "iana", + "compressible": true, + "extensions": ["xml"] + }, + "text/xml-external-parsed-entity": { + "source": "iana" + }, + "text/yaml": { + "compressible": true, + "extensions": ["yaml","yml"] + }, + "video/1d-interleaved-parityfec": { + "source": "iana" + }, + "video/3gpp": { + "source": "iana", + "extensions": ["3gp","3gpp"] + }, + "video/3gpp-tt": { + "source": "iana" + }, + "video/3gpp2": { + "source": "iana", + "extensions": ["3g2"] + }, + "video/av1": { + "source": "iana" + }, + "video/bmpeg": { + "source": "iana" + }, + "video/bt656": { + "source": "iana" + }, + "video/celb": { + "source": "iana" + }, + "video/dv": { + "source": "iana" + }, + "video/encaprtp": { + "source": "iana" + }, + "video/ffv1": { + "source": "iana" + }, + "video/flexfec": { + "source": "iana" + }, + "video/h261": { + "source": "iana", + "extensions": ["h261"] + }, + "video/h263": { + "source": "iana", + "extensions": ["h263"] + }, + "video/h263-1998": { + "source": "iana" + }, + "video/h263-2000": { + "source": "iana" + }, + "video/h264": { + "source": "iana", + "extensions": ["h264"] + }, + "video/h264-rcdo": { + "source": "iana" + }, + "video/h264-svc": { + "source": "iana" + }, + "video/h265": { + "source": "iana" + }, + "video/iso.segment": { + "source": "iana", + "extensions": ["m4s"] + }, + "video/jpeg": { + "source": "iana", + "extensions": ["jpgv"] + }, + "video/jpeg2000": { + "source": "iana" + }, + "video/jpm": { + "source": "apache", + "extensions": ["jpm","jpgm"] + }, + "video/jxsv": { + "source": "iana" + }, + "video/mj2": { + "source": "iana", + "extensions": ["mj2","mjp2"] + }, + "video/mp1s": { + "source": "iana" + }, + "video/mp2p": { + "source": "iana" + }, + "video/mp2t": { + "source": "iana", + "extensions": ["ts"] + }, + "video/mp4": { + "source": "iana", + "compressible": false, + "extensions": ["mp4","mp4v","mpg4"] + }, + "video/mp4v-es": { + "source": "iana" + }, + "video/mpeg": { + "source": "iana", + "compressible": false, + "extensions": ["mpeg","mpg","mpe","m1v","m2v"] + }, + "video/mpeg4-generic": { + "source": "iana" + }, + "video/mpv": { + "source": "iana" + }, + "video/nv": { + "source": "iana" + }, + "video/ogg": { + "source": "iana", + "compressible": false, + "extensions": ["ogv"] + }, + "video/parityfec": { + "source": "iana" + }, + "video/pointer": { + "source": "iana" + }, + "video/quicktime": { + "source": "iana", + "compressible": false, + "extensions": ["qt","mov"] + }, + "video/raptorfec": { + "source": "iana" + }, + "video/raw": { + "source": "iana" + }, + "video/rtp-enc-aescm128": { + "source": "iana" + }, + "video/rtploopback": { + "source": "iana" + }, + "video/rtx": { + "source": "iana" + }, + "video/scip": { + "source": "iana" + }, + "video/smpte291": { + "source": "iana" + }, + "video/smpte292m": { + "source": "iana" + }, + "video/ulpfec": { + "source": "iana" + }, + "video/vc1": { + "source": "iana" + }, + "video/vc2": { + "source": "iana" + }, + "video/vnd.cctv": { + "source": "iana" + }, + "video/vnd.dece.hd": { + "source": "iana", + "extensions": ["uvh","uvvh"] + }, + "video/vnd.dece.mobile": { + "source": "iana", + "extensions": ["uvm","uvvm"] + }, + "video/vnd.dece.mp4": { + "source": "iana" + }, + "video/vnd.dece.pd": { + "source": "iana", + "extensions": ["uvp","uvvp"] + }, + "video/vnd.dece.sd": { + "source": "iana", + "extensions": ["uvs","uvvs"] + }, + "video/vnd.dece.video": { + "source": "iana", + "extensions": ["uvv","uvvv"] + }, + "video/vnd.directv.mpeg": { + "source": "iana" + }, + "video/vnd.directv.mpeg-tts": { + "source": "iana" + }, + "video/vnd.dlna.mpeg-tts": { + "source": "iana" + }, + "video/vnd.dvb.file": { + "source": "iana", + "extensions": ["dvb"] + }, + "video/vnd.fvt": { + "source": "iana", + "extensions": ["fvt"] + }, + "video/vnd.hns.video": { + "source": "iana" + }, + "video/vnd.iptvforum.1dparityfec-1010": { + "source": "iana" + }, + "video/vnd.iptvforum.1dparityfec-2005": { + "source": "iana" + }, + "video/vnd.iptvforum.2dparityfec-1010": { + "source": "iana" + }, + "video/vnd.iptvforum.2dparityfec-2005": { + "source": "iana" + }, + "video/vnd.iptvforum.ttsavc": { + "source": "iana" + }, + "video/vnd.iptvforum.ttsmpeg2": { + "source": "iana" + }, + "video/vnd.motorola.video": { + "source": "iana" + }, + "video/vnd.motorola.videop": { + "source": "iana" + }, + "video/vnd.mpegurl": { + "source": "iana", + "extensions": ["mxu","m4u"] + }, + "video/vnd.ms-playready.media.pyv": { + "source": "iana", + "extensions": ["pyv"] + }, + "video/vnd.nokia.interleaved-multimedia": { + "source": "iana" + }, + "video/vnd.nokia.mp4vr": { + "source": "iana" + }, + "video/vnd.nokia.videovoip": { + "source": "iana" + }, + "video/vnd.objectvideo": { + "source": "iana" + }, + "video/vnd.radgamettools.bink": { + "source": "iana" + }, + "video/vnd.radgamettools.smacker": { + "source": "iana" + }, + "video/vnd.sealed.mpeg1": { + "source": "iana" + }, + "video/vnd.sealed.mpeg4": { + "source": "iana" + }, + "video/vnd.sealed.swf": { + "source": "iana" + }, + "video/vnd.sealedmedia.softseal.mov": { + "source": "iana" + }, + "video/vnd.uvvu.mp4": { + "source": "iana", + "extensions": ["uvu","uvvu"] + }, + "video/vnd.vivo": { + "source": "iana", + "extensions": ["viv"] + }, + "video/vnd.youtube.yt": { + "source": "iana" + }, + "video/vp8": { + "source": "iana" + }, + "video/vp9": { + "source": "iana" + }, + "video/webm": { + "source": "apache", + "compressible": false, + "extensions": ["webm"] + }, + "video/x-f4v": { + "source": "apache", + "extensions": ["f4v"] + }, + "video/x-fli": { + "source": "apache", + "extensions": ["fli"] + }, + "video/x-flv": { + "source": "apache", + "compressible": false, + "extensions": ["flv"] + }, + "video/x-m4v": { + "source": "apache", + "extensions": ["m4v"] + }, + "video/x-matroska": { + "source": "apache", + "compressible": false, + "extensions": ["mkv","mk3d","mks"] + }, + "video/x-mng": { + "source": "apache", + "extensions": ["mng"] + }, + "video/x-ms-asf": { + "source": "apache", + "extensions": ["asf","asx"] + }, + "video/x-ms-vob": { + "source": "apache", + "extensions": ["vob"] + }, + "video/x-ms-wm": { + "source": "apache", + "extensions": ["wm"] + }, + "video/x-ms-wmv": { + "source": "apache", + "compressible": false, + "extensions": ["wmv"] + }, + "video/x-ms-wmx": { + "source": "apache", + "extensions": ["wmx"] + }, + "video/x-ms-wvx": { + "source": "apache", + "extensions": ["wvx"] + }, + "video/x-msvideo": { + "source": "apache", + "extensions": ["avi"] + }, + "video/x-sgi-movie": { + "source": "apache", + "extensions": ["movie"] + }, + "video/x-smv": { + "source": "apache", + "extensions": ["smv"] + }, + "x-conference/x-cooltalk": { + "source": "apache", + "extensions": ["ice"] + }, + "x-shader/x-fragment": { + "compressible": true + }, + "x-shader/x-vertex": { + "compressible": true + } +} diff --git a/node_modules/mime-db/index.js b/node_modules/mime-db/index.js new file mode 100644 index 0000000..ec2be30 --- /dev/null +++ b/node_modules/mime-db/index.js @@ -0,0 +1,12 @@ +/*! + * mime-db + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015-2022 Douglas Christopher Wilson + * MIT Licensed + */ + +/** + * Module exports. + */ + +module.exports = require('./db.json') diff --git a/node_modules/mime-db/package.json b/node_modules/mime-db/package.json new file mode 100644 index 0000000..32c14b8 --- /dev/null +++ b/node_modules/mime-db/package.json @@ -0,0 +1,60 @@ +{ + "name": "mime-db", + "description": "Media Type Database", + "version": "1.52.0", + "contributors": [ + "Douglas Christopher Wilson ", + "Jonathan Ong (http://jongleberry.com)", + "Robert Kieffer (http://github.com/broofa)" + ], + "license": "MIT", + "keywords": [ + "mime", + "db", + "type", + "types", + "database", + "charset", + "charsets" + ], + "repository": "jshttp/mime-db", + "devDependencies": { + "bluebird": "3.7.2", + "co": "4.6.0", + "cogent": "1.0.1", + "csv-parse": "4.16.3", + "eslint": "7.32.0", + "eslint-config-standard": "15.0.1", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-markdown": "2.2.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.1.1", + "eslint-plugin-standard": "4.1.0", + "gnode": "0.1.2", + "media-typer": "1.1.0", + "mocha": "9.2.1", + "nyc": "15.1.0", + "raw-body": "2.5.0", + "stream-to-array": "2.3.0" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "README.md", + "db.json", + "index.js" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "build": "node scripts/build", + "fetch": "node scripts/fetch-apache && gnode scripts/fetch-iana && node scripts/fetch-nginx", + "lint": "eslint .", + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test", + "update": "npm run fetch && npm run build", + "version": "node scripts/version-history.js && git add HISTORY.md" + } +} diff --git a/node_modules/mime-types/HISTORY.md b/node_modules/mime-types/HISTORY.md new file mode 100644 index 0000000..c5043b7 --- /dev/null +++ b/node_modules/mime-types/HISTORY.md @@ -0,0 +1,397 @@ +2.1.35 / 2022-03-12 +=================== + + * deps: mime-db@1.52.0 + - Add extensions from IANA for more `image/*` types + - Add extension `.asc` to `application/pgp-keys` + - Add extensions to various XML types + - Add new upstream MIME types + +2.1.34 / 2021-11-08 +=================== + + * deps: mime-db@1.51.0 + - Add new upstream MIME types + +2.1.33 / 2021-10-01 +=================== + + * deps: mime-db@1.50.0 + - Add deprecated iWorks mime types and extensions + - Add new upstream MIME types + +2.1.32 / 2021-07-27 +=================== + + * deps: mime-db@1.49.0 + - Add extension `.trig` to `application/trig` + - Add new upstream MIME types + +2.1.31 / 2021-06-01 +=================== + + * deps: mime-db@1.48.0 + - Add extension `.mvt` to `application/vnd.mapbox-vector-tile` + - Add new upstream MIME types + +2.1.30 / 2021-04-02 +=================== + + * deps: mime-db@1.47.0 + - Add extension `.amr` to `audio/amr` + - Remove ambigious extensions from IANA for `application/*+xml` types + - Update primary extension to `.es` for `application/ecmascript` + +2.1.29 / 2021-02-17 +=================== + + * deps: mime-db@1.46.0 + - Add extension `.amr` to `audio/amr` + - Add extension `.m4s` to `video/iso.segment` + - Add extension `.opus` to `audio/ogg` + - Add new upstream MIME types + +2.1.28 / 2021-01-01 +=================== + + * deps: mime-db@1.45.0 + - Add `application/ubjson` with extension `.ubj` + - Add `image/avif` with extension `.avif` + - Add `image/ktx2` with extension `.ktx2` + - Add extension `.dbf` to `application/vnd.dbf` + - Add extension `.rar` to `application/vnd.rar` + - Add extension `.td` to `application/urc-targetdesc+xml` + - Add new upstream MIME types + - Fix extension of `application/vnd.apple.keynote` to be `.key` + +2.1.27 / 2020-04-23 +=================== + + * deps: mime-db@1.44.0 + - Add charsets from IANA + - Add extension `.cjs` to `application/node` + - Add new upstream MIME types + +2.1.26 / 2020-01-05 +=================== + + * deps: mime-db@1.43.0 + - Add `application/x-keepass2` with extension `.kdbx` + - Add extension `.mxmf` to `audio/mobile-xmf` + - Add extensions from IANA for `application/*+xml` types + - Add new upstream MIME types + +2.1.25 / 2019-11-12 +=================== + + * deps: mime-db@1.42.0 + - Add new upstream MIME types + - Add `application/toml` with extension `.toml` + - Add `image/vnd.ms-dds` with extension `.dds` + +2.1.24 / 2019-04-20 +=================== + + * deps: mime-db@1.40.0 + - Add extensions from IANA for `model/*` types + - Add `text/mdx` with extension `.mdx` + +2.1.23 / 2019-04-17 +=================== + + * deps: mime-db@~1.39.0 + - Add extensions `.siv` and `.sieve` to `application/sieve` + - Add new upstream MIME types + +2.1.22 / 2019-02-14 +=================== + + * deps: mime-db@~1.38.0 + - Add extension `.nq` to `application/n-quads` + - Add extension `.nt` to `application/n-triples` + - Add new upstream MIME types + +2.1.21 / 2018-10-19 +=================== + + * deps: mime-db@~1.37.0 + - Add extensions to HEIC image types + - Add new upstream MIME types + +2.1.20 / 2018-08-26 +=================== + + * deps: mime-db@~1.36.0 + - Add Apple file extensions from IANA + - Add extensions from IANA for `image/*` types + - Add new upstream MIME types + +2.1.19 / 2018-07-17 +=================== + + * deps: mime-db@~1.35.0 + - Add extension `.csl` to `application/vnd.citationstyles.style+xml` + - Add extension `.es` to `application/ecmascript` + - Add extension `.owl` to `application/rdf+xml` + - Add new upstream MIME types + - Add UTF-8 as default charset for `text/turtle` + +2.1.18 / 2018-02-16 +=================== + + * deps: mime-db@~1.33.0 + - Add `application/raml+yaml` with extension `.raml` + - Add `application/wasm` with extension `.wasm` + - Add `text/shex` with extension `.shex` + - Add extensions for JPEG-2000 images + - Add extensions from IANA for `message/*` types + - Add new upstream MIME types + - Update font MIME types + - Update `text/hjson` to registered `application/hjson` + +2.1.17 / 2017-09-01 +=================== + + * deps: mime-db@~1.30.0 + - Add `application/vnd.ms-outlook` + - Add `application/x-arj` + - Add extension `.mjs` to `application/javascript` + - Add glTF types and extensions + - Add new upstream MIME types + - Add `text/x-org` + - Add VirtualBox MIME types + - Fix `source` records for `video/*` types that are IANA + - Update `font/opentype` to registered `font/otf` + +2.1.16 / 2017-07-24 +=================== + + * deps: mime-db@~1.29.0 + - Add `application/fido.trusted-apps+json` + - Add extension `.wadl` to `application/vnd.sun.wadl+xml` + - Add extension `.gz` to `application/gzip` + - Add new upstream MIME types + - Update extensions `.md` and `.markdown` to be `text/markdown` + +2.1.15 / 2017-03-23 +=================== + + * deps: mime-db@~1.27.0 + - Add new mime types + - Add `image/apng` + +2.1.14 / 2017-01-14 +=================== + + * deps: mime-db@~1.26.0 + - Add new mime types + +2.1.13 / 2016-11-18 +=================== + + * deps: mime-db@~1.25.0 + - Add new mime types + +2.1.12 / 2016-09-18 +=================== + + * deps: mime-db@~1.24.0 + - Add new mime types + - Add `audio/mp3` + +2.1.11 / 2016-05-01 +=================== + + * deps: mime-db@~1.23.0 + - Add new mime types + +2.1.10 / 2016-02-15 +=================== + + * deps: mime-db@~1.22.0 + - Add new mime types + - Fix extension of `application/dash+xml` + - Update primary extension for `audio/mp4` + +2.1.9 / 2016-01-06 +================== + + * deps: mime-db@~1.21.0 + - Add new mime types + +2.1.8 / 2015-11-30 +================== + + * deps: mime-db@~1.20.0 + - Add new mime types + +2.1.7 / 2015-09-20 +================== + + * deps: mime-db@~1.19.0 + - Add new mime types + +2.1.6 / 2015-09-03 +================== + + * deps: mime-db@~1.18.0 + - Add new mime types + +2.1.5 / 2015-08-20 +================== + + * deps: mime-db@~1.17.0 + - Add new mime types + +2.1.4 / 2015-07-30 +================== + + * deps: mime-db@~1.16.0 + - Add new mime types + +2.1.3 / 2015-07-13 +================== + + * deps: mime-db@~1.15.0 + - Add new mime types + +2.1.2 / 2015-06-25 +================== + + * deps: mime-db@~1.14.0 + - Add new mime types + +2.1.1 / 2015-06-08 +================== + + * perf: fix deopt during mapping + +2.1.0 / 2015-06-07 +================== + + * Fix incorrectly treating extension-less file name as extension + - i.e. `'path/to/json'` will no longer return `application/json` + * Fix `.charset(type)` to accept parameters + * Fix `.charset(type)` to match case-insensitive + * Improve generation of extension to MIME mapping + * Refactor internals for readability and no argument reassignment + * Prefer `application/*` MIME types from the same source + * Prefer any type over `application/octet-stream` + * deps: mime-db@~1.13.0 + - Add nginx as a source + - Add new mime types + +2.0.14 / 2015-06-06 +=================== + + * deps: mime-db@~1.12.0 + - Add new mime types + +2.0.13 / 2015-05-31 +=================== + + * deps: mime-db@~1.11.0 + - Add new mime types + +2.0.12 / 2015-05-19 +=================== + + * deps: mime-db@~1.10.0 + - Add new mime types + +2.0.11 / 2015-05-05 +=================== + + * deps: mime-db@~1.9.1 + - Add new mime types + +2.0.10 / 2015-03-13 +=================== + + * deps: mime-db@~1.8.0 + - Add new mime types + +2.0.9 / 2015-02-09 +================== + + * deps: mime-db@~1.7.0 + - Add new mime types + - Community extensions ownership transferred from `node-mime` + +2.0.8 / 2015-01-29 +================== + + * deps: mime-db@~1.6.0 + - Add new mime types + +2.0.7 / 2014-12-30 +================== + + * deps: mime-db@~1.5.0 + - Add new mime types + - Fix various invalid MIME type entries + +2.0.6 / 2014-12-30 +================== + + * deps: mime-db@~1.4.0 + - Add new mime types + - Fix various invalid MIME type entries + - Remove example template MIME types + +2.0.5 / 2014-12-29 +================== + + * deps: mime-db@~1.3.1 + - Fix missing extensions + +2.0.4 / 2014-12-10 +================== + + * deps: mime-db@~1.3.0 + - Add new mime types + +2.0.3 / 2014-11-09 +================== + + * deps: mime-db@~1.2.0 + - Add new mime types + +2.0.2 / 2014-09-28 +================== + + * deps: mime-db@~1.1.0 + - Add new mime types + - Update charsets + +2.0.1 / 2014-09-07 +================== + + * Support Node.js 0.6 + +2.0.0 / 2014-09-02 +================== + + * Use `mime-db` + * Remove `.define()` + +1.0.2 / 2014-08-04 +================== + + * Set charset=utf-8 for `text/javascript` + +1.0.1 / 2014-06-24 +================== + + * Add `text/jsx` type + +1.0.0 / 2014-05-12 +================== + + * Return `false` for unknown types + * Set charset=utf-8 for `application/json` + +0.1.0 / 2014-05-02 +================== + + * Initial release diff --git a/node_modules/mime-types/LICENSE b/node_modules/mime-types/LICENSE new file mode 100644 index 0000000..0616607 --- /dev/null +++ b/node_modules/mime-types/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 Jonathan Ong +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/node_modules/mime-types/README.md b/node_modules/mime-types/README.md new file mode 100644 index 0000000..48d2fb4 --- /dev/null +++ b/node_modules/mime-types/README.md @@ -0,0 +1,113 @@ +# mime-types + +[![NPM Version][npm-version-image]][npm-url] +[![NPM Downloads][npm-downloads-image]][npm-url] +[![Node.js Version][node-version-image]][node-version-url] +[![Build Status][ci-image]][ci-url] +[![Test Coverage][coveralls-image]][coveralls-url] + +The ultimate javascript content-type utility. + +Similar to [the `mime@1.x` module](https://www.npmjs.com/package/mime), except: + +- __No fallbacks.__ Instead of naively returning the first available type, + `mime-types` simply returns `false`, so do + `var type = mime.lookup('unrecognized') || 'application/octet-stream'`. +- No `new Mime()` business, so you could do `var lookup = require('mime-types').lookup`. +- No `.define()` functionality +- Bug fixes for `.lookup(path)` + +Otherwise, the API is compatible with `mime` 1.x. + +## Install + +This is a [Node.js](https://nodejs.org/en/) module available through the +[npm registry](https://www.npmjs.com/). Installation is done using the +[`npm install` command](https://docs.npmjs.com/getting-started/installing-npm-packages-locally): + +```sh +$ npm install mime-types +``` + +## Adding Types + +All mime types are based on [mime-db](https://www.npmjs.com/package/mime-db), +so open a PR there if you'd like to add mime types. + +## API + +```js +var mime = require('mime-types') +``` + +All functions return `false` if input is invalid or not found. + +### mime.lookup(path) + +Lookup the content-type associated with a file. + +```js +mime.lookup('json') // 'application/json' +mime.lookup('.md') // 'text/markdown' +mime.lookup('file.html') // 'text/html' +mime.lookup('folder/file.js') // 'application/javascript' +mime.lookup('folder/.htaccess') // false + +mime.lookup('cats') // false +``` + +### mime.contentType(type) + +Create a full content-type header given a content-type or extension. +When given an extension, `mime.lookup` is used to get the matching +content-type, otherwise the given content-type is used. Then if the +content-type does not already have a `charset` parameter, `mime.charset` +is used to get the default charset and add to the returned content-type. + +```js +mime.contentType('markdown') // 'text/x-markdown; charset=utf-8' +mime.contentType('file.json') // 'application/json; charset=utf-8' +mime.contentType('text/html') // 'text/html; charset=utf-8' +mime.contentType('text/html; charset=iso-8859-1') // 'text/html; charset=iso-8859-1' + +// from a full path +mime.contentType(path.extname('/path/to/file.json')) // 'application/json; charset=utf-8' +``` + +### mime.extension(type) + +Get the default extension for a content-type. + +```js +mime.extension('application/octet-stream') // 'bin' +``` + +### mime.charset(type) + +Lookup the implied default charset of a content-type. + +```js +mime.charset('text/markdown') // 'UTF-8' +``` + +### var type = mime.types[extension] + +A map of content-types by extension. + +### [extensions...] = mime.extensions[type] + +A map of extensions by content-type. + +## License + +[MIT](LICENSE) + +[ci-image]: https://badgen.net/github/checks/jshttp/mime-types/master?label=ci +[ci-url]: https://github.com/jshttp/mime-types/actions/workflows/ci.yml +[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master +[coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master +[node-version-image]: https://badgen.net/npm/node/mime-types +[node-version-url]: https://nodejs.org/en/download +[npm-downloads-image]: https://badgen.net/npm/dm/mime-types +[npm-url]: https://npmjs.org/package/mime-types +[npm-version-image]: https://badgen.net/npm/v/mime-types diff --git a/node_modules/mime-types/index.js b/node_modules/mime-types/index.js new file mode 100644 index 0000000..b9f34d5 --- /dev/null +++ b/node_modules/mime-types/index.js @@ -0,0 +1,188 @@ +/*! + * mime-types + * Copyright(c) 2014 Jonathan Ong + * Copyright(c) 2015 Douglas Christopher Wilson + * MIT Licensed + */ + +'use strict' + +/** + * Module dependencies. + * @private + */ + +var db = require('mime-db') +var extname = require('path').extname + +/** + * Module variables. + * @private + */ + +var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/ +var TEXT_TYPE_REGEXP = /^text\//i + +/** + * Module exports. + * @public + */ + +exports.charset = charset +exports.charsets = { lookup: charset } +exports.contentType = contentType +exports.extension = extension +exports.extensions = Object.create(null) +exports.lookup = lookup +exports.types = Object.create(null) + +// Populate the extensions/types maps +populateMaps(exports.extensions, exports.types) + +/** + * Get the default charset for a MIME type. + * + * @param {string} type + * @return {boolean|string} + */ + +function charset (type) { + if (!type || typeof type !== 'string') { + return false + } + + // TODO: use media-typer + var match = EXTRACT_TYPE_REGEXP.exec(type) + var mime = match && db[match[1].toLowerCase()] + + if (mime && mime.charset) { + return mime.charset + } + + // default text/* to utf-8 + if (match && TEXT_TYPE_REGEXP.test(match[1])) { + return 'UTF-8' + } + + return false +} + +/** + * Create a full Content-Type header given a MIME type or extension. + * + * @param {string} str + * @return {boolean|string} + */ + +function contentType (str) { + // TODO: should this even be in this module? + if (!str || typeof str !== 'string') { + return false + } + + var mime = str.indexOf('/') === -1 + ? exports.lookup(str) + : str + + if (!mime) { + return false + } + + // TODO: use content-type or other module + if (mime.indexOf('charset') === -1) { + var charset = exports.charset(mime) + if (charset) mime += '; charset=' + charset.toLowerCase() + } + + return mime +} + +/** + * Get the default extension for a MIME type. + * + * @param {string} type + * @return {boolean|string} + */ + +function extension (type) { + if (!type || typeof type !== 'string') { + return false + } + + // TODO: use media-typer + var match = EXTRACT_TYPE_REGEXP.exec(type) + + // get extensions + var exts = match && exports.extensions[match[1].toLowerCase()] + + if (!exts || !exts.length) { + return false + } + + return exts[0] +} + +/** + * Lookup the MIME type for a file path/extension. + * + * @param {string} path + * @return {boolean|string} + */ + +function lookup (path) { + if (!path || typeof path !== 'string') { + return false + } + + // get the extension ("ext" or ".ext" or full path) + var extension = extname('x.' + path) + .toLowerCase() + .substr(1) + + if (!extension) { + return false + } + + return exports.types[extension] || false +} + +/** + * Populate the extensions and types maps. + * @private + */ + +function populateMaps (extensions, types) { + // source preference (least -> most) + var preference = ['nginx', 'apache', undefined, 'iana'] + + Object.keys(db).forEach(function forEachMimeType (type) { + var mime = db[type] + var exts = mime.extensions + + if (!exts || !exts.length) { + return + } + + // mime -> extensions + extensions[type] = exts + + // extension -> mime + for (var i = 0; i < exts.length; i++) { + var extension = exts[i] + + if (types[extension]) { + var from = preference.indexOf(db[types[extension]].source) + var to = preference.indexOf(mime.source) + + if (types[extension] !== 'application/octet-stream' && + (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) { + // skip the remapping + continue + } + } + + // set the extension -> mime + types[extension] = type + } + }) +} diff --git a/node_modules/mime-types/package.json b/node_modules/mime-types/package.json new file mode 100644 index 0000000..bbef696 --- /dev/null +++ b/node_modules/mime-types/package.json @@ -0,0 +1,44 @@ +{ + "name": "mime-types", + "description": "The ultimate javascript content-type utility.", + "version": "2.1.35", + "contributors": [ + "Douglas Christopher Wilson ", + "Jeremiah Senkpiel (https://searchbeam.jit.su)", + "Jonathan Ong (http://jongleberry.com)" + ], + "license": "MIT", + "keywords": [ + "mime", + "types" + ], + "repository": "jshttp/mime-types", + "dependencies": { + "mime-db": "1.52.0" + }, + "devDependencies": { + "eslint": "7.32.0", + "eslint-config-standard": "14.1.1", + "eslint-plugin-import": "2.25.4", + "eslint-plugin-markdown": "2.2.1", + "eslint-plugin-node": "11.1.0", + "eslint-plugin-promise": "5.2.0", + "eslint-plugin-standard": "4.1.0", + "mocha": "9.2.2", + "nyc": "15.1.0" + }, + "files": [ + "HISTORY.md", + "LICENSE", + "index.js" + ], + "engines": { + "node": ">= 0.6" + }, + "scripts": { + "lint": "eslint .", + "test": "mocha --reporter spec test/test.js", + "test-ci": "nyc --reporter=lcov --reporter=text npm test", + "test-cov": "nyc --reporter=html --reporter=text npm test" + } +} diff --git a/node_modules/mysql2/License b/node_modules/mysql2/License new file mode 100644 index 0000000..c9348b9 --- /dev/null +++ b/node_modules/mysql2/License @@ -0,0 +1,19 @@ +Copyright (c) 2016 Andrey Sidorov (sidorares@yandex.ru) and contributors + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. diff --git a/node_modules/mysql2/README.md b/node_modules/mysql2/README.md new file mode 100644 index 0000000..7b5560f --- /dev/null +++ b/node_modules/mysql2/README.md @@ -0,0 +1,114 @@ +[npm-image]: https://img.shields.io/npm/v/mysql2.svg +[npm-url]: https://npmjs.com/package/mysql2 +[node-version-image]: https://img.shields.io/node/v/mysql2.svg +[node-version-url]: https://nodejs.org/en/download +[downloads-image]: https://img.shields.io/npm/dm/mysql2.svg +[downloads-url]: https://npmjs.com/package/mysql2 +[license-url]: https://github.com/sidorares/node-mysql2/blob/master/License +[license-image]: https://img.shields.io/npm/l/mysql2.svg?maxAge=2592000 +[node-mysql]: https://github.com/mysqljs/mysql +[mysqljs]: https://github.com/mysqljs +[mysql-native]: https://github.com/sidorares/nodejs-mysql-native +[sidorares]: https://github.com/sidorares +[TooTallNate]: https://gist.github.com/TooTallNate +[starttls.js]: https://gist.github.com/TooTallNate/848444 +[node-mariasql]: https://github.com/mscdex/node-mariasql +[contributors]: https://github.com/sidorares/node-mysql2/graphs/contributors +[contributing]: https://github.com/sidorares/node-mysql2/blob/master/Contributing.md +[docs-base]: https://sidorares.github.io/node-mysql2/docs +[docs-base-zh-CN]: https://sidorares.github.io/node-mysql2/zh-CN/docs +[docs-base-pt-BR]: https://sidorares.github.io/node-mysql2/pt-BR/docs +[docs-prepared-statements]: https://sidorares.github.io/node-mysql2/docs/documentation/prepared-statements +[docs-mysql-server]: https://sidorares.github.io/node-mysql2/docs/documentation/mysql-server +[docs-promise-wrapper]: https://sidorares.github.io/node-mysql2/docs/documentation/promise-wrapper +[docs-authentication-switch]: https://sidorares.github.io/node-mysql2/docs/documentation/authentication-switch +[docs-streams]: https://sidorares.github.io/node-mysql2/docs/documentation/extras +[docs-typescript-docs]: https://sidorares.github.io/node-mysql2/docs/documentation/typescript-examples +[docs-qs-pooling]: https://sidorares.github.io/node-mysql2/docs#using-connection-pools +[docs-qs-first-query]: https://sidorares.github.io/node-mysql2/docs#first-query +[docs-qs-using-prepared-statements]: https://sidorares.github.io/node-mysql2/docs#using-prepared-statements +[docs-examples]: https://sidorares.github.io/node-mysql2/docs/examples +[docs-faq]: https://sidorares.github.io/node-mysql2/docs/faq +[docs-documentation]: https://sidorares.github.io/node-mysql2/docs/documentation +[docs-contributing]: https://sidorares.github.io/node-mysql2/docs/contributing/website +[coverage]: https://img.shields.io/codecov/c/github/sidorares/node-mysql2 +[coverage-url]: https://app.codecov.io/github/sidorares/node-mysql2 +[ci-url]: https://github.com/sidorares/node-mysql2/actions/workflows/ci-coverage.yml?query=branch%3Amaster +[ci-image]: https://img.shields.io/github/actions/workflow/status/sidorares/node-mysql2/ci-coverage.yml?event=push&style=flat&label=CI&branch=master + +# MySQL2 + +[![NPM Version][npm-image]][npm-url] +[![NPM Downloads][downloads-image]][downloads-url] +[![Node.js Version][node-version-image]][node-version-url] +[![GitHub Workflow Status (with event)][ci-image]][ci-url] +[![Codecov][coverage]][coverage-url] +[![License][license-image]][license-url] + +[English][docs-base] | [็ฎ€ไฝ“ไธญๆ–‡][docs-base-zh-CN] | [Portuguรชs (BR)][docs-base-pt-BR] + +> MySQL client for Node.js with focus on performance. Supports prepared statements, non-utf8 encodings, binary log protocol, compression, ssl [much more][docs-documentation]. + +**Table of Contents** + +- [History and Why MySQL2](#history-and-why-mysql2) +- [Installation](#installation) +- [Documentation](#documentation) +- [Acknowledgements](#acknowledgements) +- [Contributing](#contributing) + +## History and Why MySQL2 + +MySQL2 project is a continuation of [MySQL-Native][mysql-native]. Protocol parser code was rewritten from scratch and api changed to match popular [Node MySQL][node-mysql]. MySQL2 team is working together with [Node MySQL][node-mysql] team to factor out shared code and move it under [mysqljs][mysqljs] organization. + +MySQL2 is mostly API compatible with [Node MySQL][node-mysql] and supports majority of features. MySQL2 also offers these additional features: + +- Faster / Better Performance +- [Prepared Statements][docs-prepared-statements] +- MySQL Binary Log Protocol +- [MySQL Server][docs-mysql-server] +- Extended support for Encoding and Collation +- [Promise Wrapper][docs-promise-wrapper] +- Compression +- SSL and [Authentication Switch][docs-authentication-switch] +- [Custom Streams][docs-streams] +- [Pooling][docs-qs-pooling] + +## Installation + +MySQL2 is free from native bindings and can be installed on Linux, Mac OS or Windows without any issues. + +```bash +npm install --save mysql2 +``` + +If you are using TypeScript, you will need to install `@types/node`. + +```bash +npm install --save-dev @types/node +``` + +> For TypeScript documentation and examples, see [here][docs-typescript-docs]. + +## Documentation + +- [Quickstart][docs-base] + - [First Query][docs-qs-first-query], [Using Prepared Statements][docs-qs-using-prepared-statements], [Using Connection Pools][docs-qs-pooling] and more. +- [Documentation][docs-documentation] +- [Examples][docs-examples] +- [FAQ][docs-faq] + +## Acknowledgements + +- Internal protocol is written by [@sidorares][sidorares] [MySQL-Native][mysql-native]. +- Constants, SQL parameters interpolation, Pooling, `ConnectionConfig` class taken from [Node MySQL][node-mysql]. +- SSL upgrade code based on [@TooTallNate][TooTallNate] [code][starttls.js]. +- Secure connection / compressed connection api flags compatible to [MariaSQL][node-mariasql] client. +- [Contributors][contributors]. + +## Contributing + +Want to improve something in **MySQL2**? +Please check [Contributing.md][contributing] for detailed instruction on how to get started. + +To contribute in **MySQL2 Documentation**, please visit the [Website Contributing Guidelines][docs-contributing] for detailed instruction on how to get started. diff --git a/node_modules/mysql2/index.d.ts b/node_modules/mysql2/index.d.ts new file mode 100644 index 0000000..35e7952 --- /dev/null +++ b/node_modules/mysql2/index.d.ts @@ -0,0 +1 @@ +export * from './typings/mysql/index.js'; diff --git a/node_modules/mysql2/index.js b/node_modules/mysql2/index.js new file mode 100644 index 0000000..e303620 --- /dev/null +++ b/node_modules/mysql2/index.js @@ -0,0 +1,77 @@ +'use strict'; + +const SqlString = require('sqlstring'); + +const ConnectionConfig = require('./lib/connection_config.js'); +const parserCache = require('./lib/parsers/parser_cache.js'); + +const Connection = require('./lib/connection.js'); + +exports.createConnection = require('./lib/create_connection.js'); +exports.connect = exports.createConnection; +exports.Connection = Connection; +exports.ConnectionConfig = ConnectionConfig; + +const Pool = require('./lib/pool.js'); +const PoolCluster = require('./lib/pool_cluster.js'); +const createPool = require('./lib/create_pool.js'); +const createPoolCluster = require('./lib/create_pool_cluster.js'); + +exports.createPool = createPool; + +exports.createPoolCluster = createPoolCluster; + +exports.createQuery = Connection.createQuery; + +exports.Pool = Pool; + +exports.PoolCluster = PoolCluster; + +exports.createServer = function (handler) { + const Server = require('./lib/server.js'); + const s = new Server(); + if (handler) { + s.on('connection', handler); + } + return s; +}; + +exports.PoolConnection = require('./lib/pool_connection.js'); +exports.authPlugins = require('./lib/auth_plugins'); +exports.escape = SqlString.escape; +exports.escapeId = SqlString.escapeId; +exports.format = SqlString.format; +exports.raw = SqlString.raw; + +exports.__defineGetter__( + 'createConnectionPromise', + () => require('./promise.js').createConnection +); + +exports.__defineGetter__( + 'createPoolPromise', + () => require('./promise.js').createPool +); + +exports.__defineGetter__( + 'createPoolClusterPromise', + () => require('./promise.js').createPoolCluster +); + +exports.__defineGetter__('Types', () => require('./lib/constants/types.js')); + +exports.__defineGetter__('Charsets', () => + require('./lib/constants/charsets.js') +); + +exports.__defineGetter__('CharsetToEncoding', () => + require('./lib/constants/charset_encodings.js') +); + +exports.setMaxParserCache = function (max) { + parserCache.setMaxCache(max); +}; + +exports.clearParserCache = function () { + parserCache.clearCache(); +}; diff --git a/node_modules/mysql2/lib/auth_41.js b/node_modules/mysql2/lib/auth_41.js new file mode 100644 index 0000000..9245380 --- /dev/null +++ b/node_modules/mysql2/lib/auth_41.js @@ -0,0 +1,95 @@ +'use strict'; + +/* +4.1 authentication: (http://bazaar.launchpad.net/~mysql/mysql-server/5.5/view/head:/sql/password.c) + + SERVER: public_seed=create_random_string() + send(public_seed) + + CLIENT: recv(public_seed) + hash_stage1=sha1("password") + hash_stage2=sha1(hash_stage1) + reply=xor(hash_stage1, sha1(public_seed,hash_stage2) + + // this three steps are done in scramble() + + send(reply) + + + SERVER: recv(reply) + hash_stage1=xor(reply, sha1(public_seed,hash_stage2)) + candidate_hash2=sha1(hash_stage1) + check(candidate_hash2==hash_stage2) + +server stores sha1(sha1(password)) ( hash_stag2) +*/ + +const crypto = require('crypto'); + +function sha1(msg, msg1, msg2) { + const hash = crypto.createHash('sha1'); + hash.update(msg); + if (msg1) { + hash.update(msg1); + } + + if (msg2) { + hash.update(msg2); + } + + return hash.digest(); +} + +function xor(a, b) { + const result = Buffer.allocUnsafe(a.length); + for (let i = 0; i < a.length; i++) { + result[i] = a[i] ^ b[i]; + } + return result; +} + +exports.xor = xor; + +function token(password, scramble1, scramble2) { + if (!password) { + return Buffer.alloc(0); + } + const stage1 = sha1(password); + return exports.calculateTokenFromPasswordSha(stage1, scramble1, scramble2); +} + +exports.calculateTokenFromPasswordSha = function ( + passwordSha, + scramble1, + scramble2 +) { + // we use AUTH 41 here, and we need only the bytes we just need. + const authPluginData1 = scramble1.slice(0, 8); + const authPluginData2 = scramble2.slice(0, 12); + const stage2 = sha1(passwordSha); + const stage3 = sha1(authPluginData1, authPluginData2, stage2); + return xor(stage3, passwordSha); +}; + +exports.calculateToken = token; + +exports.verifyToken = function (publicSeed1, publicSeed2, token, doubleSha) { + const hashStage1 = xor(token, sha1(publicSeed1, publicSeed2, doubleSha)); + const candidateHash2 = sha1(hashStage1); + return candidateHash2.compare(doubleSha) === 0; +}; + +exports.doubleSha1 = function (password) { + return sha1(sha1(password)); +}; + +function xorRotating(a, seed) { + const result = Buffer.allocUnsafe(a.length); + const seedLen = seed.length; + + for (let i = 0; i < a.length; i++) { + result[i] = a[i] ^ seed[i % seedLen]; + } + return result; +} +exports.xorRotating = xorRotating; diff --git a/node_modules/mysql2/lib/auth_plugins/caching_sha2_password.js b/node_modules/mysql2/lib/auth_plugins/caching_sha2_password.js new file mode 100644 index 0000000..7bbeac8 --- /dev/null +++ b/node_modules/mysql2/lib/auth_plugins/caching_sha2_password.js @@ -0,0 +1,108 @@ +'use strict'; + +// https://mysqlserverteam.com/mysql-8-0-4-new-default-authentication-plugin-caching_sha2_password/ + +const PLUGIN_NAME = 'caching_sha2_password'; +const crypto = require('crypto'); +const { xor, xorRotating } = require('../auth_41'); + +const REQUEST_SERVER_KEY_PACKET = Buffer.from([2]); +const FAST_AUTH_SUCCESS_PACKET = Buffer.from([3]); +const PERFORM_FULL_AUTHENTICATION_PACKET = Buffer.from([4]); + +const STATE_INITIAL = 0; +const STATE_TOKEN_SENT = 1; +const STATE_WAIT_SERVER_KEY = 2; +const STATE_FINAL = -1; + +function sha256(msg) { + const hash = crypto.createHash('sha256'); + hash.update(msg); + return hash.digest(); +} + +function calculateToken(password, scramble) { + if (!password) { + return Buffer.alloc(0); + } + const stage1 = sha256(Buffer.from(password)); + const stage2 = sha256(stage1); + const stage3 = sha256(Buffer.concat([stage2, scramble])); + return xor(stage1, stage3); +} + +function encrypt(password, scramble, key) { + const stage1 = xorRotating(Buffer.from(`${password}\0`, 'utf8'), scramble); + return crypto.publicEncrypt( + { + key, + padding: crypto.constants.RSA_PKCS1_OAEP_PADDING, + }, + stage1 + ); +} + +module.exports = + (pluginOptions = {}) => + ({ connection }) => { + let state = 0; + let scramble = null; + + const password = connection.config.password; + + const authWithKey = (serverKey) => { + const _password = encrypt(password, scramble, serverKey); + state = STATE_FINAL; + return _password; + }; + + return (data) => { + switch (state) { + case STATE_INITIAL: + scramble = data.slice(0, 20); + state = STATE_TOKEN_SENT; + return calculateToken(password, scramble); + + case STATE_TOKEN_SENT: + if (FAST_AUTH_SUCCESS_PACKET.equals(data)) { + state = STATE_FINAL; + return null; + } + + if (PERFORM_FULL_AUTHENTICATION_PACKET.equals(data)) { + const isSecureConnection = + typeof pluginOptions.overrideIsSecure === 'undefined' + ? connection.config.ssl || connection.config.socketPath + : pluginOptions.overrideIsSecure; + if (isSecureConnection) { + state = STATE_FINAL; + return Buffer.from(`${password}\0`, 'utf8'); + } + + // if client provides key we can save one extra roundrip on first connection + if (pluginOptions.serverPublicKey) { + return authWithKey(pluginOptions.serverPublicKey); + } + + state = STATE_WAIT_SERVER_KEY; + return REQUEST_SERVER_KEY_PACKET; + } + throw new Error( + `Invalid AuthMoreData packet received by ${PLUGIN_NAME} plugin in STATE_TOKEN_SENT state.` + ); + case STATE_WAIT_SERVER_KEY: + if (pluginOptions.onServerPublicKey) { + pluginOptions.onServerPublicKey(data); + } + return authWithKey(data); + case STATE_FINAL: + throw new Error( + `Unexpected data in AuthMoreData packet received by ${PLUGIN_NAME} plugin in STATE_FINAL state.` + ); + } + + throw new Error( + `Unexpected data in AuthMoreData packet received by ${PLUGIN_NAME} plugin in state ${state}` + ); + }; + }; diff --git a/node_modules/mysql2/lib/auth_plugins/caching_sha2_password.md b/node_modules/mysql2/lib/auth_plugins/caching_sha2_password.md new file mode 100644 index 0000000..5d67239 --- /dev/null +++ b/node_modules/mysql2/lib/auth_plugins/caching_sha2_password.md @@ -0,0 +1,18 @@ +## + +https://dev.mysql.com/doc/refman/8.0/en/caching-sha2-pluggable-authentication.html + +```js +const mysql = require('mysql'); +mysql.createConnection({ + authPlugins: { + caching_sha2_password: mysql.authPlugins.caching_sha2_password({ + onServerPublikKey: function (key) { + console.log(key); + }, + serverPublicKey: 'xxxyyy', + overrideIsSecure: true, // + }), + }, +}); +``` diff --git a/node_modules/mysql2/lib/auth_plugins/index.js b/node_modules/mysql2/lib/auth_plugins/index.js new file mode 100644 index 0000000..dd4dc98 --- /dev/null +++ b/node_modules/mysql2/lib/auth_plugins/index.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = { + caching_sha2_password: require('./caching_sha2_password'), + mysql_clear_password: require('./mysql_clear_password'), + mysql_native_password: require('./mysql_native_password'), + sha256_password: require('./sha256_password'), +}; diff --git a/node_modules/mysql2/lib/auth_plugins/mysql_clear_password.js b/node_modules/mysql2/lib/auth_plugins/mysql_clear_password.js new file mode 100644 index 0000000..1e0e321 --- /dev/null +++ b/node_modules/mysql2/lib/auth_plugins/mysql_clear_password.js @@ -0,0 +1,17 @@ +'use strict'; + +function bufferFromStr(str) { + return Buffer.from(`${str}\0`); +} + +const create_mysql_clear_password_plugin = (pluginOptions) => + function mysql_clear_password_plugin({ connection, command }) { + const password = + command.password || pluginOptions.password || connection.config.password; + + return function (/* pluginData */) { + return bufferFromStr(password); + }; + }; + +module.exports = create_mysql_clear_password_plugin; diff --git a/node_modules/mysql2/lib/auth_plugins/mysql_native_password.js b/node_modules/mysql2/lib/auth_plugins/mysql_native_password.js new file mode 100644 index 0000000..b4f4b87 --- /dev/null +++ b/node_modules/mysql2/lib/auth_plugins/mysql_native_password.js @@ -0,0 +1,34 @@ +'use strict'; + +//const PLUGIN_NAME = 'mysql_native_password'; +const auth41 = require('../auth_41.js'); + +module.exports = + (pluginOptions) => + ({ connection, command }) => { + const password = + command.password || pluginOptions.password || connection.config.password; + const passwordSha1 = + command.passwordSha1 || + pluginOptions.passwordSha1 || + connection.config.passwordSha1; + return (data) => { + const authPluginData1 = data.slice(0, 8); + const authPluginData2 = data.slice(8, 20); + let authToken; + if (passwordSha1) { + authToken = auth41.calculateTokenFromPasswordSha( + passwordSha1, + authPluginData1, + authPluginData2 + ); + } else { + authToken = auth41.calculateToken( + password, + authPluginData1, + authPluginData2 + ); + } + return authToken; + }; + }; diff --git a/node_modules/mysql2/lib/auth_plugins/sha256_password.js b/node_modules/mysql2/lib/auth_plugins/sha256_password.js new file mode 100644 index 0000000..4565330 --- /dev/null +++ b/node_modules/mysql2/lib/auth_plugins/sha256_password.js @@ -0,0 +1,59 @@ +'use strict'; + +const PLUGIN_NAME = 'sha256_password'; +const crypto = require('crypto'); +const { xorRotating } = require('../auth_41'); + +const REQUEST_SERVER_KEY_PACKET = Buffer.from([1]); + +const STATE_INITIAL = 0; +const STATE_WAIT_SERVER_KEY = 1; +const STATE_FINAL = -1; + +function encrypt(password, scramble, key) { + const stage1 = xorRotating(Buffer.from(`${password}\0`, 'utf8'), scramble); + return crypto.publicEncrypt(key, stage1); +} + +module.exports = + (pluginOptions = {}) => + ({ connection }) => { + let state = 0; + let scramble = null; + + const password = connection.config.password; + + const authWithKey = (serverKey) => { + const _password = encrypt(password, scramble, serverKey); + state = STATE_FINAL; + return _password; + }; + + return (data) => { + switch (state) { + case STATE_INITIAL: + scramble = data.slice(0, 20); + // if client provides key we can save one extra roundrip on first connection + if (pluginOptions.serverPublicKey) { + return authWithKey(pluginOptions.serverPublicKey); + } + + state = STATE_WAIT_SERVER_KEY; + return REQUEST_SERVER_KEY_PACKET; + + case STATE_WAIT_SERVER_KEY: + if (pluginOptions.onServerPublicKey) { + pluginOptions.onServerPublicKey(data); + } + return authWithKey(data); + case STATE_FINAL: + throw new Error( + `Unexpected data in AuthMoreData packet received by ${PLUGIN_NAME} plugin in STATE_FINAL state.` + ); + } + + throw new Error( + `Unexpected data in AuthMoreData packet received by ${PLUGIN_NAME} plugin in state ${state}` + ); + }; + }; diff --git a/node_modules/mysql2/lib/base/connection.js b/node_modules/mysql2/lib/base/connection.js new file mode 100644 index 0000000..ea91f18 --- /dev/null +++ b/node_modules/mysql2/lib/base/connection.js @@ -0,0 +1,945 @@ +// This file was modified by Oracle on June 1, 2021. +// The changes involve new logic to handle an additional ERR Packet sent by +// the MySQL server when the connection is closed unexpectedly. +// Modifications copyright (c) 2021, Oracle and/or its affiliates. + +// This file was modified by Oracle on June 17, 2021. +// The changes involve logic to ensure the socket connection is closed when +// there is a fatal error. +// Modifications copyright (c) 2021, Oracle and/or its affiliates. + +// This file was modified by Oracle on September 21, 2021. +// The changes involve passing additional authentication factor passwords +// to the ChangeUser Command instance. +// Modifications copyright (c) 2021, Oracle and/or its affiliates. + +'use strict'; + +const Net = require('net'); +const Tls = require('tls'); +const Timers = require('timers'); +const EventEmitter = require('events').EventEmitter; +const Readable = require('stream').Readable; +const Queue = require('denque'); +const SqlString = require('sqlstring'); +const { createLRU } = require('lru.min'); +const PacketParser = require('../packet_parser.js'); +const Packets = require('../packets/index.js'); +const Commands = require('../commands/index.js'); +const ConnectionConfig = require('../connection_config.js'); +const CharsetToEncoding = require('../constants/charset_encodings.js'); + +let _connectionId = 0; + +let convertNamedPlaceholders = null; + +class BaseConnection extends EventEmitter { + constructor(opts) { + super(); + this.config = opts.config; + // TODO: fill defaults + // if no params, connect to /var/lib/mysql/mysql.sock ( /tmp/mysql.sock on OSX ) + // if host is given, connect to host:3306 + // TODO: use `/usr/local/mysql/bin/mysql_config --socket` output? as default socketPath + // if there is no host/port and no socketPath parameters? + if (!opts.config.stream) { + if (opts.config.socketPath) { + this.stream = Net.connect(opts.config.socketPath); + } else { + this.stream = Net.connect(opts.config.port, opts.config.host); + + // Optionally enable keep-alive on the socket. + if (this.config.enableKeepAlive) { + this.stream.on('connect', () => { + this.stream.setKeepAlive(true, this.config.keepAliveInitialDelay); + }); + } + + // Enable TCP_NODELAY flag. This is needed so that the network packets + // are sent immediately to the server + this.stream.setNoDelay(true); + } + // if stream is a function, treat it as "stream agent / factory" + } else if (typeof opts.config.stream === 'function') { + this.stream = opts.config.stream(opts); + } else { + this.stream = opts.config.stream; + } + + this._internalId = _connectionId++; + this._commands = new Queue(); + this._command = null; + this._paused = false; + this._paused_packets = new Queue(); + this._statements = createLRU({ + max: this.config.maxPreparedStatements, + onEviction: function (_, statement) { + statement.close(); + }, + }); + this.serverCapabilityFlags = 0; + this.authorized = false; + this.sequenceId = 0; + this.compressedSequenceId = 0; + this.threadId = null; + this._handshakePacket = null; + this._fatalError = null; + this._protocolError = null; + this._outOfOrderPackets = []; + this.clientEncoding = CharsetToEncoding[this.config.charsetNumber]; + this.stream.on('error', this._handleNetworkError.bind(this)); + // see https://gist.github.com/khoomeister/4985691#use-that-instead-of-bind + this.packetParser = new PacketParser((p) => { + this.handlePacket(p); + }); + this.stream.on('data', (data) => { + if (this.connectTimeout) { + Timers.clearTimeout(this.connectTimeout); + this.connectTimeout = null; + } + this.packetParser.execute(data); + }); + this.stream.on('end', () => { + // emit the end event so that the pooled connection can close the connection + this.emit('end'); + }); + this.stream.on('close', () => { + // we need to set this flag everywhere where we want connection to close + if (this._closing) { + return; + } + if (!this._protocolError) { + // no particular error message before disconnect + this._protocolError = new Error( + 'Connection lost: The server closed the connection.' + ); + this._protocolError.fatal = true; + this._protocolError.code = 'PROTOCOL_CONNECTION_LOST'; + } + this._notifyError(this._protocolError); + }); + let handshakeCommand; + if (!this.config.isServer) { + handshakeCommand = new Commands.ClientHandshake(this.config.clientFlags); + handshakeCommand.on('end', () => { + // this happens when handshake finishes early either because there was + // some fatal error or the server sent an error packet instead of + // an hello packet (for example, 'Too many connections' error) + if ( + !handshakeCommand.handshake || + this._fatalError || + this._protocolError + ) { + return; + } + this._handshakePacket = handshakeCommand.handshake; + this.threadId = handshakeCommand.handshake.connectionId; + this.emit('connect', handshakeCommand.handshake); + }); + handshakeCommand.on('error', (err) => { + this._closing = true; + this._notifyError(err); + }); + this.addCommand(handshakeCommand); + } + // in case there was no initial handshake but we need to read sting, assume it utf-8 + // most common example: "Too many connections" error ( packet is sent immediately on connection attempt, we don't know server encoding yet) + // will be overwritten with actual encoding value as soon as server handshake packet is received + this.serverEncoding = 'utf8'; + if (this.config.connectTimeout) { + const timeoutHandler = this._handleTimeoutError.bind(this); + this.connectTimeout = Timers.setTimeout( + timeoutHandler, + this.config.connectTimeout + ); + } + } + + _addCommandClosedState(cmd) { + const err = new Error( + "Can't add new command when connection is in closed state" + ); + err.fatal = true; + if (cmd.onResult) { + cmd.onResult(err); + } else { + this.emit('error', err); + } + } + + _handleFatalError(err) { + err.fatal = true; + // stop receiving packets + this.stream.removeAllListeners('data'); + this.addCommand = this._addCommandClosedState; + this.write = () => { + this.emit('error', new Error("Can't write in closed state")); + }; + this._notifyError(err); + this._fatalError = err; + } + + _handleNetworkError(err) { + if (this.connectTimeout) { + Timers.clearTimeout(this.connectTimeout); + this.connectTimeout = null; + } + // Do not throw an error when a connection ends with a RST,ACK packet + if (err.code === 'ECONNRESET' && this._closing) { + return; + } + this._handleFatalError(err); + } + + _handleTimeoutError() { + if (this.connectTimeout) { + Timers.clearTimeout(this.connectTimeout); + this.connectTimeout = null; + } + this.stream.destroy && this.stream.destroy(); + const err = new Error('connect ETIMEDOUT'); + err.errorno = 'ETIMEDOUT'; + err.code = 'ETIMEDOUT'; + err.syscall = 'connect'; + this._handleNetworkError(err); + } + + // notify all commands in the queue and bubble error as connection "error" + // called on stream error or unexpected termination + _notifyError(err) { + if (this.connectTimeout) { + Timers.clearTimeout(this.connectTimeout); + this.connectTimeout = null; + } + // prevent from emitting 'PROTOCOL_CONNECTION_LOST' after EPIPE or ECONNRESET + if (this._fatalError) { + return; + } + let command; + // if there is no active command, notify connection + // if there are commands and all of them have callbacks, pass error via callback + let bubbleErrorToConnection = !this._command; + if (this._command && this._command.onResult) { + this._command.onResult(err); + this._command = null; + // connection handshake is special because we allow it to be implicit + // if error happened during handshake, but there are others commands in queue + // then bubble error to other commands and not to connection + } else if ( + !( + this._command && + this._command.constructor === Commands.ClientHandshake && + this._commands.length > 0 + ) + ) { + bubbleErrorToConnection = true; + } + while ((command = this._commands.shift())) { + if (command.onResult) { + command.onResult(err); + } else { + bubbleErrorToConnection = true; + } + } + // notify connection if some comands in the queue did not have callbacks + // or if this is pool connection ( so it can be removed from pool ) + if (bubbleErrorToConnection || this._pool) { + this.emit('error', err); + } + // close connection after emitting the event in case of a fatal error + if (err.fatal) { + this.close(); + } + } + + write(buffer) { + const result = this.stream.write(buffer, (err) => { + if (err) { + this._handleNetworkError(err); + } + }); + + if (!result) { + this.stream.emit('pause'); + } + } + + // http://dev.mysql.com/doc/internals/en/sequence-id.html + // + // The sequence-id is incremented with each packet and may wrap around. + // It starts at 0 and is reset to 0 when a new command + // begins in the Command Phase. + // http://dev.mysql.com/doc/internals/en/example-several-mysql-packets.html + _resetSequenceId() { + this.sequenceId = 0; + this.compressedSequenceId = 0; + } + + _bumpCompressedSequenceId(numPackets) { + this.compressedSequenceId += numPackets; + this.compressedSequenceId %= 256; + } + + _bumpSequenceId(numPackets) { + this.sequenceId += numPackets; + this.sequenceId %= 256; + } + + writePacket(packet) { + const MAX_PACKET_LENGTH = 16777215; + const length = packet.length(); + let chunk, offset, header; + if (length < MAX_PACKET_LENGTH) { + packet.writeHeader(this.sequenceId); + if (this.config.debug) { + console.log( + `${this._internalId} ${this.connectionId} <== ${this._command._commandName}#${this._command.stateName()}(${[this.sequenceId, packet._name, packet.length()].join(',')})` + ); + console.log( + `${this._internalId} ${this.connectionId} <== ${packet.buffer.toString('hex')}` + ); + } + this._bumpSequenceId(1); + this.write(packet.buffer); + } else { + if (this.config.debug) { + console.log( + `${this._internalId} ${this.connectionId} <== Writing large packet, raw content not written:` + ); + console.log( + `${this._internalId} ${this.connectionId} <== ${this._command._commandName}#${this._command.stateName()}(${[this.sequenceId, packet._name, packet.length()].join(',')})` + ); + } + for (offset = 4; offset < 4 + length; offset += MAX_PACKET_LENGTH) { + chunk = packet.buffer.slice(offset, offset + MAX_PACKET_LENGTH); + if (chunk.length === MAX_PACKET_LENGTH) { + header = Buffer.from([0xff, 0xff, 0xff, this.sequenceId]); + } else { + header = Buffer.from([ + chunk.length & 0xff, + (chunk.length >> 8) & 0xff, + (chunk.length >> 16) & 0xff, + this.sequenceId, + ]); + } + this._bumpSequenceId(1); + this.write(header); + this.write(chunk); + } + } + } + + // 0.11+ environment + startTLS(onSecure) { + if (this.config.debug) { + console.log('Upgrading connection to TLS'); + } + const secureContext = Tls.createSecureContext({ + ca: this.config.ssl.ca, + cert: this.config.ssl.cert, + ciphers: this.config.ssl.ciphers, + key: this.config.ssl.key, + passphrase: this.config.ssl.passphrase, + minVersion: this.config.ssl.minVersion, + maxVersion: this.config.ssl.maxVersion, + }); + const rejectUnauthorized = this.config.ssl.rejectUnauthorized; + const verifyIdentity = this.config.ssl.verifyIdentity; + const servername = this.config.host; + + let secureEstablished = false; + this.stream.removeAllListeners('data'); + const secureSocket = Tls.connect( + { + rejectUnauthorized, + requestCert: rejectUnauthorized, + checkServerIdentity: verifyIdentity + ? Tls.checkServerIdentity + : function () { + return undefined; + }, + secureContext, + isServer: false, + socket: this.stream, + servername, + }, + () => { + secureEstablished = true; + if (rejectUnauthorized) { + if (typeof servername === 'string' && verifyIdentity) { + const cert = secureSocket.getPeerCertificate(true); + const serverIdentityCheckError = Tls.checkServerIdentity( + servername, + cert + ); + if (serverIdentityCheckError) { + onSecure(serverIdentityCheckError); + return; + } + } + } + onSecure(); + } + ); + // error handler for secure socket + secureSocket.on('error', (err) => { + if (secureEstablished) { + this._handleNetworkError(err); + } else { + onSecure(err); + } + }); + secureSocket.on('data', (data) => { + this.packetParser.execute(data); + }); + this.write = (buffer) => secureSocket.write(buffer); + } + + protocolError(message, code) { + // Starting with MySQL 8.0.24, if the client closes the connection + // unexpectedly, the server will send a last ERR Packet, which we can + // safely ignore. + // https://dev.mysql.com/worklog/task/?id=12999 + if (this._closing) { + return; + } + + const err = new Error(message); + err.fatal = true; + err.code = code || 'PROTOCOL_ERROR'; + this.emit('error', err); + } + + get fatalError() { + return this._fatalError; + } + + handlePacket(packet) { + if (this._paused) { + this._paused_packets.push(packet); + return; + } + if (this.config.debug) { + if (packet) { + console.log( + ` raw: ${packet.buffer + .slice(packet.offset, packet.offset + packet.length()) + .toString('hex')}` + ); + console.trace(); + const commandName = this._command + ? this._command._commandName + : '(no command)'; + const stateName = this._command + ? this._command.stateName() + : '(no command)'; + console.log( + `${this._internalId} ${this.connectionId} ==> ${commandName}#${stateName}(${[packet.sequenceId, packet.type(), packet.length()].join(',')})` + ); + } + } + if (!this._command) { + const marker = packet.peekByte(); + // If it's an Err Packet, we should use it. + if (marker === 0xff) { + const error = Packets.Error.fromPacket(packet); + this.protocolError(error.message, error.code); + } else { + // Otherwise, it means it's some other unexpected packet. + this.protocolError( + 'Unexpected packet while no commands in the queue', + 'PROTOCOL_UNEXPECTED_PACKET' + ); + } + this.close(); + return; + } + if (packet) { + // Note: when server closes connection due to inactivity, Err packet ER_CLIENT_INTERACTION_TIMEOUT from MySQL 8.0.24, sequenceId will be 0 + if (this.sequenceId !== packet.sequenceId) { + const err = new Error( + `Warning: got packets out of order. Expected ${this.sequenceId} but received ${packet.sequenceId}` + ); + err.expected = this.sequenceId; + err.received = packet.sequenceId; + this.emit('warn', err); // REVIEW + console.error(err.message); + } + this._bumpSequenceId(packet.numPackets); + } + try { + if (this._fatalError) { + // skip remaining packets after client is in the error state + return; + } + const done = this._command.execute(packet, this); + if (done) { + this._command = this._commands.shift(); + if (this._command) { + this.sequenceId = 0; + this.compressedSequenceId = 0; + this.handlePacket(); + } + } + } catch (err) { + this._handleFatalError(err); + this.stream.destroy(); + } + } + + addCommand(cmd) { + // this.compressedSequenceId = 0; + // this.sequenceId = 0; + if (this.config.debug) { + const commandName = cmd.constructor.name; + console.log(`Add command: ${commandName}`); + cmd._commandName = commandName; + } + if (!this._command) { + this._command = cmd; + this.handlePacket(); + } else { + this._commands.push(cmd); + } + return cmd; + } + + format(sql, values) { + if (typeof this.config.queryFormat === 'function') { + return this.config.queryFormat.call( + this, + sql, + values, + this.config.timezone + ); + } + const opts = { + sql: sql, + values: values, + }; + this._resolveNamedPlaceholders(opts); + return SqlString.format( + opts.sql, + opts.values, + this.config.stringifyObjects, + this.config.timezone + ); + } + + escape(value) { + return SqlString.escape(value, false, this.config.timezone); + } + + escapeId(value) { + return SqlString.escapeId(value, false); + } + + raw(sql) { + return SqlString.raw(sql); + } + + _resolveNamedPlaceholders(options) { + let unnamed; + if (this.config.namedPlaceholders || options.namedPlaceholders) { + if (Array.isArray(options.values)) { + // if an array is provided as the values, assume the conversion is not necessary. + // this allows the usage of unnamed placeholders even if the namedPlaceholders flag is enabled. + return; + } + if (convertNamedPlaceholders === null) { + convertNamedPlaceholders = require('named-placeholders')(); + } + unnamed = convertNamedPlaceholders(options.sql, options.values); + options.sql = unnamed[0]; + options.values = unnamed[1]; + } + } + + query(sql, values, cb) { + let cmdQuery; + if (sql.constructor === Commands.Query) { + cmdQuery = sql; + } else { + cmdQuery = BaseConnection.createQuery(sql, values, cb, this.config); + } + this._resolveNamedPlaceholders(cmdQuery); + const rawSql = this.format( + cmdQuery.sql, + cmdQuery.values !== undefined ? cmdQuery.values : [] + ); + cmdQuery.sql = rawSql; + return this.addCommand(cmdQuery); + } + + pause() { + this._paused = true; + this.stream.pause(); + } + + resume() { + let packet; + this._paused = false; + while ((packet = this._paused_packets.shift())) { + this.handlePacket(packet); + // don't resume if packet handler paused connection + if (this._paused) { + return; + } + } + this.stream.resume(); + } + + // TODO: named placeholders support + prepare(options, cb) { + if (typeof options === 'string') { + options = { sql: options }; + } + return this.addCommand(new Commands.Prepare(options, cb)); + } + + unprepare(sql) { + let options = {}; + if (typeof sql === 'object') { + options = sql; + } else { + options.sql = sql; + } + const key = BaseConnection.statementKey(options); + const stmt = this._statements.get(key); + if (stmt) { + this._statements.delete(key); + stmt.close(); + } + return stmt; + } + + execute(sql, values, cb) { + let options = { + infileStreamFactory: this.config.infileStreamFactory, + }; + if (typeof sql === 'object') { + // execute(options, cb) + options = { + ...options, + ...sql, + sql: sql.sql, + values: sql.values, + }; + if (typeof values === 'function') { + cb = values; + } else { + options.values = options.values || values; + } + } else if (typeof values === 'function') { + // execute(sql, cb) + cb = values; + options.sql = sql; + options.values = undefined; + } else { + // execute(sql, values, cb) + options.sql = sql; + options.values = values; + } + this._resolveNamedPlaceholders(options); + // check for values containing undefined + if (options.values) { + //If namedPlaceholder is not enabled and object is passed as bind parameters + if (!Array.isArray(options.values)) { + throw new TypeError( + 'Bind parameters must be array if namedPlaceholders parameter is not enabled' + ); + } + options.values.forEach((val) => { + //If namedPlaceholder is not enabled and object is passed as bind parameters + if (!Array.isArray(options.values)) { + throw new TypeError( + 'Bind parameters must be array if namedPlaceholders parameter is not enabled' + ); + } + if (val === undefined) { + throw new TypeError( + 'Bind parameters must not contain undefined. To pass SQL NULL specify JS null' + ); + } + if (typeof val === 'function') { + throw new TypeError( + 'Bind parameters must not contain function(s). To pass the body of a function as a string call .toString() first' + ); + } + }); + } + const executeCommand = new Commands.Execute(options, cb); + const prepareCommand = new Commands.Prepare(options, (err, stmt) => { + if (err) { + // skip execute command if prepare failed, we have main + // combined callback here + executeCommand.start = function () { + return null; + }; + if (cb) { + cb(err); + } else { + executeCommand.emit('error', err); + } + executeCommand.emit('end'); + return; + } + executeCommand.statement = stmt; + }); + this.addCommand(prepareCommand); + this.addCommand(executeCommand); + return executeCommand; + } + + changeUser(options, callback) { + if (!callback && typeof options === 'function') { + callback = options; + options = {}; + } + const charsetNumber = options.charset + ? ConnectionConfig.getCharsetNumber(options.charset) + : this.config.charsetNumber; + return this.addCommand( + new Commands.ChangeUser( + { + user: options.user || this.config.user, + // for the purpose of multi-factor authentication, or not, the main + // password (used for the 1st authentication factor) can also be + // provided via the "password1" option + password: + options.password || + options.password1 || + this.config.password || + this.config.password1, + password2: options.password2 || this.config.password2, + password3: options.password3 || this.config.password3, + passwordSha1: options.passwordSha1 || this.config.passwordSha1, + database: options.database || this.config.database, + timeout: options.timeout, + charsetNumber: charsetNumber, + currentConfig: this.config, + }, + (err) => { + if (err) { + err.fatal = true; + } + if (callback) { + callback(err); + } + } + ) + ); + } + + // transaction helpers + beginTransaction(cb) { + return this.query('START TRANSACTION', cb); + } + + commit(cb) { + return this.query('COMMIT', cb); + } + + rollback(cb) { + return this.query('ROLLBACK', cb); + } + + ping(cb) { + return this.addCommand(new Commands.Ping(cb)); + } + + _registerSlave(opts, cb) { + return this.addCommand(new Commands.RegisterSlave(opts, cb)); + } + + _binlogDump(opts, cb) { + return this.addCommand(new Commands.BinlogDump(opts, cb)); + } + + // currently just alias to close + destroy() { + this.close(); + } + + close() { + if (this.connectTimeout) { + Timers.clearTimeout(this.connectTimeout); + this.connectTimeout = null; + } + this._closing = true; + this.stream.end(); + this.addCommand = this._addCommandClosedState; + } + + createBinlogStream(opts) { + // TODO: create proper stream class + // TODO: use through2 + let test = 1; + const stream = new Readable({ objectMode: true }); + stream._read = function () { + return { + data: test++, + }; + }; + this._registerSlave(opts, () => { + const dumpCmd = this._binlogDump(opts); + dumpCmd.on('event', (ev) => { + stream.push(ev); + }); + dumpCmd.on('eof', () => { + stream.push(null); + // if non-blocking, then close stream to prevent errors + if (opts.flags && opts.flags & 0x01) { + this.close(); + } + }); + // TODO: pipe errors as well + }); + return stream; + } + + connect(cb) { + if (!cb) { + return; + } + if (this._fatalError || this._protocolError) { + return cb(this._fatalError || this._protocolError); + } + if (this._handshakePacket) { + return cb(null, this); + } + let connectCalled = 0; + function callbackOnce(isErrorHandler) { + return function (param) { + if (!connectCalled) { + if (isErrorHandler) { + cb(param); + } else { + cb(null, param); + } + } + connectCalled = 1; + }; + } + this.once('error', callbackOnce(true)); + this.once('connect', callbackOnce(false)); + } + + // =================================== + // outgoing server connection methods + // =================================== + writeColumns(columns) { + this.writePacket(Packets.ResultSetHeader.toPacket(columns.length)); + columns.forEach((column) => { + this.writePacket( + Packets.ColumnDefinition.toPacket(column, this.serverConfig.encoding) + ); + }); + this.writeEof(); + } + + // row is array of columns, not hash + writeTextRow(column) { + this.writePacket( + Packets.TextRow.toPacket(column, this.serverConfig.encoding) + ); + } + + writeBinaryRow(column) { + this.writePacket( + Packets.BinaryRow.toPacket(column, this.serverConfig.encoding) + ); + } + + writeTextResult(rows, columns, binary = false) { + this.writeColumns(columns); + rows.forEach((row) => { + const arrayRow = new Array(columns.length); + columns.forEach((column) => { + arrayRow.push(row[column.name]); + }); + if (binary) { + this.writeBinaryRow(arrayRow); + } else this.writeTextRow(arrayRow); + }); + this.writeEof(); + } + + writeEof(warnings, statusFlags) { + this.writePacket(Packets.EOF.toPacket(warnings, statusFlags)); + } + + writeOk(args) { + if (!args) { + args = { affectedRows: 0 }; + } + this.writePacket(Packets.OK.toPacket(args, this.serverConfig.encoding)); + } + + writeError(args) { + // if we want to send error before initial hello was sent, use default encoding + const encoding = this.serverConfig ? this.serverConfig.encoding : 'cesu8'; + this.writePacket(Packets.Error.toPacket(args, encoding)); + } + + serverHandshake(args) { + this.serverConfig = args; + this.serverConfig.encoding = + CharsetToEncoding[this.serverConfig.characterSet]; + return this.addCommand(new Commands.ServerHandshake(args)); + } + + // =============================================================== + end(callback) { + if (this.config.isServer) { + this._closing = true; + const quitCmd = new EventEmitter(); + setImmediate(() => { + this.stream.end(); + quitCmd.emit('end'); + }); + return quitCmd; + } + // trigger error if more commands enqueued after end command + const quitCmd = this.addCommand(new Commands.Quit(callback)); + this.addCommand = this._addCommandClosedState; + return quitCmd; + } + + static createQuery(sql, values, cb, config) { + let options = { + rowsAsArray: config.rowsAsArray, + infileStreamFactory: config.infileStreamFactory, + }; + if (typeof sql === 'object') { + // query(options, cb) + options = { + ...options, + ...sql, + sql: sql.sql, + values: sql.values, + }; + if (typeof values === 'function') { + cb = values; + } else if (values !== undefined) { + options.values = values; + } + } else if (typeof values === 'function') { + // query(sql, cb) + cb = values; + options.sql = sql; + options.values = undefined; + } else { + // query(sql, values, cb) + options.sql = sql; + options.values = values; + } + return new Commands.Query(options, cb); + } + + static statementKey(options) { + return `${typeof options.nestTables}/${options.nestTables}/${options.rowsAsArray}${options.sql}`; + } +} + +module.exports = BaseConnection; diff --git a/node_modules/mysql2/lib/base/pool.js b/node_modules/mysql2/lib/base/pool.js new file mode 100644 index 0000000..fbcfd68 --- /dev/null +++ b/node_modules/mysql2/lib/base/pool.js @@ -0,0 +1,233 @@ +'use strict'; + +const process = require('process'); +const SqlString = require('sqlstring'); +const EventEmitter = require('events').EventEmitter; +const PoolConnection = require('../pool_connection.js'); +const Queue = require('denque'); +const BaseConnection = require('./connection.js'); + +function spliceConnection(queue, connection) { + const len = queue.length; + for (let i = 0; i < len; i++) { + if (queue.get(i) === connection) { + queue.removeOne(i); + break; + } + } +} + +class BasePool extends EventEmitter { + constructor(options) { + super(); + this.config = options.config; + this.config.connectionConfig.pool = this; + this._allConnections = new Queue(); + this._freeConnections = new Queue(); + this._connectionQueue = new Queue(); + this._closed = false; + if (this.config.maxIdle < this.config.connectionLimit) { + // create idle connection timeout automatically release job + this._removeIdleTimeoutConnections(); + } + } + + getConnection(cb) { + if (this._closed) { + return process.nextTick(() => cb(new Error('Pool is closed.'))); + } + let connection; + if (this._freeConnections.length > 0) { + connection = this._freeConnections.pop(); + this.emit('acquire', connection); + return process.nextTick(() => cb(null, connection)); + } + if ( + this.config.connectionLimit === 0 || + this._allConnections.length < this.config.connectionLimit + ) { + connection = new PoolConnection(this, { + config: this.config.connectionConfig, + }); + this._allConnections.push(connection); + return connection.connect((err) => { + if (this._closed) { + return cb(new Error('Pool is closed.')); + } + if (err) { + return cb(err); + } + this.emit('connection', connection); + this.emit('acquire', connection); + return cb(null, connection); + }); + } + if (!this.config.waitForConnections) { + return process.nextTick(() => cb(new Error('No connections available.'))); + } + if ( + this.config.queueLimit && + this._connectionQueue.length >= this.config.queueLimit + ) { + return cb(new Error('Queue limit reached.')); + } + this.emit('enqueue'); + return this._connectionQueue.push(cb); + } + + releaseConnection(connection) { + let cb; + if (!connection._pool) { + // The connection has been removed from the pool and is no longer good. + if (this._connectionQueue.length) { + cb = this._connectionQueue.shift(); + process.nextTick(this.getConnection.bind(this, cb)); + } + } else if (this._connectionQueue.length) { + cb = this._connectionQueue.shift(); + process.nextTick(cb.bind(null, null, connection)); + } else { + this._freeConnections.push(connection); + this.emit('release', connection); + } + } + + end(cb) { + this._closed = true; + clearTimeout(this._removeIdleTimeoutConnectionsTimer); + if (typeof cb !== 'function') { + cb = function (err) { + if (err) { + throw err; + } + }; + } + let calledBack = false; + let closedConnections = 0; + let connection; + const endCB = function (err) { + if (calledBack) { + return; + } + if (err || ++closedConnections >= this._allConnections.length) { + calledBack = true; + cb(err); + return; + } + }.bind(this); + if (this._allConnections.length === 0) { + endCB(); + return; + } + for (let i = 0; i < this._allConnections.length; i++) { + connection = this._allConnections.get(i); + connection._realEnd(endCB); + } + } + + query(sql, values, cb) { + const cmdQuery = BaseConnection.createQuery( + sql, + values, + cb, + this.config.connectionConfig + ); + if (typeof cmdQuery.namedPlaceholders === 'undefined') { + cmdQuery.namedPlaceholders = + this.config.connectionConfig.namedPlaceholders; + } + this.getConnection((err, conn) => { + if (err) { + if (typeof cmdQuery.onResult === 'function') { + cmdQuery.onResult(err); + } else { + cmdQuery.emit('error', err); + } + return; + } + try { + conn.query(cmdQuery).once('end', () => { + conn.release(); + }); + } catch (e) { + conn.release(); + throw e; + } + }); + return cmdQuery; + } + + execute(sql, values, cb) { + // TODO construct execute command first here and pass it to connection.execute + // so that polymorphic arguments logic is there in one place + if (typeof values === 'function') { + cb = values; + values = []; + } + this.getConnection((err, conn) => { + if (err) { + return cb(err); + } + try { + conn.execute(sql, values, cb).once('end', () => { + conn.release(); + }); + } catch (e) { + conn.release(); + return cb(e); + } + }); + } + + _removeConnection(connection) { + // Remove connection from all connections + spliceConnection(this._allConnections, connection); + // Remove connection from free connections + spliceConnection(this._freeConnections, connection); + this.releaseConnection(connection); + } + + _removeIdleTimeoutConnections() { + if (this._removeIdleTimeoutConnectionsTimer) { + clearTimeout(this._removeIdleTimeoutConnectionsTimer); + } + + this._removeIdleTimeoutConnectionsTimer = setTimeout(() => { + try { + while ( + this._freeConnections.length > this.config.maxIdle || + (this._freeConnections.length > 0 && + Date.now() - this._freeConnections.get(0).lastActiveTime > + this.config.idleTimeout) + ) { + this._freeConnections.get(0).destroy(); + } + } finally { + this._removeIdleTimeoutConnections(); + } + }, 1000); + } + + format(sql, values) { + return SqlString.format( + sql, + values, + this.config.connectionConfig.stringifyObjects, + this.config.connectionConfig.timezone + ); + } + + escape(value) { + return SqlString.escape( + value, + this.config.connectionConfig.stringifyObjects, + this.config.connectionConfig.timezone + ); + } + + escapeId(value) { + return SqlString.escapeId(value, false); + } +} + +module.exports = BasePool; diff --git a/node_modules/mysql2/lib/base/pool_connection.js b/node_modules/mysql2/lib/base/pool_connection.js new file mode 100644 index 0000000..9413b70 --- /dev/null +++ b/node_modules/mysql2/lib/base/pool_connection.js @@ -0,0 +1,63 @@ +'use strict'; + +const BaseConnection = require('./connection.js'); + +class BasePoolConnection extends BaseConnection { + constructor(pool, options) { + super(options); + this._pool = pool; + // The last active time of this connection + this.lastActiveTime = Date.now(); + // When a fatal error occurs the connection's protocol ends, which will cause + // the connection to end as well, thus we only need to watch for the end event + // and we will be notified of disconnects. + // REVIEW: Moved to `once` + this.once('end', () => { + this._removeFromPool(); + }); + this.once('error', () => { + this._removeFromPool(); + }); + } + + release() { + if (!this._pool || this._pool._closed) { + return; + } + // update last active time + this.lastActiveTime = Date.now(); + this._pool.releaseConnection(this); + } + + end() { + const err = new Error( + 'Calling conn.end() to release a pooled connection is ' + + 'deprecated. In next version calling conn.end() will be ' + + 'restored to default conn.end() behavior. Use ' + + 'conn.release() instead.' + ); + this.emit('warn', err); + console.warn(err.message); + this.release(); + } + + destroy() { + this._removeFromPool(); + super.destroy(); + } + + _removeFromPool() { + if (!this._pool || this._pool._closed) { + return; + } + const pool = this._pool; + this._pool = null; + pool._removeConnection(this); + } +} + +BasePoolConnection.statementKey = BaseConnection.statementKey; +module.exports = BasePoolConnection; + +// TODO: Remove this when we are removing PoolConnection#end +BasePoolConnection.prototype._realEnd = BaseConnection.prototype.end; diff --git a/node_modules/mysql2/lib/commands/auth_switch.js b/node_modules/mysql2/lib/commands/auth_switch.js new file mode 100644 index 0000000..ff45d03 --- /dev/null +++ b/node_modules/mysql2/lib/commands/auth_switch.js @@ -0,0 +1,111 @@ +// This file was modified by Oracle on July 5, 2021. +// Errors generated by asynchronous authentication plugins are now being +// handled and subsequently emitted at the command level. +// Modifications copyright (c) 2021, Oracle and/or its affiliates. + +'use strict'; + +const Packets = require('../packets/index.js'); +const sha256_password = require('../auth_plugins/sha256_password'); +const caching_sha2_password = require('../auth_plugins/caching_sha2_password.js'); +const mysql_native_password = require('../auth_plugins/mysql_native_password.js'); +const mysql_clear_password = require('../auth_plugins/mysql_clear_password.js'); + +const standardAuthPlugins = { + sha256_password: sha256_password({}), + caching_sha2_password: caching_sha2_password({}), + mysql_native_password: mysql_native_password({}), + mysql_clear_password: mysql_clear_password({}), +}; + +function warnLegacyAuthSwitch() { + console.warn( + 'WARNING! authSwitchHandler api is deprecated, please use new authPlugins api' + ); +} + +function authSwitchPluginError(error, command) { + // Authentication errors are fatal + error.code = 'AUTH_SWITCH_PLUGIN_ERROR'; + error.fatal = true; + + command.emit('error', error); +} + +function authSwitchRequest(packet, connection, command) { + const { pluginName, pluginData } = + Packets.AuthSwitchRequest.fromPacket(packet); + let authPlugin = + connection.config.authPlugins && connection.config.authPlugins[pluginName]; + + // legacy plugin api don't allow to override mysql_native_password + // if pluginName is mysql_native_password it's using standard auth4.1 auth + if ( + connection.config.authSwitchHandler && + pluginName !== 'mysql_native_password' + ) { + const legacySwitchHandler = connection.config.authSwitchHandler; + warnLegacyAuthSwitch(); + legacySwitchHandler({ pluginName, pluginData }, (err, data) => { + if (err) { + return authSwitchPluginError(err, command); + } + connection.writePacket(new Packets.AuthSwitchResponse(data).toPacket()); + }); + return; + } + if (!authPlugin) { + authPlugin = standardAuthPlugins[pluginName]; + } + if (!authPlugin) { + throw new Error( + `Server requests authentication using unknown plugin ${pluginName}. See ${'TODO: add plugins doco here'} on how to configure or author authentication plugins.` + ); + } + connection._authPlugin = authPlugin({ connection, command }); + Promise.resolve(connection._authPlugin(pluginData)) + .then((data) => { + if (data) { + connection.writePacket(new Packets.AuthSwitchResponse(data).toPacket()); + } + }) + .catch((err) => { + authSwitchPluginError(err, command); + }); +} + +function authSwitchRequestMoreData(packet, connection, command) { + const { data } = Packets.AuthSwitchRequestMoreData.fromPacket(packet); + + if (connection.config.authSwitchHandler) { + const legacySwitchHandler = connection.config.authSwitchHandler; + warnLegacyAuthSwitch(); + legacySwitchHandler({ pluginData: data }, (err, data) => { + if (err) { + return authSwitchPluginError(err, command); + } + connection.writePacket(new Packets.AuthSwitchResponse(data).toPacket()); + }); + return; + } + + if (!connection._authPlugin) { + throw new Error( + 'AuthPluginMoreData received but no auth plugin instance found' + ); + } + Promise.resolve(connection._authPlugin(data)) + .then((data) => { + if (data) { + connection.writePacket(new Packets.AuthSwitchResponse(data).toPacket()); + } + }) + .catch((err) => { + authSwitchPluginError(err, command); + }); +} + +module.exports = { + authSwitchRequest, + authSwitchRequestMoreData, +}; diff --git a/node_modules/mysql2/lib/commands/binlog_dump.js b/node_modules/mysql2/lib/commands/binlog_dump.js new file mode 100644 index 0000000..63e4960 --- /dev/null +++ b/node_modules/mysql2/lib/commands/binlog_dump.js @@ -0,0 +1,109 @@ +'use strict'; + +const Command = require('./command'); +const Packets = require('../packets'); + +const eventParsers = []; + +class BinlogEventHeader { + constructor(packet) { + this.timestamp = packet.readInt32(); + this.eventType = packet.readInt8(); + this.serverId = packet.readInt32(); + this.eventSize = packet.readInt32(); + this.logPos = packet.readInt32(); + this.flags = packet.readInt16(); + } +} + +class BinlogDump extends Command { + constructor(opts) { + super(); + // this.onResult = callback; + this.opts = opts; + } + + start(packet, connection) { + const newPacket = new Packets.BinlogDump(this.opts); + connection.writePacket(newPacket.toPacket(1)); + return BinlogDump.prototype.binlogData; + } + + binlogData(packet) { + // ok - continue consuming events + // error - error + // eof - end of binlog + if (packet.isEOF()) { + this.emit('eof'); + return null; + } + // binlog event header + packet.readInt8(); + const header = new BinlogEventHeader(packet); + const EventParser = eventParsers[header.eventType]; + let event; + if (EventParser) { + event = new EventParser(packet); + } else { + event = { + name: 'UNKNOWN', + }; + } + event.header = header; + this.emit('event', event); + return BinlogDump.prototype.binlogData; + } +} + +class RotateEvent { + constructor(packet) { + this.pposition = packet.readInt32(); + // TODO: read uint64 here + packet.readInt32(); // positionDword2 + this.nextBinlog = packet.readString(); + this.name = 'RotateEvent'; + } +} + +class FormatDescriptionEvent { + constructor(packet) { + this.binlogVersion = packet.readInt16(); + this.serverVersion = packet.readString(50).replace(/\u0000.*/, ''); // eslint-disable-line no-control-regex + this.createTimestamp = packet.readInt32(); + this.eventHeaderLength = packet.readInt8(); // should be 19 + this.eventsLength = packet.readBuffer(); + this.name = 'FormatDescriptionEvent'; + } +} + +class QueryEvent { + constructor(packet) { + const parseStatusVars = require('../packets/binlog_query_statusvars.js'); + this.slaveProxyId = packet.readInt32(); + this.executionTime = packet.readInt32(); + const schemaLength = packet.readInt8(); + this.errorCode = packet.readInt16(); + const statusVarsLength = packet.readInt16(); + const statusVars = packet.readBuffer(statusVarsLength); + this.schema = packet.readString(schemaLength); + packet.readInt8(); // should be zero + this.statusVars = parseStatusVars(statusVars); + this.query = packet.readString(); + this.name = 'QueryEvent'; + } +} + +class XidEvent { + constructor(packet) { + this.binlogVersion = packet.readInt16(); + this.xid = packet.readInt64(); + this.name = 'XidEvent'; + } +} + +eventParsers[2] = QueryEvent; +eventParsers[4] = RotateEvent; +eventParsers[15] = FormatDescriptionEvent; +eventParsers[16] = XidEvent; + +module.exports = BinlogDump; diff --git a/node_modules/mysql2/lib/commands/change_user.js b/node_modules/mysql2/lib/commands/change_user.js new file mode 100644 index 0000000..d9a7de4 --- /dev/null +++ b/node_modules/mysql2/lib/commands/change_user.js @@ -0,0 +1,68 @@ +// This file was modified by Oracle on September 21, 2021. +// The changes involve saving additional authentication factor passwords +// in the command scope and enabling multi-factor authentication in the +// client-side when the server supports it. +// Modifications copyright (c) 2021, Oracle and/or its affiliates. + +'use strict'; + +const Command = require('./command.js'); +const Packets = require('../packets/index.js'); +const ClientConstants = require('../constants/client'); +const ClientHandshake = require('./client_handshake.js'); +const CharsetToEncoding = require('../constants/charset_encodings.js'); + +class ChangeUser extends Command { + constructor(options, callback) { + super(); + this.onResult = callback; + this.user = options.user; + this.password = options.password; + // "password1" is an alias of "password" + this.password1 = options.password; + this.password2 = options.password2; + this.password3 = options.password3; + this.database = options.database; + this.passwordSha1 = options.passwordSha1; + this.charsetNumber = options.charsetNumber; + this.currentConfig = options.currentConfig; + this.authenticationFactor = 0; + } + start(packet, connection) { + const newPacket = new Packets.ChangeUser({ + flags: connection.config.clientFlags, + user: this.user, + database: this.database, + charsetNumber: this.charsetNumber, + password: this.password, + passwordSha1: this.passwordSha1, + authPluginData1: connection._handshakePacket.authPluginData1, + authPluginData2: connection._handshakePacket.authPluginData2, + }); + this.currentConfig.user = this.user; + this.currentConfig.password = this.password; + this.currentConfig.database = this.database; + this.currentConfig.charsetNumber = this.charsetNumber; + connection.clientEncoding = CharsetToEncoding[this.charsetNumber]; + // clear prepared statements cache as all statements become invalid after changeUser + connection._statements.clear(); + connection.writePacket(newPacket.toPacket()); + // check if the server supports multi-factor authentication + const multiFactorAuthentication = + connection.serverCapabilityFlags & + ClientConstants.MULTI_FACTOR_AUTHENTICATION; + if (multiFactorAuthentication) { + // if the server supports multi-factor authentication, we enable it in + // the client + this.authenticationFactor = 1; + } + return ChangeUser.prototype.handshakeResult; + } +} + +ChangeUser.prototype.handshakeResult = + ClientHandshake.prototype.handshakeResult; +ChangeUser.prototype.calculateNativePasswordAuthToken = + ClientHandshake.prototype.calculateNativePasswordAuthToken; + +module.exports = ChangeUser; diff --git a/node_modules/mysql2/lib/commands/client_handshake.js b/node_modules/mysql2/lib/commands/client_handshake.js new file mode 100644 index 0000000..ac0d863 --- /dev/null +++ b/node_modules/mysql2/lib/commands/client_handshake.js @@ -0,0 +1,241 @@ +// This file was modified by Oracle on June 17, 2021. +// Handshake errors are now maked as fatal and the corresponding events are +// emitted in the command instance itself. +// Modifications copyright (c) 2021, Oracle and/or its affiliates. + +// This file was modified by Oracle on September 21, 2021. +// Handshake workflow now supports additional authentication factors requested +// by the server. +// Modifications copyright (c) 2021, Oracle and/or its affiliates. + +'use strict'; + +const Command = require('./command.js'); +const Packets = require('../packets/index.js'); +const ClientConstants = require('../constants/client.js'); +const CharsetToEncoding = require('../constants/charset_encodings.js'); +const auth41 = require('../auth_41.js'); + +function flagNames(flags) { + const res = []; + for (const c in ClientConstants) { + if (flags & ClientConstants[c]) { + res.push(c.replace(/_/g, ' ').toLowerCase()); + } + } + return res; +} + +class ClientHandshake extends Command { + constructor(clientFlags) { + super(); + this.handshake = null; + this.clientFlags = clientFlags; + this.authenticationFactor = 0; + } + + start() { + return ClientHandshake.prototype.handshakeInit; + } + + sendSSLRequest(connection) { + const sslRequest = new Packets.SSLRequest( + this.clientFlags, + connection.config.charsetNumber + ); + connection.writePacket(sslRequest.toPacket()); + } + + sendCredentials(connection) { + if (connection.config.debug) { + // eslint-disable-next-line + console.log( + 'Sending handshake packet: flags:%d=(%s)', + this.clientFlags, + flagNames(this.clientFlags).join(', ') + ); + } + this.user = connection.config.user; + this.password = connection.config.password; + // "password1" is an alias to the original "password" value + // to make it easier to integrate multi-factor authentication + this.password1 = connection.config.password; + // "password2" and "password3" are the 2nd and 3rd factor authentication + // passwords, which can be undefined depending on the authentication + // plugin being used + this.password2 = connection.config.password2; + this.password3 = connection.config.password3; + this.passwordSha1 = connection.config.passwordSha1; + this.database = connection.config.database; + this.authPluginName = this.handshake.authPluginName; + const handshakeResponse = new Packets.HandshakeResponse({ + flags: this.clientFlags, + user: this.user, + database: this.database, + password: this.password, + passwordSha1: this.passwordSha1, + charsetNumber: connection.config.charsetNumber, + authPluginData1: this.handshake.authPluginData1, + authPluginData2: this.handshake.authPluginData2, + compress: connection.config.compress, + connectAttributes: connection.config.connectAttributes, + }); + connection.writePacket(handshakeResponse.toPacket()); + } + + calculateNativePasswordAuthToken(authPluginData) { + // TODO: dont split into authPluginData1 and authPluginData2, instead join when 1 & 2 received + const authPluginData1 = authPluginData.slice(0, 8); + const authPluginData2 = authPluginData.slice(8, 20); + let authToken; + if (this.passwordSha1) { + authToken = auth41.calculateTokenFromPasswordSha( + this.passwordSha1, + authPluginData1, + authPluginData2 + ); + } else { + authToken = auth41.calculateToken( + this.password, + authPluginData1, + authPluginData2 + ); + } + return authToken; + } + + handshakeInit(helloPacket, connection) { + this.on('error', (e) => { + connection._fatalError = e; + connection._protocolError = e; + }); + this.handshake = Packets.Handshake.fromPacket(helloPacket); + if (connection.config.debug) { + // eslint-disable-next-line + console.log( + 'Server hello packet: capability flags:%d=(%s)', + this.handshake.capabilityFlags, + flagNames(this.handshake.capabilityFlags).join(', ') + ); + } + connection.serverCapabilityFlags = this.handshake.capabilityFlags; + connection.serverEncoding = CharsetToEncoding[this.handshake.characterSet]; + connection.connectionId = this.handshake.connectionId; + const serverSSLSupport = + this.handshake.capabilityFlags & ClientConstants.SSL; + // multi factor authentication is enabled with the + // "MULTI_FACTOR_AUTHENTICATION" capability and should only be used if it + // is supported by the server + const multiFactorAuthentication = + this.handshake.capabilityFlags & + ClientConstants.MULTI_FACTOR_AUTHENTICATION; + this.clientFlags = this.clientFlags | multiFactorAuthentication; + // use compression only if requested by client and supported by server + connection.config.compress = + connection.config.compress && + this.handshake.capabilityFlags & ClientConstants.COMPRESS; + this.clientFlags = this.clientFlags | connection.config.compress; + if (connection.config.ssl) { + // client requires SSL but server does not support it + if (!serverSSLSupport) { + const err = new Error('Server does not support secure connection'); + err.code = 'HANDSHAKE_NO_SSL_SUPPORT'; + err.fatal = true; + this.emit('error', err); + return false; + } + // send ssl upgrade request and immediately upgrade connection to secure + this.clientFlags |= ClientConstants.SSL; + this.sendSSLRequest(connection); + connection.startTLS((err) => { + // after connection is secure + if (err) { + // SSL negotiation error are fatal + err.code = 'HANDSHAKE_SSL_ERROR'; + err.fatal = true; + this.emit('error', err); + return; + } + // rest of communication is encrypted + this.sendCredentials(connection); + }); + } else { + this.sendCredentials(connection); + } + if (multiFactorAuthentication) { + // if the server supports multi-factor authentication, we enable it in + // the client + this.authenticationFactor = 1; + } + return ClientHandshake.prototype.handshakeResult; + } + + handshakeResult(packet, connection) { + const marker = packet.peekByte(); + // packet can be OK_Packet, ERR_Packet, AuthSwitchRequest, AuthNextFactor + // or AuthMoreData + if (marker === 0xfe || marker === 1 || marker === 0x02) { + const authSwitch = require('./auth_switch'); + try { + if (marker === 1) { + authSwitch.authSwitchRequestMoreData(packet, connection, this); + } else { + // if authenticationFactor === 0, it means the server does not support + // the multi-factor authentication capability + if (this.authenticationFactor !== 0) { + // if we are past the first authentication factor, we should use the + // corresponding password (if there is one) + connection.config.password = + this[`password${this.authenticationFactor}`]; + // update the current authentication factor + this.authenticationFactor += 1; + } + // if marker === 0x02, it means it is an AuthNextFactor packet, + // which is similar in structure to an AuthSwitchRequest packet, + // so, we can use it directly + authSwitch.authSwitchRequest(packet, connection, this); + } + return ClientHandshake.prototype.handshakeResult; + } catch (err) { + // Authentication errors are fatal + err.code = 'AUTH_SWITCH_PLUGIN_ERROR'; + err.fatal = true; + + if (this.onResult) { + this.onResult(err); + } else { + this.emit('error', err); + } + return null; + } + } + if (marker !== 0) { + const err = new Error('Unexpected packet during handshake phase'); + // Unknown handshake errors are fatal + err.code = 'HANDSHAKE_UNKNOWN_ERROR'; + err.fatal = true; + + if (this.onResult) { + this.onResult(err); + } else { + this.emit('error', err); + } + return null; + } + // this should be called from ClientHandshake command only + // and skipped when called from ChangeUser command + if (!connection.authorized) { + connection.authorized = true; + if (connection.config.compress) { + const enableCompression = + require('../compressed_protocol.js').enableCompression; + enableCompression(connection); + } + } + if (this.onResult) { + this.onResult(null); + } + return null; + } +} +module.exports = ClientHandshake; diff --git a/node_modules/mysql2/lib/commands/close_statement.js b/node_modules/mysql2/lib/commands/close_statement.js new file mode 100644 index 0000000..15919c1 --- /dev/null +++ b/node_modules/mysql2/lib/commands/close_statement.js @@ -0,0 +1,18 @@ +'use strict'; + +const Command = require('./command'); +const Packets = require('../packets/index.js'); + +class CloseStatement extends Command { + constructor(id) { + super(); + this.id = id; + } + + start(packet, connection) { + connection.writePacket(new Packets.CloseStatement(this.id).toPacket(1)); + return null; + } +} + +module.exports = CloseStatement; diff --git a/node_modules/mysql2/lib/commands/command.js b/node_modules/mysql2/lib/commands/command.js new file mode 100644 index 0000000..3d31886 --- /dev/null +++ b/node_modules/mysql2/lib/commands/command.js @@ -0,0 +1,54 @@ +'use strict'; + +const EventEmitter = require('events').EventEmitter; +const Timers = require('timers'); + +class Command extends EventEmitter { + constructor() { + super(); + this.next = null; + } + + // slow. debug only + stateName() { + const state = this.next; + for (const i in this) { + if (this[i] === state && i !== 'next') { + return i; + } + } + return 'unknown name'; + } + + execute(packet, connection) { + if (!this.next) { + this.next = this.start; + connection._resetSequenceId(); + } + if (packet && packet.isError()) { + const err = packet.asError(connection.clientEncoding); + err.sql = this.sql || this.query; + if (this.queryTimeout) { + Timers.clearTimeout(this.queryTimeout); + this.queryTimeout = null; + } + if (this.onResult) { + this.onResult(err); + this.emit('end'); + } else { + this.emit('error', err); + this.emit('end'); + } + return true; + } + // TODO: don't return anything from execute, it's ugly and error-prone. Listen for 'end' event in connection + this.next = this.next(packet, connection); + if (this.next) { + return false; + } + this.emit('end'); + return true; + } +} + +module.exports = Command; diff --git a/node_modules/mysql2/lib/commands/execute.js b/node_modules/mysql2/lib/commands/execute.js new file mode 100644 index 0000000..a540337 --- /dev/null +++ b/node_modules/mysql2/lib/commands/execute.js @@ -0,0 +1,112 @@ +'use strict'; + +const Command = require('./command.js'); +const Query = require('./query.js'); +const Packets = require('../packets/index.js'); + +const getBinaryParser = require('../parsers/binary_parser.js'); +const getStaticBinaryParser = require('../parsers/static_binary_parser.js'); + +class Execute extends Command { + constructor(options, callback) { + super(); + this.statement = options.statement; + this.sql = options.sql; + this.values = options.values; + this.onResult = callback; + this.parameters = options.values; + this.insertId = 0; + this.timeout = options.timeout; + this.queryTimeout = null; + this._rows = []; + this._fields = []; + this._result = []; + this._fieldCount = 0; + this._rowParser = null; + this._executeOptions = options; + this._resultIndex = 0; + this._localStream = null; + this._unpipeStream = function () {}; + this._streamFactory = options.infileStreamFactory; + this._connection = null; + } + + buildParserFromFields(fields, connection) { + if (this.options.disableEval) { + return getStaticBinaryParser(fields, this.options, connection.config); + } + + return getBinaryParser(fields, this.options, connection.config); + } + + start(packet, connection) { + this._connection = connection; + this.options = Object.assign({}, connection.config, this._executeOptions); + this._setTimeout(); + const executePacket = new Packets.Execute( + this.statement.id, + this.parameters, + connection.config.charsetNumber, + connection.config.timezone + ); + //For reasons why this try-catch is here, please see + // https://github.com/sidorares/node-mysql2/pull/689 + //For additional discussion, see + // 1. https://github.com/sidorares/node-mysql2/issues/493 + // 2. https://github.com/sidorares/node-mysql2/issues/187 + // 3. https://github.com/sidorares/node-mysql2/issues/480 + try { + connection.writePacket(executePacket.toPacket(1)); + } catch (error) { + this.onResult(error); + } + return Execute.prototype.resultsetHeader; + } + + readField(packet, connection) { + let fields; + // disabling for now, but would be great to find reliable way to parse fields only once + // fields reported by prepare can be empty at all or just incorrect - see #169 + // + // perfomance optimisation: if we already have this field parsed in statement header, use one from header + // const field = this.statement.columns.length == this._fieldCount ? + // this.statement.columns[this._receivedFieldsCount] : new Packets.ColumnDefinition(packet); + const field = new Packets.ColumnDefinition( + packet, + connection.clientEncoding + ); + this._receivedFieldsCount++; + this._fields[this._resultIndex].push(field); + if (this._receivedFieldsCount === this._fieldCount) { + fields = this._fields[this._resultIndex]; + this.emit('fields', fields, this._resultIndex); + return Execute.prototype.fieldsEOF; + } + return Execute.prototype.readField; + } + + fieldsEOF(packet, connection) { + // check EOF + if (!packet.isEOF()) { + return connection.protocolError('Expected EOF packet'); + } + this._rowParser = new (this.buildParserFromFields( + this._fields[this._resultIndex], + connection + ))(); + return Execute.prototype.row; + } +} + +Execute.prototype.done = Query.prototype.done; +Execute.prototype.doneInsert = Query.prototype.doneInsert; +Execute.prototype.resultsetHeader = Query.prototype.resultsetHeader; +Execute.prototype._findOrCreateReadStream = + Query.prototype._findOrCreateReadStream; +Execute.prototype._streamLocalInfile = Query.prototype._streamLocalInfile; +Execute.prototype._setTimeout = Query.prototype._setTimeout; +Execute.prototype._handleTimeoutError = Query.prototype._handleTimeoutError; +Execute.prototype.row = Query.prototype.row; +Execute.prototype.stream = Query.prototype.stream; + +module.exports = Execute; diff --git a/node_modules/mysql2/lib/commands/index.js b/node_modules/mysql2/lib/commands/index.js new file mode 100644 index 0000000..b79818d --- /dev/null +++ b/node_modules/mysql2/lib/commands/index.js @@ -0,0 +1,27 @@ +'use strict'; + +const ClientHandshake = require('./client_handshake.js'); +const ServerHandshake = require('./server_handshake.js'); +const Query = require('./query.js'); +const Prepare = require('./prepare.js'); +const CloseStatement = require('./close_statement.js'); +const Execute = require('./execute.js'); +const Ping = require('./ping.js'); +const RegisterSlave = require('./register_slave.js'); +const BinlogDump = require('./binlog_dump.js'); +const ChangeUser = require('./change_user.js'); +const Quit = require('./quit.js'); + +module.exports = { + ClientHandshake, + ServerHandshake, + Query, + Prepare, + CloseStatement, + Execute, + Ping, + RegisterSlave, + BinlogDump, + ChangeUser, + Quit, +}; diff --git a/node_modules/mysql2/lib/commands/ping.js b/node_modules/mysql2/lib/commands/ping.js new file mode 100644 index 0000000..dc820ef --- /dev/null +++ b/node_modules/mysql2/lib/commands/ping.js @@ -0,0 +1,36 @@ +'use strict'; + +const Command = require('./command'); +const CommandCode = require('../constants/commands'); +const Packet = require('../packets/packet'); + +// TODO: time statistics? +// usefull for queue size and network latency monitoring +// store created,sent,reply timestamps +class Ping extends Command { + constructor(callback) { + super(); + this.onResult = callback; + } + + start(packet, connection) { + const ping = new Packet( + 0, + Buffer.from([1, 0, 0, 0, CommandCode.PING]), + 0, + 5 + ); + connection.writePacket(ping); + return Ping.prototype.pingResponse; + } + + pingResponse() { + // TODO: check it's OK packet. error check already done in caller + if (this.onResult) { + process.nextTick(this.onResult.bind(this)); + } + return null; + } +} + +module.exports = Ping; diff --git a/node_modules/mysql2/lib/commands/prepare.js b/node_modules/mysql2/lib/commands/prepare.js new file mode 100644 index 0000000..ab217a8 --- /dev/null +++ b/node_modules/mysql2/lib/commands/prepare.js @@ -0,0 +1,143 @@ +'use strict'; + +const Packets = require('../packets/index.js'); +const Command = require('./command.js'); +const CloseStatement = require('./close_statement.js'); +const Execute = require('./execute.js'); + +class PreparedStatementInfo { + constructor(query, id, columns, parameters, connection) { + this.query = query; + this.id = id; + this.columns = columns; + this.parameters = parameters; + this.rowParser = null; + this._connection = connection; + } + + close() { + return this._connection.addCommand(new CloseStatement(this.id)); + } + + execute(parameters, callback) { + if (typeof parameters === 'function') { + callback = parameters; + parameters = []; + } + return this._connection.addCommand( + new Execute({ statement: this, values: parameters }, callback) + ); + } +} + +class Prepare extends Command { + constructor(options, callback) { + super(); + this.query = options.sql; + this.onResult = callback; + this.id = 0; + this.fieldCount = 0; + this.parameterCount = 0; + this.fields = []; + this.parameterDefinitions = []; + this.options = options; + } + + start(packet, connection) { + const Connection = connection.constructor; + this.key = Connection.statementKey(this.options); + const statement = connection._statements.get(this.key); + if (statement) { + if (this.onResult) { + this.onResult(null, statement); + } + return null; + } + const cmdPacket = new Packets.PrepareStatement( + this.query, + connection.config.charsetNumber, + this.options.values + ); + connection.writePacket(cmdPacket.toPacket(1)); + return Prepare.prototype.prepareHeader; + } + + prepareHeader(packet, connection) { + const header = new Packets.PreparedStatementHeader(packet); + this.id = header.id; + this.fieldCount = header.fieldCount; + this.parameterCount = header.parameterCount; + if (this.parameterCount > 0) { + return Prepare.prototype.readParameter; + } + if (this.fieldCount > 0) { + return Prepare.prototype.readField; + } + return this.prepareDone(connection); + } + + readParameter(packet, connection) { + // there might be scenarios when mysql server reports more parameters than + // are actually present in the array of parameter definitions. + // if EOF packet is received we switch to "read fields" state if there are + // any fields reported by the server, otherwise we finish the command. + if (packet.isEOF()) { + if (this.fieldCount > 0) { + return Prepare.prototype.readField; + } + return this.prepareDone(connection); + } + const def = new Packets.ColumnDefinition(packet, connection.clientEncoding); + this.parameterDefinitions.push(def); + if (this.parameterDefinitions.length === this.parameterCount) { + return Prepare.prototype.parametersEOF; + } + return this.readParameter; + } + + readField(packet, connection) { + if (packet.isEOF()) { + return this.prepareDone(connection); + } + const def = new Packets.ColumnDefinition(packet, connection.clientEncoding); + this.fields.push(def); + if (this.fields.length === this.fieldCount) { + return Prepare.prototype.fieldsEOF; + } + return Prepare.prototype.readField; + } + + parametersEOF(packet, connection) { + if (!packet.isEOF()) { + return connection.protocolError('Expected EOF packet after parameters'); + } + if (this.fieldCount > 0) { + return Prepare.prototype.readField; + } + return this.prepareDone(connection); + } + + fieldsEOF(packet, connection) { + if (!packet.isEOF()) { + return connection.protocolError('Expected EOF packet after fields'); + } + return this.prepareDone(connection); + } + + prepareDone(connection) { + const statement = new PreparedStatementInfo( + this.query, + this.id, + this.fields, + this.parameterDefinitions, + connection + ); + connection._statements.set(this.key, statement); + if (this.onResult) { + this.onResult(null, statement); + } + return null; + } +} + +module.exports = Prepare; diff --git a/node_modules/mysql2/lib/commands/query.js b/node_modules/mysql2/lib/commands/query.js new file mode 100644 index 0000000..117e4ba --- /dev/null +++ b/node_modules/mysql2/lib/commands/query.js @@ -0,0 +1,329 @@ +'use strict'; + +const process = require('process'); +const Timers = require('timers'); + +const Readable = require('stream').Readable; + +const Command = require('./command.js'); +const Packets = require('../packets/index.js'); +const getTextParser = require('../parsers/text_parser.js'); +const staticParser = require('../parsers/static_text_parser.js'); +const ServerStatus = require('../constants/server_status.js'); + +const EmptyPacket = new Packets.Packet(0, Buffer.allocUnsafe(4), 0, 4); + +// http://dev.mysql.com/doc/internals/en/com-query.html +class Query extends Command { + constructor(options, callback) { + super(); + this.sql = options.sql; + this.values = options.values; + this._queryOptions = options; + this.namedPlaceholders = options.namedPlaceholders || false; + this.onResult = callback; + this.timeout = options.timeout; + this.queryTimeout = null; + this._fieldCount = 0; + this._rowParser = null; + this._fields = []; + this._rows = []; + this._receivedFieldsCount = 0; + this._resultIndex = 0; + this._localStream = null; + this._unpipeStream = function () {}; + this._streamFactory = options.infileStreamFactory; + this._connection = null; + } + + then() { + const err = + "You have tried to call .then(), .catch(), or invoked await on the result of query that is not a promise, which is a programming error. Try calling con.promise().query(), or require('mysql2/promise') instead of 'mysql2' for a promise-compatible version of the query interface. To learn how to use async/await or Promises check out documentation at https://sidorares.github.io/node-mysql2/docs#using-promise-wrapper, or the mysql2 documentation at https://sidorares.github.io/node-mysql2/docs/documentation/promise-wrapper"; + // eslint-disable-next-line + console.log(err); + throw new Error(err); + } + + /* eslint no-unused-vars: ["error", { "argsIgnorePattern": "^_" }] */ + start(_packet, connection) { + if (connection.config.debug) { + // eslint-disable-next-line + console.log(' Sending query command: %s', this.sql); + } + this._connection = connection; + this.options = Object.assign({}, connection.config, this._queryOptions); + this._setTimeout(); + + const cmdPacket = new Packets.Query( + this.sql, + connection.config.charsetNumber + ); + connection.writePacket(cmdPacket.toPacket(1)); + return Query.prototype.resultsetHeader; + } + + done() { + this._unpipeStream(); + // if all ready timeout, return null directly + if (this.timeout && !this.queryTimeout) { + return null; + } + // else clear timer + if (this.queryTimeout) { + Timers.clearTimeout(this.queryTimeout); + this.queryTimeout = null; + } + if (this.onResult) { + let rows, fields; + if (this._resultIndex === 0) { + rows = this._rows[0]; + fields = this._fields[0]; + } else { + rows = this._rows; + fields = this._fields; + } + if (fields) { + process.nextTick(() => { + this.onResult(null, rows, fields); + }); + } else { + process.nextTick(() => { + this.onResult(null, rows); + }); + } + } + return null; + } + + doneInsert(rs) { + if (this._localStreamError) { + if (this.onResult) { + this.onResult(this._localStreamError, rs); + } else { + this.emit('error', this._localStreamError); + } + return null; + } + this._rows.push(rs); + this._fields.push(void 0); + this.emit('fields', void 0); + this.emit('result', rs); + if (rs.serverStatus & ServerStatus.SERVER_MORE_RESULTS_EXISTS) { + this._resultIndex++; + return this.resultsetHeader; + } + return this.done(); + } + + resultsetHeader(packet, connection) { + const rs = new Packets.ResultSetHeader(packet, connection); + this._fieldCount = rs.fieldCount; + if (connection.config.debug) { + // eslint-disable-next-line + console.log( + ` Resultset header received, expecting ${rs.fieldCount} column definition packets` + ); + } + if (this._fieldCount === 0) { + return this.doneInsert(rs); + } + if (this._fieldCount === null) { + return this._streamLocalInfile(connection, rs.infileName); + } + this._receivedFieldsCount = 0; + this._rows.push([]); + this._fields.push([]); + return this.readField; + } + + _streamLocalInfile(connection, path) { + if (this._streamFactory) { + this._localStream = this._streamFactory(path); + } else { + this._localStreamError = new Error( + `As a result of LOCAL INFILE command server wants to read ${path} file, but as of v2.0 you must provide streamFactory option returning ReadStream.` + ); + connection.writePacket(EmptyPacket); + return this.infileOk; + } + + const onConnectionError = () => { + this._unpipeStream(); + }; + const onDrain = () => { + this._localStream.resume(); + }; + const onPause = () => { + this._localStream.pause(); + }; + const onData = function (data) { + const dataWithHeader = Buffer.allocUnsafe(data.length + 4); + data.copy(dataWithHeader, 4); + connection.writePacket( + new Packets.Packet(0, dataWithHeader, 0, dataWithHeader.length) + ); + }; + const onEnd = () => { + connection.removeListener('error', onConnectionError); + connection.writePacket(EmptyPacket); + }; + const onError = (err) => { + this._localStreamError = err; + connection.removeListener('error', onConnectionError); + connection.writePacket(EmptyPacket); + }; + this._unpipeStream = () => { + connection.stream.removeListener('pause', onPause); + connection.stream.removeListener('drain', onDrain); + this._localStream.removeListener('data', onData); + this._localStream.removeListener('end', onEnd); + this._localStream.removeListener('error', onError); + }; + connection.stream.on('pause', onPause); + connection.stream.on('drain', onDrain); + this._localStream.on('data', onData); + this._localStream.on('end', onEnd); + this._localStream.on('error', onError); + connection.once('error', onConnectionError); + return this.infileOk; + } + + readField(packet, connection) { + this._receivedFieldsCount++; + // Often there is much more data in the column definition than in the row itself + // If you set manually _fields[0] to array of ColumnDefinition's (from previous call) + // you can 'cache' result of parsing. Field packets still received, but ignored in that case + // this is the reason _receivedFieldsCount exist (otherwise we could just use current length of fields array) + if (this._fields[this._resultIndex].length !== this._fieldCount) { + const field = new Packets.ColumnDefinition( + packet, + connection.clientEncoding + ); + this._fields[this._resultIndex].push(field); + if (connection.config.debug) { + /* eslint-disable no-console */ + console.log(' Column definition:'); + console.log(` name: ${field.name}`); + console.log(` type: ${field.columnType}`); + console.log(` flags: ${field.flags}`); + /* eslint-enable no-console */ + } + } + // last field received + if (this._receivedFieldsCount === this._fieldCount) { + const fields = this._fields[this._resultIndex]; + this.emit('fields', fields); + if (this.options.disableEval) { + this._rowParser = staticParser(fields, this.options, connection.config); + } else { + this._rowParser = new (getTextParser( + fields, + this.options, + connection.config + ))(fields); + } + return Query.prototype.fieldsEOF; + } + return Query.prototype.readField; + } + + fieldsEOF(packet, connection) { + // check EOF + if (!packet.isEOF()) { + return connection.protocolError('Expected EOF packet'); + } + return this.row; + } + + /* eslint no-unused-vars: ["error", { "argsIgnorePattern": "^_" }] */ + row(packet, _connection) { + if (packet.isEOF()) { + const status = packet.eofStatusFlags(); + const moreResults = status & ServerStatus.SERVER_MORE_RESULTS_EXISTS; + if (moreResults) { + this._resultIndex++; + return Query.prototype.resultsetHeader; + } + return this.done(); + } + let row; + try { + row = this._rowParser.next( + packet, + this._fields[this._resultIndex], + this.options + ); + } catch (err) { + this._localStreamError = err; + return this.doneInsert(null); + } + if (this.onResult) { + this._rows[this._resultIndex].push(row); + } else { + this.emit('result', row, this._resultIndex); + } + return Query.prototype.row; + } + + infileOk(packet, connection) { + const rs = new Packets.ResultSetHeader(packet, connection); + return this.doneInsert(rs); + } + + stream(options) { + options = options || {}; + options.objectMode = true; + const stream = new Readable(options); + stream._read = () => { + this._connection && this._connection.resume(); + }; + this.on('result', (row, resultSetIndex) => { + if (!stream.push(row)) { + this._connection.pause(); + } + stream.emit('result', row, resultSetIndex); // replicate old emitter + }); + this.on('error', (err) => { + stream.emit('error', err); // Pass on any errors + }); + this.on('end', () => { + stream.push(null); // pushing null, indicating EOF + }); + this.on('fields', (fields) => { + stream.emit('fields', fields); // replicate old emitter + }); + stream.on('end', () => { + stream.emit('close'); + }); + return stream; + } + + _setTimeout() { + if (this.timeout) { + const timeoutHandler = this._handleTimeoutError.bind(this); + this.queryTimeout = Timers.setTimeout(timeoutHandler, this.timeout); + } + } + + _handleTimeoutError() { + if (this.queryTimeout) { + Timers.clearTimeout(this.queryTimeout); + this.queryTimeout = null; + } + + const err = new Error('Query inactivity timeout'); + err.errorno = 'PROTOCOL_SEQUENCE_TIMEOUT'; + err.code = 'PROTOCOL_SEQUENCE_TIMEOUT'; + err.syscall = 'query'; + + if (this.onResult) { + this.onResult(err); + } else { + this.emit('error', err); + } + } +} + +Query.prototype.catch = Query.prototype.then; + +module.exports = Query; diff --git a/node_modules/mysql2/lib/commands/quit.js b/node_modules/mysql2/lib/commands/quit.js new file mode 100644 index 0000000..02ed763 --- /dev/null +++ b/node_modules/mysql2/lib/commands/quit.js @@ -0,0 +1,29 @@ +'use strict'; + +const Command = require('./command.js'); +const CommandCode = require('../constants/commands.js'); +const Packet = require('../packets/packet.js'); + +class Quit extends Command { + constructor(callback) { + super(); + this.onResult = callback; + } + + start(packet, connection) { + connection._closing = true; + const quit = new Packet( + 0, + Buffer.from([1, 0, 0, 0, CommandCode.QUIT]), + 0, + 5 + ); + if (this.onResult) { + this.onResult(); + } + connection.writePacket(quit); + return null; + } +} + +module.exports = Quit; diff --git a/node_modules/mysql2/lib/commands/register_slave.js b/node_modules/mysql2/lib/commands/register_slave.js new file mode 100644 index 0000000..4ebfe61 --- /dev/null +++ b/node_modules/mysql2/lib/commands/register_slave.js @@ -0,0 +1,27 @@ +'use strict'; + +const Command = require('./command'); +const Packets = require('../packets'); + +class RegisterSlave extends Command { + constructor(opts, callback) { + super(); + this.onResult = callback; + this.opts = opts; + } + + start(packet, connection) { + const newPacket = new Packets.RegisterSlave(this.opts); + connection.writePacket(newPacket.toPacket(1)); + return RegisterSlave.prototype.registerResponse; + } + + registerResponse() { + if (this.onResult) { + process.nextTick(this.onResult.bind(this)); + } + return null; + } +} + +module.exports = RegisterSlave; diff --git a/node_modules/mysql2/lib/commands/server_handshake.js b/node_modules/mysql2/lib/commands/server_handshake.js new file mode 100644 index 0000000..dfa2b1b --- /dev/null +++ b/node_modules/mysql2/lib/commands/server_handshake.js @@ -0,0 +1,203 @@ +'use strict'; + +const CommandCode = require('../constants/commands.js'); +const Errors = require('../constants/errors.js'); + +const Command = require('./command.js'); +const Packets = require('../packets/index.js'); + +class ServerHandshake extends Command { + constructor(args) { + super(); + this.args = args; + /* + this.protocolVersion = args.protocolVersion || 10; + this.serverVersion = args.serverVersion; + this.connectionId = args.connectionId, + this.statusFlags = args.statusFlags, + this.characterSet = args.characterSet, + this.capabilityFlags = args.capabilityFlags || 512; + */ + } + + start(packet, connection) { + const serverHelloPacket = new Packets.Handshake(this.args); + this.serverHello = serverHelloPacket; + serverHelloPacket.setScrambleData((err) => { + if (err) { + connection.emit('error', new Error('Error generating random bytes')); + return; + } + connection.writePacket(serverHelloPacket.toPacket(0)); + }); + return ServerHandshake.prototype.readClientReply; + } + + readClientReply(packet, connection) { + // check auth here + const clientHelloReply = Packets.HandshakeResponse.fromPacket(packet); + // TODO check we don't have something similar already + connection.clientHelloReply = clientHelloReply; + if (this.args.authCallback) { + this.args.authCallback( + { + user: clientHelloReply.user, + database: clientHelloReply.database, + address: connection.stream.remoteAddress, + authPluginData1: this.serverHello.authPluginData1, + authPluginData2: this.serverHello.authPluginData2, + authToken: clientHelloReply.authToken, + }, + (err, mysqlError) => { + // if (err) + if (!mysqlError) { + connection.writeOk(); + } else { + // TODO create constants / errorToCode + // 1045 = ER_ACCESS_DENIED_ERROR + connection.writeError({ + message: mysqlError.message || '', + code: mysqlError.code || 1045, + }); + connection.close(); + } + } + ); + } else { + connection.writeOk(); + } + return ServerHandshake.prototype.dispatchCommands; + } + + _isStatement(query, name) { + const firstWord = query.split(' ')[0].toUpperCase(); + return firstWord === name; + } + + dispatchCommands(packet, connection) { + // command from client to server + let knownCommand = true; + const encoding = connection.clientHelloReply.encoding; + const commandCode = packet.readInt8(); + switch (commandCode) { + case CommandCode.STMT_PREPARE: + if (connection.listeners('stmt_prepare').length) { + const query = packet.readString(undefined, encoding); + connection.emit('stmt_prepare', query); + } else { + connection.writeError({ + code: Errors.HA_ERR_INTERNAL_ERROR, + message: 'No query handler for prepared statements.', + }); + } + break; + case CommandCode.STMT_EXECUTE: + if (connection.listeners('stmt_execute').length) { + const { stmtId, flags, iterationCount, values } = + Packets.Execute.fromPacket(packet, encoding); + connection.emit( + 'stmt_execute', + stmtId, + flags, + iterationCount, + values + ); + } else { + connection.writeError({ + code: Errors.HA_ERR_INTERNAL_ERROR, + message: 'No query handler for execute statements.', + }); + } + break; + case CommandCode.QUIT: + if (connection.listeners('quit').length) { + connection.emit('quit'); + } else { + connection.stream.end(); + } + break; + case CommandCode.INIT_DB: + if (connection.listeners('init_db').length) { + const schemaName = packet.readString(undefined, encoding); + connection.emit('init_db', schemaName); + } else { + connection.writeOk(); + } + break; + case CommandCode.QUERY: + if (connection.listeners('query').length) { + const query = packet.readString(undefined, encoding); + if ( + this._isStatement(query, 'PREPARE') || + this._isStatement(query, 'SET') + ) { + connection.emit('stmt_prepare', query); + } else if (this._isStatement(query, 'EXECUTE')) { + connection.emit('stmt_execute', null, null, null, null, query); + } else connection.emit('query', query); + } else { + connection.writeError({ + code: Errors.HA_ERR_INTERNAL_ERROR, + message: 'No query handler', + }); + } + break; + case CommandCode.FIELD_LIST: + if (connection.listeners('field_list').length) { + const table = packet.readNullTerminatedString(encoding); + const fields = packet.readString(undefined, encoding); + connection.emit('field_list', table, fields); + } else { + connection.writeError({ + code: Errors.ER_WARN_DEPRECATED_SYNTAX, + message: + 'As of MySQL 5.7.11, COM_FIELD_LIST is deprecated and will be removed in a future version of MySQL.', + }); + } + break; + case CommandCode.PING: + if (connection.listeners('ping').length) { + connection.emit('ping'); + } else { + connection.writeOk(); + } + break; + default: + knownCommand = false; + } + if (connection.listeners('packet').length) { + connection.emit('packet', packet.clone(), knownCommand, commandCode); + } else if (!knownCommand) { + // eslint-disable-next-line no-console + console.log('Unknown command:', commandCode); + } + return ServerHandshake.prototype.dispatchCommands; + } +} + +module.exports = ServerHandshake; + +// TODO: implement server-side 4.1 authentication +/* +4.1 authentication: (http://bazaar.launchpad.net/~mysql/mysql-server/5.5/view/head:/sql/password.c) + + SERVER: public_seed=create_random_string() + send(public_seed) + + CLIENT: recv(public_seed) + hash_stage1=sha1("password") + hash_stage2=sha1(hash_stage1) + reply=xor(hash_stage1, sha1(public_seed,hash_stage2) + + // this three steps are done in scramble() + + send(reply) + + + SERVER: recv(reply) + hash_stage1=xor(reply, sha1(public_seed,hash_stage2)) + candidate_hash2=sha1(hash_stage1) + check(candidate_hash2==hash_stage2) + +server stores sha1(sha1(password)) ( hash_stag2) +*/ diff --git a/node_modules/mysql2/lib/compressed_protocol.js b/node_modules/mysql2/lib/compressed_protocol.js new file mode 100644 index 0000000..3166846 --- /dev/null +++ b/node_modules/mysql2/lib/compressed_protocol.js @@ -0,0 +1,127 @@ +'use strict'; + +// connection mixins +// implementation of http://dev.mysql.com/doc/internals/en/compression.html + +const zlib = require('zlib'); +const PacketParser = require('./packet_parser.js'); + +function handleCompressedPacket(packet) { + // eslint-disable-next-line consistent-this, no-invalid-this + const connection = this; + const deflatedLength = packet.readInt24(); + const body = packet.readBuffer(); + + if (deflatedLength !== 0) { + connection.inflateQueue.push((task) => { + zlib.inflate(body, (err, data) => { + if (err) { + connection._handleNetworkError(err); + return; + } + connection._bumpCompressedSequenceId(packet.numPackets); + connection._inflatedPacketsParser.execute(data); + task.done(); + }); + }); + } else { + connection.inflateQueue.push((task) => { + connection._bumpCompressedSequenceId(packet.numPackets); + connection._inflatedPacketsParser.execute(body); + task.done(); + }); + } +} + +function writeCompressed(buffer) { + // http://dev.mysql.com/doc/internals/en/example-several-mysql-packets.html + // note: sending a MySQL Packet of the size 2^24โˆ’5 to 2^24โˆ’1 via compression + // leads to at least one extra compressed packet. + // (this is because "length of the packet before compression" need to fit + // into 3 byte unsigned int. "length of the packet before compression" includes + // 4 byte packet header, hence 2^24โˆ’5) + const MAX_COMPRESSED_LENGTH = 16777210; + let start; + if (buffer.length > MAX_COMPRESSED_LENGTH) { + for (start = 0; start < buffer.length; start += MAX_COMPRESSED_LENGTH) { + writeCompressed.call( + // eslint-disable-next-line no-invalid-this + this, + buffer.slice(start, start + MAX_COMPRESSED_LENGTH) + ); + } + return; + } + + // eslint-disable-next-line no-invalid-this, consistent-this + const connection = this; + + let packetLen = buffer.length; + const compressHeader = Buffer.allocUnsafe(7); + + // seqqueue is used here because zlib async execution is routed via thread pool + // internally and when we have multiple compressed packets arriving we need + // to assemble uncompressed result sequentially + (function (seqId) { + connection.deflateQueue.push((task) => { + zlib.deflate(buffer, (err, compressed) => { + if (err) { + connection._handleFatalError(err); + return; + } + let compressedLength = compressed.length; + + if (compressedLength < packetLen) { + compressHeader.writeUInt8(compressedLength & 0xff, 0); + compressHeader.writeUInt16LE(compressedLength >> 8, 1); + compressHeader.writeUInt8(seqId, 3); + compressHeader.writeUInt8(packetLen & 0xff, 4); + compressHeader.writeUInt16LE(packetLen >> 8, 5); + connection.writeUncompressed(compressHeader); + connection.writeUncompressed(compressed); + } else { + // http://dev.mysql.com/doc/internals/en/uncompressed-payload.html + // To send an uncompressed payload: + // - set length of payload before compression to 0 + // - the compressed payload contains the uncompressed payload instead. + compressedLength = packetLen; + packetLen = 0; + compressHeader.writeUInt8(compressedLength & 0xff, 0); + compressHeader.writeUInt16LE(compressedLength >> 8, 1); + compressHeader.writeUInt8(seqId, 3); + compressHeader.writeUInt8(packetLen & 0xff, 4); + compressHeader.writeUInt16LE(packetLen >> 8, 5); + connection.writeUncompressed(compressHeader); + connection.writeUncompressed(buffer); + } + task.done(); + }); + }); + })(connection.compressedSequenceId); + connection._bumpCompressedSequenceId(1); +} + +function enableCompression(connection) { + connection._lastWrittenPacketId = 0; + connection._lastReceivedPacketId = 0; + + connection._handleCompressedPacket = handleCompressedPacket; + connection._inflatedPacketsParser = new PacketParser((p) => { + connection.handlePacket(p); + }, 4); + connection._inflatedPacketsParser._lastPacket = 0; + connection.packetParser = new PacketParser((packet) => { + connection._handleCompressedPacket(packet); + }, 7); + + connection.writeUncompressed = connection.write; + connection.write = writeCompressed; + + const seqqueue = require('seq-queue'); + connection.inflateQueue = seqqueue.createQueue(); + connection.deflateQueue = seqqueue.createQueue(); +} + +module.exports = { + enableCompression: enableCompression, +}; diff --git a/node_modules/mysql2/lib/connection.js b/node_modules/mysql2/lib/connection.js new file mode 100644 index 0000000..b21cff8 --- /dev/null +++ b/node_modules/mysql2/lib/connection.js @@ -0,0 +1,12 @@ +'use strict'; + +const BaseConnection = require('./base/connection.js'); + +class Connection extends BaseConnection { + promise(promiseImpl) { + const PromiseConnection = require('./promise/connection.js'); + return new PromiseConnection(this, promiseImpl); + } +} + +module.exports = Connection; diff --git a/node_modules/mysql2/lib/connection_config.js b/node_modules/mysql2/lib/connection_config.js new file mode 100644 index 0000000..3707928 --- /dev/null +++ b/node_modules/mysql2/lib/connection_config.js @@ -0,0 +1,292 @@ +// This file was modified by Oracle on September 21, 2021. +// New connection options for additional authentication factors were +// introduced. +// Multi-factor authentication capability is now enabled if one of these +// options is used. +// Modifications copyright (c) 2021, Oracle and/or its affiliates. + +'use strict'; + +const { URL } = require('url'); +const ClientConstants = require('./constants/client'); +const Charsets = require('./constants/charsets'); +const { version } = require('../package.json'); +let SSLProfiles = null; + +const validOptions = { + authPlugins: 1, + authSwitchHandler: 1, + bigNumberStrings: 1, + charset: 1, + charsetNumber: 1, + compress: 1, + connectAttributes: 1, + connectTimeout: 1, + database: 1, + dateStrings: 1, + debug: 1, + decimalNumbers: 1, + enableKeepAlive: 1, + flags: 1, + host: 1, + insecureAuth: 1, + infileStreamFactory: 1, + isServer: 1, + keepAliveInitialDelay: 1, + localAddress: 1, + maxPreparedStatements: 1, + multipleStatements: 1, + namedPlaceholders: 1, + nestTables: 1, + password: 1, + // with multi-factor authentication, the main password (used for the first + // authentication factor) can be provided via password1 + password1: 1, + password2: 1, + password3: 1, + passwordSha1: 1, + pool: 1, + port: 1, + queryFormat: 1, + rowsAsArray: 1, + socketPath: 1, + ssl: 1, + stream: 1, + stringifyObjects: 1, + supportBigNumbers: 1, + timezone: 1, + trace: 1, + typeCast: 1, + uri: 1, + user: 1, + disableEval: 1, + // These options are used for Pool + connectionLimit: 1, + maxIdle: 1, + idleTimeout: 1, + Promise: 1, + queueLimit: 1, + waitForConnections: 1, + jsonStrings: 1, +}; + +class ConnectionConfig { + constructor(options) { + if (typeof options === 'string') { + options = ConnectionConfig.parseUrl(options); + } else if (options && options.uri) { + const uriOptions = ConnectionConfig.parseUrl(options.uri); + for (const key in uriOptions) { + if (!Object.prototype.hasOwnProperty.call(uriOptions, key)) continue; + if (options[key]) continue; + options[key] = uriOptions[key]; + } + } + for (const key in options) { + if (!Object.prototype.hasOwnProperty.call(options, key)) continue; + if (validOptions[key] !== 1) { + // REVIEW: Should this be emitted somehow? + // eslint-disable-next-line no-console + console.error( + `Ignoring invalid configuration option passed to Connection: ${key}. This is currently a warning, but in future versions of MySQL2, an error will be thrown if you pass an invalid configuration option to a Connection` + ); + } + } + this.isServer = options.isServer; + this.stream = options.stream; + this.host = options.host || 'localhost'; + this.port = + (typeof options.port === 'string' + ? parseInt(options.port, 10) + : options.port) || 3306; + this.localAddress = options.localAddress; + this.socketPath = options.socketPath; + this.user = options.user || undefined; + // for the purpose of multi-factor authentication, or not, the main + // password (used for the 1st authentication factor) can also be + // provided via the "password1" option + this.password = options.password || options.password1 || undefined; + this.password2 = options.password2 || undefined; + this.password3 = options.password3 || undefined; + this.passwordSha1 = options.passwordSha1 || undefined; + this.database = options.database; + this.connectTimeout = isNaN(options.connectTimeout) + ? 10 * 1000 + : options.connectTimeout; + this.insecureAuth = options.insecureAuth || false; + this.infileStreamFactory = options.infileStreamFactory || undefined; + this.supportBigNumbers = options.supportBigNumbers || false; + this.bigNumberStrings = options.bigNumberStrings || false; + this.decimalNumbers = options.decimalNumbers || false; + this.dateStrings = options.dateStrings || false; + this.debug = options.debug; + this.trace = options.trace !== false; + this.stringifyObjects = options.stringifyObjects || false; + this.enableKeepAlive = options.enableKeepAlive !== false; + this.keepAliveInitialDelay = options.keepAliveInitialDelay; + if ( + options.timezone && + !/^(?:local|Z|[ +-]\d\d:\d\d)$/.test(options.timezone) + ) { + // strictly supports timezones specified by mysqljs/mysql: + // https://github.com/mysqljs/mysql#user-content-connection-options + // eslint-disable-next-line no-console + console.error( + `Ignoring invalid timezone passed to Connection: ${options.timezone}. This is currently a warning, but in future versions of MySQL2, an error will be thrown if you pass an invalid configuration option to a Connection` + ); + // SqlStrings falls back to UTC on invalid timezone + this.timezone = 'Z'; + } else { + this.timezone = options.timezone || 'local'; + } + this.queryFormat = options.queryFormat; + this.pool = options.pool || undefined; + this.ssl = + typeof options.ssl === 'string' + ? ConnectionConfig.getSSLProfile(options.ssl) + : options.ssl || false; + this.multipleStatements = options.multipleStatements || false; + this.rowsAsArray = options.rowsAsArray || false; + this.namedPlaceholders = options.namedPlaceholders || false; + this.nestTables = + options.nestTables === undefined ? undefined : options.nestTables; + this.typeCast = options.typeCast === undefined ? true : options.typeCast; + this.disableEval = Boolean(options.disableEval); + if (this.timezone[0] === ' ') { + // "+" is a url encoded char for space so it + // gets translated to space when giving a + // connection string.. + this.timezone = `+${this.timezone.slice(1)}`; + } + if (this.ssl) { + if (typeof this.ssl !== 'object') { + throw new TypeError( + `SSL profile must be an object, instead it's a ${typeof this.ssl}` + ); + } + // Default rejectUnauthorized to true + this.ssl.rejectUnauthorized = this.ssl.rejectUnauthorized !== false; + } + this.maxPacketSize = 0; + this.charsetNumber = options.charset + ? ConnectionConfig.getCharsetNumber(options.charset) + : options.charsetNumber || Charsets.UTF8MB4_UNICODE_CI; + this.compress = options.compress || false; + this.authPlugins = options.authPlugins; + this.authSwitchHandler = options.authSwitchHandler; + this.clientFlags = ConnectionConfig.mergeFlags( + ConnectionConfig.getDefaultFlags(options), + options.flags || '' + ); + // Default connection attributes + // https://dev.mysql.com/doc/refman/8.0/en/performance-schema-connection-attribute-tables.html + const defaultConnectAttributes = { + _client_name: 'Node-MySQL-2', + _client_version: version, + }; + this.connectAttributes = { + ...defaultConnectAttributes, + ...(options.connectAttributes || {}), + }; + this.maxPreparedStatements = options.maxPreparedStatements || 16000; + this.jsonStrings = options.jsonStrings || false; + } + + static mergeFlags(default_flags, user_flags) { + let flags = 0x0, + i; + if (!Array.isArray(user_flags)) { + user_flags = String(user_flags || '') + .toUpperCase() + .split(/\s*,+\s*/); + } + // add default flags unless "blacklisted" + for (i in default_flags) { + if (user_flags.indexOf(`-${default_flags[i]}`) >= 0) { + continue; + } + flags |= ClientConstants[default_flags[i]] || 0x0; + } + // add user flags unless already already added + for (i in user_flags) { + if (user_flags[i][0] === '-') { + continue; + } + if (default_flags.indexOf(user_flags[i]) >= 0) { + continue; + } + flags |= ClientConstants[user_flags[i]] || 0x0; + } + return flags; + } + + static getDefaultFlags(options) { + const defaultFlags = [ + 'LONG_PASSWORD', + 'FOUND_ROWS', + 'LONG_FLAG', + 'CONNECT_WITH_DB', + 'ODBC', + 'LOCAL_FILES', + 'IGNORE_SPACE', + 'PROTOCOL_41', + 'IGNORE_SIGPIPE', + 'TRANSACTIONS', + 'RESERVED', + 'SECURE_CONNECTION', + 'MULTI_RESULTS', + 'TRANSACTIONS', + 'SESSION_TRACK', + 'CONNECT_ATTRS', + ]; + if (options && options.multipleStatements) { + defaultFlags.push('MULTI_STATEMENTS'); + } + defaultFlags.push('PLUGIN_AUTH'); + defaultFlags.push('PLUGIN_AUTH_LENENC_CLIENT_DATA'); + + return defaultFlags; + } + + static getCharsetNumber(charset) { + const num = Charsets[charset.toUpperCase()]; + if (num === undefined) { + throw new TypeError(`Unknown charset '${charset}'`); + } + return num; + } + + static getSSLProfile(name) { + if (!SSLProfiles) { + SSLProfiles = require('./constants/ssl_profiles.js'); + } + const ssl = SSLProfiles[name]; + if (ssl === undefined) { + throw new TypeError(`Unknown SSL profile '${name}'`); + } + return ssl; + } + + static parseUrl(url) { + const parsedUrl = new URL(url); + const options = { + host: decodeURIComponent(parsedUrl.hostname), + port: parseInt(parsedUrl.port, 10), + database: decodeURIComponent(parsedUrl.pathname.slice(1)), + user: decodeURIComponent(parsedUrl.username), + password: decodeURIComponent(parsedUrl.password), + }; + parsedUrl.searchParams.forEach((value, key) => { + try { + // Try to parse this as a JSON expression first + options[key] = JSON.parse(value); + } catch (err) { + // Otherwise assume it is a plain string + options[key] = value; + } + }); + return options; + } +} + +module.exports = ConnectionConfig; diff --git a/node_modules/mysql2/lib/constants/charset_encodings.js b/node_modules/mysql2/lib/constants/charset_encodings.js new file mode 100644 index 0000000..7e9860f --- /dev/null +++ b/node_modules/mysql2/lib/constants/charset_encodings.js @@ -0,0 +1,316 @@ +'use strict'; + +// see tools/generate-charset-mapping.js +// basicalliy result of "SHOW COLLATION" query + +module.exports = [ + 'utf8', + 'big5', + 'latin2', + 'dec8', + 'cp850', + 'latin1', + 'hp8', + 'koi8r', + 'latin1', + 'latin2', + 'swe7', + 'ascii', + 'eucjp', + 'sjis', + 'cp1251', + 'latin1', + 'hebrew', + 'utf8', + 'tis620', + 'euckr', + 'latin7', + 'latin2', + 'koi8u', + 'cp1251', + 'gb2312', + 'greek', + 'cp1250', + 'latin2', + 'gbk', + 'cp1257', + 'latin5', + 'latin1', + 'armscii8', + 'cesu8', + 'cp1250', + 'ucs2', + 'cp866', + 'keybcs2', + 'macintosh', + 'macroman', + 'cp852', + 'latin7', + 'latin7', + 'macintosh', + 'cp1250', + 'utf8', + 'utf8', + 'latin1', + 'latin1', + 'latin1', + 'cp1251', + 'cp1251', + 'cp1251', + 'macroman', + 'utf16', + 'utf16', + 'utf16-le', + 'cp1256', + 'cp1257', + 'cp1257', + 'utf32', + 'utf32', + 'utf16-le', + 'binary', + 'armscii8', + 'ascii', + 'cp1250', + 'cp1256', + 'cp866', + 'dec8', + 'greek', + 'hebrew', + 'hp8', + 'keybcs2', + 'koi8r', + 'koi8u', + 'cesu8', + 'latin2', + 'latin5', + 'latin7', + 'cp850', + 'cp852', + 'swe7', + 'cesu8', + 'big5', + 'euckr', + 'gb2312', + 'gbk', + 'sjis', + 'tis620', + 'ucs2', + 'eucjp', + 'geostd8', + 'geostd8', + 'latin1', + 'cp932', + 'cp932', + 'eucjpms', + 'eucjpms', + 'cp1250', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf16', + 'utf8', + 'utf8', + 'utf8', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'ucs2', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'ucs2', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf32', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'cesu8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'cesu8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'gb18030', + 'gb18030', + 'gb18030', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', + 'utf8', +]; diff --git a/node_modules/mysql2/lib/constants/charsets.js b/node_modules/mysql2/lib/constants/charsets.js new file mode 100644 index 0000000..2cb0a97 --- /dev/null +++ b/node_modules/mysql2/lib/constants/charsets.js @@ -0,0 +1,317 @@ +'use strict'; + +exports.BIG5_CHINESE_CI = 1; +exports.LATIN2_CZECH_CS = 2; +exports.DEC8_SWEDISH_CI = 3; +exports.CP850_GENERAL_CI = 4; +exports.LATIN1_GERMAN1_CI = 5; +exports.HP8_ENGLISH_CI = 6; +exports.KOI8R_GENERAL_CI = 7; +exports.LATIN1_SWEDISH_CI = 8; +exports.LATIN2_GENERAL_CI = 9; +exports.SWE7_SWEDISH_CI = 10; +exports.ASCII_GENERAL_CI = 11; +exports.UJIS_JAPANESE_CI = 12; +exports.SJIS_JAPANESE_CI = 13; +exports.CP1251_BULGARIAN_CI = 14; +exports.LATIN1_DANISH_CI = 15; +exports.HEBREW_GENERAL_CI = 16; +exports.TIS620_THAI_CI = 18; +exports.EUCKR_KOREAN_CI = 19; +exports.LATIN7_ESTONIAN_CS = 20; +exports.LATIN2_HUNGARIAN_CI = 21; +exports.KOI8U_GENERAL_CI = 22; +exports.CP1251_UKRAINIAN_CI = 23; +exports.GB2312_CHINESE_CI = 24; +exports.GREEK_GENERAL_CI = 25; +exports.CP1250_GENERAL_CI = 26; +exports.LATIN2_CROATIAN_CI = 27; +exports.GBK_CHINESE_CI = 28; +exports.CP1257_LITHUANIAN_CI = 29; +exports.LATIN5_TURKISH_CI = 30; +exports.LATIN1_GERMAN2_CI = 31; +exports.ARMSCII8_GENERAL_CI = 32; +exports.UTF8_GENERAL_CI = 33; +exports.CP1250_CZECH_CS = 34; +exports.UCS2_GENERAL_CI = 35; +exports.CP866_GENERAL_CI = 36; +exports.KEYBCS2_GENERAL_CI = 37; +exports.MACCE_GENERAL_CI = 38; +exports.MACROMAN_GENERAL_CI = 39; +exports.CP852_GENERAL_CI = 40; +exports.LATIN7_GENERAL_CI = 41; +exports.LATIN7_GENERAL_CS = 42; +exports.MACCE_BIN = 43; +exports.CP1250_CROATIAN_CI = 44; +exports.UTF8MB4_GENERAL_CI = 45; +exports.UTF8MB4_BIN = 46; +exports.LATIN1_BIN = 47; +exports.LATIN1_GENERAL_CI = 48; +exports.LATIN1_GENERAL_CS = 49; +exports.CP1251_BIN = 50; +exports.CP1251_GENERAL_CI = 51; +exports.CP1251_GENERAL_CS = 52; +exports.MACROMAN_BIN = 53; +exports.UTF16_GENERAL_CI = 54; +exports.UTF16_BIN = 55; +exports.UTF16LE_GENERAL_CI = 56; +exports.CP1256_GENERAL_CI = 57; +exports.CP1257_BIN = 58; +exports.CP1257_GENERAL_CI = 59; +exports.UTF32_GENERAL_CI = 60; +exports.UTF32_BIN = 61; +exports.UTF16LE_BIN = 62; +exports.BINARY = 63; +exports.ARMSCII8_BIN = 64; +exports.ASCII_BIN = 65; +exports.CP1250_BIN = 66; +exports.CP1256_BIN = 67; +exports.CP866_BIN = 68; +exports.DEC8_BIN = 69; +exports.GREEK_BIN = 70; +exports.HEBREW_BIN = 71; +exports.HP8_BIN = 72; +exports.KEYBCS2_BIN = 73; +exports.KOI8R_BIN = 74; +exports.KOI8U_BIN = 75; +exports.UTF8_TOLOWER_CI = 76; +exports.LATIN2_BIN = 77; +exports.LATIN5_BIN = 78; +exports.LATIN7_BIN = 79; +exports.CP850_BIN = 80; +exports.CP852_BIN = 81; +exports.SWE7_BIN = 82; +exports.UTF8_BIN = 83; +exports.BIG5_BIN = 84; +exports.EUCKR_BIN = 85; +exports.GB2312_BIN = 86; +exports.GBK_BIN = 87; +exports.SJIS_BIN = 88; +exports.TIS620_BIN = 89; +exports.UCS2_BIN = 90; +exports.UJIS_BIN = 91; +exports.GEOSTD8_GENERAL_CI = 92; +exports.GEOSTD8_BIN = 93; +exports.LATIN1_SPANISH_CI = 94; +exports.CP932_JAPANESE_CI = 95; +exports.CP932_BIN = 96; +exports.EUCJPMS_JAPANESE_CI = 97; +exports.EUCJPMS_BIN = 98; +exports.CP1250_POLISH_CI = 99; +exports.UTF16_UNICODE_CI = 101; +exports.UTF16_ICELANDIC_CI = 102; +exports.UTF16_LATVIAN_CI = 103; +exports.UTF16_ROMANIAN_CI = 104; +exports.UTF16_SLOVENIAN_CI = 105; +exports.UTF16_POLISH_CI = 106; +exports.UTF16_ESTONIAN_CI = 107; +exports.UTF16_SPANISH_CI = 108; +exports.UTF16_SWEDISH_CI = 109; +exports.UTF16_TURKISH_CI = 110; +exports.UTF16_CZECH_CI = 111; +exports.UTF16_DANISH_CI = 112; +exports.UTF16_LITHUANIAN_CI = 113; +exports.UTF16_SLOVAK_CI = 114; +exports.UTF16_SPANISH2_CI = 115; +exports.UTF16_ROMAN_CI = 116; +exports.UTF16_PERSIAN_CI = 117; +exports.UTF16_ESPERANTO_CI = 118; +exports.UTF16_HUNGARIAN_CI = 119; +exports.UTF16_SINHALA_CI = 120; +exports.UTF16_GERMAN2_CI = 121; +exports.UTF16_CROATIAN_CI = 122; +exports.UTF16_UNICODE_520_CI = 123; +exports.UTF16_VIETNAMESE_CI = 124; +exports.UCS2_UNICODE_CI = 128; +exports.UCS2_ICELANDIC_CI = 129; +exports.UCS2_LATVIAN_CI = 130; +exports.UCS2_ROMANIAN_CI = 131; +exports.UCS2_SLOVENIAN_CI = 132; +exports.UCS2_POLISH_CI = 133; +exports.UCS2_ESTONIAN_CI = 134; +exports.UCS2_SPANISH_CI = 135; +exports.UCS2_SWEDISH_CI = 136; +exports.UCS2_TURKISH_CI = 137; +exports.UCS2_CZECH_CI = 138; +exports.UCS2_DANISH_CI = 139; +exports.UCS2_LITHUANIAN_CI = 140; +exports.UCS2_SLOVAK_CI = 141; +exports.UCS2_SPANISH2_CI = 142; +exports.UCS2_ROMAN_CI = 143; +exports.UCS2_PERSIAN_CI = 144; +exports.UCS2_ESPERANTO_CI = 145; +exports.UCS2_HUNGARIAN_CI = 146; +exports.UCS2_SINHALA_CI = 147; +exports.UCS2_GERMAN2_CI = 148; +exports.UCS2_CROATIAN_CI = 149; +exports.UCS2_UNICODE_520_CI = 150; +exports.UCS2_VIETNAMESE_CI = 151; +exports.UCS2_GENERAL_MYSQL500_CI = 159; +exports.UTF32_UNICODE_CI = 160; +exports.UTF32_ICELANDIC_CI = 161; +exports.UTF32_LATVIAN_CI = 162; +exports.UTF32_ROMANIAN_CI = 163; +exports.UTF32_SLOVENIAN_CI = 164; +exports.UTF32_POLISH_CI = 165; +exports.UTF32_ESTONIAN_CI = 166; +exports.UTF32_SPANISH_CI = 167; +exports.UTF32_SWEDISH_CI = 168; +exports.UTF32_TURKISH_CI = 169; +exports.UTF32_CZECH_CI = 170; +exports.UTF32_DANISH_CI = 171; +exports.UTF32_LITHUANIAN_CI = 172; +exports.UTF32_SLOVAK_CI = 173; +exports.UTF32_SPANISH2_CI = 174; +exports.UTF32_ROMAN_CI = 175; +exports.UTF32_PERSIAN_CI = 176; +exports.UTF32_ESPERANTO_CI = 177; +exports.UTF32_HUNGARIAN_CI = 178; +exports.UTF32_SINHALA_CI = 179; +exports.UTF32_GERMAN2_CI = 180; +exports.UTF32_CROATIAN_CI = 181; +exports.UTF32_UNICODE_520_CI = 182; +exports.UTF32_VIETNAMESE_CI = 183; +exports.UTF8_UNICODE_CI = 192; +exports.UTF8_ICELANDIC_CI = 193; +exports.UTF8_LATVIAN_CI = 194; +exports.UTF8_ROMANIAN_CI = 195; +exports.UTF8_SLOVENIAN_CI = 196; +exports.UTF8_POLISH_CI = 197; +exports.UTF8_ESTONIAN_CI = 198; +exports.UTF8_SPANISH_CI = 199; +exports.UTF8_SWEDISH_CI = 200; +exports.UTF8_TURKISH_CI = 201; +exports.UTF8_CZECH_CI = 202; +exports.UTF8_DANISH_CI = 203; +exports.UTF8_LITHUANIAN_CI = 204; +exports.UTF8_SLOVAK_CI = 205; +exports.UTF8_SPANISH2_CI = 206; +exports.UTF8_ROMAN_CI = 207; +exports.UTF8_PERSIAN_CI = 208; +exports.UTF8_ESPERANTO_CI = 209; +exports.UTF8_HUNGARIAN_CI = 210; +exports.UTF8_SINHALA_CI = 211; +exports.UTF8_GERMAN2_CI = 212; +exports.UTF8_CROATIAN_CI = 213; +exports.UTF8_UNICODE_520_CI = 214; +exports.UTF8_VIETNAMESE_CI = 215; +exports.UTF8_GENERAL_MYSQL500_CI = 223; +exports.UTF8MB4_UNICODE_CI = 224; +exports.UTF8MB4_ICELANDIC_CI = 225; +exports.UTF8MB4_LATVIAN_CI = 226; +exports.UTF8MB4_ROMANIAN_CI = 227; +exports.UTF8MB4_SLOVENIAN_CI = 228; +exports.UTF8MB4_POLISH_CI = 229; +exports.UTF8MB4_ESTONIAN_CI = 230; +exports.UTF8MB4_SPANISH_CI = 231; +exports.UTF8MB4_SWEDISH_CI = 232; +exports.UTF8MB4_TURKISH_CI = 233; +exports.UTF8MB4_CZECH_CI = 234; +exports.UTF8MB4_DANISH_CI = 235; +exports.UTF8MB4_LITHUANIAN_CI = 236; +exports.UTF8MB4_SLOVAK_CI = 237; +exports.UTF8MB4_SPANISH2_CI = 238; +exports.UTF8MB4_ROMAN_CI = 239; +exports.UTF8MB4_PERSIAN_CI = 240; +exports.UTF8MB4_ESPERANTO_CI = 241; +exports.UTF8MB4_HUNGARIAN_CI = 242; +exports.UTF8MB4_SINHALA_CI = 243; +exports.UTF8MB4_GERMAN2_CI = 244; +exports.UTF8MB4_CROATIAN_CI = 245; +exports.UTF8MB4_UNICODE_520_CI = 246; +exports.UTF8MB4_VIETNAMESE_CI = 247; +exports.GB18030_CHINESE_CI = 248; +exports.GB18030_BIN = 249; +exports.GB18030_UNICODE_520_CI = 250; +exports.UTF8_GENERAL50_CI = 253; // deprecated +exports.UTF8MB4_0900_AI_CI = 255; +exports.UTF8MB4_DE_PB_0900_AI_CI = 256; +exports.UTF8MB4_IS_0900_AI_CI = 257; +exports.UTF8MB4_LV_0900_AI_CI = 258; +exports.UTF8MB4_RO_0900_AI_CI = 259; +exports.UTF8MB4_SL_0900_AI_CI = 260; +exports.UTF8MB4_PL_0900_AI_CI = 261; +exports.UTF8MB4_ET_0900_AI_CI = 262; +exports.UTF8MB4_ES_0900_AI_CI = 263; +exports.UTF8MB4_SV_0900_AI_CI = 264; +exports.UTF8MB4_TR_0900_AI_CI = 265; +exports.UTF8MB4_CS_0900_AI_CI = 266; +exports.UTF8MB4_DA_0900_AI_CI = 267; +exports.UTF8MB4_LT_0900_AI_CI = 268; +exports.UTF8MB4_SK_0900_AI_CI = 269; +exports.UTF8MB4_ES_TRAD_0900_AI_CI = 270; +exports.UTF8MB4_LA_0900_AI_CI = 271; +exports.UTF8MB4_EO_0900_AI_CI = 273; +exports.UTF8MB4_HU_0900_AI_CI = 274; +exports.UTF8MB4_HR_0900_AI_CI = 275; +exports.UTF8MB4_VI_0900_AI_CI = 277; +exports.UTF8MB4_0900_AS_CS = 278; +exports.UTF8MB4_DE_PB_0900_AS_CS = 279; +exports.UTF8MB4_IS_0900_AS_CS = 280; +exports.UTF8MB4_LV_0900_AS_CS = 281; +exports.UTF8MB4_RO_0900_AS_CS = 282; +exports.UTF8MB4_SL_0900_AS_CS = 283; +exports.UTF8MB4_PL_0900_AS_CS = 284; +exports.UTF8MB4_ET_0900_AS_CS = 285; +exports.UTF8MB4_ES_0900_AS_CS = 286; +exports.UTF8MB4_SV_0900_AS_CS = 287; +exports.UTF8MB4_TR_0900_AS_CS = 288; +exports.UTF8MB4_CS_0900_AS_CS = 289; +exports.UTF8MB4_DA_0900_AS_CS = 290; +exports.UTF8MB4_LT_0900_AS_CS = 291; +exports.UTF8MB4_SK_0900_AS_CS = 292; +exports.UTF8MB4_ES_TRAD_0900_AS_CS = 293; +exports.UTF8MB4_LA_0900_AS_CS = 294; +exports.UTF8MB4_EO_0900_AS_CS = 296; +exports.UTF8MB4_HU_0900_AS_CS = 297; +exports.UTF8MB4_HR_0900_AS_CS = 298; +exports.UTF8MB4_VI_0900_AS_CS = 300; +exports.UTF8MB4_JA_0900_AS_CS = 303; +exports.UTF8MB4_JA_0900_AS_CS_KS = 304; +exports.UTF8MB4_0900_AS_CI = 305; +exports.UTF8MB4_RU_0900_AI_CI = 306; +exports.UTF8MB4_RU_0900_AS_CS = 307; +exports.UTF8MB4_ZH_0900_AS_CS = 308; +exports.UTF8MB4_0900_BIN = 309; + +// short aliases +exports.BIG5 = exports.BIG5_CHINESE_CI; +exports.DEC8 = exports.DEC8_SWEDISH_CI; +exports.CP850 = exports.CP850_GENERAL_CI; +exports.HP8 = exports.HP8_ENGLISH_CI; +exports.KOI8R = exports.KOI8R_GENERAL_CI; +exports.LATIN1 = exports.LATIN1_SWEDISH_CI; +exports.LATIN2 = exports.LATIN2_GENERAL_CI; +exports.SWE7 = exports.SWE7_SWEDISH_CI; +exports.ASCII = exports.ASCII_GENERAL_CI; +exports.UJIS = exports.UJIS_JAPANESE_CI; +exports.SJIS = exports.SJIS_JAPANESE_CI; +exports.HEBREW = exports.HEBREW_GENERAL_CI; +exports.TIS620 = exports.TIS620_THAI_CI; +exports.EUCKR = exports.EUCKR_KOREAN_CI; +exports.KOI8U = exports.KOI8U_GENERAL_CI; +exports.GB2312 = exports.GB2312_CHINESE_CI; +exports.GREEK = exports.GREEK_GENERAL_CI; +exports.CP1250 = exports.CP1250_GENERAL_CI; +exports.GBK = exports.GBK_CHINESE_CI; +exports.LATIN5 = exports.LATIN5_TURKISH_CI; +exports.ARMSCII8 = exports.ARMSCII8_GENERAL_CI; +exports.UTF8 = exports.UTF8_GENERAL_CI; +exports.UCS2 = exports.UCS2_GENERAL_CI; +exports.CP866 = exports.CP866_GENERAL_CI; +exports.KEYBCS2 = exports.KEYBCS2_GENERAL_CI; +exports.MACCE = exports.MACCE_GENERAL_CI; +exports.MACROMAN = exports.MACROMAN_GENERAL_CI; +exports.CP852 = exports.CP852_GENERAL_CI; +exports.LATIN7 = exports.LATIN7_GENERAL_CI; +exports.UTF8MB4 = exports.UTF8MB4_GENERAL_CI; +exports.CP1251 = exports.CP1251_GENERAL_CI; +exports.UTF16 = exports.UTF16_GENERAL_CI; +exports.UTF16LE = exports.UTF16LE_GENERAL_CI; +exports.CP1256 = exports.CP1256_GENERAL_CI; +exports.CP1257 = exports.CP1257_GENERAL_CI; +exports.UTF32 = exports.UTF32_GENERAL_CI; +exports.CP932 = exports.CP932_JAPANESE_CI; +exports.EUCJPMS = exports.EUCJPMS_JAPANESE_CI; +exports.GB18030 = exports.GB18030_CHINESE_CI; +exports.GEOSTD8 = exports.GEOSTD8_GENERAL_CI; diff --git a/node_modules/mysql2/lib/constants/client.js b/node_modules/mysql2/lib/constants/client.js new file mode 100644 index 0000000..6a6964d --- /dev/null +++ b/node_modules/mysql2/lib/constants/client.js @@ -0,0 +1,39 @@ +// This file was modified by Oracle on September 21, 2021. +// New capability for multi-factor authentication based on mandatory session +// trackers, that are signaled with an extra single-byte prefix on new +// versions of the MySQL server. +// Modifications copyright (c) 2021, Oracle and/or its affiliates. + +'use strict'; + +// Manually extracted from mysql-5.5.23/include/mysql_com.h +exports.LONG_PASSWORD = 0x00000001; /* new more secure passwords */ +exports.FOUND_ROWS = 0x00000002; /* found instead of affected rows */ +exports.LONG_FLAG = 0x00000004; /* get all column flags */ +exports.CONNECT_WITH_DB = 0x00000008; /* one can specify db on connect */ +exports.NO_SCHEMA = 0x00000010; /* don't allow database.table.column */ +exports.COMPRESS = 0x00000020; /* can use compression protocol */ +exports.ODBC = 0x00000040; /* odbc client */ +exports.LOCAL_FILES = 0x00000080; /* can use LOAD DATA LOCAL */ +exports.IGNORE_SPACE = 0x00000100; /* ignore spaces before '' */ +exports.PROTOCOL_41 = 0x00000200; /* new 4.1 protocol */ +exports.INTERACTIVE = 0x00000400; /* this is an interactive client */ +exports.SSL = 0x00000800; /* switch to ssl after handshake */ +exports.IGNORE_SIGPIPE = 0x00001000; /* IGNORE sigpipes */ +exports.TRANSACTIONS = 0x00002000; /* client knows about transactions */ +exports.RESERVED = 0x00004000; /* old flag for 4.1 protocol */ +exports.SECURE_CONNECTION = 0x00008000; /* new 4.1 authentication */ +exports.MULTI_STATEMENTS = 0x00010000; /* enable/disable multi-stmt support */ +exports.MULTI_RESULTS = 0x00020000; /* enable/disable multi-results */ +exports.PS_MULTI_RESULTS = 0x00040000; /* multi-results in ps-protocol */ +exports.PLUGIN_AUTH = 0x00080000; /* client supports plugin authentication */ +exports.CONNECT_ATTRS = 0x00100000; /* permits connection attributes */ +exports.PLUGIN_AUTH_LENENC_CLIENT_DATA = 0x00200000; /* Understands length-encoded integer for auth response data in Protocol::HandshakeResponse41. */ +exports.CAN_HANDLE_EXPIRED_PASSWORDS = 0x00400000; /* Announces support for expired password extension. */ +exports.SESSION_TRACK = 0x00800000; /* Can set SERVER_SESSION_STATE_CHANGED in the Status Flags and send session-state change data after a OK packet. */ +exports.DEPRECATE_EOF = 0x01000000; /* Can send OK after a Text Resultset. */ + +exports.SSL_VERIFY_SERVER_CERT = 0x40000000; +exports.REMEMBER_OPTIONS = 0x80000000; + +exports.MULTI_FACTOR_AUTHENTICATION = 0x10000000; /* multi-factor authentication */ diff --git a/node_modules/mysql2/lib/constants/commands.js b/node_modules/mysql2/lib/constants/commands.js new file mode 100644 index 0000000..1e6f827 --- /dev/null +++ b/node_modules/mysql2/lib/constants/commands.js @@ -0,0 +1,36 @@ +'use strict'; + +module.exports = { + SLEEP: 0x00, // deprecated + QUIT: 0x01, + INIT_DB: 0x02, + QUERY: 0x03, + FIELD_LIST: 0x04, + CREATE_DB: 0x05, + DROP_DB: 0x06, + REFRESH: 0x07, + SHUTDOWN: 0x08, + STATISTICS: 0x09, + PROCESS_INFO: 0x0a, // deprecated + CONNECT: 0x0b, // deprecated + PROCESS_KILL: 0x0c, + DEBUG: 0x0d, + PING: 0x0e, + TIME: 0x0f, // deprecated + DELAYED_INSERT: 0x10, // deprecated + CHANGE_USER: 0x11, + BINLOG_DUMP: 0x12, + TABLE_DUMP: 0x13, + CONNECT_OUT: 0x14, + REGISTER_SLAVE: 0x15, + STMT_PREPARE: 0x16, + STMT_EXECUTE: 0x17, + STMT_SEND_LONG_DATA: 0x18, + STMT_CLOSE: 0x19, + STMT_RESET: 0x1a, + SET_OPTION: 0x1b, + STMT_FETCH: 0x1c, + DAEMON: 0x1d, // deprecated + BINLOG_DUMP_GTID: 0x1e, + UNKNOWN: 0xff, // bad! +}; diff --git a/node_modules/mysql2/lib/constants/cursor.js b/node_modules/mysql2/lib/constants/cursor.js new file mode 100644 index 0000000..86157d2 --- /dev/null +++ b/node_modules/mysql2/lib/constants/cursor.js @@ -0,0 +1,8 @@ +'use strict'; + +module.exports = { + NO_CURSOR: 0, + READ_ONLY: 1, + FOR_UPDATE: 2, + SCROLLABLE: 3, +}; diff --git a/node_modules/mysql2/lib/constants/encoding_charset.js b/node_modules/mysql2/lib/constants/encoding_charset.js new file mode 100644 index 0000000..64045e6 --- /dev/null +++ b/node_modules/mysql2/lib/constants/encoding_charset.js @@ -0,0 +1,50 @@ +'use strict'; + +// inverse of charset_encodings +// given encoding, get matching mysql charset number + +module.exports = { + big5: 1, + latin2: 2, + dec8: 3, + cp850: 4, + latin1: 5, + hp8: 6, + koi8r: 7, + swe7: 10, + ascii: 11, + eucjp: 12, + sjis: 13, + cp1251: 14, + hebrew: 16, + tis620: 18, + euckr: 19, + latin7: 20, + koi8u: 22, + gb2312: 24, + greek: 25, + cp1250: 26, + gbk: 28, + cp1257: 29, + latin5: 30, + armscii8: 32, + cesu8: 33, + ucs2: 35, + cp866: 36, + keybcs2: 37, + macintosh: 38, + macroman: 39, + cp852: 40, + utf8: 45, + utf8mb4: 45, + utf16: 54, + utf16le: 56, + cp1256: 57, + utf32: 60, + binary: 63, + geostd8: 92, + cp932: 95, + eucjpms: 97, + gb18030: 248, + utf8mb3: 192, +}; diff --git a/node_modules/mysql2/lib/constants/errors.js b/node_modules/mysql2/lib/constants/errors.js new file mode 100644 index 0000000..b1d5927 --- /dev/null +++ b/node_modules/mysql2/lib/constants/errors.js @@ -0,0 +1,3973 @@ +// This file was modified by Oracle on June 1, 2021. +// An entry was created for a new error reported by the MySQL server due to +// client inactivity. +// Modifications copyright (c) 2021, Oracle and/or its affiliates. + +'use strict'; + +// originally copied from https://raw.githubusercontent.com/mysqljs/mysql/7770ee5bb13260c56a160b91fe480d9165dbeeba/lib/protocol/constants/errors.js +// (c) node-mysql authors + +// updated to contain error codes as is contained in MySQL 8.0 +// by adapting node-mysql: /.../generate-error-constants.js + +/** + * MySQL error constants + * + * Extracted from version 8.0.33 + * + * !! Generated by generate-error-constants.js, do not modify by hand !! + */ + +exports.EE_CANTCREATEFILE = 1; +exports.EE_READ = 2; +exports.EE_WRITE = 3; +exports.EE_BADCLOSE = 4; +exports.EE_OUTOFMEMORY = 5; +exports.EE_DELETE = 6; +exports.EE_LINK = 7; +exports.EE_EOFERR = 9; +exports.EE_CANTLOCK = 10; +exports.EE_CANTUNLOCK = 11; +exports.EE_DIR = 12; +exports.EE_STAT = 13; +exports.EE_CANT_CHSIZE = 14; +exports.EE_CANT_OPEN_STREAM = 15; +exports.EE_GETWD = 16; +exports.EE_SETWD = 17; +exports.EE_LINK_WARNING = 18; +exports.EE_OPEN_WARNING = 19; +exports.EE_DISK_FULL = 20; +exports.EE_CANT_MKDIR = 21; +exports.EE_UNKNOWN_CHARSET = 22; +exports.EE_OUT_OF_FILERESOURCES = 23; +exports.EE_CANT_READLINK = 24; +exports.EE_CANT_SYMLINK = 25; +exports.EE_REALPATH = 26; +exports.EE_SYNC = 27; +exports.EE_UNKNOWN_COLLATION = 28; +exports.EE_FILENOTFOUND = 29; +exports.EE_FILE_NOT_CLOSED = 30; +exports.EE_CHANGE_OWNERSHIP = 31; +exports.EE_CHANGE_PERMISSIONS = 32; +exports.EE_CANT_SEEK = 33; +exports.EE_CAPACITY_EXCEEDED = 34; +exports.EE_DISK_FULL_WITH_RETRY_MSG = 35; +exports.EE_FAILED_TO_CREATE_TIMER = 36; +exports.EE_FAILED_TO_DELETE_TIMER = 37; +exports.EE_FAILED_TO_CREATE_TIMER_QUEUE = 38; +exports.EE_FAILED_TO_START_TIMER_NOTIFY_THREAD = 39; +exports.EE_FAILED_TO_CREATE_TIMER_NOTIFY_THREAD_INTERRUPT_EVENT = 40; +exports.EE_EXITING_TIMER_NOTIFY_THREAD = 41; +exports.EE_WIN_LIBRARY_LOAD_FAILED = 42; +exports.EE_WIN_RUN_TIME_ERROR_CHECK = 43; +exports.EE_FAILED_TO_DETERMINE_LARGE_PAGE_SIZE = 44; +exports.EE_FAILED_TO_KILL_ALL_THREADS = 45; +exports.EE_FAILED_TO_CREATE_IO_COMPLETION_PORT = 46; +exports.EE_FAILED_TO_OPEN_DEFAULTS_FILE = 47; +exports.EE_FAILED_TO_HANDLE_DEFAULTS_FILE = 48; +exports.EE_WRONG_DIRECTIVE_IN_CONFIG_FILE = 49; +exports.EE_SKIPPING_DIRECTIVE_DUE_TO_MAX_INCLUDE_RECURSION = 50; +exports.EE_INCORRECT_GRP_DEFINITION_IN_CONFIG_FILE = 51; +exports.EE_OPTION_WITHOUT_GRP_IN_CONFIG_FILE = 52; +exports.EE_CONFIG_FILE_PERMISSION_ERROR = 53; +exports.EE_IGNORE_WORLD_WRITABLE_CONFIG_FILE = 54; +exports.EE_USING_DISABLED_OPTION = 55; +exports.EE_USING_DISABLED_SHORT_OPTION = 56; +exports.EE_USING_PASSWORD_ON_CLI_IS_INSECURE = 57; +exports.EE_UNKNOWN_SUFFIX_FOR_VARIABLE = 58; +exports.EE_SSL_ERROR_FROM_FILE = 59; +exports.EE_SSL_ERROR = 60; +exports.EE_NET_SEND_ERROR_IN_BOOTSTRAP = 61; +exports.EE_PACKETS_OUT_OF_ORDER = 62; +exports.EE_UNKNOWN_PROTOCOL_OPTION = 63; +exports.EE_FAILED_TO_LOCATE_SERVER_PUBLIC_KEY = 64; +exports.EE_PUBLIC_KEY_NOT_IN_PEM_FORMAT = 65; +exports.EE_DEBUG_INFO = 66; +exports.EE_UNKNOWN_VARIABLE = 67; +exports.EE_UNKNOWN_OPTION = 68; +exports.EE_UNKNOWN_SHORT_OPTION = 69; +exports.EE_OPTION_WITHOUT_ARGUMENT = 70; +exports.EE_OPTION_REQUIRES_ARGUMENT = 71; +exports.EE_SHORT_OPTION_REQUIRES_ARGUMENT = 72; +exports.EE_OPTION_IGNORED_DUE_TO_INVALID_VALUE = 73; +exports.EE_OPTION_WITH_EMPTY_VALUE = 74; +exports.EE_FAILED_TO_ASSIGN_MAX_VALUE_TO_OPTION = 75; +exports.EE_INCORRECT_BOOLEAN_VALUE_FOR_OPTION = 76; +exports.EE_FAILED_TO_SET_OPTION_VALUE = 77; +exports.EE_INCORRECT_INT_VALUE_FOR_OPTION = 78; +exports.EE_INCORRECT_UINT_VALUE_FOR_OPTION = 79; +exports.EE_ADJUSTED_SIGNED_VALUE_FOR_OPTION = 80; +exports.EE_ADJUSTED_UNSIGNED_VALUE_FOR_OPTION = 81; +exports.EE_ADJUSTED_ULONGLONG_VALUE_FOR_OPTION = 82; +exports.EE_ADJUSTED_DOUBLE_VALUE_FOR_OPTION = 83; +exports.EE_INVALID_DECIMAL_VALUE_FOR_OPTION = 84; +exports.EE_COLLATION_PARSER_ERROR = 85; +exports.EE_FAILED_TO_RESET_BEFORE_PRIMARY_IGNORABLE_CHAR = 86; +exports.EE_FAILED_TO_RESET_BEFORE_TERTIARY_IGNORABLE_CHAR = 87; +exports.EE_SHIFT_CHAR_OUT_OF_RANGE = 88; +exports.EE_RESET_CHAR_OUT_OF_RANGE = 89; +exports.EE_UNKNOWN_LDML_TAG = 90; +exports.EE_FAILED_TO_RESET_BEFORE_SECONDARY_IGNORABLE_CHAR = 91; +exports.EE_FAILED_PROCESSING_DIRECTIVE = 92; +exports.EE_PTHREAD_KILL_FAILED = 93; +exports.HA_ERR_KEY_NOT_FOUND = 120; +exports.HA_ERR_FOUND_DUPP_KEY = 121; +exports.HA_ERR_INTERNAL_ERROR = 122; +exports.HA_ERR_RECORD_CHANGED = 123; +exports.HA_ERR_WRONG_INDEX = 124; +exports.HA_ERR_ROLLED_BACK = 125; +exports.HA_ERR_CRASHED = 126; +exports.HA_ERR_WRONG_IN_RECORD = 127; +exports.HA_ERR_OUT_OF_MEM = 128; +exports.HA_ERR_NOT_A_TABLE = 130; +exports.HA_ERR_WRONG_COMMAND = 131; +exports.HA_ERR_OLD_FILE = 132; +exports.HA_ERR_NO_ACTIVE_RECORD = 133; +exports.HA_ERR_RECORD_DELETED = 134; +exports.HA_ERR_RECORD_FILE_FULL = 135; +exports.HA_ERR_INDEX_FILE_FULL = 136; +exports.HA_ERR_END_OF_FILE = 137; +exports.HA_ERR_UNSUPPORTED = 138; +exports.HA_ERR_TOO_BIG_ROW = 139; +exports.HA_WRONG_CREATE_OPTION = 140; +exports.HA_ERR_FOUND_DUPP_UNIQUE = 141; +exports.HA_ERR_UNKNOWN_CHARSET = 142; +exports.HA_ERR_WRONG_MRG_TABLE_DEF = 143; +exports.HA_ERR_CRASHED_ON_REPAIR = 144; +exports.HA_ERR_CRASHED_ON_USAGE = 145; +exports.HA_ERR_LOCK_WAIT_TIMEOUT = 146; +exports.HA_ERR_LOCK_TABLE_FULL = 147; +exports.HA_ERR_READ_ONLY_TRANSACTION = 148; +exports.HA_ERR_LOCK_DEADLOCK = 149; +exports.HA_ERR_CANNOT_ADD_FOREIGN = 150; +exports.HA_ERR_NO_REFERENCED_ROW = 151; +exports.HA_ERR_ROW_IS_REFERENCED = 152; +exports.HA_ERR_NO_SAVEPOINT = 153; +exports.HA_ERR_NON_UNIQUE_BLOCK_SIZE = 154; +exports.HA_ERR_NO_SUCH_TABLE = 155; +exports.HA_ERR_TABLE_EXIST = 156; +exports.HA_ERR_NO_CONNECTION = 157; +exports.HA_ERR_NULL_IN_SPATIAL = 158; +exports.HA_ERR_TABLE_DEF_CHANGED = 159; +exports.HA_ERR_NO_PARTITION_FOUND = 160; +exports.HA_ERR_RBR_LOGGING_FAILED = 161; +exports.HA_ERR_DROP_INDEX_FK = 162; +exports.HA_ERR_FOREIGN_DUPLICATE_KEY = 163; +exports.HA_ERR_TABLE_NEEDS_UPGRADE = 164; +exports.HA_ERR_TABLE_READONLY = 165; +exports.HA_ERR_AUTOINC_READ_FAILED = 166; +exports.HA_ERR_AUTOINC_ERANGE = 167; +exports.HA_ERR_GENERIC = 168; +exports.HA_ERR_RECORD_IS_THE_SAME = 169; +exports.HA_ERR_LOGGING_IMPOSSIBLE = 170; +exports.HA_ERR_CORRUPT_EVENT = 171; +exports.HA_ERR_NEW_FILE = 172; +exports.HA_ERR_ROWS_EVENT_APPLY = 173; +exports.HA_ERR_INITIALIZATION = 174; +exports.HA_ERR_FILE_TOO_SHORT = 175; +exports.HA_ERR_WRONG_CRC = 176; +exports.HA_ERR_TOO_MANY_CONCURRENT_TRXS = 177; +exports.HA_ERR_NOT_IN_LOCK_PARTITIONS = 178; +exports.HA_ERR_INDEX_COL_TOO_LONG = 179; +exports.HA_ERR_INDEX_CORRUPT = 180; +exports.HA_ERR_UNDO_REC_TOO_BIG = 181; +exports.HA_FTS_INVALID_DOCID = 182; +exports.HA_ERR_TABLE_IN_FK_CHECK = 183; +exports.HA_ERR_TABLESPACE_EXISTS = 184; +exports.HA_ERR_TOO_MANY_FIELDS = 185; +exports.HA_ERR_ROW_IN_WRONG_PARTITION = 186; +exports.HA_ERR_INNODB_READ_ONLY = 187; +exports.HA_ERR_FTS_EXCEED_RESULT_CACHE_LIMIT = 188; +exports.HA_ERR_TEMP_FILE_WRITE_FAILURE = 189; +exports.HA_ERR_INNODB_FORCED_RECOVERY = 190; +exports.HA_ERR_FTS_TOO_MANY_WORDS_IN_PHRASE = 191; +exports.HA_ERR_FK_DEPTH_EXCEEDED = 192; +exports.HA_MISSING_CREATE_OPTION = 193; +exports.HA_ERR_SE_OUT_OF_MEMORY = 194; +exports.HA_ERR_TABLE_CORRUPT = 195; +exports.HA_ERR_QUERY_INTERRUPTED = 196; +exports.HA_ERR_TABLESPACE_MISSING = 197; +exports.HA_ERR_TABLESPACE_IS_NOT_EMPTY = 198; +exports.HA_ERR_WRONG_FILE_NAME = 199; +exports.HA_ERR_NOT_ALLOWED_COMMAND = 200; +exports.HA_ERR_COMPUTE_FAILED = 201; +exports.HA_ERR_ROW_FORMAT_CHANGED = 202; +exports.HA_ERR_NO_WAIT_LOCK = 203; +exports.HA_ERR_DISK_FULL_NOWAIT = 204; +exports.HA_ERR_NO_SESSION_TEMP = 205; +exports.HA_ERR_WRONG_TABLE_NAME = 206; +exports.HA_ERR_TOO_LONG_PATH = 207; +exports.HA_ERR_SAMPLING_INIT_FAILED = 208; +exports.HA_ERR_FTS_TOO_MANY_NESTED_EXP = 209; +exports.ER_HASHCHK = 1000; +exports.ER_NISAMCHK = 1001; +exports.ER_NO = 1002; +exports.ER_YES = 1003; +exports.ER_CANT_CREATE_FILE = 1004; +exports.ER_CANT_CREATE_TABLE = 1005; +exports.ER_CANT_CREATE_DB = 1006; +exports.ER_DB_CREATE_EXISTS = 1007; +exports.ER_DB_DROP_EXISTS = 1008; +exports.ER_DB_DROP_DELETE = 1009; +exports.ER_DB_DROP_RMDIR = 1010; +exports.ER_CANT_DELETE_FILE = 1011; +exports.ER_CANT_FIND_SYSTEM_REC = 1012; +exports.ER_CANT_GET_STAT = 1013; +exports.ER_CANT_GET_WD = 1014; +exports.ER_CANT_LOCK = 1015; +exports.ER_CANT_OPEN_FILE = 1016; +exports.ER_FILE_NOT_FOUND = 1017; +exports.ER_CANT_READ_DIR = 1018; +exports.ER_CANT_SET_WD = 1019; +exports.ER_CHECKREAD = 1020; +exports.ER_DISK_FULL = 1021; +exports.ER_DUP_KEY = 1022; +exports.ER_ERROR_ON_CLOSE = 1023; +exports.ER_ERROR_ON_READ = 1024; +exports.ER_ERROR_ON_RENAME = 1025; +exports.ER_ERROR_ON_WRITE = 1026; +exports.ER_FILE_USED = 1027; +exports.ER_FILSORT_ABORT = 1028; +exports.ER_FORM_NOT_FOUND = 1029; +exports.ER_GET_ERRNO = 1030; +exports.ER_ILLEGAL_HA = 1031; +exports.ER_KEY_NOT_FOUND = 1032; +exports.ER_NOT_FORM_FILE = 1033; +exports.ER_NOT_KEYFILE = 1034; +exports.ER_OLD_KEYFILE = 1035; +exports.ER_OPEN_AS_READONLY = 1036; +exports.ER_OUTOFMEMORY = 1037; +exports.ER_OUT_OF_SORTMEMORY = 1038; +exports.ER_UNEXPECTED_EOF = 1039; +exports.ER_CON_COUNT_ERROR = 1040; +exports.ER_OUT_OF_RESOURCES = 1041; +exports.ER_BAD_HOST_ERROR = 1042; +exports.ER_HANDSHAKE_ERROR = 1043; +exports.ER_DBACCESS_DENIED_ERROR = 1044; +exports.ER_ACCESS_DENIED_ERROR = 1045; +exports.ER_NO_DB_ERROR = 1046; +exports.ER_UNKNOWN_COM_ERROR = 1047; +exports.ER_BAD_NULL_ERROR = 1048; +exports.ER_BAD_DB_ERROR = 1049; +exports.ER_TABLE_EXISTS_ERROR = 1050; +exports.ER_BAD_TABLE_ERROR = 1051; +exports.ER_NON_UNIQ_ERROR = 1052; +exports.ER_SERVER_SHUTDOWN = 1053; +exports.ER_BAD_FIELD_ERROR = 1054; +exports.ER_WRONG_FIELD_WITH_GROUP = 1055; +exports.ER_WRONG_GROUP_FIELD = 1056; +exports.ER_WRONG_SUM_SELECT = 1057; +exports.ER_WRONG_VALUE_COUNT = 1058; +exports.ER_TOO_LONG_IDENT = 1059; +exports.ER_DUP_FIELDNAME = 1060; +exports.ER_DUP_KEYNAME = 1061; +exports.ER_DUP_ENTRY = 1062; +exports.ER_WRONG_FIELD_SPEC = 1063; +exports.ER_PARSE_ERROR = 1064; +exports.ER_EMPTY_QUERY = 1065; +exports.ER_NONUNIQ_TABLE = 1066; +exports.ER_INVALID_DEFAULT = 1067; +exports.ER_MULTIPLE_PRI_KEY = 1068; +exports.ER_TOO_MANY_KEYS = 1069; +exports.ER_TOO_MANY_KEY_PARTS = 1070; +exports.ER_TOO_LONG_KEY = 1071; +exports.ER_KEY_COLUMN_DOES_NOT_EXITS = 1072; +exports.ER_BLOB_USED_AS_KEY = 1073; +exports.ER_TOO_BIG_FIELDLENGTH = 1074; +exports.ER_WRONG_AUTO_KEY = 1075; +exports.ER_READY = 1076; +exports.ER_NORMAL_SHUTDOWN = 1077; +exports.ER_GOT_SIGNAL = 1078; +exports.ER_SHUTDOWN_COMPLETE = 1079; +exports.ER_FORCING_CLOSE = 1080; +exports.ER_IPSOCK_ERROR = 1081; +exports.ER_NO_SUCH_INDEX = 1082; +exports.ER_WRONG_FIELD_TERMINATORS = 1083; +exports.ER_BLOBS_AND_NO_TERMINATED = 1084; +exports.ER_TEXTFILE_NOT_READABLE = 1085; +exports.ER_FILE_EXISTS_ERROR = 1086; +exports.ER_LOAD_INFO = 1087; +exports.ER_ALTER_INFO = 1088; +exports.ER_WRONG_SUB_KEY = 1089; +exports.ER_CANT_REMOVE_ALL_FIELDS = 1090; +exports.ER_CANT_DROP_FIELD_OR_KEY = 1091; +exports.ER_INSERT_INFO = 1092; +exports.ER_UPDATE_TABLE_USED = 1093; +exports.ER_NO_SUCH_THREAD = 1094; +exports.ER_KILL_DENIED_ERROR = 1095; +exports.ER_NO_TABLES_USED = 1096; +exports.ER_TOO_BIG_SET = 1097; +exports.ER_NO_UNIQUE_LOGFILE = 1098; +exports.ER_TABLE_NOT_LOCKED_FOR_WRITE = 1099; +exports.ER_TABLE_NOT_LOCKED = 1100; +exports.ER_BLOB_CANT_HAVE_DEFAULT = 1101; +exports.ER_WRONG_DB_NAME = 1102; +exports.ER_WRONG_TABLE_NAME = 1103; +exports.ER_TOO_BIG_SELECT = 1104; +exports.ER_UNKNOWN_ERROR = 1105; +exports.ER_UNKNOWN_PROCEDURE = 1106; +exports.ER_WRONG_PARAMCOUNT_TO_PROCEDURE = 1107; +exports.ER_WRONG_PARAMETERS_TO_PROCEDURE = 1108; +exports.ER_UNKNOWN_TABLE = 1109; +exports.ER_FIELD_SPECIFIED_TWICE = 1110; +exports.ER_INVALID_GROUP_FUNC_USE = 1111; +exports.ER_UNSUPPORTED_EXTENSION = 1112; +exports.ER_TABLE_MUST_HAVE_COLUMNS = 1113; +exports.ER_RECORD_FILE_FULL = 1114; +exports.ER_UNKNOWN_CHARACTER_SET = 1115; +exports.ER_TOO_MANY_TABLES = 1116; +exports.ER_TOO_MANY_FIELDS = 1117; +exports.ER_TOO_BIG_ROWSIZE = 1118; +exports.ER_STACK_OVERRUN = 1119; +exports.ER_WRONG_OUTER_JOIN = 1120; +exports.ER_NULL_COLUMN_IN_INDEX = 1121; +exports.ER_CANT_FIND_UDF = 1122; +exports.ER_CANT_INITIALIZE_UDF = 1123; +exports.ER_UDF_NO_PATHS = 1124; +exports.ER_UDF_EXISTS = 1125; +exports.ER_CANT_OPEN_LIBRARY = 1126; +exports.ER_CANT_FIND_DL_ENTRY = 1127; +exports.ER_FUNCTION_NOT_DEFINED = 1128; +exports.ER_HOST_IS_BLOCKED = 1129; +exports.ER_HOST_NOT_PRIVILEGED = 1130; +exports.ER_PASSWORD_ANONYMOUS_USER = 1131; +exports.ER_PASSWORD_NOT_ALLOWED = 1132; +exports.ER_PASSWORD_NO_MATCH = 1133; +exports.ER_UPDATE_INFO = 1134; +exports.ER_CANT_CREATE_THREAD = 1135; +exports.ER_WRONG_VALUE_COUNT_ON_ROW = 1136; +exports.ER_CANT_REOPEN_TABLE = 1137; +exports.ER_INVALID_USE_OF_NULL = 1138; +exports.ER_REGEXP_ERROR = 1139; +exports.ER_MIX_OF_GROUP_FUNC_AND_FIELDS = 1140; +exports.ER_NONEXISTING_GRANT = 1141; +exports.ER_TABLEACCESS_DENIED_ERROR = 1142; +exports.ER_COLUMNACCESS_DENIED_ERROR = 1143; +exports.ER_ILLEGAL_GRANT_FOR_TABLE = 1144; +exports.ER_GRANT_WRONG_HOST_OR_USER = 1145; +exports.ER_NO_SUCH_TABLE = 1146; +exports.ER_NONEXISTING_TABLE_GRANT = 1147; +exports.ER_NOT_ALLOWED_COMMAND = 1148; +exports.ER_SYNTAX_ERROR = 1149; +exports.ER_UNUSED1 = 1150; +exports.ER_UNUSED2 = 1151; +exports.ER_ABORTING_CONNECTION = 1152; +exports.ER_NET_PACKET_TOO_LARGE = 1153; +exports.ER_NET_READ_ERROR_FROM_PIPE = 1154; +exports.ER_NET_FCNTL_ERROR = 1155; +exports.ER_NET_PACKETS_OUT_OF_ORDER = 1156; +exports.ER_NET_UNCOMPRESS_ERROR = 1157; +exports.ER_NET_READ_ERROR = 1158; +exports.ER_NET_READ_INTERRUPTED = 1159; +exports.ER_NET_ERROR_ON_WRITE = 1160; +exports.ER_NET_WRITE_INTERRUPTED = 1161; +exports.ER_TOO_LONG_STRING = 1162; +exports.ER_TABLE_CANT_HANDLE_BLOB = 1163; +exports.ER_TABLE_CANT_HANDLE_AUTO_INCREMENT = 1164; +exports.ER_UNUSED3 = 1165; +exports.ER_WRONG_COLUMN_NAME = 1166; +exports.ER_WRONG_KEY_COLUMN = 1167; +exports.ER_WRONG_MRG_TABLE = 1168; +exports.ER_DUP_UNIQUE = 1169; +exports.ER_BLOB_KEY_WITHOUT_LENGTH = 1170; +exports.ER_PRIMARY_CANT_HAVE_NULL = 1171; +exports.ER_TOO_MANY_ROWS = 1172; +exports.ER_REQUIRES_PRIMARY_KEY = 1173; +exports.ER_NO_RAID_COMPILED = 1174; +exports.ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE = 1175; +exports.ER_KEY_DOES_NOT_EXITS = 1176; +exports.ER_CHECK_NO_SUCH_TABLE = 1177; +exports.ER_CHECK_NOT_IMPLEMENTED = 1178; +exports.ER_CANT_DO_THIS_DURING_AN_TRANSACTION = 1179; +exports.ER_ERROR_DURING_COMMIT = 1180; +exports.ER_ERROR_DURING_ROLLBACK = 1181; +exports.ER_ERROR_DURING_FLUSH_LOGS = 1182; +exports.ER_ERROR_DURING_CHECKPOINT = 1183; +exports.ER_NEW_ABORTING_CONNECTION = 1184; +exports.ER_DUMP_NOT_IMPLEMENTED = 1185; +exports.ER_FLUSH_MASTER_BINLOG_CLOSED = 1186; +exports.ER_INDEX_REBUILD = 1187; +exports.ER_SOURCE = 1188; +exports.ER_SOURCE_NET_READ = 1189; +exports.ER_SOURCE_NET_WRITE = 1190; +exports.ER_FT_MATCHING_KEY_NOT_FOUND = 1191; +exports.ER_LOCK_OR_ACTIVE_TRANSACTION = 1192; +exports.ER_UNKNOWN_SYSTEM_VARIABLE = 1193; +exports.ER_CRASHED_ON_USAGE = 1194; +exports.ER_CRASHED_ON_REPAIR = 1195; +exports.ER_WARNING_NOT_COMPLETE_ROLLBACK = 1196; +exports.ER_TRANS_CACHE_FULL = 1197; +exports.ER_SLAVE_MUST_STOP = 1198; +exports.ER_REPLICA_NOT_RUNNING = 1199; +exports.ER_BAD_REPLICA = 1200; +exports.ER_CONNECTION_METADATA = 1201; +exports.ER_REPLICA_THREAD = 1202; +exports.ER_TOO_MANY_USER_CONNECTIONS = 1203; +exports.ER_SET_CONSTANTS_ONLY = 1204; +exports.ER_LOCK_WAIT_TIMEOUT = 1205; +exports.ER_LOCK_TABLE_FULL = 1206; +exports.ER_READ_ONLY_TRANSACTION = 1207; +exports.ER_DROP_DB_WITH_READ_LOCK = 1208; +exports.ER_CREATE_DB_WITH_READ_LOCK = 1209; +exports.ER_WRONG_ARGUMENTS = 1210; +exports.ER_NO_PERMISSION_TO_CREATE_USER = 1211; +exports.ER_UNION_TABLES_IN_DIFFERENT_DIR = 1212; +exports.ER_LOCK_DEADLOCK = 1213; +exports.ER_TABLE_CANT_HANDLE_FT = 1214; +exports.ER_CANNOT_ADD_FOREIGN = 1215; +exports.ER_NO_REFERENCED_ROW = 1216; +exports.ER_ROW_IS_REFERENCED = 1217; +exports.ER_CONNECT_TO_SOURCE = 1218; +exports.ER_QUERY_ON_MASTER = 1219; +exports.ER_ERROR_WHEN_EXECUTING_COMMAND = 1220; +exports.ER_WRONG_USAGE = 1221; +exports.ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT = 1222; +exports.ER_CANT_UPDATE_WITH_READLOCK = 1223; +exports.ER_MIXING_NOT_ALLOWED = 1224; +exports.ER_DUP_ARGUMENT = 1225; +exports.ER_USER_LIMIT_REACHED = 1226; +exports.ER_SPECIFIC_ACCESS_DENIED_ERROR = 1227; +exports.ER_LOCAL_VARIABLE = 1228; +exports.ER_GLOBAL_VARIABLE = 1229; +exports.ER_NO_DEFAULT = 1230; +exports.ER_WRONG_VALUE_FOR_VAR = 1231; +exports.ER_WRONG_TYPE_FOR_VAR = 1232; +exports.ER_VAR_CANT_BE_READ = 1233; +exports.ER_CANT_USE_OPTION_HERE = 1234; +exports.ER_NOT_SUPPORTED_YET = 1235; +exports.ER_SOURCE_FATAL_ERROR_READING_BINLOG = 1236; +exports.ER_REPLICA_IGNORED_TABLE = 1237; +exports.ER_INCORRECT_GLOBAL_LOCAL_VAR = 1238; +exports.ER_WRONG_FK_DEF = 1239; +exports.ER_KEY_REF_DO_NOT_MATCH_TABLE_REF = 1240; +exports.ER_OPERAND_COLUMNS = 1241; +exports.ER_SUBQUERY_NO_1_ROW = 1242; +exports.ER_UNKNOWN_STMT_HANDLER = 1243; +exports.ER_CORRUPT_HELP_DB = 1244; +exports.ER_CYCLIC_REFERENCE = 1245; +exports.ER_AUTO_CONVERT = 1246; +exports.ER_ILLEGAL_REFERENCE = 1247; +exports.ER_DERIVED_MUST_HAVE_ALIAS = 1248; +exports.ER_SELECT_REDUCED = 1249; +exports.ER_TABLENAME_NOT_ALLOWED_HERE = 1250; +exports.ER_NOT_SUPPORTED_AUTH_MODE = 1251; +exports.ER_SPATIAL_CANT_HAVE_NULL = 1252; +exports.ER_COLLATION_CHARSET_MISMATCH = 1253; +exports.ER_SLAVE_WAS_RUNNING = 1254; +exports.ER_SLAVE_WAS_NOT_RUNNING = 1255; +exports.ER_TOO_BIG_FOR_UNCOMPRESS = 1256; +exports.ER_ZLIB_Z_MEM_ERROR = 1257; +exports.ER_ZLIB_Z_BUF_ERROR = 1258; +exports.ER_ZLIB_Z_DATA_ERROR = 1259; +exports.ER_CUT_VALUE_GROUP_CONCAT = 1260; +exports.ER_WARN_TOO_FEW_RECORDS = 1261; +exports.ER_WARN_TOO_MANY_RECORDS = 1262; +exports.ER_WARN_NULL_TO_NOTNULL = 1263; +exports.ER_WARN_DATA_OUT_OF_RANGE = 1264; +exports.WARN_DATA_TRUNCATED = 1265; +exports.ER_WARN_USING_OTHER_HANDLER = 1266; +exports.ER_CANT_AGGREGATE_2COLLATIONS = 1267; +exports.ER_DROP_USER = 1268; +exports.ER_REVOKE_GRANTS = 1269; +exports.ER_CANT_AGGREGATE_3COLLATIONS = 1270; +exports.ER_CANT_AGGREGATE_NCOLLATIONS = 1271; +exports.ER_VARIABLE_IS_NOT_STRUCT = 1272; +exports.ER_UNKNOWN_COLLATION = 1273; +exports.ER_REPLICA_IGNORED_SSL_PARAMS = 1274; +exports.ER_SERVER_IS_IN_SECURE_AUTH_MODE = 1275; +exports.ER_WARN_FIELD_RESOLVED = 1276; +exports.ER_BAD_REPLICA_UNTIL_COND = 1277; +exports.ER_MISSING_SKIP_REPLICA = 1278; +exports.ER_UNTIL_COND_IGNORED = 1279; +exports.ER_WRONG_NAME_FOR_INDEX = 1280; +exports.ER_WRONG_NAME_FOR_CATALOG = 1281; +exports.ER_WARN_QC_RESIZE = 1282; +exports.ER_BAD_FT_COLUMN = 1283; +exports.ER_UNKNOWN_KEY_CACHE = 1284; +exports.ER_WARN_HOSTNAME_WONT_WORK = 1285; +exports.ER_UNKNOWN_STORAGE_ENGINE = 1286; +exports.ER_WARN_DEPRECATED_SYNTAX = 1287; +exports.ER_NON_UPDATABLE_TABLE = 1288; +exports.ER_FEATURE_DISABLED = 1289; +exports.ER_OPTION_PREVENTS_STATEMENT = 1290; +exports.ER_DUPLICATED_VALUE_IN_TYPE = 1291; +exports.ER_TRUNCATED_WRONG_VALUE = 1292; +exports.ER_TOO_MUCH_AUTO_TIMESTAMP_COLS = 1293; +exports.ER_INVALID_ON_UPDATE = 1294; +exports.ER_UNSUPPORTED_PS = 1295; +exports.ER_GET_ERRMSG = 1296; +exports.ER_GET_TEMPORARY_ERRMSG = 1297; +exports.ER_UNKNOWN_TIME_ZONE = 1298; +exports.ER_WARN_INVALID_TIMESTAMP = 1299; +exports.ER_INVALID_CHARACTER_STRING = 1300; +exports.ER_WARN_ALLOWED_PACKET_OVERFLOWED = 1301; +exports.ER_CONFLICTING_DECLARATIONS = 1302; +exports.ER_SP_NO_RECURSIVE_CREATE = 1303; +exports.ER_SP_ALREADY_EXISTS = 1304; +exports.ER_SP_DOES_NOT_EXIST = 1305; +exports.ER_SP_DROP_FAILED = 1306; +exports.ER_SP_STORE_FAILED = 1307; +exports.ER_SP_LILABEL_MISMATCH = 1308; +exports.ER_SP_LABEL_REDEFINE = 1309; +exports.ER_SP_LABEL_MISMATCH = 1310; +exports.ER_SP_UNINIT_VAR = 1311; +exports.ER_SP_BADSELECT = 1312; +exports.ER_SP_BADRETURN = 1313; +exports.ER_SP_BADSTATEMENT = 1314; +exports.ER_UPDATE_LOG_DEPRECATED_IGNORED = 1315; +exports.ER_UPDATE_LOG_DEPRECATED_TRANSLATED = 1316; +exports.ER_QUERY_INTERRUPTED = 1317; +exports.ER_SP_WRONG_NO_OF_ARGS = 1318; +exports.ER_SP_COND_MISMATCH = 1319; +exports.ER_SP_NORETURN = 1320; +exports.ER_SP_NORETURNEND = 1321; +exports.ER_SP_BAD_CURSOR_QUERY = 1322; +exports.ER_SP_BAD_CURSOR_SELECT = 1323; +exports.ER_SP_CURSOR_MISMATCH = 1324; +exports.ER_SP_CURSOR_ALREADY_OPEN = 1325; +exports.ER_SP_CURSOR_NOT_OPEN = 1326; +exports.ER_SP_UNDECLARED_VAR = 1327; +exports.ER_SP_WRONG_NO_OF_FETCH_ARGS = 1328; +exports.ER_SP_FETCH_NO_DATA = 1329; +exports.ER_SP_DUP_PARAM = 1330; +exports.ER_SP_DUP_VAR = 1331; +exports.ER_SP_DUP_COND = 1332; +exports.ER_SP_DUP_CURS = 1333; +exports.ER_SP_CANT_ALTER = 1334; +exports.ER_SP_SUBSELECT_NYI = 1335; +exports.ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG = 1336; +exports.ER_SP_VARCOND_AFTER_CURSHNDLR = 1337; +exports.ER_SP_CURSOR_AFTER_HANDLER = 1338; +exports.ER_SP_CASE_NOT_FOUND = 1339; +exports.ER_FPARSER_TOO_BIG_FILE = 1340; +exports.ER_FPARSER_BAD_HEADER = 1341; +exports.ER_FPARSER_EOF_IN_COMMENT = 1342; +exports.ER_FPARSER_ERROR_IN_PARAMETER = 1343; +exports.ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER = 1344; +exports.ER_VIEW_NO_EXPLAIN = 1345; +exports.ER_FRM_UNKNOWN_TYPE = 1346; +exports.ER_WRONG_OBJECT = 1347; +exports.ER_NONUPDATEABLE_COLUMN = 1348; +exports.ER_VIEW_SELECT_DERIVED = 1349; +exports.ER_VIEW_SELECT_CLAUSE = 1350; +exports.ER_VIEW_SELECT_VARIABLE = 1351; +exports.ER_VIEW_SELECT_TMPTABLE = 1352; +exports.ER_VIEW_WRONG_LIST = 1353; +exports.ER_WARN_VIEW_MERGE = 1354; +exports.ER_WARN_VIEW_WITHOUT_KEY = 1355; +exports.ER_VIEW_INVALID = 1356; +exports.ER_SP_NO_DROP_SP = 1357; +exports.ER_SP_GOTO_IN_HNDLR = 1358; +exports.ER_TRG_ALREADY_EXISTS = 1359; +exports.ER_TRG_DOES_NOT_EXIST = 1360; +exports.ER_TRG_ON_VIEW_OR_TEMP_TABLE = 1361; +exports.ER_TRG_CANT_CHANGE_ROW = 1362; +exports.ER_TRG_NO_SUCH_ROW_IN_TRG = 1363; +exports.ER_NO_DEFAULT_FOR_FIELD = 1364; +exports.ER_DIVISION_BY_ZERO = 1365; +exports.ER_TRUNCATED_WRONG_VALUE_FOR_FIELD = 1366; +exports.ER_ILLEGAL_VALUE_FOR_TYPE = 1367; +exports.ER_VIEW_NONUPD_CHECK = 1368; +exports.ER_VIEW_CHECK_FAILED = 1369; +exports.ER_PROCACCESS_DENIED_ERROR = 1370; +exports.ER_RELAY_LOG_FAIL = 1371; +exports.ER_PASSWD_LENGTH = 1372; +exports.ER_UNKNOWN_TARGET_BINLOG = 1373; +exports.ER_IO_ERR_LOG_INDEX_READ = 1374; +exports.ER_BINLOG_PURGE_PROHIBITED = 1375; +exports.ER_FSEEK_FAIL = 1376; +exports.ER_BINLOG_PURGE_FATAL_ERR = 1377; +exports.ER_LOG_IN_USE = 1378; +exports.ER_LOG_PURGE_UNKNOWN_ERR = 1379; +exports.ER_RELAY_LOG_INIT = 1380; +exports.ER_NO_BINARY_LOGGING = 1381; +exports.ER_RESERVED_SYNTAX = 1382; +exports.ER_WSAS_FAILED = 1383; +exports.ER_DIFF_GROUPS_PROC = 1384; +exports.ER_NO_GROUP_FOR_PROC = 1385; +exports.ER_ORDER_WITH_PROC = 1386; +exports.ER_LOGGING_PROHIBIT_CHANGING_OF = 1387; +exports.ER_NO_FILE_MAPPING = 1388; +exports.ER_WRONG_MAGIC = 1389; +exports.ER_PS_MANY_PARAM = 1390; +exports.ER_KEY_PART_0 = 1391; +exports.ER_VIEW_CHECKSUM = 1392; +exports.ER_VIEW_MULTIUPDATE = 1393; +exports.ER_VIEW_NO_INSERT_FIELD_LIST = 1394; +exports.ER_VIEW_DELETE_MERGE_VIEW = 1395; +exports.ER_CANNOT_USER = 1396; +exports.ER_XAER_NOTA = 1397; +exports.ER_XAER_INVAL = 1398; +exports.ER_XAER_RMFAIL = 1399; +exports.ER_XAER_OUTSIDE = 1400; +exports.ER_XAER_RMERR = 1401; +exports.ER_XA_RBROLLBACK = 1402; +exports.ER_NONEXISTING_PROC_GRANT = 1403; +exports.ER_PROC_AUTO_GRANT_FAIL = 1404; +exports.ER_PROC_AUTO_REVOKE_FAIL = 1405; +exports.ER_DATA_TOO_LONG = 1406; +exports.ER_SP_BAD_SQLSTATE = 1407; +exports.ER_STARTUP = 1408; +exports.ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR = 1409; +exports.ER_CANT_CREATE_USER_WITH_GRANT = 1410; +exports.ER_WRONG_VALUE_FOR_TYPE = 1411; +exports.ER_TABLE_DEF_CHANGED = 1412; +exports.ER_SP_DUP_HANDLER = 1413; +exports.ER_SP_NOT_VAR_ARG = 1414; +exports.ER_SP_NO_RETSET = 1415; +exports.ER_CANT_CREATE_GEOMETRY_OBJECT = 1416; +exports.ER_FAILED_ROUTINE_BREAK_BINLOG = 1417; +exports.ER_BINLOG_UNSAFE_ROUTINE = 1418; +exports.ER_BINLOG_CREATE_ROUTINE_NEED_SUPER = 1419; +exports.ER_EXEC_STMT_WITH_OPEN_CURSOR = 1420; +exports.ER_STMT_HAS_NO_OPEN_CURSOR = 1421; +exports.ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG = 1422; +exports.ER_NO_DEFAULT_FOR_VIEW_FIELD = 1423; +exports.ER_SP_NO_RECURSION = 1424; +exports.ER_TOO_BIG_SCALE = 1425; +exports.ER_TOO_BIG_PRECISION = 1426; +exports.ER_M_BIGGER_THAN_D = 1427; +exports.ER_WRONG_LOCK_OF_SYSTEM_TABLE = 1428; +exports.ER_CONNECT_TO_FOREIGN_DATA_SOURCE = 1429; +exports.ER_QUERY_ON_FOREIGN_DATA_SOURCE = 1430; +exports.ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST = 1431; +exports.ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE = 1432; +exports.ER_FOREIGN_DATA_STRING_INVALID = 1433; +exports.ER_CANT_CREATE_FEDERATED_TABLE = 1434; +exports.ER_TRG_IN_WRONG_SCHEMA = 1435; +exports.ER_STACK_OVERRUN_NEED_MORE = 1436; +exports.ER_TOO_LONG_BODY = 1437; +exports.ER_WARN_CANT_DROP_DEFAULT_KEYCACHE = 1438; +exports.ER_TOO_BIG_DISPLAYWIDTH = 1439; +exports.ER_XAER_DUPID = 1440; +exports.ER_DATETIME_FUNCTION_OVERFLOW = 1441; +exports.ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG = 1442; +exports.ER_VIEW_PREVENT_UPDATE = 1443; +exports.ER_PS_NO_RECURSION = 1444; +exports.ER_SP_CANT_SET_AUTOCOMMIT = 1445; +exports.ER_MALFORMED_DEFINER = 1446; +exports.ER_VIEW_FRM_NO_USER = 1447; +exports.ER_VIEW_OTHER_USER = 1448; +exports.ER_NO_SUCH_USER = 1449; +exports.ER_FORBID_SCHEMA_CHANGE = 1450; +exports.ER_ROW_IS_REFERENCED_2 = 1451; +exports.ER_NO_REFERENCED_ROW_2 = 1452; +exports.ER_SP_BAD_VAR_SHADOW = 1453; +exports.ER_TRG_NO_DEFINER = 1454; +exports.ER_OLD_FILE_FORMAT = 1455; +exports.ER_SP_RECURSION_LIMIT = 1456; +exports.ER_SP_PROC_TABLE_CORRUPT = 1457; +exports.ER_SP_WRONG_NAME = 1458; +exports.ER_TABLE_NEEDS_UPGRADE = 1459; +exports.ER_SP_NO_AGGREGATE = 1460; +exports.ER_MAX_PREPARED_STMT_COUNT_REACHED = 1461; +exports.ER_VIEW_RECURSIVE = 1462; +exports.ER_NON_GROUPING_FIELD_USED = 1463; +exports.ER_TABLE_CANT_HANDLE_SPKEYS = 1464; +exports.ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA = 1465; +exports.ER_REMOVED_SPACES = 1466; +exports.ER_AUTOINC_READ_FAILED = 1467; +exports.ER_USERNAME = 1468; +exports.ER_HOSTNAME = 1469; +exports.ER_WRONG_STRING_LENGTH = 1470; +exports.ER_NON_INSERTABLE_TABLE = 1471; +exports.ER_ADMIN_WRONG_MRG_TABLE = 1472; +exports.ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT = 1473; +exports.ER_NAME_BECOMES_EMPTY = 1474; +exports.ER_AMBIGUOUS_FIELD_TERM = 1475; +exports.ER_FOREIGN_SERVER_EXISTS = 1476; +exports.ER_FOREIGN_SERVER_DOESNT_EXIST = 1477; +exports.ER_ILLEGAL_HA_CREATE_OPTION = 1478; +exports.ER_PARTITION_REQUIRES_VALUES_ERROR = 1479; +exports.ER_PARTITION_WRONG_VALUES_ERROR = 1480; +exports.ER_PARTITION_MAXVALUE_ERROR = 1481; +exports.ER_PARTITION_SUBPARTITION_ERROR = 1482; +exports.ER_PARTITION_SUBPART_MIX_ERROR = 1483; +exports.ER_PARTITION_WRONG_NO_PART_ERROR = 1484; +exports.ER_PARTITION_WRONG_NO_SUBPART_ERROR = 1485; +exports.ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR = 1486; +exports.ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR = 1487; +exports.ER_FIELD_NOT_FOUND_PART_ERROR = 1488; +exports.ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR = 1489; +exports.ER_INCONSISTENT_PARTITION_INFO_ERROR = 1490; +exports.ER_PARTITION_FUNC_NOT_ALLOWED_ERROR = 1491; +exports.ER_PARTITIONS_MUST_BE_DEFINED_ERROR = 1492; +exports.ER_RANGE_NOT_INCREASING_ERROR = 1493; +exports.ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR = 1494; +exports.ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR = 1495; +exports.ER_PARTITION_ENTRY_ERROR = 1496; +exports.ER_MIX_HANDLER_ERROR = 1497; +exports.ER_PARTITION_NOT_DEFINED_ERROR = 1498; +exports.ER_TOO_MANY_PARTITIONS_ERROR = 1499; +exports.ER_SUBPARTITION_ERROR = 1500; +exports.ER_CANT_CREATE_HANDLER_FILE = 1501; +exports.ER_BLOB_FIELD_IN_PART_FUNC_ERROR = 1502; +exports.ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF = 1503; +exports.ER_NO_PARTS_ERROR = 1504; +exports.ER_PARTITION_MGMT_ON_NONPARTITIONED = 1505; +exports.ER_FOREIGN_KEY_ON_PARTITIONED = 1506; +exports.ER_DROP_PARTITION_NON_EXISTENT = 1507; +exports.ER_DROP_LAST_PARTITION = 1508; +exports.ER_COALESCE_ONLY_ON_HASH_PARTITION = 1509; +exports.ER_REORG_HASH_ONLY_ON_SAME_NO = 1510; +exports.ER_REORG_NO_PARAM_ERROR = 1511; +exports.ER_ONLY_ON_RANGE_LIST_PARTITION = 1512; +exports.ER_ADD_PARTITION_SUBPART_ERROR = 1513; +exports.ER_ADD_PARTITION_NO_NEW_PARTITION = 1514; +exports.ER_COALESCE_PARTITION_NO_PARTITION = 1515; +exports.ER_REORG_PARTITION_NOT_EXIST = 1516; +exports.ER_SAME_NAME_PARTITION = 1517; +exports.ER_NO_BINLOG_ERROR = 1518; +exports.ER_CONSECUTIVE_REORG_PARTITIONS = 1519; +exports.ER_REORG_OUTSIDE_RANGE = 1520; +exports.ER_PARTITION_FUNCTION_FAILURE = 1521; +exports.ER_PART_STATE_ERROR = 1522; +exports.ER_LIMITED_PART_RANGE = 1523; +exports.ER_PLUGIN_IS_NOT_LOADED = 1524; +exports.ER_WRONG_VALUE = 1525; +exports.ER_NO_PARTITION_FOR_GIVEN_VALUE = 1526; +exports.ER_FILEGROUP_OPTION_ONLY_ONCE = 1527; +exports.ER_CREATE_FILEGROUP_FAILED = 1528; +exports.ER_DROP_FILEGROUP_FAILED = 1529; +exports.ER_TABLESPACE_AUTO_EXTEND_ERROR = 1530; +exports.ER_WRONG_SIZE_NUMBER = 1531; +exports.ER_SIZE_OVERFLOW_ERROR = 1532; +exports.ER_ALTER_FILEGROUP_FAILED = 1533; +exports.ER_BINLOG_ROW_LOGGING_FAILED = 1534; +exports.ER_BINLOG_ROW_WRONG_TABLE_DEF = 1535; +exports.ER_BINLOG_ROW_RBR_TO_SBR = 1536; +exports.ER_EVENT_ALREADY_EXISTS = 1537; +exports.ER_EVENT_STORE_FAILED = 1538; +exports.ER_EVENT_DOES_NOT_EXIST = 1539; +exports.ER_EVENT_CANT_ALTER = 1540; +exports.ER_EVENT_DROP_FAILED = 1541; +exports.ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG = 1542; +exports.ER_EVENT_ENDS_BEFORE_STARTS = 1543; +exports.ER_EVENT_EXEC_TIME_IN_THE_PAST = 1544; +exports.ER_EVENT_OPEN_TABLE_FAILED = 1545; +exports.ER_EVENT_NEITHER_M_EXPR_NOR_M_AT = 1546; +exports.ER_COL_COUNT_DOESNT_MATCH_CORRUPTED = 1547; +exports.ER_CANNOT_LOAD_FROM_TABLE = 1548; +exports.ER_EVENT_CANNOT_DELETE = 1549; +exports.ER_EVENT_COMPILE_ERROR = 1550; +exports.ER_EVENT_SAME_NAME = 1551; +exports.ER_EVENT_DATA_TOO_LONG = 1552; +exports.ER_DROP_INDEX_FK = 1553; +exports.ER_WARN_DEPRECATED_SYNTAX_WITH_VER = 1554; +exports.ER_CANT_WRITE_LOCK_LOG_TABLE = 1555; +exports.ER_CANT_LOCK_LOG_TABLE = 1556; +exports.ER_FOREIGN_DUPLICATE_KEY = 1557; +exports.ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE = 1558; +exports.ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR = 1559; +exports.ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT = 1560; +exports.ER_NDB_CANT_SWITCH_BINLOG_FORMAT = 1561; +exports.ER_PARTITION_NO_TEMPORARY = 1562; +exports.ER_PARTITION_CONST_DOMAIN_ERROR = 1563; +exports.ER_PARTITION_FUNCTION_IS_NOT_ALLOWED = 1564; +exports.ER_DDL_LOG_ERROR = 1565; +exports.ER_NULL_IN_VALUES_LESS_THAN = 1566; +exports.ER_WRONG_PARTITION_NAME = 1567; +exports.ER_CANT_CHANGE_TX_CHARACTERISTICS = 1568; +exports.ER_DUP_ENTRY_AUTOINCREMENT_CASE = 1569; +exports.ER_EVENT_MODIFY_QUEUE_ERROR = 1570; +exports.ER_EVENT_SET_VAR_ERROR = 1571; +exports.ER_PARTITION_MERGE_ERROR = 1572; +exports.ER_CANT_ACTIVATE_LOG = 1573; +exports.ER_RBR_NOT_AVAILABLE = 1574; +exports.ER_BASE64_DECODE_ERROR = 1575; +exports.ER_EVENT_RECURSION_FORBIDDEN = 1576; +exports.ER_EVENTS_DB_ERROR = 1577; +exports.ER_ONLY_INTEGERS_ALLOWED = 1578; +exports.ER_UNSUPORTED_LOG_ENGINE = 1579; +exports.ER_BAD_LOG_STATEMENT = 1580; +exports.ER_CANT_RENAME_LOG_TABLE = 1581; +exports.ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT = 1582; +exports.ER_WRONG_PARAMETERS_TO_NATIVE_FCT = 1583; +exports.ER_WRONG_PARAMETERS_TO_STORED_FCT = 1584; +exports.ER_NATIVE_FCT_NAME_COLLISION = 1585; +exports.ER_DUP_ENTRY_WITH_KEY_NAME = 1586; +exports.ER_BINLOG_PURGE_EMFILE = 1587; +exports.ER_EVENT_CANNOT_CREATE_IN_THE_PAST = 1588; +exports.ER_EVENT_CANNOT_ALTER_IN_THE_PAST = 1589; +exports.ER_SLAVE_INCIDENT = 1590; +exports.ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT = 1591; +exports.ER_BINLOG_UNSAFE_STATEMENT = 1592; +exports.ER_BINLOG_FATAL_ERROR = 1593; +exports.ER_SLAVE_RELAY_LOG_READ_FAILURE = 1594; +exports.ER_SLAVE_RELAY_LOG_WRITE_FAILURE = 1595; +exports.ER_SLAVE_CREATE_EVENT_FAILURE = 1596; +exports.ER_SLAVE_MASTER_COM_FAILURE = 1597; +exports.ER_BINLOG_LOGGING_IMPOSSIBLE = 1598; +exports.ER_VIEW_NO_CREATION_CTX = 1599; +exports.ER_VIEW_INVALID_CREATION_CTX = 1600; +exports.ER_SR_INVALID_CREATION_CTX = 1601; +exports.ER_TRG_CORRUPTED_FILE = 1602; +exports.ER_TRG_NO_CREATION_CTX = 1603; +exports.ER_TRG_INVALID_CREATION_CTX = 1604; +exports.ER_EVENT_INVALID_CREATION_CTX = 1605; +exports.ER_TRG_CANT_OPEN_TABLE = 1606; +exports.ER_CANT_CREATE_SROUTINE = 1607; +exports.ER_NEVER_USED = 1608; +exports.ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT = 1609; +exports.ER_REPLICA_CORRUPT_EVENT = 1610; +exports.ER_LOAD_DATA_INVALID_COLUMN = 1611; +exports.ER_LOG_PURGE_NO_FILE = 1612; +exports.ER_XA_RBTIMEOUT = 1613; +exports.ER_XA_RBDEADLOCK = 1614; +exports.ER_NEED_REPREPARE = 1615; +exports.ER_DELAYED_NOT_SUPPORTED = 1616; +exports.WARN_NO_CONNECTION_METADATA = 1617; +exports.WARN_OPTION_IGNORED = 1618; +exports.ER_PLUGIN_DELETE_BUILTIN = 1619; +exports.WARN_PLUGIN_BUSY = 1620; +exports.ER_VARIABLE_IS_READONLY = 1621; +exports.ER_WARN_ENGINE_TRANSACTION_ROLLBACK = 1622; +exports.ER_SLAVE_HEARTBEAT_FAILURE = 1623; +exports.ER_REPLICA_HEARTBEAT_VALUE_OUT_OF_RANGE = 1624; +exports.ER_NDB_REPLICATION_SCHEMA_ERROR = 1625; +exports.ER_CONFLICT_FN_PARSE_ERROR = 1626; +exports.ER_EXCEPTIONS_WRITE_ERROR = 1627; +exports.ER_TOO_LONG_TABLE_COMMENT = 1628; +exports.ER_TOO_LONG_FIELD_COMMENT = 1629; +exports.ER_FUNC_INEXISTENT_NAME_COLLISION = 1630; +exports.ER_DATABASE_NAME = 1631; +exports.ER_TABLE_NAME = 1632; +exports.ER_PARTITION_NAME = 1633; +exports.ER_SUBPARTITION_NAME = 1634; +exports.ER_TEMPORARY_NAME = 1635; +exports.ER_RENAMED_NAME = 1636; +exports.ER_TOO_MANY_CONCURRENT_TRXS = 1637; +exports.WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED = 1638; +exports.ER_DEBUG_SYNC_TIMEOUT = 1639; +exports.ER_DEBUG_SYNC_HIT_LIMIT = 1640; +exports.ER_DUP_SIGNAL_SET = 1641; +exports.ER_SIGNAL_WARN = 1642; +exports.ER_SIGNAL_NOT_FOUND = 1643; +exports.ER_SIGNAL_EXCEPTION = 1644; +exports.ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER = 1645; +exports.ER_SIGNAL_BAD_CONDITION_TYPE = 1646; +exports.WARN_COND_ITEM_TRUNCATED = 1647; +exports.ER_COND_ITEM_TOO_LONG = 1648; +exports.ER_UNKNOWN_LOCALE = 1649; +exports.ER_REPLICA_IGNORE_SERVER_IDS = 1650; +exports.ER_QUERY_CACHE_DISABLED = 1651; +exports.ER_SAME_NAME_PARTITION_FIELD = 1652; +exports.ER_PARTITION_COLUMN_LIST_ERROR = 1653; +exports.ER_WRONG_TYPE_COLUMN_VALUE_ERROR = 1654; +exports.ER_TOO_MANY_PARTITION_FUNC_FIELDS_ERROR = 1655; +exports.ER_MAXVALUE_IN_VALUES_IN = 1656; +exports.ER_TOO_MANY_VALUES_ERROR = 1657; +exports.ER_ROW_SINGLE_PARTITION_FIELD_ERROR = 1658; +exports.ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD = 1659; +exports.ER_PARTITION_FIELDS_TOO_LONG = 1660; +exports.ER_BINLOG_ROW_ENGINE_AND_STMT_ENGINE = 1661; +exports.ER_BINLOG_ROW_MODE_AND_STMT_ENGINE = 1662; +exports.ER_BINLOG_UNSAFE_AND_STMT_ENGINE = 1663; +exports.ER_BINLOG_ROW_INJECTION_AND_STMT_ENGINE = 1664; +exports.ER_BINLOG_STMT_MODE_AND_ROW_ENGINE = 1665; +exports.ER_BINLOG_ROW_INJECTION_AND_STMT_MODE = 1666; +exports.ER_BINLOG_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE = 1667; +exports.ER_BINLOG_UNSAFE_LIMIT = 1668; +exports.ER_UNUSED4 = 1669; +exports.ER_BINLOG_UNSAFE_SYSTEM_TABLE = 1670; +exports.ER_BINLOG_UNSAFE_AUTOINC_COLUMNS = 1671; +exports.ER_BINLOG_UNSAFE_UDF = 1672; +exports.ER_BINLOG_UNSAFE_SYSTEM_VARIABLE = 1673; +exports.ER_BINLOG_UNSAFE_SYSTEM_FUNCTION = 1674; +exports.ER_BINLOG_UNSAFE_NONTRANS_AFTER_TRANS = 1675; +exports.ER_MESSAGE_AND_STATEMENT = 1676; +exports.ER_SLAVE_CONVERSION_FAILED = 1677; +exports.ER_REPLICA_CANT_CREATE_CONVERSION = 1678; +exports.ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT = 1679; +exports.ER_PATH_LENGTH = 1680; +exports.ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT = 1681; +exports.ER_WRONG_NATIVE_TABLE_STRUCTURE = 1682; +exports.ER_WRONG_PERFSCHEMA_USAGE = 1683; +exports.ER_WARN_I_S_SKIPPED_TABLE = 1684; +exports.ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_DIRECT = 1685; +exports.ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_DIRECT = 1686; +exports.ER_SPATIAL_MUST_HAVE_GEOM_COL = 1687; +exports.ER_TOO_LONG_INDEX_COMMENT = 1688; +exports.ER_LOCK_ABORTED = 1689; +exports.ER_DATA_OUT_OF_RANGE = 1690; +exports.ER_WRONG_SPVAR_TYPE_IN_LIMIT = 1691; +exports.ER_BINLOG_UNSAFE_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE = 1692; +exports.ER_BINLOG_UNSAFE_MIXED_STATEMENT = 1693; +exports.ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SQL_LOG_BIN = 1694; +exports.ER_STORED_FUNCTION_PREVENTS_SWITCH_SQL_LOG_BIN = 1695; +exports.ER_FAILED_READ_FROM_PAR_FILE = 1696; +exports.ER_VALUES_IS_NOT_INT_TYPE_ERROR = 1697; +exports.ER_ACCESS_DENIED_NO_PASSWORD_ERROR = 1698; +exports.ER_SET_PASSWORD_AUTH_PLUGIN = 1699; +exports.ER_GRANT_PLUGIN_USER_EXISTS = 1700; +exports.ER_TRUNCATE_ILLEGAL_FK = 1701; +exports.ER_PLUGIN_IS_PERMANENT = 1702; +exports.ER_REPLICA_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN = 1703; +exports.ER_REPLICA_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX = 1704; +exports.ER_STMT_CACHE_FULL = 1705; +exports.ER_MULTI_UPDATE_KEY_CONFLICT = 1706; +exports.ER_TABLE_NEEDS_REBUILD = 1707; +exports.WARN_OPTION_BELOW_LIMIT = 1708; +exports.ER_INDEX_COLUMN_TOO_LONG = 1709; +exports.ER_ERROR_IN_TRIGGER_BODY = 1710; +exports.ER_ERROR_IN_UNKNOWN_TRIGGER_BODY = 1711; +exports.ER_INDEX_CORRUPT = 1712; +exports.ER_UNDO_RECORD_TOO_BIG = 1713; +exports.ER_BINLOG_UNSAFE_INSERT_IGNORE_SELECT = 1714; +exports.ER_BINLOG_UNSAFE_INSERT_SELECT_UPDATE = 1715; +exports.ER_BINLOG_UNSAFE_REPLACE_SELECT = 1716; +exports.ER_BINLOG_UNSAFE_CREATE_IGNORE_SELECT = 1717; +exports.ER_BINLOG_UNSAFE_CREATE_REPLACE_SELECT = 1718; +exports.ER_BINLOG_UNSAFE_UPDATE_IGNORE = 1719; +exports.ER_PLUGIN_NO_UNINSTALL = 1720; +exports.ER_PLUGIN_NO_INSTALL = 1721; +exports.ER_BINLOG_UNSAFE_WRITE_AUTOINC_SELECT = 1722; +exports.ER_BINLOG_UNSAFE_CREATE_SELECT_AUTOINC = 1723; +exports.ER_BINLOG_UNSAFE_INSERT_TWO_KEYS = 1724; +exports.ER_TABLE_IN_FK_CHECK = 1725; +exports.ER_UNSUPPORTED_ENGINE = 1726; +exports.ER_BINLOG_UNSAFE_AUTOINC_NOT_FIRST = 1727; +exports.ER_CANNOT_LOAD_FROM_TABLE_V2 = 1728; +exports.ER_SOURCE_DELAY_VALUE_OUT_OF_RANGE = 1729; +exports.ER_ONLY_FD_AND_RBR_EVENTS_ALLOWED_IN_BINLOG_STATEMENT = 1730; +exports.ER_PARTITION_EXCHANGE_DIFFERENT_OPTION = 1731; +exports.ER_PARTITION_EXCHANGE_PART_TABLE = 1732; +exports.ER_PARTITION_EXCHANGE_TEMP_TABLE = 1733; +exports.ER_PARTITION_INSTEAD_OF_SUBPARTITION = 1734; +exports.ER_UNKNOWN_PARTITION = 1735; +exports.ER_TABLES_DIFFERENT_METADATA = 1736; +exports.ER_ROW_DOES_NOT_MATCH_PARTITION = 1737; +exports.ER_BINLOG_CACHE_SIZE_GREATER_THAN_MAX = 1738; +exports.ER_WARN_INDEX_NOT_APPLICABLE = 1739; +exports.ER_PARTITION_EXCHANGE_FOREIGN_KEY = 1740; +exports.ER_NO_SUCH_KEY_VALUE = 1741; +exports.ER_RPL_INFO_DATA_TOO_LONG = 1742; +exports.ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE = 1743; +exports.ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE = 1744; +exports.ER_BINLOG_STMT_CACHE_SIZE_GREATER_THAN_MAX = 1745; +exports.ER_CANT_UPDATE_TABLE_IN_CREATE_TABLE_SELECT = 1746; +exports.ER_PARTITION_CLAUSE_ON_NONPARTITIONED = 1747; +exports.ER_ROW_DOES_NOT_MATCH_GIVEN_PARTITION_SET = 1748; +exports.ER_NO_SUCH_PARTITION = 1749; +exports.ER_CHANGE_RPL_INFO_REPOSITORY_FAILURE = 1750; +exports.ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_CREATED_TEMP_TABLE = 1751; +exports.ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_DROPPED_TEMP_TABLE = 1752; +exports.ER_MTA_FEATURE_IS_NOT_SUPPORTED = 1753; +exports.ER_MTA_UPDATED_DBS_GREATER_MAX = 1754; +exports.ER_MTA_CANT_PARALLEL = 1755; +exports.ER_MTA_INCONSISTENT_DATA = 1756; +exports.ER_FULLTEXT_NOT_SUPPORTED_WITH_PARTITIONING = 1757; +exports.ER_DA_INVALID_CONDITION_NUMBER = 1758; +exports.ER_INSECURE_PLAIN_TEXT = 1759; +exports.ER_INSECURE_CHANGE_SOURCE = 1760; +exports.ER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO = 1761; +exports.ER_FOREIGN_DUPLICATE_KEY_WITHOUT_CHILD_INFO = 1762; +exports.ER_SQLTHREAD_WITH_SECURE_REPLICA = 1763; +exports.ER_TABLE_HAS_NO_FT = 1764; +exports.ER_VARIABLE_NOT_SETTABLE_IN_SF_OR_TRIGGER = 1765; +exports.ER_VARIABLE_NOT_SETTABLE_IN_TRANSACTION = 1766; +exports.ER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST = 1767; +exports.ER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION = 1768; +exports.ER_SET_STATEMENT_CANNOT_INVOKE_FUNCTION = 1769; +exports.ER_GTID_NEXT_CANT_BE_AUTOMATIC_IF_GTID_NEXT_LIST_IS_NON_NULL = 1770; +exports.ER_SKIPPING_LOGGED_TRANSACTION = 1771; +exports.ER_MALFORMED_GTID_SET_SPECIFICATION = 1772; +exports.ER_MALFORMED_GTID_SET_ENCODING = 1773; +exports.ER_MALFORMED_GTID_SPECIFICATION = 1774; +exports.ER_GNO_EXHAUSTED = 1775; +exports.ER_BAD_REPLICA_AUTO_POSITION = 1776; +exports.ER_AUTO_POSITION_REQUIRES_GTID_MODE_NOT_OFF = 1777; +exports.ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET = 1778; +exports.ER_GTID_MODE_ON_REQUIRES_ENFORCE_GTID_CONSISTENCY_ON = 1779; +exports.ER_GTID_MODE_REQUIRES_BINLOG = 1780; +exports.ER_CANT_SET_GTID_NEXT_TO_GTID_WHEN_GTID_MODE_IS_OFF = 1781; +exports.ER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON = 1782; +exports.ER_CANT_SET_GTID_NEXT_LIST_TO_NON_NULL_WHEN_GTID_MODE_IS_OFF = 1783; +exports.ER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF = 1784; +exports.ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE = 1785; +exports.ER_GTID_UNSAFE_CREATE_SELECT = 1786; +exports.ER_GTID_UNSAFE_CREATE_DROP_TEMP_TABLE_IN_TRANSACTION = 1787; +exports.ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME = 1788; +exports.ER_SOURCE_HAS_PURGED_REQUIRED_GTIDS = 1789; +exports.ER_CANT_SET_GTID_NEXT_WHEN_OWNING_GTID = 1790; +exports.ER_UNKNOWN_EXPLAIN_FORMAT = 1791; +exports.ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION = 1792; +exports.ER_TOO_LONG_TABLE_PARTITION_COMMENT = 1793; +exports.ER_REPLICA_CONFIGURATION = 1794; +exports.ER_INNODB_FT_LIMIT = 1795; +exports.ER_INNODB_NO_FT_TEMP_TABLE = 1796; +exports.ER_INNODB_FT_WRONG_DOCID_COLUMN = 1797; +exports.ER_INNODB_FT_WRONG_DOCID_INDEX = 1798; +exports.ER_INNODB_ONLINE_LOG_TOO_BIG = 1799; +exports.ER_UNKNOWN_ALTER_ALGORITHM = 1800; +exports.ER_UNKNOWN_ALTER_LOCK = 1801; +exports.ER_MTA_CHANGE_SOURCE_CANT_RUN_WITH_GAPS = 1802; +exports.ER_MTA_RECOVERY_FAILURE = 1803; +exports.ER_MTA_RESET_WORKERS = 1804; +exports.ER_COL_COUNT_DOESNT_MATCH_CORRUPTED_V2 = 1805; +exports.ER_REPLICA_SILENT_RETRY_TRANSACTION = 1806; +exports.ER_DISCARD_FK_CHECKS_RUNNING = 1807; +exports.ER_TABLE_SCHEMA_MISMATCH = 1808; +exports.ER_TABLE_IN_SYSTEM_TABLESPACE = 1809; +exports.ER_IO_READ_ERROR = 1810; +exports.ER_IO_WRITE_ERROR = 1811; +exports.ER_TABLESPACE_MISSING = 1812; +exports.ER_TABLESPACE_EXISTS = 1813; +exports.ER_TABLESPACE_DISCARDED = 1814; +exports.ER_INTERNAL_ERROR = 1815; +exports.ER_INNODB_IMPORT_ERROR = 1816; +exports.ER_INNODB_INDEX_CORRUPT = 1817; +exports.ER_INVALID_YEAR_COLUMN_LENGTH = 1818; +exports.ER_NOT_VALID_PASSWORD = 1819; +exports.ER_MUST_CHANGE_PASSWORD = 1820; +exports.ER_FK_NO_INDEX_CHILD = 1821; +exports.ER_FK_NO_INDEX_PARENT = 1822; +exports.ER_FK_FAIL_ADD_SYSTEM = 1823; +exports.ER_FK_CANNOT_OPEN_PARENT = 1824; +exports.ER_FK_INCORRECT_OPTION = 1825; +exports.ER_FK_DUP_NAME = 1826; +exports.ER_PASSWORD_FORMAT = 1827; +exports.ER_FK_COLUMN_CANNOT_DROP = 1828; +exports.ER_FK_COLUMN_CANNOT_DROP_CHILD = 1829; +exports.ER_FK_COLUMN_NOT_NULL = 1830; +exports.ER_DUP_INDEX = 1831; +exports.ER_FK_COLUMN_CANNOT_CHANGE = 1832; +exports.ER_FK_COLUMN_CANNOT_CHANGE_CHILD = 1833; +exports.ER_UNUSED5 = 1834; +exports.ER_MALFORMED_PACKET = 1835; +exports.ER_READ_ONLY_MODE = 1836; +exports.ER_GTID_NEXT_TYPE_UNDEFINED_GTID = 1837; +exports.ER_VARIABLE_NOT_SETTABLE_IN_SP = 1838; +exports.ER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF = 1839; +exports.ER_CANT_SET_GTID_PURGED_WHEN_GTID_EXECUTED_IS_NOT_EMPTY = 1840; +exports.ER_CANT_SET_GTID_PURGED_WHEN_OWNED_GTIDS_IS_NOT_EMPTY = 1841; +exports.ER_GTID_PURGED_WAS_CHANGED = 1842; +exports.ER_GTID_EXECUTED_WAS_CHANGED = 1843; +exports.ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES = 1844; +exports.ER_ALTER_OPERATION_NOT_SUPPORTED = 1845; +exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON = 1846; +exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COPY = 1847; +exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_PARTITION = 1848; +exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_RENAME = 1849; +exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE = 1850; +exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_CHECK = 1851; +exports.ER_UNUSED6 = 1852; +exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOPK = 1853; +exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_AUTOINC = 1854; +exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_HIDDEN_FTS = 1855; +exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_CHANGE_FTS = 1856; +exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FTS = 1857; +exports.ER_SQL_REPLICA_SKIP_COUNTER_NOT_SETTABLE_IN_GTID_MODE = 1858; +exports.ER_DUP_UNKNOWN_IN_INDEX = 1859; +exports.ER_IDENT_CAUSES_TOO_LONG_PATH = 1860; +exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOT_NULL = 1861; +exports.ER_MUST_CHANGE_PASSWORD_LOGIN = 1862; +exports.ER_ROW_IN_WRONG_PARTITION = 1863; +exports.ER_MTA_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX = 1864; +exports.ER_INNODB_NO_FT_USES_PARSER = 1865; +exports.ER_BINLOG_LOGICAL_CORRUPTION = 1866; +exports.ER_WARN_PURGE_LOG_IN_USE = 1867; +exports.ER_WARN_PURGE_LOG_IS_ACTIVE = 1868; +exports.ER_AUTO_INCREMENT_CONFLICT = 1869; +exports.WARN_ON_BLOCKHOLE_IN_RBR = 1870; +exports.ER_REPLICA_CM_INIT_REPOSITORY = 1871; +exports.ER_REPLICA_AM_INIT_REPOSITORY = 1872; +exports.ER_ACCESS_DENIED_CHANGE_USER_ERROR = 1873; +exports.ER_INNODB_READ_ONLY = 1874; +exports.ER_STOP_REPLICA_SQL_THREAD_TIMEOUT = 1875; +exports.ER_STOP_REPLICA_IO_THREAD_TIMEOUT = 1876; +exports.ER_TABLE_CORRUPT = 1877; +exports.ER_TEMP_FILE_WRITE_FAILURE = 1878; +exports.ER_INNODB_FT_AUX_NOT_HEX_ID = 1879; +exports.ER_OLD_TEMPORALS_UPGRADED = 1880; +exports.ER_INNODB_FORCED_RECOVERY = 1881; +exports.ER_AES_INVALID_IV = 1882; +exports.ER_PLUGIN_CANNOT_BE_UNINSTALLED = 1883; +exports.ER_GTID_UNSAFE_BINLOG_SPLITTABLE_STATEMENT_AND_ASSIGNED_GTID = 1884; +exports.ER_REPLICA_HAS_MORE_GTIDS_THAN_SOURCE = 1885; +exports.ER_MISSING_KEY = 1886; +exports.WARN_NAMED_PIPE_ACCESS_EVERYONE = 1887; +exports.ER_FILE_CORRUPT = 3000; +exports.ER_ERROR_ON_SOURCE = 3001; +exports.ER_INCONSISTENT_ERROR = 3002; +exports.ER_STORAGE_ENGINE_NOT_LOADED = 3003; +exports.ER_GET_STACKED_DA_WITHOUT_ACTIVE_HANDLER = 3004; +exports.ER_WARN_LEGACY_SYNTAX_CONVERTED = 3005; +exports.ER_BINLOG_UNSAFE_FULLTEXT_PLUGIN = 3006; +exports.ER_CANNOT_DISCARD_TEMPORARY_TABLE = 3007; +exports.ER_FK_DEPTH_EXCEEDED = 3008; +exports.ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE_V2 = 3009; +exports.ER_WARN_TRIGGER_DOESNT_HAVE_CREATED = 3010; +exports.ER_REFERENCED_TRG_DOES_NOT_EXIST = 3011; +exports.ER_EXPLAIN_NOT_SUPPORTED = 3012; +exports.ER_INVALID_FIELD_SIZE = 3013; +exports.ER_MISSING_HA_CREATE_OPTION = 3014; +exports.ER_ENGINE_OUT_OF_MEMORY = 3015; +exports.ER_PASSWORD_EXPIRE_ANONYMOUS_USER = 3016; +exports.ER_REPLICA_SQL_THREAD_MUST_STOP = 3017; +exports.ER_NO_FT_MATERIALIZED_SUBQUERY = 3018; +exports.ER_INNODB_UNDO_LOG_FULL = 3019; +exports.ER_INVALID_ARGUMENT_FOR_LOGARITHM = 3020; +exports.ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP = 3021; +exports.ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO = 3022; +exports.ER_WARN_ONLY_SOURCE_LOG_FILE_NO_POS = 3023; +exports.ER_QUERY_TIMEOUT = 3024; +exports.ER_NON_RO_SELECT_DISABLE_TIMER = 3025; +exports.ER_DUP_LIST_ENTRY = 3026; +exports.ER_SQL_MODE_NO_EFFECT = 3027; +exports.ER_AGGREGATE_ORDER_FOR_UNION = 3028; +exports.ER_AGGREGATE_ORDER_NON_AGG_QUERY = 3029; +exports.ER_REPLICA_WORKER_STOPPED_PREVIOUS_THD_ERROR = 3030; +exports.ER_DONT_SUPPORT_REPLICA_PRESERVE_COMMIT_ORDER = 3031; +exports.ER_SERVER_OFFLINE_MODE = 3032; +exports.ER_GIS_DIFFERENT_SRIDS = 3033; +exports.ER_GIS_UNSUPPORTED_ARGUMENT = 3034; +exports.ER_GIS_UNKNOWN_ERROR = 3035; +exports.ER_GIS_UNKNOWN_EXCEPTION = 3036; +exports.ER_GIS_INVALID_DATA = 3037; +exports.ER_BOOST_GEOMETRY_EMPTY_INPUT_EXCEPTION = 3038; +exports.ER_BOOST_GEOMETRY_CENTROID_EXCEPTION = 3039; +exports.ER_BOOST_GEOMETRY_OVERLAY_INVALID_INPUT_EXCEPTION = 3040; +exports.ER_BOOST_GEOMETRY_TURN_INFO_EXCEPTION = 3041; +exports.ER_BOOST_GEOMETRY_SELF_INTERSECTION_POINT_EXCEPTION = 3042; +exports.ER_BOOST_GEOMETRY_UNKNOWN_EXCEPTION = 3043; +exports.ER_STD_BAD_ALLOC_ERROR = 3044; +exports.ER_STD_DOMAIN_ERROR = 3045; +exports.ER_STD_LENGTH_ERROR = 3046; +exports.ER_STD_INVALID_ARGUMENT = 3047; +exports.ER_STD_OUT_OF_RANGE_ERROR = 3048; +exports.ER_STD_OVERFLOW_ERROR = 3049; +exports.ER_STD_RANGE_ERROR = 3050; +exports.ER_STD_UNDERFLOW_ERROR = 3051; +exports.ER_STD_LOGIC_ERROR = 3052; +exports.ER_STD_RUNTIME_ERROR = 3053; +exports.ER_STD_UNKNOWN_EXCEPTION = 3054; +exports.ER_GIS_DATA_WRONG_ENDIANESS = 3055; +exports.ER_CHANGE_SOURCE_PASSWORD_LENGTH = 3056; +exports.ER_USER_LOCK_WRONG_NAME = 3057; +exports.ER_USER_LOCK_DEADLOCK = 3058; +exports.ER_REPLACE_INACCESSIBLE_ROWS = 3059; +exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_GIS = 3060; +exports.ER_ILLEGAL_USER_VAR = 3061; +exports.ER_GTID_MODE_OFF = 3062; +exports.ER_UNSUPPORTED_BY_REPLICATION_THREAD = 3063; +exports.ER_INCORRECT_TYPE = 3064; +exports.ER_FIELD_IN_ORDER_NOT_SELECT = 3065; +exports.ER_AGGREGATE_IN_ORDER_NOT_SELECT = 3066; +exports.ER_INVALID_RPL_WILD_TABLE_FILTER_PATTERN = 3067; +exports.ER_NET_OK_PACKET_TOO_LARGE = 3068; +exports.ER_INVALID_JSON_DATA = 3069; +exports.ER_INVALID_GEOJSON_MISSING_MEMBER = 3070; +exports.ER_INVALID_GEOJSON_WRONG_TYPE = 3071; +exports.ER_INVALID_GEOJSON_UNSPECIFIED = 3072; +exports.ER_DIMENSION_UNSUPPORTED = 3073; +exports.ER_REPLICA_CHANNEL_DOES_NOT_EXIST = 3074; +exports.ER_SLAVE_MULTIPLE_CHANNELS_HOST_PORT = 3075; +exports.ER_REPLICA_CHANNEL_NAME_INVALID_OR_TOO_LONG = 3076; +exports.ER_REPLICA_NEW_CHANNEL_WRONG_REPOSITORY = 3077; +exports.ER_SLAVE_CHANNEL_DELETE = 3078; +exports.ER_REPLICA_MULTIPLE_CHANNELS_CMD = 3079; +exports.ER_REPLICA_MAX_CHANNELS_EXCEEDED = 3080; +exports.ER_REPLICA_CHANNEL_MUST_STOP = 3081; +exports.ER_REPLICA_CHANNEL_NOT_RUNNING = 3082; +exports.ER_REPLICA_CHANNEL_WAS_RUNNING = 3083; +exports.ER_REPLICA_CHANNEL_WAS_NOT_RUNNING = 3084; +exports.ER_REPLICA_CHANNEL_SQL_THREAD_MUST_STOP = 3085; +exports.ER_REPLICA_CHANNEL_SQL_SKIP_COUNTER = 3086; +exports.ER_WRONG_FIELD_WITH_GROUP_V2 = 3087; +exports.ER_MIX_OF_GROUP_FUNC_AND_FIELDS_V2 = 3088; +exports.ER_WARN_DEPRECATED_SYSVAR_UPDATE = 3089; +exports.ER_WARN_DEPRECATED_SQLMODE = 3090; +exports.ER_CANNOT_LOG_PARTIAL_DROP_DATABASE_WITH_GTID = 3091; +exports.ER_GROUP_REPLICATION_CONFIGURATION = 3092; +exports.ER_GROUP_REPLICATION_RUNNING = 3093; +exports.ER_GROUP_REPLICATION_APPLIER_INIT_ERROR = 3094; +exports.ER_GROUP_REPLICATION_STOP_APPLIER_THREAD_TIMEOUT = 3095; +exports.ER_GROUP_REPLICATION_COMMUNICATION_LAYER_SESSION_ERROR = 3096; +exports.ER_GROUP_REPLICATION_COMMUNICATION_LAYER_JOIN_ERROR = 3097; +exports.ER_BEFORE_DML_VALIDATION_ERROR = 3098; +exports.ER_PREVENTS_VARIABLE_WITHOUT_RBR = 3099; +exports.ER_RUN_HOOK_ERROR = 3100; +exports.ER_TRANSACTION_ROLLBACK_DURING_COMMIT = 3101; +exports.ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED = 3102; +exports.ER_UNSUPPORTED_ALTER_INPLACE_ON_VIRTUAL_COLUMN = 3103; +exports.ER_WRONG_FK_OPTION_FOR_GENERATED_COLUMN = 3104; +exports.ER_NON_DEFAULT_VALUE_FOR_GENERATED_COLUMN = 3105; +exports.ER_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN = 3106; +exports.ER_GENERATED_COLUMN_NON_PRIOR = 3107; +exports.ER_DEPENDENT_BY_GENERATED_COLUMN = 3108; +exports.ER_GENERATED_COLUMN_REF_AUTO_INC = 3109; +exports.ER_FEATURE_NOT_AVAILABLE = 3110; +exports.ER_CANT_SET_GTID_MODE = 3111; +exports.ER_CANT_USE_AUTO_POSITION_WITH_GTID_MODE_OFF = 3112; +exports.ER_CANT_REPLICATE_ANONYMOUS_WITH_AUTO_POSITION = 3113; +exports.ER_CANT_REPLICATE_ANONYMOUS_WITH_GTID_MODE_ON = 3114; +exports.ER_CANT_REPLICATE_GTID_WITH_GTID_MODE_OFF = 3115; +exports.ER_CANT_ENFORCE_GTID_CONSISTENCY_WITH_ONGOING_GTID_VIOLATING_TX = 3116; +exports.ER_ENFORCE_GTID_CONSISTENCY_WARN_WITH_ONGOING_GTID_VIOLATING_TX = 3117; +exports.ER_ACCOUNT_HAS_BEEN_LOCKED = 3118; +exports.ER_WRONG_TABLESPACE_NAME = 3119; +exports.ER_TABLESPACE_IS_NOT_EMPTY = 3120; +exports.ER_WRONG_FILE_NAME = 3121; +exports.ER_BOOST_GEOMETRY_INCONSISTENT_TURNS_EXCEPTION = 3122; +exports.ER_WARN_OPTIMIZER_HINT_SYNTAX_ERROR = 3123; +exports.ER_WARN_BAD_MAX_EXECUTION_TIME = 3124; +exports.ER_WARN_UNSUPPORTED_MAX_EXECUTION_TIME = 3125; +exports.ER_WARN_CONFLICTING_HINT = 3126; +exports.ER_WARN_UNKNOWN_QB_NAME = 3127; +exports.ER_UNRESOLVED_HINT_NAME = 3128; +exports.ER_WARN_ON_MODIFYING_GTID_EXECUTED_TABLE = 3129; +exports.ER_PLUGGABLE_PROTOCOL_COMMAND_NOT_SUPPORTED = 3130; +exports.ER_LOCKING_SERVICE_WRONG_NAME = 3131; +exports.ER_LOCKING_SERVICE_DEADLOCK = 3132; +exports.ER_LOCKING_SERVICE_TIMEOUT = 3133; +exports.ER_GIS_MAX_POINTS_IN_GEOMETRY_OVERFLOWED = 3134; +exports.ER_SQL_MODE_MERGED = 3135; +exports.ER_VTOKEN_PLUGIN_TOKEN_MISMATCH = 3136; +exports.ER_VTOKEN_PLUGIN_TOKEN_NOT_FOUND = 3137; +exports.ER_CANT_SET_VARIABLE_WHEN_OWNING_GTID = 3138; +exports.ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED = 3139; +exports.ER_INVALID_JSON_TEXT = 3140; +exports.ER_INVALID_JSON_TEXT_IN_PARAM = 3141; +exports.ER_INVALID_JSON_BINARY_DATA = 3142; +exports.ER_INVALID_JSON_PATH = 3143; +exports.ER_INVALID_JSON_CHARSET = 3144; +exports.ER_INVALID_JSON_CHARSET_IN_FUNCTION = 3145; +exports.ER_INVALID_TYPE_FOR_JSON = 3146; +exports.ER_INVALID_CAST_TO_JSON = 3147; +exports.ER_INVALID_JSON_PATH_CHARSET = 3148; +exports.ER_INVALID_JSON_PATH_WILDCARD = 3149; +exports.ER_JSON_VALUE_TOO_BIG = 3150; +exports.ER_JSON_KEY_TOO_BIG = 3151; +exports.ER_JSON_USED_AS_KEY = 3152; +exports.ER_JSON_VACUOUS_PATH = 3153; +exports.ER_JSON_BAD_ONE_OR_ALL_ARG = 3154; +exports.ER_NUMERIC_JSON_VALUE_OUT_OF_RANGE = 3155; +exports.ER_INVALID_JSON_VALUE_FOR_CAST = 3156; +exports.ER_JSON_DOCUMENT_TOO_DEEP = 3157; +exports.ER_JSON_DOCUMENT_NULL_KEY = 3158; +exports.ER_SECURE_TRANSPORT_REQUIRED = 3159; +exports.ER_NO_SECURE_TRANSPORTS_CONFIGURED = 3160; +exports.ER_DISABLED_STORAGE_ENGINE = 3161; +exports.ER_USER_DOES_NOT_EXIST = 3162; +exports.ER_USER_ALREADY_EXISTS = 3163; +exports.ER_AUDIT_API_ABORT = 3164; +exports.ER_INVALID_JSON_PATH_ARRAY_CELL = 3165; +exports.ER_BUFPOOL_RESIZE_INPROGRESS = 3166; +exports.ER_FEATURE_DISABLED_SEE_DOC = 3167; +exports.ER_SERVER_ISNT_AVAILABLE = 3168; +exports.ER_SESSION_WAS_KILLED = 3169; +exports.ER_CAPACITY_EXCEEDED = 3170; +exports.ER_CAPACITY_EXCEEDED_IN_RANGE_OPTIMIZER = 3171; +exports.ER_TABLE_NEEDS_UPG_PART = 3172; +exports.ER_CANT_WAIT_FOR_EXECUTED_GTID_SET_WHILE_OWNING_A_GTID = 3173; +exports.ER_CANNOT_ADD_FOREIGN_BASE_COL_VIRTUAL = 3174; +exports.ER_CANNOT_CREATE_VIRTUAL_INDEX_CONSTRAINT = 3175; +exports.ER_ERROR_ON_MODIFYING_GTID_EXECUTED_TABLE = 3176; +exports.ER_LOCK_REFUSED_BY_ENGINE = 3177; +exports.ER_UNSUPPORTED_ALTER_ONLINE_ON_VIRTUAL_COLUMN = 3178; +exports.ER_MASTER_KEY_ROTATION_NOT_SUPPORTED_BY_SE = 3179; +exports.ER_MASTER_KEY_ROTATION_ERROR_BY_SE = 3180; +exports.ER_MASTER_KEY_ROTATION_BINLOG_FAILED = 3181; +exports.ER_MASTER_KEY_ROTATION_SE_UNAVAILABLE = 3182; +exports.ER_TABLESPACE_CANNOT_ENCRYPT = 3183; +exports.ER_INVALID_ENCRYPTION_OPTION = 3184; +exports.ER_CANNOT_FIND_KEY_IN_KEYRING = 3185; +exports.ER_CAPACITY_EXCEEDED_IN_PARSER = 3186; +exports.ER_UNSUPPORTED_ALTER_ENCRYPTION_INPLACE = 3187; +exports.ER_KEYRING_UDF_KEYRING_SERVICE_ERROR = 3188; +exports.ER_USER_COLUMN_OLD_LENGTH = 3189; +exports.ER_CANT_RESET_SOURCE = 3190; +exports.ER_GROUP_REPLICATION_MAX_GROUP_SIZE = 3191; +exports.ER_CANNOT_ADD_FOREIGN_BASE_COL_STORED = 3192; +exports.ER_TABLE_REFERENCED = 3193; +exports.ER_PARTITION_ENGINE_DEPRECATED_FOR_TABLE = 3194; +exports.ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID_ZERO = 3195; +exports.ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID = 3196; +exports.ER_XA_RETRY = 3197; +exports.ER_KEYRING_AWS_UDF_AWS_KMS_ERROR = 3198; +exports.ER_BINLOG_UNSAFE_XA = 3199; +exports.ER_UDF_ERROR = 3200; +exports.ER_KEYRING_MIGRATION_FAILURE = 3201; +exports.ER_KEYRING_ACCESS_DENIED_ERROR = 3202; +exports.ER_KEYRING_MIGRATION_STATUS = 3203; +exports.ER_PLUGIN_FAILED_TO_OPEN_TABLES = 3204; +exports.ER_PLUGIN_FAILED_TO_OPEN_TABLE = 3205; +exports.ER_AUDIT_LOG_NO_KEYRING_PLUGIN_INSTALLED = 3206; +exports.ER_AUDIT_LOG_ENCRYPTION_PASSWORD_HAS_NOT_BEEN_SET = 3207; +exports.ER_AUDIT_LOG_COULD_NOT_CREATE_AES_KEY = 3208; +exports.ER_AUDIT_LOG_ENCRYPTION_PASSWORD_CANNOT_BE_FETCHED = 3209; +exports.ER_AUDIT_LOG_JSON_FILTERING_NOT_ENABLED = 3210; +exports.ER_AUDIT_LOG_UDF_INSUFFICIENT_PRIVILEGE = 3211; +exports.ER_AUDIT_LOG_SUPER_PRIVILEGE_REQUIRED = 3212; +exports.ER_COULD_NOT_REINITIALIZE_AUDIT_LOG_FILTERS = 3213; +exports.ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_TYPE = 3214; +exports.ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_COUNT = 3215; +exports.ER_AUDIT_LOG_HAS_NOT_BEEN_INSTALLED = 3216; +exports.ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_TYPE = 3217; +exports.ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_VALUE = 3218; +exports.ER_AUDIT_LOG_JSON_FILTER_PARSING_ERROR = 3219; +exports.ER_AUDIT_LOG_JSON_FILTER_NAME_CANNOT_BE_EMPTY = 3220; +exports.ER_AUDIT_LOG_JSON_USER_NAME_CANNOT_BE_EMPTY = 3221; +exports.ER_AUDIT_LOG_JSON_FILTER_DOES_NOT_EXISTS = 3222; +exports.ER_AUDIT_LOG_USER_FIRST_CHARACTER_MUST_BE_ALPHANUMERIC = 3223; +exports.ER_AUDIT_LOG_USER_NAME_INVALID_CHARACTER = 3224; +exports.ER_AUDIT_LOG_HOST_NAME_INVALID_CHARACTER = 3225; +exports.WARN_DEPRECATED_MAXDB_SQL_MODE_FOR_TIMESTAMP = 3226; +exports.ER_XA_REPLICATION_FILTERS = 3227; +exports.ER_CANT_OPEN_ERROR_LOG = 3228; +exports.ER_GROUPING_ON_TIMESTAMP_IN_DST = 3229; +exports.ER_CANT_START_SERVER_NAMED_PIPE = 3230; +exports.ER_WRITE_SET_EXCEEDS_LIMIT = 3231; +exports.ER_DEPRECATED_TLS_VERSION_SESSION_57 = 3232; +exports.ER_WARN_DEPRECATED_TLS_VERSION_57 = 3233; +exports.ER_WARN_WRONG_NATIVE_TABLE_STRUCTURE = 3234; +exports.ER_AES_INVALID_KDF_NAME = 3235; +exports.ER_AES_INVALID_KDF_ITERATIONS = 3236; +exports.WARN_AES_KEY_SIZE = 3237; +exports.ER_AES_INVALID_KDF_OPTION_SIZE = 3238; +exports.ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE = 3500; +exports.ER_ACL_OPERATION_FAILED = 3501; +exports.ER_UNSUPPORTED_INDEX_ALGORITHM = 3502; +exports.ER_NO_SUCH_DB = 3503; +exports.ER_TOO_BIG_ENUM = 3504; +exports.ER_TOO_LONG_SET_ENUM_VALUE = 3505; +exports.ER_INVALID_DD_OBJECT = 3506; +exports.ER_UPDATING_DD_TABLE = 3507; +exports.ER_INVALID_DD_OBJECT_ID = 3508; +exports.ER_INVALID_DD_OBJECT_NAME = 3509; +exports.ER_TABLESPACE_MISSING_WITH_NAME = 3510; +exports.ER_TOO_LONG_ROUTINE_COMMENT = 3511; +exports.ER_SP_LOAD_FAILED = 3512; +exports.ER_INVALID_BITWISE_OPERANDS_SIZE = 3513; +exports.ER_INVALID_BITWISE_AGGREGATE_OPERANDS_SIZE = 3514; +exports.ER_WARN_UNSUPPORTED_HINT = 3515; +exports.ER_UNEXPECTED_GEOMETRY_TYPE = 3516; +exports.ER_SRS_PARSE_ERROR = 3517; +exports.ER_SRS_PROJ_PARAMETER_MISSING = 3518; +exports.ER_WARN_SRS_NOT_FOUND = 3519; +exports.ER_SRS_NOT_CARTESIAN = 3520; +exports.ER_SRS_NOT_CARTESIAN_UNDEFINED = 3521; +exports.ER_PK_INDEX_CANT_BE_INVISIBLE = 3522; +exports.ER_UNKNOWN_AUTHID = 3523; +exports.ER_FAILED_ROLE_GRANT = 3524; +exports.ER_OPEN_ROLE_TABLES = 3525; +exports.ER_FAILED_DEFAULT_ROLES = 3526; +exports.ER_COMPONENTS_NO_SCHEME = 3527; +exports.ER_COMPONENTS_NO_SCHEME_SERVICE = 3528; +exports.ER_COMPONENTS_CANT_LOAD = 3529; +exports.ER_ROLE_NOT_GRANTED = 3530; +exports.ER_FAILED_REVOKE_ROLE = 3531; +exports.ER_RENAME_ROLE = 3532; +exports.ER_COMPONENTS_CANT_ACQUIRE_SERVICE_IMPLEMENTATION = 3533; +exports.ER_COMPONENTS_CANT_SATISFY_DEPENDENCY = 3534; +exports.ER_COMPONENTS_LOAD_CANT_REGISTER_SERVICE_IMPLEMENTATION = 3535; +exports.ER_COMPONENTS_LOAD_CANT_INITIALIZE = 3536; +exports.ER_COMPONENTS_UNLOAD_NOT_LOADED = 3537; +exports.ER_COMPONENTS_UNLOAD_CANT_DEINITIALIZE = 3538; +exports.ER_COMPONENTS_CANT_RELEASE_SERVICE = 3539; +exports.ER_COMPONENTS_UNLOAD_CANT_UNREGISTER_SERVICE = 3540; +exports.ER_COMPONENTS_CANT_UNLOAD = 3541; +exports.ER_WARN_UNLOAD_THE_NOT_PERSISTED = 3542; +exports.ER_COMPONENT_TABLE_INCORRECT = 3543; +exports.ER_COMPONENT_MANIPULATE_ROW_FAILED = 3544; +exports.ER_COMPONENTS_UNLOAD_DUPLICATE_IN_GROUP = 3545; +exports.ER_CANT_SET_GTID_PURGED_DUE_SETS_CONSTRAINTS = 3546; +exports.ER_CANNOT_LOCK_USER_MANAGEMENT_CACHES = 3547; +exports.ER_SRS_NOT_FOUND = 3548; +exports.ER_VARIABLE_NOT_PERSISTED = 3549; +exports.ER_IS_QUERY_INVALID_CLAUSE = 3550; +exports.ER_UNABLE_TO_STORE_STATISTICS = 3551; +exports.ER_NO_SYSTEM_SCHEMA_ACCESS = 3552; +exports.ER_NO_SYSTEM_TABLESPACE_ACCESS = 3553; +exports.ER_NO_SYSTEM_TABLE_ACCESS = 3554; +exports.ER_NO_SYSTEM_TABLE_ACCESS_FOR_DICTIONARY_TABLE = 3555; +exports.ER_NO_SYSTEM_TABLE_ACCESS_FOR_SYSTEM_TABLE = 3556; +exports.ER_NO_SYSTEM_TABLE_ACCESS_FOR_TABLE = 3557; +exports.ER_INVALID_OPTION_KEY = 3558; +exports.ER_INVALID_OPTION_VALUE = 3559; +exports.ER_INVALID_OPTION_KEY_VALUE_PAIR = 3560; +exports.ER_INVALID_OPTION_START_CHARACTER = 3561; +exports.ER_INVALID_OPTION_END_CHARACTER = 3562; +exports.ER_INVALID_OPTION_CHARACTERS = 3563; +exports.ER_DUPLICATE_OPTION_KEY = 3564; +exports.ER_WARN_SRS_NOT_FOUND_AXIS_ORDER = 3565; +exports.ER_NO_ACCESS_TO_NATIVE_FCT = 3566; +exports.ER_RESET_SOURCE_TO_VALUE_OUT_OF_RANGE = 3567; +exports.ER_UNRESOLVED_TABLE_LOCK = 3568; +exports.ER_DUPLICATE_TABLE_LOCK = 3569; +exports.ER_BINLOG_UNSAFE_SKIP_LOCKED = 3570; +exports.ER_BINLOG_UNSAFE_NOWAIT = 3571; +exports.ER_LOCK_NOWAIT = 3572; +exports.ER_CTE_RECURSIVE_REQUIRES_UNION = 3573; +exports.ER_CTE_RECURSIVE_REQUIRES_NONRECURSIVE_FIRST = 3574; +exports.ER_CTE_RECURSIVE_FORBIDS_AGGREGATION = 3575; +exports.ER_CTE_RECURSIVE_FORBIDDEN_JOIN_ORDER = 3576; +exports.ER_CTE_RECURSIVE_REQUIRES_SINGLE_REFERENCE = 3577; +exports.ER_SWITCH_TMP_ENGINE = 3578; +exports.ER_WINDOW_NO_SUCH_WINDOW = 3579; +exports.ER_WINDOW_CIRCULARITY_IN_WINDOW_GRAPH = 3580; +exports.ER_WINDOW_NO_CHILD_PARTITIONING = 3581; +exports.ER_WINDOW_NO_INHERIT_FRAME = 3582; +exports.ER_WINDOW_NO_REDEFINE_ORDER_BY = 3583; +exports.ER_WINDOW_FRAME_START_ILLEGAL = 3584; +exports.ER_WINDOW_FRAME_END_ILLEGAL = 3585; +exports.ER_WINDOW_FRAME_ILLEGAL = 3586; +exports.ER_WINDOW_RANGE_FRAME_ORDER_TYPE = 3587; +exports.ER_WINDOW_RANGE_FRAME_TEMPORAL_TYPE = 3588; +exports.ER_WINDOW_RANGE_FRAME_NUMERIC_TYPE = 3589; +exports.ER_WINDOW_RANGE_BOUND_NOT_CONSTANT = 3590; +exports.ER_WINDOW_DUPLICATE_NAME = 3591; +exports.ER_WINDOW_ILLEGAL_ORDER_BY = 3592; +exports.ER_WINDOW_INVALID_WINDOW_FUNC_USE = 3593; +exports.ER_WINDOW_INVALID_WINDOW_FUNC_ALIAS_USE = 3594; +exports.ER_WINDOW_NESTED_WINDOW_FUNC_USE_IN_WINDOW_SPEC = 3595; +exports.ER_WINDOW_ROWS_INTERVAL_USE = 3596; +exports.ER_WINDOW_NO_GROUP_ORDER = 3597; +exports.ER_WINDOW_EXPLAIN_JSON = 3598; +exports.ER_WINDOW_FUNCTION_IGNORES_FRAME = 3599; +exports.ER_WL9236_NOW = 3600; +exports.ER_INVALID_NO_OF_ARGS = 3601; +exports.ER_FIELD_IN_GROUPING_NOT_GROUP_BY = 3602; +exports.ER_TOO_LONG_TABLESPACE_COMMENT = 3603; +exports.ER_ENGINE_CANT_DROP_TABLE = 3604; +exports.ER_ENGINE_CANT_DROP_MISSING_TABLE = 3605; +exports.ER_TABLESPACE_DUP_FILENAME = 3606; +exports.ER_DB_DROP_RMDIR2 = 3607; +exports.ER_IMP_NO_FILES_MATCHED = 3608; +exports.ER_IMP_SCHEMA_DOES_NOT_EXIST = 3609; +exports.ER_IMP_TABLE_ALREADY_EXISTS = 3610; +exports.ER_IMP_INCOMPATIBLE_MYSQLD_VERSION = 3611; +exports.ER_IMP_INCOMPATIBLE_DD_VERSION = 3612; +exports.ER_IMP_INCOMPATIBLE_SDI_VERSION = 3613; +exports.ER_WARN_INVALID_HINT = 3614; +exports.ER_VAR_DOES_NOT_EXIST = 3615; +exports.ER_LONGITUDE_OUT_OF_RANGE = 3616; +exports.ER_LATITUDE_OUT_OF_RANGE = 3617; +exports.ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS = 3618; +exports.ER_ILLEGAL_PRIVILEGE_LEVEL = 3619; +exports.ER_NO_SYSTEM_VIEW_ACCESS = 3620; +exports.ER_COMPONENT_FILTER_FLABBERGASTED = 3621; +exports.ER_PART_EXPR_TOO_LONG = 3622; +exports.ER_UDF_DROP_DYNAMICALLY_REGISTERED = 3623; +exports.ER_UNABLE_TO_STORE_COLUMN_STATISTICS = 3624; +exports.ER_UNABLE_TO_UPDATE_COLUMN_STATISTICS = 3625; +exports.ER_UNABLE_TO_DROP_COLUMN_STATISTICS = 3626; +exports.ER_UNABLE_TO_BUILD_HISTOGRAM = 3627; +exports.ER_MANDATORY_ROLE = 3628; +exports.ER_MISSING_TABLESPACE_FILE = 3629; +exports.ER_PERSIST_ONLY_ACCESS_DENIED_ERROR = 3630; +exports.ER_CMD_NEED_SUPER = 3631; +exports.ER_PATH_IN_DATADIR = 3632; +exports.ER_CLONE_DDL_IN_PROGRESS = 3633; +exports.ER_CLONE_TOO_MANY_CONCURRENT_CLONES = 3634; +exports.ER_APPLIER_LOG_EVENT_VALIDATION_ERROR = 3635; +exports.ER_CTE_MAX_RECURSION_DEPTH = 3636; +exports.ER_NOT_HINT_UPDATABLE_VARIABLE = 3637; +exports.ER_CREDENTIALS_CONTRADICT_TO_HISTORY = 3638; +exports.ER_WARNING_PASSWORD_HISTORY_CLAUSES_VOID = 3639; +exports.ER_CLIENT_DOES_NOT_SUPPORT = 3640; +exports.ER_I_S_SKIPPED_TABLESPACE = 3641; +exports.ER_TABLESPACE_ENGINE_MISMATCH = 3642; +exports.ER_WRONG_SRID_FOR_COLUMN = 3643; +exports.ER_CANNOT_ALTER_SRID_DUE_TO_INDEX = 3644; +exports.ER_WARN_BINLOG_PARTIAL_UPDATES_DISABLED = 3645; +exports.ER_WARN_BINLOG_V1_ROW_EVENTS_DISABLED = 3646; +exports.ER_WARN_BINLOG_PARTIAL_UPDATES_SUGGESTS_PARTIAL_IMAGES = 3647; +exports.ER_COULD_NOT_APPLY_JSON_DIFF = 3648; +exports.ER_CORRUPTED_JSON_DIFF = 3649; +exports.ER_RESOURCE_GROUP_EXISTS = 3650; +exports.ER_RESOURCE_GROUP_NOT_EXISTS = 3651; +exports.ER_INVALID_VCPU_ID = 3652; +exports.ER_INVALID_VCPU_RANGE = 3653; +exports.ER_INVALID_THREAD_PRIORITY = 3654; +exports.ER_DISALLOWED_OPERATION = 3655; +exports.ER_RESOURCE_GROUP_BUSY = 3656; +exports.ER_RESOURCE_GROUP_DISABLED = 3657; +exports.ER_FEATURE_UNSUPPORTED = 3658; +exports.ER_ATTRIBUTE_IGNORED = 3659; +exports.ER_INVALID_THREAD_ID = 3660; +exports.ER_RESOURCE_GROUP_BIND_FAILED = 3661; +exports.ER_INVALID_USE_OF_FORCE_OPTION = 3662; +exports.ER_GROUP_REPLICATION_COMMAND_FAILURE = 3663; +exports.ER_SDI_OPERATION_FAILED = 3664; +exports.ER_MISSING_JSON_TABLE_VALUE = 3665; +exports.ER_WRONG_JSON_TABLE_VALUE = 3666; +exports.ER_TF_MUST_HAVE_ALIAS = 3667; +exports.ER_TF_FORBIDDEN_JOIN_TYPE = 3668; +exports.ER_JT_VALUE_OUT_OF_RANGE = 3669; +exports.ER_JT_MAX_NESTED_PATH = 3670; +exports.ER_PASSWORD_EXPIRATION_NOT_SUPPORTED_BY_AUTH_METHOD = 3671; +exports.ER_INVALID_GEOJSON_CRS_NOT_TOP_LEVEL = 3672; +exports.ER_BAD_NULL_ERROR_NOT_IGNORED = 3673; +exports.WARN_USELESS_SPATIAL_INDEX = 3674; +exports.ER_DISK_FULL_NOWAIT = 3675; +exports.ER_PARSE_ERROR_IN_DIGEST_FN = 3676; +exports.ER_UNDISCLOSED_PARSE_ERROR_IN_DIGEST_FN = 3677; +exports.ER_SCHEMA_DIR_EXISTS = 3678; +exports.ER_SCHEMA_DIR_MISSING = 3679; +exports.ER_SCHEMA_DIR_CREATE_FAILED = 3680; +exports.ER_SCHEMA_DIR_UNKNOWN = 3681; +exports.ER_ONLY_IMPLEMENTED_FOR_SRID_0_AND_4326 = 3682; +exports.ER_BINLOG_EXPIRE_LOG_DAYS_AND_SECS_USED_TOGETHER = 3683; +exports.ER_REGEXP_BUFFER_OVERFLOW = 3684; +exports.ER_REGEXP_ILLEGAL_ARGUMENT = 3685; +exports.ER_REGEXP_INDEX_OUTOFBOUNDS_ERROR = 3686; +exports.ER_REGEXP_INTERNAL_ERROR = 3687; +exports.ER_REGEXP_RULE_SYNTAX = 3688; +exports.ER_REGEXP_BAD_ESCAPE_SEQUENCE = 3689; +exports.ER_REGEXP_UNIMPLEMENTED = 3690; +exports.ER_REGEXP_MISMATCHED_PAREN = 3691; +exports.ER_REGEXP_BAD_INTERVAL = 3692; +exports.ER_REGEXP_MAX_LT_MIN = 3693; +exports.ER_REGEXP_INVALID_BACK_REF = 3694; +exports.ER_REGEXP_LOOK_BEHIND_LIMIT = 3695; +exports.ER_REGEXP_MISSING_CLOSE_BRACKET = 3696; +exports.ER_REGEXP_INVALID_RANGE = 3697; +exports.ER_REGEXP_STACK_OVERFLOW = 3698; +exports.ER_REGEXP_TIME_OUT = 3699; +exports.ER_REGEXP_PATTERN_TOO_BIG = 3700; +exports.ER_CANT_SET_ERROR_LOG_SERVICE = 3701; +exports.ER_EMPTY_PIPELINE_FOR_ERROR_LOG_SERVICE = 3702; +exports.ER_COMPONENT_FILTER_DIAGNOSTICS = 3703; +exports.ER_NOT_IMPLEMENTED_FOR_CARTESIAN_SRS = 3704; +exports.ER_NOT_IMPLEMENTED_FOR_PROJECTED_SRS = 3705; +exports.ER_NONPOSITIVE_RADIUS = 3706; +exports.ER_RESTART_SERVER_FAILED = 3707; +exports.ER_SRS_MISSING_MANDATORY_ATTRIBUTE = 3708; +exports.ER_SRS_MULTIPLE_ATTRIBUTE_DEFINITIONS = 3709; +exports.ER_SRS_NAME_CANT_BE_EMPTY_OR_WHITESPACE = 3710; +exports.ER_SRS_ORGANIZATION_CANT_BE_EMPTY_OR_WHITESPACE = 3711; +exports.ER_SRS_ID_ALREADY_EXISTS = 3712; +exports.ER_WARN_SRS_ID_ALREADY_EXISTS = 3713; +exports.ER_CANT_MODIFY_SRID_0 = 3714; +exports.ER_WARN_RESERVED_SRID_RANGE = 3715; +exports.ER_CANT_MODIFY_SRS_USED_BY_COLUMN = 3716; +exports.ER_SRS_INVALID_CHARACTER_IN_ATTRIBUTE = 3717; +exports.ER_SRS_ATTRIBUTE_STRING_TOO_LONG = 3718; +exports.ER_DEPRECATED_UTF8_ALIAS = 3719; +exports.ER_DEPRECATED_NATIONAL = 3720; +exports.ER_INVALID_DEFAULT_UTF8MB4_COLLATION = 3721; +exports.ER_UNABLE_TO_COLLECT_LOG_STATUS = 3722; +exports.ER_RESERVED_TABLESPACE_NAME = 3723; +exports.ER_UNABLE_TO_SET_OPTION = 3724; +exports.ER_REPLICA_POSSIBLY_DIVERGED_AFTER_DDL = 3725; +exports.ER_SRS_NOT_GEOGRAPHIC = 3726; +exports.ER_POLYGON_TOO_LARGE = 3727; +exports.ER_SPATIAL_UNIQUE_INDEX = 3728; +exports.ER_INDEX_TYPE_NOT_SUPPORTED_FOR_SPATIAL_INDEX = 3729; +exports.ER_FK_CANNOT_DROP_PARENT = 3730; +exports.ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE = 3731; +exports.ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE = 3732; +exports.ER_FK_CANNOT_USE_VIRTUAL_COLUMN = 3733; +exports.ER_FK_NO_COLUMN_PARENT = 3734; +exports.ER_CANT_SET_ERROR_SUPPRESSION_LIST = 3735; +exports.ER_SRS_GEOGCS_INVALID_AXES = 3736; +exports.ER_SRS_INVALID_SEMI_MAJOR_AXIS = 3737; +exports.ER_SRS_INVALID_INVERSE_FLATTENING = 3738; +exports.ER_SRS_INVALID_ANGULAR_UNIT = 3739; +exports.ER_SRS_INVALID_PRIME_MERIDIAN = 3740; +exports.ER_TRANSFORM_SOURCE_SRS_NOT_SUPPORTED = 3741; +exports.ER_TRANSFORM_TARGET_SRS_NOT_SUPPORTED = 3742; +exports.ER_TRANSFORM_SOURCE_SRS_MISSING_TOWGS84 = 3743; +exports.ER_TRANSFORM_TARGET_SRS_MISSING_TOWGS84 = 3744; +exports.ER_TEMP_TABLE_PREVENTS_SWITCH_SESSION_BINLOG_FORMAT = 3745; +exports.ER_TEMP_TABLE_PREVENTS_SWITCH_GLOBAL_BINLOG_FORMAT = 3746; +exports.ER_RUNNING_APPLIER_PREVENTS_SWITCH_GLOBAL_BINLOG_FORMAT = 3747; +exports.ER_CLIENT_GTID_UNSAFE_CREATE_DROP_TEMP_TABLE_IN_TRX_IN_SBR = 3748; +exports.ER_XA_CANT_CREATE_MDL_BACKUP = 3749; +exports.ER_TABLE_WITHOUT_PK = 3750; +exports.ER_WARN_DATA_TRUNCATED_FUNCTIONAL_INDEX = 3751; +exports.ER_WARN_DATA_OUT_OF_RANGE_FUNCTIONAL_INDEX = 3752; +exports.ER_FUNCTIONAL_INDEX_ON_JSON_OR_GEOMETRY_FUNCTION = 3753; +exports.ER_FUNCTIONAL_INDEX_REF_AUTO_INCREMENT = 3754; +exports.ER_CANNOT_DROP_COLUMN_FUNCTIONAL_INDEX = 3755; +exports.ER_FUNCTIONAL_INDEX_PRIMARY_KEY = 3756; +exports.ER_FUNCTIONAL_INDEX_ON_LOB = 3757; +exports.ER_FUNCTIONAL_INDEX_FUNCTION_IS_NOT_ALLOWED = 3758; +exports.ER_FULLTEXT_FUNCTIONAL_INDEX = 3759; +exports.ER_SPATIAL_FUNCTIONAL_INDEX = 3760; +exports.ER_WRONG_KEY_COLUMN_FUNCTIONAL_INDEX = 3761; +exports.ER_FUNCTIONAL_INDEX_ON_FIELD = 3762; +exports.ER_GENERATED_COLUMN_NAMED_FUNCTION_IS_NOT_ALLOWED = 3763; +exports.ER_GENERATED_COLUMN_ROW_VALUE = 3764; +exports.ER_GENERATED_COLUMN_VARIABLES = 3765; +exports.ER_DEPENDENT_BY_DEFAULT_GENERATED_VALUE = 3766; +exports.ER_DEFAULT_VAL_GENERATED_NON_PRIOR = 3767; +exports.ER_DEFAULT_VAL_GENERATED_REF_AUTO_INC = 3768; +exports.ER_DEFAULT_VAL_GENERATED_FUNCTION_IS_NOT_ALLOWED = 3769; +exports.ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED = 3770; +exports.ER_DEFAULT_VAL_GENERATED_ROW_VALUE = 3771; +exports.ER_DEFAULT_VAL_GENERATED_VARIABLES = 3772; +exports.ER_DEFAULT_AS_VAL_GENERATED = 3773; +exports.ER_UNSUPPORTED_ACTION_ON_DEFAULT_VAL_GENERATED = 3774; +exports.ER_GTID_UNSAFE_ALTER_ADD_COL_WITH_DEFAULT_EXPRESSION = 3775; +exports.ER_FK_CANNOT_CHANGE_ENGINE = 3776; +exports.ER_WARN_DEPRECATED_USER_SET_EXPR = 3777; +exports.ER_WARN_DEPRECATED_UTF8MB3_COLLATION = 3778; +exports.ER_WARN_DEPRECATED_NESTED_COMMENT_SYNTAX = 3779; +exports.ER_FK_INCOMPATIBLE_COLUMNS = 3780; +exports.ER_GR_HOLD_WAIT_TIMEOUT = 3781; +exports.ER_GR_HOLD_KILLED = 3782; +exports.ER_GR_HOLD_MEMBER_STATUS_ERROR = 3783; +exports.ER_RPL_ENCRYPTION_FAILED_TO_FETCH_KEY = 3784; +exports.ER_RPL_ENCRYPTION_KEY_NOT_FOUND = 3785; +exports.ER_RPL_ENCRYPTION_KEYRING_INVALID_KEY = 3786; +exports.ER_RPL_ENCRYPTION_HEADER_ERROR = 3787; +exports.ER_RPL_ENCRYPTION_FAILED_TO_ROTATE_LOGS = 3788; +exports.ER_RPL_ENCRYPTION_KEY_EXISTS_UNEXPECTED = 3789; +exports.ER_RPL_ENCRYPTION_FAILED_TO_GENERATE_KEY = 3790; +exports.ER_RPL_ENCRYPTION_FAILED_TO_STORE_KEY = 3791; +exports.ER_RPL_ENCRYPTION_FAILED_TO_REMOVE_KEY = 3792; +exports.ER_RPL_ENCRYPTION_UNABLE_TO_CHANGE_OPTION = 3793; +exports.ER_RPL_ENCRYPTION_MASTER_KEY_RECOVERY_FAILED = 3794; +exports.ER_SLOW_LOG_MODE_IGNORED_WHEN_NOT_LOGGING_TO_FILE = 3795; +exports.ER_GRP_TRX_CONSISTENCY_NOT_ALLOWED = 3796; +exports.ER_GRP_TRX_CONSISTENCY_BEFORE = 3797; +exports.ER_GRP_TRX_CONSISTENCY_AFTER_ON_TRX_BEGIN = 3798; +exports.ER_GRP_TRX_CONSISTENCY_BEGIN_NOT_ALLOWED = 3799; +exports.ER_FUNCTIONAL_INDEX_ROW_VALUE_IS_NOT_ALLOWED = 3800; +exports.ER_RPL_ENCRYPTION_FAILED_TO_ENCRYPT = 3801; +exports.ER_PAGE_TRACKING_NOT_STARTED = 3802; +exports.ER_PAGE_TRACKING_RANGE_NOT_TRACKED = 3803; +exports.ER_PAGE_TRACKING_CANNOT_PURGE = 3804; +exports.ER_RPL_ENCRYPTION_CANNOT_ROTATE_BINLOG_MASTER_KEY = 3805; +exports.ER_BINLOG_MASTER_KEY_RECOVERY_OUT_OF_COMBINATION = 3806; +exports.ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_OPERATE_KEY = 3807; +exports.ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_ROTATE_LOGS = 3808; +exports.ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_REENCRYPT_LOG = 3809; +exports.ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_CLEANUP_UNUSED_KEYS = 3810; +exports.ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_CLEANUP_AUX_KEY = 3811; +exports.ER_NON_BOOLEAN_EXPR_FOR_CHECK_CONSTRAINT = 3812; +exports.ER_COLUMN_CHECK_CONSTRAINT_REFERENCES_OTHER_COLUMN = 3813; +exports.ER_CHECK_CONSTRAINT_NAMED_FUNCTION_IS_NOT_ALLOWED = 3814; +exports.ER_CHECK_CONSTRAINT_FUNCTION_IS_NOT_ALLOWED = 3815; +exports.ER_CHECK_CONSTRAINT_VARIABLES = 3816; +exports.ER_CHECK_CONSTRAINT_ROW_VALUE = 3817; +exports.ER_CHECK_CONSTRAINT_REFERS_AUTO_INCREMENT_COLUMN = 3818; +exports.ER_CHECK_CONSTRAINT_VIOLATED = 3819; +exports.ER_CHECK_CONSTRAINT_REFERS_UNKNOWN_COLUMN = 3820; +exports.ER_CHECK_CONSTRAINT_NOT_FOUND = 3821; +exports.ER_CHECK_CONSTRAINT_DUP_NAME = 3822; +exports.ER_CHECK_CONSTRAINT_CLAUSE_USING_FK_REFER_ACTION_COLUMN = 3823; +exports.WARN_UNENCRYPTED_TABLE_IN_ENCRYPTED_DB = 3824; +exports.ER_INVALID_ENCRYPTION_REQUEST = 3825; +exports.ER_CANNOT_SET_TABLE_ENCRYPTION = 3826; +exports.ER_CANNOT_SET_DATABASE_ENCRYPTION = 3827; +exports.ER_CANNOT_SET_TABLESPACE_ENCRYPTION = 3828; +exports.ER_TABLESPACE_CANNOT_BE_ENCRYPTED = 3829; +exports.ER_TABLESPACE_CANNOT_BE_DECRYPTED = 3830; +exports.ER_TABLESPACE_TYPE_UNKNOWN = 3831; +exports.ER_TARGET_TABLESPACE_UNENCRYPTED = 3832; +exports.ER_CANNOT_USE_ENCRYPTION_CLAUSE = 3833; +exports.ER_INVALID_MULTIPLE_CLAUSES = 3834; +exports.ER_UNSUPPORTED_USE_OF_GRANT_AS = 3835; +exports.ER_UKNOWN_AUTH_ID_OR_ACCESS_DENIED_FOR_GRANT_AS = 3836; +exports.ER_DEPENDENT_BY_FUNCTIONAL_INDEX = 3837; +exports.ER_PLUGIN_NOT_EARLY = 3838; +exports.ER_INNODB_REDO_LOG_ARCHIVE_START_SUBDIR_PATH = 3839; +exports.ER_INNODB_REDO_LOG_ARCHIVE_START_TIMEOUT = 3840; +exports.ER_INNODB_REDO_LOG_ARCHIVE_DIRS_INVALID = 3841; +exports.ER_INNODB_REDO_LOG_ARCHIVE_LABEL_NOT_FOUND = 3842; +exports.ER_INNODB_REDO_LOG_ARCHIVE_DIR_EMPTY = 3843; +exports.ER_INNODB_REDO_LOG_ARCHIVE_NO_SUCH_DIR = 3844; +exports.ER_INNODB_REDO_LOG_ARCHIVE_DIR_CLASH = 3845; +exports.ER_INNODB_REDO_LOG_ARCHIVE_DIR_PERMISSIONS = 3846; +exports.ER_INNODB_REDO_LOG_ARCHIVE_FILE_CREATE = 3847; +exports.ER_INNODB_REDO_LOG_ARCHIVE_ACTIVE = 3848; +exports.ER_INNODB_REDO_LOG_ARCHIVE_INACTIVE = 3849; +exports.ER_INNODB_REDO_LOG_ARCHIVE_FAILED = 3850; +exports.ER_INNODB_REDO_LOG_ARCHIVE_SESSION = 3851; +exports.ER_STD_REGEX_ERROR = 3852; +exports.ER_INVALID_JSON_TYPE = 3853; +exports.ER_CANNOT_CONVERT_STRING = 3854; +exports.ER_DEPENDENT_BY_PARTITION_FUNC = 3855; +exports.ER_WARN_DEPRECATED_FLOAT_AUTO_INCREMENT = 3856; +exports.ER_RPL_CANT_STOP_REPLICA_WHILE_LOCKED_BACKUP = 3857; +exports.ER_WARN_DEPRECATED_FLOAT_DIGITS = 3858; +exports.ER_WARN_DEPRECATED_FLOAT_UNSIGNED = 3859; +exports.ER_WARN_DEPRECATED_INTEGER_DISPLAY_WIDTH = 3860; +exports.ER_WARN_DEPRECATED_ZEROFILL = 3861; +exports.ER_CLONE_DONOR = 3862; +exports.ER_CLONE_PROTOCOL = 3863; +exports.ER_CLONE_DONOR_VERSION = 3864; +exports.ER_CLONE_OS = 3865; +exports.ER_CLONE_PLATFORM = 3866; +exports.ER_CLONE_CHARSET = 3867; +exports.ER_CLONE_CONFIG = 3868; +exports.ER_CLONE_SYS_CONFIG = 3869; +exports.ER_CLONE_PLUGIN_MATCH = 3870; +exports.ER_CLONE_LOOPBACK = 3871; +exports.ER_CLONE_ENCRYPTION = 3872; +exports.ER_CLONE_DISK_SPACE = 3873; +exports.ER_CLONE_IN_PROGRESS = 3874; +exports.ER_CLONE_DISALLOWED = 3875; +exports.ER_CANNOT_GRANT_ROLES_TO_ANONYMOUS_USER = 3876; +exports.ER_SECONDARY_ENGINE_PLUGIN = 3877; +exports.ER_SECOND_PASSWORD_CANNOT_BE_EMPTY = 3878; +exports.ER_DB_ACCESS_DENIED = 3879; +exports.ER_DA_AUTH_ID_WITH_SYSTEM_USER_PRIV_IN_MANDATORY_ROLES = 3880; +exports.ER_DA_RPL_GTID_TABLE_CANNOT_OPEN = 3881; +exports.ER_GEOMETRY_IN_UNKNOWN_LENGTH_UNIT = 3882; +exports.ER_DA_PLUGIN_INSTALL_ERROR = 3883; +exports.ER_NO_SESSION_TEMP = 3884; +exports.ER_DA_UNKNOWN_ERROR_NUMBER = 3885; +exports.ER_COLUMN_CHANGE_SIZE = 3886; +exports.ER_REGEXP_INVALID_CAPTURE_GROUP_NAME = 3887; +exports.ER_DA_SSL_LIBRARY_ERROR = 3888; +exports.ER_SECONDARY_ENGINE = 3889; +exports.ER_SECONDARY_ENGINE_DDL = 3890; +exports.ER_INCORRECT_CURRENT_PASSWORD = 3891; +exports.ER_MISSING_CURRENT_PASSWORD = 3892; +exports.ER_CURRENT_PASSWORD_NOT_REQUIRED = 3893; +exports.ER_PASSWORD_CANNOT_BE_RETAINED_ON_PLUGIN_CHANGE = 3894; +exports.ER_CURRENT_PASSWORD_CANNOT_BE_RETAINED = 3895; +exports.ER_PARTIAL_REVOKES_EXIST = 3896; +exports.ER_CANNOT_GRANT_SYSTEM_PRIV_TO_MANDATORY_ROLE = 3897; +exports.ER_XA_REPLICATION_FILTERS = 3898; +exports.ER_UNSUPPORTED_SQL_MODE = 3899; +exports.ER_REGEXP_INVALID_FLAG = 3900; +exports.ER_PARTIAL_REVOKE_AND_DB_GRANT_BOTH_EXISTS = 3901; +exports.ER_UNIT_NOT_FOUND = 3902; +exports.ER_INVALID_JSON_VALUE_FOR_FUNC_INDEX = 3903; +exports.ER_JSON_VALUE_OUT_OF_RANGE_FOR_FUNC_INDEX = 3904; +exports.ER_EXCEEDED_MV_KEYS_NUM = 3905; +exports.ER_EXCEEDED_MV_KEYS_SPACE = 3906; +exports.ER_FUNCTIONAL_INDEX_DATA_IS_TOO_LONG = 3907; +exports.ER_WRONG_MVI_VALUE = 3908; +exports.ER_WARN_FUNC_INDEX_NOT_APPLICABLE = 3909; +exports.ER_GRP_RPL_UDF_ERROR = 3910; +exports.ER_UPDATE_GTID_PURGED_WITH_GR = 3911; +exports.ER_GROUPING_ON_TIMESTAMP_IN_DST = 3912; +exports.ER_TABLE_NAME_CAUSES_TOO_LONG_PATH = 3913; +exports.ER_AUDIT_LOG_INSUFFICIENT_PRIVILEGE = 3914; +exports.ER_AUDIT_LOG_PASSWORD_HAS_BEEN_COPIED = 3915; +exports.ER_DA_GRP_RPL_STARTED_AUTO_REJOIN = 3916; +exports.ER_SYSVAR_CHANGE_DURING_QUERY = 3917; +exports.ER_GLOBSTAT_CHANGE_DURING_QUERY = 3918; +exports.ER_GRP_RPL_MESSAGE_SERVICE_INIT_FAILURE = 3919; +exports.ER_CHANGE_SOURCE_WRONG_COMPRESSION_ALGORITHM_CLIENT = 3920; +exports.ER_CHANGE_SOURCE_WRONG_COMPRESSION_LEVEL_CLIENT = 3921; +exports.ER_WRONG_COMPRESSION_ALGORITHM_CLIENT = 3922; +exports.ER_WRONG_COMPRESSION_LEVEL_CLIENT = 3923; +exports.ER_CHANGE_SOURCE_WRONG_COMPRESSION_ALGORITHM_LIST_CLIENT = 3924; +exports.ER_CLIENT_PRIVILEGE_CHECKS_USER_CANNOT_BE_ANONYMOUS = 3925; +exports.ER_CLIENT_PRIVILEGE_CHECKS_USER_DOES_NOT_EXIST = 3926; +exports.ER_CLIENT_PRIVILEGE_CHECKS_USER_CORRUPT = 3927; +exports.ER_CLIENT_PRIVILEGE_CHECKS_USER_NEEDS_RPL_APPLIER_PRIV = 3928; +exports.ER_WARN_DA_PRIVILEGE_NOT_REGISTERED = 3929; +exports.ER_CLIENT_KEYRING_UDF_KEY_INVALID = 3930; +exports.ER_CLIENT_KEYRING_UDF_KEY_TYPE_INVALID = 3931; +exports.ER_CLIENT_KEYRING_UDF_KEY_TOO_LONG = 3932; +exports.ER_CLIENT_KEYRING_UDF_KEY_TYPE_TOO_LONG = 3933; +exports.ER_JSON_SCHEMA_VALIDATION_ERROR_WITH_DETAILED_REPORT = 3934; +exports.ER_DA_UDF_INVALID_CHARSET_SPECIFIED = 3935; +exports.ER_DA_UDF_INVALID_CHARSET = 3936; +exports.ER_DA_UDF_INVALID_COLLATION = 3937; +exports.ER_DA_UDF_INVALID_EXTENSION_ARGUMENT_TYPE = 3938; +exports.ER_MULTIPLE_CONSTRAINTS_WITH_SAME_NAME = 3939; +exports.ER_CONSTRAINT_NOT_FOUND = 3940; +exports.ER_ALTER_CONSTRAINT_ENFORCEMENT_NOT_SUPPORTED = 3941; +exports.ER_TABLE_VALUE_CONSTRUCTOR_MUST_HAVE_COLUMNS = 3942; +exports.ER_TABLE_VALUE_CONSTRUCTOR_CANNOT_HAVE_DEFAULT = 3943; +exports.ER_CLIENT_QUERY_FAILURE_INVALID_NON_ROW_FORMAT = 3944; +exports.ER_REQUIRE_ROW_FORMAT_INVALID_VALUE = 3945; +exports.ER_FAILED_TO_DETERMINE_IF_ROLE_IS_MANDATORY = 3946; +exports.ER_FAILED_TO_FETCH_MANDATORY_ROLE_LIST = 3947; +exports.ER_CLIENT_LOCAL_FILES_DISABLED = 3948; +exports.ER_IMP_INCOMPATIBLE_CFG_VERSION = 3949; +exports.ER_DA_OOM = 3950; +exports.ER_DA_UDF_INVALID_ARGUMENT_TO_SET_CHARSET = 3951; +exports.ER_DA_UDF_INVALID_RETURN_TYPE_TO_SET_CHARSET = 3952; +exports.ER_MULTIPLE_INTO_CLAUSES = 3953; +exports.ER_MISPLACED_INTO = 3954; +exports.ER_USER_ACCESS_DENIED_FOR_USER_ACCOUNT_BLOCKED_BY_PASSWORD_LOCK = 3955; +exports.ER_WARN_DEPRECATED_YEAR_UNSIGNED = 3956; +exports.ER_CLONE_NETWORK_PACKET = 3957; +exports.ER_SDI_OPERATION_FAILED_MISSING_RECORD = 3958; +exports.ER_DEPENDENT_BY_CHECK_CONSTRAINT = 3959; +exports.ER_GRP_OPERATION_NOT_ALLOWED_GR_MUST_STOP = 3960; +exports.ER_WARN_DEPRECATED_JSON_TABLE_ON_ERROR_ON_EMPTY = 3961; +exports.ER_WARN_DEPRECATED_INNER_INTO = 3962; +exports.ER_WARN_DEPRECATED_VALUES_FUNCTION_ALWAYS_NULL = 3963; +exports.ER_WARN_DEPRECATED_SQL_CALC_FOUND_ROWS = 3964; +exports.ER_WARN_DEPRECATED_FOUND_ROWS = 3965; +exports.ER_MISSING_JSON_VALUE = 3966; +exports.ER_MULTIPLE_JSON_VALUES = 3967; +exports.ER_HOSTNAME_TOO_LONG = 3968; +exports.ER_WARN_CLIENT_DEPRECATED_PARTITION_PREFIX_KEY = 3969; +exports.ER_GROUP_REPLICATION_USER_EMPTY_MSG = 3970; +exports.ER_GROUP_REPLICATION_USER_MANDATORY_MSG = 3971; +exports.ER_GROUP_REPLICATION_PASSWORD_LENGTH = 3972; +exports.ER_SUBQUERY_TRANSFORM_REJECTED = 3973; +exports.ER_DA_GRP_RPL_RECOVERY_ENDPOINT_FORMAT = 3974; +exports.ER_DA_GRP_RPL_RECOVERY_ENDPOINT_INVALID = 3975; +exports.ER_WRONG_VALUE_FOR_VAR_PLUS_ACTIONABLE_PART = 3976; +exports.ER_STATEMENT_NOT_ALLOWED_AFTER_START_TRANSACTION = 3977; +exports.ER_FOREIGN_KEY_WITH_ATOMIC_CREATE_SELECT = 3978; +exports.ER_NOT_ALLOWED_WITH_START_TRANSACTION = 3979; +exports.ER_INVALID_JSON_ATTRIBUTE = 3980; +exports.ER_ENGINE_ATTRIBUTE_NOT_SUPPORTED = 3981; +exports.ER_INVALID_USER_ATTRIBUTE_JSON = 3982; +exports.ER_INNODB_REDO_DISABLED = 3983; +exports.ER_INNODB_REDO_ARCHIVING_ENABLED = 3984; +exports.ER_MDL_OUT_OF_RESOURCES = 3985; +exports.ER_IMPLICIT_COMPARISON_FOR_JSON = 3986; +exports.ER_FUNCTION_DOES_NOT_SUPPORT_CHARACTER_SET = 3987; +exports.ER_IMPOSSIBLE_STRING_CONVERSION = 3988; +exports.ER_SCHEMA_READ_ONLY = 3989; +exports.ER_RPL_ASYNC_RECONNECT_GTID_MODE_OFF = 3990; +exports.ER_RPL_ASYNC_RECONNECT_AUTO_POSITION_OFF = 3991; +exports.ER_DISABLE_GTID_MODE_REQUIRES_ASYNC_RECONNECT_OFF = 3992; +exports.ER_DISABLE_AUTO_POSITION_REQUIRES_ASYNC_RECONNECT_OFF = 3993; +exports.ER_INVALID_PARAMETER_USE = 3994; +exports.ER_CHARACTER_SET_MISMATCH = 3995; +exports.ER_WARN_VAR_VALUE_CHANGE_NOT_SUPPORTED = 3996; +exports.ER_INVALID_TIME_ZONE_INTERVAL = 3997; +exports.ER_INVALID_CAST = 3998; +exports.ER_HYPERGRAPH_NOT_SUPPORTED_YET = 3999; +exports.ER_WARN_HYPERGRAPH_EXPERIMENTAL = 4000; +exports.ER_DA_NO_ERROR_LOG_PARSER_CONFIGURED = 4001; +exports.ER_DA_ERROR_LOG_TABLE_DISABLED = 4002; +exports.ER_DA_ERROR_LOG_MULTIPLE_FILTERS = 4003; +exports.ER_DA_CANT_OPEN_ERROR_LOG = 4004; +exports.ER_USER_REFERENCED_AS_DEFINER = 4005; +exports.ER_CANNOT_USER_REFERENCED_AS_DEFINER = 4006; +exports.ER_REGEX_NUMBER_TOO_BIG = 4007; +exports.ER_SPVAR_NONINTEGER_TYPE = 4008; +exports.WARN_UNSUPPORTED_ACL_TABLES_READ = 4009; +exports.ER_BINLOG_UNSAFE_ACL_TABLE_READ_IN_DML_DDL = 4010; +exports.ER_STOP_REPLICA_MONITOR_IO_THREAD_TIMEOUT = 4011; +exports.ER_STARTING_REPLICA_MONITOR_IO_THREAD = 4012; +exports.ER_CANT_USE_ANONYMOUS_TO_GTID_WITH_GTID_MODE_NOT_ON = 4013; +exports.ER_CANT_COMBINE_ANONYMOUS_TO_GTID_AND_AUTOPOSITION = 4014; +exports.ER_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS_REQUIRES_GTID_MODE_ON = 4015; +exports.ER_SQL_REPLICA_SKIP_COUNTER_USED_WITH_GTID_MODE_ON = 4016; +exports.ER_USING_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS_AS_LOCAL_OR_UUID = 4017; +exports.ER_CANT_SET_ANONYMOUS_TO_GTID_AND_WAIT_UNTIL_SQL_THD_AFTER_GTIDS = 4018; +exports.ER_CANT_SET_SQL_AFTER_OR_BEFORE_GTIDS_WITH_ANONYMOUS_TO_GTID = 4019; +exports.ER_ANONYMOUS_TO_GTID_UUID_SAME_AS_GROUP_NAME = 4020; +exports.ER_CANT_USE_SAME_UUID_AS_GROUP_NAME = 4021; +exports.ER_GRP_RPL_RECOVERY_CHANNEL_STILL_RUNNING = 4022; +exports.ER_INNODB_INVALID_AUTOEXTEND_SIZE_VALUE = 4023; +exports.ER_INNODB_INCOMPATIBLE_WITH_TABLESPACE = 4024; +exports.ER_INNODB_AUTOEXTEND_SIZE_OUT_OF_RANGE = 4025; +exports.ER_CANNOT_USE_AUTOEXTEND_SIZE_CLAUSE = 4026; +exports.ER_ROLE_GRANTED_TO_ITSELF = 4027; +exports.ER_TABLE_MUST_HAVE_A_VISIBLE_COLUMN = 4028; +exports.ER_INNODB_COMPRESSION_FAILURE = 4029; +exports.ER_WARN_ASYNC_CONN_FAILOVER_NETWORK_NAMESPACE = 4030; +exports.ER_CLIENT_INTERACTION_TIMEOUT = 4031; +exports.ER_INVALID_CAST_TO_GEOMETRY = 4032; +exports.ER_INVALID_CAST_POLYGON_RING_DIRECTION = 4033; +exports.ER_GIS_DIFFERENT_SRIDS_AGGREGATION = 4034; +exports.ER_RELOAD_KEYRING_FAILURE = 4035; +exports.ER_SDI_GET_KEYS_INVALID_TABLESPACE = 4036; +exports.ER_CHANGE_RPL_SRC_WRONG_COMPRESSION_ALGORITHM_SIZE = 4037; +exports.ER_WARN_DEPRECATED_TLS_VERSION_FOR_CHANNEL_CLI = 4038; +exports.ER_CANT_USE_SAME_UUID_AS_VIEW_CHANGE_UUID = 4039; +exports.ER_ANONYMOUS_TO_GTID_UUID_SAME_AS_VIEW_CHANGE_UUID = 4040; +exports.ER_GRP_RPL_VIEW_CHANGE_UUID_FAIL_GET_VARIABLE = 4041; +exports.ER_WARN_ADUIT_LOG_MAX_SIZE_AND_PRUNE_SECONDS = 4042; +exports.ER_WARN_ADUIT_LOG_MAX_SIZE_CLOSE_TO_ROTATE_ON_SIZE = 4043; +exports.ER_KERBEROS_CREATE_USER = 4044; +exports.ER_INSTALL_PLUGIN_CONFLICT_CLIENT = 4045; +exports.ER_DA_ERROR_LOG_COMPONENT_FLUSH_FAILED = 4046; +exports.ER_WARN_SQL_AFTER_MTS_GAPS_GAP_NOT_CALCULATED = 4047; +exports.ER_INVALID_ASSIGNMENT_TARGET = 4048; +exports.ER_OPERATION_NOT_ALLOWED_ON_GR_SECONDARY = 4049; +exports.ER_GRP_RPL_FAILOVER_CHANNEL_STATUS_PROPAGATION = 4050; +exports.ER_WARN_AUDIT_LOG_FORMAT_UNIX_TIMESTAMP_ONLY_WHEN_JSON = 4051; +exports.ER_INVALID_MFA_PLUGIN_SPECIFIED = 4052; +exports.ER_IDENTIFIED_BY_UNSUPPORTED = 4053; +exports.ER_INVALID_PLUGIN_FOR_REGISTRATION = 4054; +exports.ER_PLUGIN_REQUIRES_REGISTRATION = 4055; +exports.ER_MFA_METHOD_EXISTS = 4056; +exports.ER_MFA_METHOD_NOT_EXISTS = 4057; +exports.ER_AUTHENTICATION_POLICY_MISMATCH = 4058; +exports.ER_PLUGIN_REGISTRATION_DONE = 4059; +exports.ER_INVALID_USER_FOR_REGISTRATION = 4060; +exports.ER_USER_REGISTRATION_FAILED = 4061; +exports.ER_MFA_METHODS_INVALID_ORDER = 4062; +exports.ER_MFA_METHODS_IDENTICAL = 4063; +exports.ER_INVALID_MFA_OPERATIONS_FOR_PASSWORDLESS_USER = 4064; +exports.ER_CHANGE_REPLICATION_SOURCE_NO_OPTIONS_FOR_GTID_ONLY = 4065; +exports.ER_CHANGE_REP_SOURCE_CANT_DISABLE_REQ_ROW_FORMAT_WITH_GTID_ONLY = 4066; +exports.ER_CHANGE_REP_SOURCE_CANT_DISABLE_AUTO_POSITION_WITH_GTID_ONLY = 4067; +exports.ER_CHANGE_REP_SOURCE_CANT_DISABLE_GTID_ONLY_WITHOUT_POSITIONS = 4068; +exports.ER_CHANGE_REP_SOURCE_CANT_DISABLE_AUTO_POS_WITHOUT_POSITIONS = 4069; +exports.ER_CHANGE_REP_SOURCE_GR_CHANNEL_WITH_GTID_MODE_NOT_ON = 4070; +exports.ER_CANT_USE_GTID_ONLY_WITH_GTID_MODE_NOT_ON = 4071; +exports.ER_WARN_C_DISABLE_GTID_ONLY_WITH_SOURCE_AUTO_POS_INVALID_POS = 4072; +exports.ER_DA_SSL_FIPS_MODE_ERROR = 4073; +exports.ER_VALUE_OUT_OF_RANGE = 4074; +exports.ER_FULLTEXT_WITH_ROLLUP = 4075; +exports.ER_REGEXP_MISSING_RESOURCE = 4076; +exports.ER_WARN_REGEXP_USING_DEFAULT = 4077; +exports.ER_REGEXP_MISSING_FILE = 4078; +exports.ER_WARN_DEPRECATED_COLLATION = 4079; +exports.ER_CONCURRENT_PROCEDURE_USAGE = 4080; +exports.ER_DA_GLOBAL_CONN_LIMIT = 4081; +exports.ER_DA_CONN_LIMIT = 4082; +exports.ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE_INSTANT = 4083; +exports.ER_WARN_SF_UDF_NAME_COLLISION = 4084; +exports.ER_CANNOT_PURGE_BINLOG_WITH_BACKUP_LOCK = 4085; +exports.ER_TOO_MANY_WINDOWS = 4086; +exports.ER_MYSQLBACKUP_CLIENT_MSG = 4087; +exports.ER_COMMENT_CONTAINS_INVALID_STRING = 4088; +exports.ER_DEFINITION_CONTAINS_INVALID_STRING = 4089; +exports.ER_CANT_EXECUTE_COMMAND_WITH_ASSIGNED_GTID_NEXT = 4090; +exports.ER_XA_TEMP_TABLE = 4091; +exports.ER_INNODB_MAX_ROW_VERSION = 4092; +exports.ER_INNODB_INSTANT_ADD_NOT_SUPPORTED_MAX_SIZE = 4093; +exports.ER_OPERATION_NOT_ALLOWED_WHILE_PRIMARY_CHANGE_IS_RUNNING = 4094; +exports.ER_WARN_DEPRECATED_DATETIME_DELIMITER = 4095; +exports.ER_WARN_DEPRECATED_SUPERFLUOUS_DELIMITER = 4096; +exports.ER_CANNOT_PERSIST_SENSITIVE_VARIABLES = 4097; +exports.ER_WARN_CANNOT_SECURELY_PERSIST_SENSITIVE_VARIABLES = 4098; +exports.ER_WARN_TRG_ALREADY_EXISTS = 4099; +exports.ER_IF_NOT_EXISTS_UNSUPPORTED_TRG_EXISTS_ON_DIFFERENT_TABLE = 4100; +exports.ER_IF_NOT_EXISTS_UNSUPPORTED_UDF_NATIVE_FCT_NAME_COLLISION = 4101; +exports.ER_SET_PASSWORD_AUTH_PLUGIN_ERROR = 4102; +exports.ER_REDUCED_DBLWR_FILE_CORRUPTED = 4103; +exports.ER_REDUCED_DBLWR_PAGE_FOUND = 4104; +exports.ER_SRS_INVALID_LATITUDE_OF_ORIGIN = 4105; +exports.ER_SRS_INVALID_LONGITUDE_OF_ORIGIN = 4106; +exports.ER_SRS_UNUSED_PROJ_PARAMETER_PRESENT = 4107; +exports.ER_GIPK_COLUMN_EXISTS = 4108; +exports.ER_GIPK_FAILED_AUTOINC_COLUMN_EXISTS = 4109; +exports.ER_GIPK_COLUMN_ALTER_NOT_ALLOWED = 4110; +exports.ER_DROP_PK_COLUMN_TO_DROP_GIPK = 4111; +exports.ER_CREATE_SELECT_WITH_GIPK_DISALLOWED_IN_SBR = 4112; +exports.ER_DA_EXPIRE_LOGS_DAYS_IGNORED = 4113; +exports.ER_CTE_RECURSIVE_NOT_UNION = 4114; +exports.ER_COMMAND_BACKEND_FAILED_TO_FETCH_SECURITY_CTX = 4115; +exports.ER_COMMAND_SERVICE_BACKEND_FAILED = 4116; +exports.ER_CLIENT_FILE_PRIVILEGE_FOR_REPLICATION_CHECKS = 4117; +exports.ER_GROUP_REPLICATION_FORCE_MEMBERS_COMMAND_FAILURE = 4118; +exports.ER_WARN_DEPRECATED_IDENT = 4119; +exports.ER_INTERSECT_ALL_MAX_DUPLICATES_EXCEEDED = 4120; +exports.ER_TP_QUERY_THRS_PER_GRP_EXCEEDS_TXN_THR_LIMIT = 4121; +exports.ER_BAD_TIMESTAMP_FORMAT = 4122; +exports.ER_SHAPE_PRIDICTION_UDF = 4123; +exports.ER_SRS_INVALID_HEIGHT = 4124; +exports.ER_SRS_INVALID_SCALING = 4125; +exports.ER_SRS_INVALID_ZONE_WIDTH = 4126; +exports.ER_SRS_INVALID_LATITUDE_POLAR_STERE_VAR_A = 4127; +exports.ER_WARN_DEPRECATED_CLIENT_NO_SCHEMA_OPTION = 4128; +exports.ER_TABLE_NOT_EMPTY = 4129; +exports.ER_TABLE_NO_PRIMARY_KEY = 4130; +exports.ER_TABLE_IN_SHARED_TABLESPACE = 4131; +exports.ER_INDEX_OTHER_THAN_PK = 4132; +exports.ER_LOAD_BULK_DATA_UNSORTED = 4133; +exports.ER_BULK_EXECUTOR_ERROR = 4134; +exports.ER_BULK_READER_LIBCURL_INIT_FAILED = 4135; +exports.ER_BULK_READER_LIBCURL_ERROR = 4136; +exports.ER_BULK_READER_SERVER_ERROR = 4137; +exports.ER_BULK_READER_COMMUNICATION_ERROR = 4138; +exports.ER_BULK_LOAD_DATA_FAILED = 4139; +exports.ER_BULK_LOADER_COLUMN_TOO_BIG_FOR_LEFTOVER_BUFFER = 4140; +exports.ER_BULK_LOADER_COMPONENT_ERROR = 4141; +exports.ER_BULK_LOADER_FILE_CONTAINS_LESS_LINES_THAN_IGNORE_CLAUSE = 4142; +exports.ER_BULK_PARSER_MISSING_ENCLOSED_BY = 4143; +exports.ER_BULK_PARSER_ROW_BUFFER_MAX_TOTAL_COLS_EXCEEDED = 4144; +exports.ER_BULK_PARSER_COPY_BUFFER_SIZE_EXCEEDED = 4145; +exports.ER_BULK_PARSER_UNEXPECTED_END_OF_INPUT = 4146; +exports.ER_BULK_PARSER_UNEXPECTED_ROW_TERMINATOR = 4147; +exports.ER_BULK_PARSER_UNEXPECTED_CHAR_AFTER_ENDING_ENCLOSED_BY = 4148; +exports.ER_BULK_PARSER_UNEXPECTED_CHAR_AFTER_NULL_ESCAPE = 4149; +exports.ER_BULK_PARSER_UNEXPECTED_CHAR_AFTER_COLUMN_TERMINATOR = 4150; +exports.ER_BULK_PARSER_INCOMPLETE_ESCAPE_SEQUENCE = 4151; +exports.ER_LOAD_BULK_DATA_FAILED = 4152; +exports.ER_LOAD_BULK_DATA_WRONG_VALUE_FOR_FIELD = 4153; +exports.ER_LOAD_BULK_DATA_WARN_NULL_TO_NOTNULL = 4154; +exports.ER_REQUIRE_TABLE_PRIMARY_KEY_CHECK_GENERATE_WITH_GR = 4155; +exports.ER_CANT_CHANGE_SYS_VAR_IN_READ_ONLY_MODE = 4156; +exports.ER_INNODB_INSTANT_ADD_DROP_NOT_SUPPORTED_MAX_SIZE = 4157; +exports.ER_INNODB_INSTANT_ADD_NOT_SUPPORTED_MAX_FIELDS = 4158; +exports.ER_CANT_SET_PERSISTED = 4159; +exports.ER_INSTALL_COMPONENT_SET_NULL_VALUE = 4160; +exports.ER_INSTALL_COMPONENT_SET_UNUSED_VALUE = 4161; +exports.ER_WARN_DEPRECATED_USER_DEFINED_COLLATIONS = 4162; + +// Lookup-by-number table +exports[1] = 'EE_CANTCREATEFILE'; +exports[2] = 'EE_READ'; +exports[3] = 'EE_WRITE'; +exports[4] = 'EE_BADCLOSE'; +exports[5] = 'EE_OUTOFMEMORY'; +exports[6] = 'EE_DELETE'; +exports[7] = 'EE_LINK'; +exports[9] = 'EE_EOFERR'; +exports[10] = 'EE_CANTLOCK'; +exports[11] = 'EE_CANTUNLOCK'; +exports[12] = 'EE_DIR'; +exports[13] = 'EE_STAT'; +exports[14] = 'EE_CANT_CHSIZE'; +exports[15] = 'EE_CANT_OPEN_STREAM'; +exports[16] = 'EE_GETWD'; +exports[17] = 'EE_SETWD'; +exports[18] = 'EE_LINK_WARNING'; +exports[19] = 'EE_OPEN_WARNING'; +exports[20] = 'EE_DISK_FULL'; +exports[21] = 'EE_CANT_MKDIR'; +exports[22] = 'EE_UNKNOWN_CHARSET'; +exports[23] = 'EE_OUT_OF_FILERESOURCES'; +exports[24] = 'EE_CANT_READLINK'; +exports[25] = 'EE_CANT_SYMLINK'; +exports[26] = 'EE_REALPATH'; +exports[27] = 'EE_SYNC'; +exports[28] = 'EE_UNKNOWN_COLLATION'; +exports[29] = 'EE_FILENOTFOUND'; +exports[30] = 'EE_FILE_NOT_CLOSED'; +exports[31] = 'EE_CHANGE_OWNERSHIP'; +exports[32] = 'EE_CHANGE_PERMISSIONS'; +exports[33] = 'EE_CANT_SEEK'; +exports[34] = 'EE_CAPACITY_EXCEEDED'; +exports[35] = 'EE_DISK_FULL_WITH_RETRY_MSG'; +exports[36] = 'EE_FAILED_TO_CREATE_TIMER'; +exports[37] = 'EE_FAILED_TO_DELETE_TIMER'; +exports[38] = 'EE_FAILED_TO_CREATE_TIMER_QUEUE'; +exports[39] = 'EE_FAILED_TO_START_TIMER_NOTIFY_THREAD'; +exports[40] = 'EE_FAILED_TO_CREATE_TIMER_NOTIFY_THREAD_INTERRUPT_EVENT'; +exports[41] = 'EE_EXITING_TIMER_NOTIFY_THREAD'; +exports[42] = 'EE_WIN_LIBRARY_LOAD_FAILED'; +exports[43] = 'EE_WIN_RUN_TIME_ERROR_CHECK'; +exports[44] = 'EE_FAILED_TO_DETERMINE_LARGE_PAGE_SIZE'; +exports[45] = 'EE_FAILED_TO_KILL_ALL_THREADS'; +exports[46] = 'EE_FAILED_TO_CREATE_IO_COMPLETION_PORT'; +exports[47] = 'EE_FAILED_TO_OPEN_DEFAULTS_FILE'; +exports[48] = 'EE_FAILED_TO_HANDLE_DEFAULTS_FILE'; +exports[49] = 'EE_WRONG_DIRECTIVE_IN_CONFIG_FILE'; +exports[50] = 'EE_SKIPPING_DIRECTIVE_DUE_TO_MAX_INCLUDE_RECURSION'; +exports[51] = 'EE_INCORRECT_GRP_DEFINITION_IN_CONFIG_FILE'; +exports[52] = 'EE_OPTION_WITHOUT_GRP_IN_CONFIG_FILE'; +exports[53] = 'EE_CONFIG_FILE_PERMISSION_ERROR'; +exports[54] = 'EE_IGNORE_WORLD_WRITABLE_CONFIG_FILE'; +exports[55] = 'EE_USING_DISABLED_OPTION'; +exports[56] = 'EE_USING_DISABLED_SHORT_OPTION'; +exports[57] = 'EE_USING_PASSWORD_ON_CLI_IS_INSECURE'; +exports[58] = 'EE_UNKNOWN_SUFFIX_FOR_VARIABLE'; +exports[59] = 'EE_SSL_ERROR_FROM_FILE'; +exports[60] = 'EE_SSL_ERROR'; +exports[61] = 'EE_NET_SEND_ERROR_IN_BOOTSTRAP'; +exports[62] = 'EE_PACKETS_OUT_OF_ORDER'; +exports[63] = 'EE_UNKNOWN_PROTOCOL_OPTION'; +exports[64] = 'EE_FAILED_TO_LOCATE_SERVER_PUBLIC_KEY'; +exports[65] = 'EE_PUBLIC_KEY_NOT_IN_PEM_FORMAT'; +exports[66] = 'EE_DEBUG_INFO'; +exports[67] = 'EE_UNKNOWN_VARIABLE'; +exports[68] = 'EE_UNKNOWN_OPTION'; +exports[69] = 'EE_UNKNOWN_SHORT_OPTION'; +exports[70] = 'EE_OPTION_WITHOUT_ARGUMENT'; +exports[71] = 'EE_OPTION_REQUIRES_ARGUMENT'; +exports[72] = 'EE_SHORT_OPTION_REQUIRES_ARGUMENT'; +exports[73] = 'EE_OPTION_IGNORED_DUE_TO_INVALID_VALUE'; +exports[74] = 'EE_OPTION_WITH_EMPTY_VALUE'; +exports[75] = 'EE_FAILED_TO_ASSIGN_MAX_VALUE_TO_OPTION'; +exports[76] = 'EE_INCORRECT_BOOLEAN_VALUE_FOR_OPTION'; +exports[77] = 'EE_FAILED_TO_SET_OPTION_VALUE'; +exports[78] = 'EE_INCORRECT_INT_VALUE_FOR_OPTION'; +exports[79] = 'EE_INCORRECT_UINT_VALUE_FOR_OPTION'; +exports[80] = 'EE_ADJUSTED_SIGNED_VALUE_FOR_OPTION'; +exports[81] = 'EE_ADJUSTED_UNSIGNED_VALUE_FOR_OPTION'; +exports[82] = 'EE_ADJUSTED_ULONGLONG_VALUE_FOR_OPTION'; +exports[83] = 'EE_ADJUSTED_DOUBLE_VALUE_FOR_OPTION'; +exports[84] = 'EE_INVALID_DECIMAL_VALUE_FOR_OPTION'; +exports[85] = 'EE_COLLATION_PARSER_ERROR'; +exports[86] = 'EE_FAILED_TO_RESET_BEFORE_PRIMARY_IGNORABLE_CHAR'; +exports[87] = 'EE_FAILED_TO_RESET_BEFORE_TERTIARY_IGNORABLE_CHAR'; +exports[88] = 'EE_SHIFT_CHAR_OUT_OF_RANGE'; +exports[89] = 'EE_RESET_CHAR_OUT_OF_RANGE'; +exports[90] = 'EE_UNKNOWN_LDML_TAG'; +exports[91] = 'EE_FAILED_TO_RESET_BEFORE_SECONDARY_IGNORABLE_CHAR'; +exports[92] = 'EE_FAILED_PROCESSING_DIRECTIVE'; +exports[93] = 'EE_PTHREAD_KILL_FAILED'; +exports[120] = 'HA_ERR_KEY_NOT_FOUND'; +exports[121] = 'HA_ERR_FOUND_DUPP_KEY'; +exports[122] = 'HA_ERR_INTERNAL_ERROR'; +exports[123] = 'HA_ERR_RECORD_CHANGED'; +exports[124] = 'HA_ERR_WRONG_INDEX'; +exports[125] = 'HA_ERR_ROLLED_BACK'; +exports[126] = 'HA_ERR_CRASHED'; +exports[127] = 'HA_ERR_WRONG_IN_RECORD'; +exports[128] = 'HA_ERR_OUT_OF_MEM'; +exports[130] = 'HA_ERR_NOT_A_TABLE'; +exports[131] = 'HA_ERR_WRONG_COMMAND'; +exports[132] = 'HA_ERR_OLD_FILE'; +exports[133] = 'HA_ERR_NO_ACTIVE_RECORD'; +exports[134] = 'HA_ERR_RECORD_DELETED'; +exports[135] = 'HA_ERR_RECORD_FILE_FULL'; +exports[136] = 'HA_ERR_INDEX_FILE_FULL'; +exports[137] = 'HA_ERR_END_OF_FILE'; +exports[138] = 'HA_ERR_UNSUPPORTED'; +exports[139] = 'HA_ERR_TOO_BIG_ROW'; +exports[140] = 'HA_WRONG_CREATE_OPTION'; +exports[141] = 'HA_ERR_FOUND_DUPP_UNIQUE'; +exports[142] = 'HA_ERR_UNKNOWN_CHARSET'; +exports[143] = 'HA_ERR_WRONG_MRG_TABLE_DEF'; +exports[144] = 'HA_ERR_CRASHED_ON_REPAIR'; +exports[145] = 'HA_ERR_CRASHED_ON_USAGE'; +exports[146] = 'HA_ERR_LOCK_WAIT_TIMEOUT'; +exports[147] = 'HA_ERR_LOCK_TABLE_FULL'; +exports[148] = 'HA_ERR_READ_ONLY_TRANSACTION'; +exports[149] = 'HA_ERR_LOCK_DEADLOCK'; +exports[150] = 'HA_ERR_CANNOT_ADD_FOREIGN'; +exports[151] = 'HA_ERR_NO_REFERENCED_ROW'; +exports[152] = 'HA_ERR_ROW_IS_REFERENCED'; +exports[153] = 'HA_ERR_NO_SAVEPOINT'; +exports[154] = 'HA_ERR_NON_UNIQUE_BLOCK_SIZE'; +exports[155] = 'HA_ERR_NO_SUCH_TABLE'; +exports[156] = 'HA_ERR_TABLE_EXIST'; +exports[157] = 'HA_ERR_NO_CONNECTION'; +exports[158] = 'HA_ERR_NULL_IN_SPATIAL'; +exports[159] = 'HA_ERR_TABLE_DEF_CHANGED'; +exports[160] = 'HA_ERR_NO_PARTITION_FOUND'; +exports[161] = 'HA_ERR_RBR_LOGGING_FAILED'; +exports[162] = 'HA_ERR_DROP_INDEX_FK'; +exports[163] = 'HA_ERR_FOREIGN_DUPLICATE_KEY'; +exports[164] = 'HA_ERR_TABLE_NEEDS_UPGRADE'; +exports[165] = 'HA_ERR_TABLE_READONLY'; +exports[166] = 'HA_ERR_AUTOINC_READ_FAILED'; +exports[167] = 'HA_ERR_AUTOINC_ERANGE'; +exports[168] = 'HA_ERR_GENERIC'; +exports[169] = 'HA_ERR_RECORD_IS_THE_SAME'; +exports[170] = 'HA_ERR_LOGGING_IMPOSSIBLE'; +exports[171] = 'HA_ERR_CORRUPT_EVENT'; +exports[172] = 'HA_ERR_NEW_FILE'; +exports[173] = 'HA_ERR_ROWS_EVENT_APPLY'; +exports[174] = 'HA_ERR_INITIALIZATION'; +exports[175] = 'HA_ERR_FILE_TOO_SHORT'; +exports[176] = 'HA_ERR_WRONG_CRC'; +exports[177] = 'HA_ERR_TOO_MANY_CONCURRENT_TRXS'; +exports[178] = 'HA_ERR_NOT_IN_LOCK_PARTITIONS'; +exports[179] = 'HA_ERR_INDEX_COL_TOO_LONG'; +exports[180] = 'HA_ERR_INDEX_CORRUPT'; +exports[181] = 'HA_ERR_UNDO_REC_TOO_BIG'; +exports[182] = 'HA_FTS_INVALID_DOCID'; +exports[183] = 'HA_ERR_TABLE_IN_FK_CHECK'; +exports[184] = 'HA_ERR_TABLESPACE_EXISTS'; +exports[185] = 'HA_ERR_TOO_MANY_FIELDS'; +exports[186] = 'HA_ERR_ROW_IN_WRONG_PARTITION'; +exports[187] = 'HA_ERR_INNODB_READ_ONLY'; +exports[188] = 'HA_ERR_FTS_EXCEED_RESULT_CACHE_LIMIT'; +exports[189] = 'HA_ERR_TEMP_FILE_WRITE_FAILURE'; +exports[190] = 'HA_ERR_INNODB_FORCED_RECOVERY'; +exports[191] = 'HA_ERR_FTS_TOO_MANY_WORDS_IN_PHRASE'; +exports[192] = 'HA_ERR_FK_DEPTH_EXCEEDED'; +exports[193] = 'HA_MISSING_CREATE_OPTION'; +exports[194] = 'HA_ERR_SE_OUT_OF_MEMORY'; +exports[195] = 'HA_ERR_TABLE_CORRUPT'; +exports[196] = 'HA_ERR_QUERY_INTERRUPTED'; +exports[197] = 'HA_ERR_TABLESPACE_MISSING'; +exports[198] = 'HA_ERR_TABLESPACE_IS_NOT_EMPTY'; +exports[199] = 'HA_ERR_WRONG_FILE_NAME'; +exports[200] = 'HA_ERR_NOT_ALLOWED_COMMAND'; +exports[201] = 'HA_ERR_COMPUTE_FAILED'; +exports[202] = 'HA_ERR_ROW_FORMAT_CHANGED'; +exports[203] = 'HA_ERR_NO_WAIT_LOCK'; +exports[204] = 'HA_ERR_DISK_FULL_NOWAIT'; +exports[205] = 'HA_ERR_NO_SESSION_TEMP'; +exports[206] = 'HA_ERR_WRONG_TABLE_NAME'; +exports[207] = 'HA_ERR_TOO_LONG_PATH'; +exports[208] = 'HA_ERR_SAMPLING_INIT_FAILED'; +exports[209] = 'HA_ERR_FTS_TOO_MANY_NESTED_EXP'; +exports[1000] = 'ER_HASHCHK'; +exports[1001] = 'ER_NISAMCHK'; +exports[1002] = 'ER_NO'; +exports[1003] = 'ER_YES'; +exports[1004] = 'ER_CANT_CREATE_FILE'; +exports[1005] = 'ER_CANT_CREATE_TABLE'; +exports[1006] = 'ER_CANT_CREATE_DB'; +exports[1007] = 'ER_DB_CREATE_EXISTS'; +exports[1008] = 'ER_DB_DROP_EXISTS'; +exports[1009] = 'ER_DB_DROP_DELETE'; +exports[1010] = 'ER_DB_DROP_RMDIR'; +exports[1011] = 'ER_CANT_DELETE_FILE'; +exports[1012] = 'ER_CANT_FIND_SYSTEM_REC'; +exports[1013] = 'ER_CANT_GET_STAT'; +exports[1014] = 'ER_CANT_GET_WD'; +exports[1015] = 'ER_CANT_LOCK'; +exports[1016] = 'ER_CANT_OPEN_FILE'; +exports[1017] = 'ER_FILE_NOT_FOUND'; +exports[1018] = 'ER_CANT_READ_DIR'; +exports[1019] = 'ER_CANT_SET_WD'; +exports[1020] = 'ER_CHECKREAD'; +exports[1021] = 'ER_DISK_FULL'; +exports[1022] = 'ER_DUP_KEY'; +exports[1023] = 'ER_ERROR_ON_CLOSE'; +exports[1024] = 'ER_ERROR_ON_READ'; +exports[1025] = 'ER_ERROR_ON_RENAME'; +exports[1026] = 'ER_ERROR_ON_WRITE'; +exports[1027] = 'ER_FILE_USED'; +exports[1028] = 'ER_FILSORT_ABORT'; +exports[1029] = 'ER_FORM_NOT_FOUND'; +exports[1030] = 'ER_GET_ERRNO'; +exports[1031] = 'ER_ILLEGAL_HA'; +exports[1032] = 'ER_KEY_NOT_FOUND'; +exports[1033] = 'ER_NOT_FORM_FILE'; +exports[1034] = 'ER_NOT_KEYFILE'; +exports[1035] = 'ER_OLD_KEYFILE'; +exports[1036] = 'ER_OPEN_AS_READONLY'; +exports[1037] = 'ER_OUTOFMEMORY'; +exports[1038] = 'ER_OUT_OF_SORTMEMORY'; +exports[1039] = 'ER_UNEXPECTED_EOF'; +exports[1040] = 'ER_CON_COUNT_ERROR'; +exports[1041] = 'ER_OUT_OF_RESOURCES'; +exports[1042] = 'ER_BAD_HOST_ERROR'; +exports[1043] = 'ER_HANDSHAKE_ERROR'; +exports[1044] = 'ER_DBACCESS_DENIED_ERROR'; +exports[1045] = 'ER_ACCESS_DENIED_ERROR'; +exports[1046] = 'ER_NO_DB_ERROR'; +exports[1047] = 'ER_UNKNOWN_COM_ERROR'; +exports[1048] = 'ER_BAD_NULL_ERROR'; +exports[1049] = 'ER_BAD_DB_ERROR'; +exports[1050] = 'ER_TABLE_EXISTS_ERROR'; +exports[1051] = 'ER_BAD_TABLE_ERROR'; +exports[1052] = 'ER_NON_UNIQ_ERROR'; +exports[1053] = 'ER_SERVER_SHUTDOWN'; +exports[1054] = 'ER_BAD_FIELD_ERROR'; +exports[1055] = 'ER_WRONG_FIELD_WITH_GROUP'; +exports[1056] = 'ER_WRONG_GROUP_FIELD'; +exports[1057] = 'ER_WRONG_SUM_SELECT'; +exports[1058] = 'ER_WRONG_VALUE_COUNT'; +exports[1059] = 'ER_TOO_LONG_IDENT'; +exports[1060] = 'ER_DUP_FIELDNAME'; +exports[1061] = 'ER_DUP_KEYNAME'; +exports[1062] = 'ER_DUP_ENTRY'; +exports[1063] = 'ER_WRONG_FIELD_SPEC'; +exports[1064] = 'ER_PARSE_ERROR'; +exports[1065] = 'ER_EMPTY_QUERY'; +exports[1066] = 'ER_NONUNIQ_TABLE'; +exports[1067] = 'ER_INVALID_DEFAULT'; +exports[1068] = 'ER_MULTIPLE_PRI_KEY'; +exports[1069] = 'ER_TOO_MANY_KEYS'; +exports[1070] = 'ER_TOO_MANY_KEY_PARTS'; +exports[1071] = 'ER_TOO_LONG_KEY'; +exports[1072] = 'ER_KEY_COLUMN_DOES_NOT_EXITS'; +exports[1073] = 'ER_BLOB_USED_AS_KEY'; +exports[1074] = 'ER_TOO_BIG_FIELDLENGTH'; +exports[1075] = 'ER_WRONG_AUTO_KEY'; +exports[1076] = 'ER_READY'; +exports[1077] = 'ER_NORMAL_SHUTDOWN'; +exports[1078] = 'ER_GOT_SIGNAL'; +exports[1079] = 'ER_SHUTDOWN_COMPLETE'; +exports[1080] = 'ER_FORCING_CLOSE'; +exports[1081] = 'ER_IPSOCK_ERROR'; +exports[1082] = 'ER_NO_SUCH_INDEX'; +exports[1083] = 'ER_WRONG_FIELD_TERMINATORS'; +exports[1084] = 'ER_BLOBS_AND_NO_TERMINATED'; +exports[1085] = 'ER_TEXTFILE_NOT_READABLE'; +exports[1086] = 'ER_FILE_EXISTS_ERROR'; +exports[1087] = 'ER_LOAD_INFO'; +exports[1088] = 'ER_ALTER_INFO'; +exports[1089] = 'ER_WRONG_SUB_KEY'; +exports[1090] = 'ER_CANT_REMOVE_ALL_FIELDS'; +exports[1091] = 'ER_CANT_DROP_FIELD_OR_KEY'; +exports[1092] = 'ER_INSERT_INFO'; +exports[1093] = 'ER_UPDATE_TABLE_USED'; +exports[1094] = 'ER_NO_SUCH_THREAD'; +exports[1095] = 'ER_KILL_DENIED_ERROR'; +exports[1096] = 'ER_NO_TABLES_USED'; +exports[1097] = 'ER_TOO_BIG_SET'; +exports[1098] = 'ER_NO_UNIQUE_LOGFILE'; +exports[1099] = 'ER_TABLE_NOT_LOCKED_FOR_WRITE'; +exports[1100] = 'ER_TABLE_NOT_LOCKED'; +exports[1101] = 'ER_BLOB_CANT_HAVE_DEFAULT'; +exports[1102] = 'ER_WRONG_DB_NAME'; +exports[1103] = 'ER_WRONG_TABLE_NAME'; +exports[1104] = 'ER_TOO_BIG_SELECT'; +exports[1105] = 'ER_UNKNOWN_ERROR'; +exports[1106] = 'ER_UNKNOWN_PROCEDURE'; +exports[1107] = 'ER_WRONG_PARAMCOUNT_TO_PROCEDURE'; +exports[1108] = 'ER_WRONG_PARAMETERS_TO_PROCEDURE'; +exports[1109] = 'ER_UNKNOWN_TABLE'; +exports[1110] = 'ER_FIELD_SPECIFIED_TWICE'; +exports[1111] = 'ER_INVALID_GROUP_FUNC_USE'; +exports[1112] = 'ER_UNSUPPORTED_EXTENSION'; +exports[1113] = 'ER_TABLE_MUST_HAVE_COLUMNS'; +exports[1114] = 'ER_RECORD_FILE_FULL'; +exports[1115] = 'ER_UNKNOWN_CHARACTER_SET'; +exports[1116] = 'ER_TOO_MANY_TABLES'; +exports[1117] = 'ER_TOO_MANY_FIELDS'; +exports[1118] = 'ER_TOO_BIG_ROWSIZE'; +exports[1119] = 'ER_STACK_OVERRUN'; +exports[1120] = 'ER_WRONG_OUTER_JOIN'; +exports[1121] = 'ER_NULL_COLUMN_IN_INDEX'; +exports[1122] = 'ER_CANT_FIND_UDF'; +exports[1123] = 'ER_CANT_INITIALIZE_UDF'; +exports[1124] = 'ER_UDF_NO_PATHS'; +exports[1125] = 'ER_UDF_EXISTS'; +exports[1126] = 'ER_CANT_OPEN_LIBRARY'; +exports[1127] = 'ER_CANT_FIND_DL_ENTRY'; +exports[1128] = 'ER_FUNCTION_NOT_DEFINED'; +exports[1129] = 'ER_HOST_IS_BLOCKED'; +exports[1130] = 'ER_HOST_NOT_PRIVILEGED'; +exports[1131] = 'ER_PASSWORD_ANONYMOUS_USER'; +exports[1132] = 'ER_PASSWORD_NOT_ALLOWED'; +exports[1133] = 'ER_PASSWORD_NO_MATCH'; +exports[1134] = 'ER_UPDATE_INFO'; +exports[1135] = 'ER_CANT_CREATE_THREAD'; +exports[1136] = 'ER_WRONG_VALUE_COUNT_ON_ROW'; +exports[1137] = 'ER_CANT_REOPEN_TABLE'; +exports[1138] = 'ER_INVALID_USE_OF_NULL'; +exports[1139] = 'ER_REGEXP_ERROR'; +exports[1140] = 'ER_MIX_OF_GROUP_FUNC_AND_FIELDS'; +exports[1141] = 'ER_NONEXISTING_GRANT'; +exports[1142] = 'ER_TABLEACCESS_DENIED_ERROR'; +exports[1143] = 'ER_COLUMNACCESS_DENIED_ERROR'; +exports[1144] = 'ER_ILLEGAL_GRANT_FOR_TABLE'; +exports[1145] = 'ER_GRANT_WRONG_HOST_OR_USER'; +exports[1146] = 'ER_NO_SUCH_TABLE'; +exports[1147] = 'ER_NONEXISTING_TABLE_GRANT'; +exports[1148] = 'ER_NOT_ALLOWED_COMMAND'; +exports[1149] = 'ER_SYNTAX_ERROR'; +exports[1150] = 'ER_UNUSED1'; +exports[1151] = 'ER_UNUSED2'; +exports[1152] = 'ER_ABORTING_CONNECTION'; +exports[1153] = 'ER_NET_PACKET_TOO_LARGE'; +exports[1154] = 'ER_NET_READ_ERROR_FROM_PIPE'; +exports[1155] = 'ER_NET_FCNTL_ERROR'; +exports[1156] = 'ER_NET_PACKETS_OUT_OF_ORDER'; +exports[1157] = 'ER_NET_UNCOMPRESS_ERROR'; +exports[1158] = 'ER_NET_READ_ERROR'; +exports[1159] = 'ER_NET_READ_INTERRUPTED'; +exports[1160] = 'ER_NET_ERROR_ON_WRITE'; +exports[1161] = 'ER_NET_WRITE_INTERRUPTED'; +exports[1162] = 'ER_TOO_LONG_STRING'; +exports[1163] = 'ER_TABLE_CANT_HANDLE_BLOB'; +exports[1164] = 'ER_TABLE_CANT_HANDLE_AUTO_INCREMENT'; +exports[1165] = 'ER_UNUSED3'; +exports[1166] = 'ER_WRONG_COLUMN_NAME'; +exports[1167] = 'ER_WRONG_KEY_COLUMN'; +exports[1168] = 'ER_WRONG_MRG_TABLE'; +exports[1169] = 'ER_DUP_UNIQUE'; +exports[1170] = 'ER_BLOB_KEY_WITHOUT_LENGTH'; +exports[1171] = 'ER_PRIMARY_CANT_HAVE_NULL'; +exports[1172] = 'ER_TOO_MANY_ROWS'; +exports[1173] = 'ER_REQUIRES_PRIMARY_KEY'; +exports[1174] = 'ER_NO_RAID_COMPILED'; +exports[1175] = 'ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE'; +exports[1176] = 'ER_KEY_DOES_NOT_EXITS'; +exports[1177] = 'ER_CHECK_NO_SUCH_TABLE'; +exports[1178] = 'ER_CHECK_NOT_IMPLEMENTED'; +exports[1179] = 'ER_CANT_DO_THIS_DURING_AN_TRANSACTION'; +exports[1180] = 'ER_ERROR_DURING_COMMIT'; +exports[1181] = 'ER_ERROR_DURING_ROLLBACK'; +exports[1182] = 'ER_ERROR_DURING_FLUSH_LOGS'; +exports[1183] = 'ER_ERROR_DURING_CHECKPOINT'; +exports[1184] = 'ER_NEW_ABORTING_CONNECTION'; +exports[1185] = 'ER_DUMP_NOT_IMPLEMENTED'; +exports[1186] = 'ER_FLUSH_MASTER_BINLOG_CLOSED'; +exports[1187] = 'ER_INDEX_REBUILD'; +exports[1188] = 'ER_SOURCE'; +exports[1189] = 'ER_SOURCE_NET_READ'; +exports[1190] = 'ER_SOURCE_NET_WRITE'; +exports[1191] = 'ER_FT_MATCHING_KEY_NOT_FOUND'; +exports[1192] = 'ER_LOCK_OR_ACTIVE_TRANSACTION'; +exports[1193] = 'ER_UNKNOWN_SYSTEM_VARIABLE'; +exports[1194] = 'ER_CRASHED_ON_USAGE'; +exports[1195] = 'ER_CRASHED_ON_REPAIR'; +exports[1196] = 'ER_WARNING_NOT_COMPLETE_ROLLBACK'; +exports[1197] = 'ER_TRANS_CACHE_FULL'; +exports[1198] = 'ER_SLAVE_MUST_STOP'; +exports[1199] = 'ER_REPLICA_NOT_RUNNING'; +exports[1200] = 'ER_BAD_REPLICA'; +exports[1201] = 'ER_CONNECTION_METADATA'; +exports[1202] = 'ER_REPLICA_THREAD'; +exports[1203] = 'ER_TOO_MANY_USER_CONNECTIONS'; +exports[1204] = 'ER_SET_CONSTANTS_ONLY'; +exports[1205] = 'ER_LOCK_WAIT_TIMEOUT'; +exports[1206] = 'ER_LOCK_TABLE_FULL'; +exports[1207] = 'ER_READ_ONLY_TRANSACTION'; +exports[1208] = 'ER_DROP_DB_WITH_READ_LOCK'; +exports[1209] = 'ER_CREATE_DB_WITH_READ_LOCK'; +exports[1210] = 'ER_WRONG_ARGUMENTS'; +exports[1211] = 'ER_NO_PERMISSION_TO_CREATE_USER'; +exports[1212] = 'ER_UNION_TABLES_IN_DIFFERENT_DIR'; +exports[1213] = 'ER_LOCK_DEADLOCK'; +exports[1214] = 'ER_TABLE_CANT_HANDLE_FT'; +exports[1215] = 'ER_CANNOT_ADD_FOREIGN'; +exports[1216] = 'ER_NO_REFERENCED_ROW'; +exports[1217] = 'ER_ROW_IS_REFERENCED'; +exports[1218] = 'ER_CONNECT_TO_SOURCE'; +exports[1219] = 'ER_QUERY_ON_MASTER'; +exports[1220] = 'ER_ERROR_WHEN_EXECUTING_COMMAND'; +exports[1221] = 'ER_WRONG_USAGE'; +exports[1222] = 'ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT'; +exports[1223] = 'ER_CANT_UPDATE_WITH_READLOCK'; +exports[1224] = 'ER_MIXING_NOT_ALLOWED'; +exports[1225] = 'ER_DUP_ARGUMENT'; +exports[1226] = 'ER_USER_LIMIT_REACHED'; +exports[1227] = 'ER_SPECIFIC_ACCESS_DENIED_ERROR'; +exports[1228] = 'ER_LOCAL_VARIABLE'; +exports[1229] = 'ER_GLOBAL_VARIABLE'; +exports[1230] = 'ER_NO_DEFAULT'; +exports[1231] = 'ER_WRONG_VALUE_FOR_VAR'; +exports[1232] = 'ER_WRONG_TYPE_FOR_VAR'; +exports[1233] = 'ER_VAR_CANT_BE_READ'; +exports[1234] = 'ER_CANT_USE_OPTION_HERE'; +exports[1235] = 'ER_NOT_SUPPORTED_YET'; +exports[1236] = 'ER_SOURCE_FATAL_ERROR_READING_BINLOG'; +exports[1237] = 'ER_REPLICA_IGNORED_TABLE'; +exports[1238] = 'ER_INCORRECT_GLOBAL_LOCAL_VAR'; +exports[1239] = 'ER_WRONG_FK_DEF'; +exports[1240] = 'ER_KEY_REF_DO_NOT_MATCH_TABLE_REF'; +exports[1241] = 'ER_OPERAND_COLUMNS'; +exports[1242] = 'ER_SUBQUERY_NO_1_ROW'; +exports[1243] = 'ER_UNKNOWN_STMT_HANDLER'; +exports[1244] = 'ER_CORRUPT_HELP_DB'; +exports[1245] = 'ER_CYCLIC_REFERENCE'; +exports[1246] = 'ER_AUTO_CONVERT'; +exports[1247] = 'ER_ILLEGAL_REFERENCE'; +exports[1248] = 'ER_DERIVED_MUST_HAVE_ALIAS'; +exports[1249] = 'ER_SELECT_REDUCED'; +exports[1250] = 'ER_TABLENAME_NOT_ALLOWED_HERE'; +exports[1251] = 'ER_NOT_SUPPORTED_AUTH_MODE'; +exports[1252] = 'ER_SPATIAL_CANT_HAVE_NULL'; +exports[1253] = 'ER_COLLATION_CHARSET_MISMATCH'; +exports[1254] = 'ER_SLAVE_WAS_RUNNING'; +exports[1255] = 'ER_SLAVE_WAS_NOT_RUNNING'; +exports[1256] = 'ER_TOO_BIG_FOR_UNCOMPRESS'; +exports[1257] = 'ER_ZLIB_Z_MEM_ERROR'; +exports[1258] = 'ER_ZLIB_Z_BUF_ERROR'; +exports[1259] = 'ER_ZLIB_Z_DATA_ERROR'; +exports[1260] = 'ER_CUT_VALUE_GROUP_CONCAT'; +exports[1261] = 'ER_WARN_TOO_FEW_RECORDS'; +exports[1262] = 'ER_WARN_TOO_MANY_RECORDS'; +exports[1263] = 'ER_WARN_NULL_TO_NOTNULL'; +exports[1264] = 'ER_WARN_DATA_OUT_OF_RANGE'; +exports[1265] = 'WARN_DATA_TRUNCATED'; +exports[1266] = 'ER_WARN_USING_OTHER_HANDLER'; +exports[1267] = 'ER_CANT_AGGREGATE_2COLLATIONS'; +exports[1268] = 'ER_DROP_USER'; +exports[1269] = 'ER_REVOKE_GRANTS'; +exports[1270] = 'ER_CANT_AGGREGATE_3COLLATIONS'; +exports[1271] = 'ER_CANT_AGGREGATE_NCOLLATIONS'; +exports[1272] = 'ER_VARIABLE_IS_NOT_STRUCT'; +exports[1273] = 'ER_UNKNOWN_COLLATION'; +exports[1274] = 'ER_REPLICA_IGNORED_SSL_PARAMS'; +exports[1275] = 'ER_SERVER_IS_IN_SECURE_AUTH_MODE'; +exports[1276] = 'ER_WARN_FIELD_RESOLVED'; +exports[1277] = 'ER_BAD_REPLICA_UNTIL_COND'; +exports[1278] = 'ER_MISSING_SKIP_REPLICA'; +exports[1279] = 'ER_UNTIL_COND_IGNORED'; +exports[1280] = 'ER_WRONG_NAME_FOR_INDEX'; +exports[1281] = 'ER_WRONG_NAME_FOR_CATALOG'; +exports[1282] = 'ER_WARN_QC_RESIZE'; +exports[1283] = 'ER_BAD_FT_COLUMN'; +exports[1284] = 'ER_UNKNOWN_KEY_CACHE'; +exports[1285] = 'ER_WARN_HOSTNAME_WONT_WORK'; +exports[1286] = 'ER_UNKNOWN_STORAGE_ENGINE'; +exports[1287] = 'ER_WARN_DEPRECATED_SYNTAX'; +exports[1288] = 'ER_NON_UPDATABLE_TABLE'; +exports[1289] = 'ER_FEATURE_DISABLED'; +exports[1290] = 'ER_OPTION_PREVENTS_STATEMENT'; +exports[1291] = 'ER_DUPLICATED_VALUE_IN_TYPE'; +exports[1292] = 'ER_TRUNCATED_WRONG_VALUE'; +exports[1293] = 'ER_TOO_MUCH_AUTO_TIMESTAMP_COLS'; +exports[1294] = 'ER_INVALID_ON_UPDATE'; +exports[1295] = 'ER_UNSUPPORTED_PS'; +exports[1296] = 'ER_GET_ERRMSG'; +exports[1297] = 'ER_GET_TEMPORARY_ERRMSG'; +exports[1298] = 'ER_UNKNOWN_TIME_ZONE'; +exports[1299] = 'ER_WARN_INVALID_TIMESTAMP'; +exports[1300] = 'ER_INVALID_CHARACTER_STRING'; +exports[1301] = 'ER_WARN_ALLOWED_PACKET_OVERFLOWED'; +exports[1302] = 'ER_CONFLICTING_DECLARATIONS'; +exports[1303] = 'ER_SP_NO_RECURSIVE_CREATE'; +exports[1304] = 'ER_SP_ALREADY_EXISTS'; +exports[1305] = 'ER_SP_DOES_NOT_EXIST'; +exports[1306] = 'ER_SP_DROP_FAILED'; +exports[1307] = 'ER_SP_STORE_FAILED'; +exports[1308] = 'ER_SP_LILABEL_MISMATCH'; +exports[1309] = 'ER_SP_LABEL_REDEFINE'; +exports[1310] = 'ER_SP_LABEL_MISMATCH'; +exports[1311] = 'ER_SP_UNINIT_VAR'; +exports[1312] = 'ER_SP_BADSELECT'; +exports[1313] = 'ER_SP_BADRETURN'; +exports[1314] = 'ER_SP_BADSTATEMENT'; +exports[1315] = 'ER_UPDATE_LOG_DEPRECATED_IGNORED'; +exports[1316] = 'ER_UPDATE_LOG_DEPRECATED_TRANSLATED'; +exports[1317] = 'ER_QUERY_INTERRUPTED'; +exports[1318] = 'ER_SP_WRONG_NO_OF_ARGS'; +exports[1319] = 'ER_SP_COND_MISMATCH'; +exports[1320] = 'ER_SP_NORETURN'; +exports[1321] = 'ER_SP_NORETURNEND'; +exports[1322] = 'ER_SP_BAD_CURSOR_QUERY'; +exports[1323] = 'ER_SP_BAD_CURSOR_SELECT'; +exports[1324] = 'ER_SP_CURSOR_MISMATCH'; +exports[1325] = 'ER_SP_CURSOR_ALREADY_OPEN'; +exports[1326] = 'ER_SP_CURSOR_NOT_OPEN'; +exports[1327] = 'ER_SP_UNDECLARED_VAR'; +exports[1328] = 'ER_SP_WRONG_NO_OF_FETCH_ARGS'; +exports[1329] = 'ER_SP_FETCH_NO_DATA'; +exports[1330] = 'ER_SP_DUP_PARAM'; +exports[1331] = 'ER_SP_DUP_VAR'; +exports[1332] = 'ER_SP_DUP_COND'; +exports[1333] = 'ER_SP_DUP_CURS'; +exports[1334] = 'ER_SP_CANT_ALTER'; +exports[1335] = 'ER_SP_SUBSELECT_NYI'; +exports[1336] = 'ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG'; +exports[1337] = 'ER_SP_VARCOND_AFTER_CURSHNDLR'; +exports[1338] = 'ER_SP_CURSOR_AFTER_HANDLER'; +exports[1339] = 'ER_SP_CASE_NOT_FOUND'; +exports[1340] = 'ER_FPARSER_TOO_BIG_FILE'; +exports[1341] = 'ER_FPARSER_BAD_HEADER'; +exports[1342] = 'ER_FPARSER_EOF_IN_COMMENT'; +exports[1343] = 'ER_FPARSER_ERROR_IN_PARAMETER'; +exports[1344] = 'ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER'; +exports[1345] = 'ER_VIEW_NO_EXPLAIN'; +exports[1346] = 'ER_FRM_UNKNOWN_TYPE'; +exports[1347] = 'ER_WRONG_OBJECT'; +exports[1348] = 'ER_NONUPDATEABLE_COLUMN'; +exports[1349] = 'ER_VIEW_SELECT_DERIVED'; +exports[1350] = 'ER_VIEW_SELECT_CLAUSE'; +exports[1351] = 'ER_VIEW_SELECT_VARIABLE'; +exports[1352] = 'ER_VIEW_SELECT_TMPTABLE'; +exports[1353] = 'ER_VIEW_WRONG_LIST'; +exports[1354] = 'ER_WARN_VIEW_MERGE'; +exports[1355] = 'ER_WARN_VIEW_WITHOUT_KEY'; +exports[1356] = 'ER_VIEW_INVALID'; +exports[1357] = 'ER_SP_NO_DROP_SP'; +exports[1358] = 'ER_SP_GOTO_IN_HNDLR'; +exports[1359] = 'ER_TRG_ALREADY_EXISTS'; +exports[1360] = 'ER_TRG_DOES_NOT_EXIST'; +exports[1361] = 'ER_TRG_ON_VIEW_OR_TEMP_TABLE'; +exports[1362] = 'ER_TRG_CANT_CHANGE_ROW'; +exports[1363] = 'ER_TRG_NO_SUCH_ROW_IN_TRG'; +exports[1364] = 'ER_NO_DEFAULT_FOR_FIELD'; +exports[1365] = 'ER_DIVISION_BY_ZERO'; +exports[1366] = 'ER_TRUNCATED_WRONG_VALUE_FOR_FIELD'; +exports[1367] = 'ER_ILLEGAL_VALUE_FOR_TYPE'; +exports[1368] = 'ER_VIEW_NONUPD_CHECK'; +exports[1369] = 'ER_VIEW_CHECK_FAILED'; +exports[1370] = 'ER_PROCACCESS_DENIED_ERROR'; +exports[1371] = 'ER_RELAY_LOG_FAIL'; +exports[1372] = 'ER_PASSWD_LENGTH'; +exports[1373] = 'ER_UNKNOWN_TARGET_BINLOG'; +exports[1374] = 'ER_IO_ERR_LOG_INDEX_READ'; +exports[1375] = 'ER_BINLOG_PURGE_PROHIBITED'; +exports[1376] = 'ER_FSEEK_FAIL'; +exports[1377] = 'ER_BINLOG_PURGE_FATAL_ERR'; +exports[1378] = 'ER_LOG_IN_USE'; +exports[1379] = 'ER_LOG_PURGE_UNKNOWN_ERR'; +exports[1380] = 'ER_RELAY_LOG_INIT'; +exports[1381] = 'ER_NO_BINARY_LOGGING'; +exports[1382] = 'ER_RESERVED_SYNTAX'; +exports[1383] = 'ER_WSAS_FAILED'; +exports[1384] = 'ER_DIFF_GROUPS_PROC'; +exports[1385] = 'ER_NO_GROUP_FOR_PROC'; +exports[1386] = 'ER_ORDER_WITH_PROC'; +exports[1387] = 'ER_LOGGING_PROHIBIT_CHANGING_OF'; +exports[1388] = 'ER_NO_FILE_MAPPING'; +exports[1389] = 'ER_WRONG_MAGIC'; +exports[1390] = 'ER_PS_MANY_PARAM'; +exports[1391] = 'ER_KEY_PART_0'; +exports[1392] = 'ER_VIEW_CHECKSUM'; +exports[1393] = 'ER_VIEW_MULTIUPDATE'; +exports[1394] = 'ER_VIEW_NO_INSERT_FIELD_LIST'; +exports[1395] = 'ER_VIEW_DELETE_MERGE_VIEW'; +exports[1396] = 'ER_CANNOT_USER'; +exports[1397] = 'ER_XAER_NOTA'; +exports[1398] = 'ER_XAER_INVAL'; +exports[1399] = 'ER_XAER_RMFAIL'; +exports[1400] = 'ER_XAER_OUTSIDE'; +exports[1401] = 'ER_XAER_RMERR'; +exports[1402] = 'ER_XA_RBROLLBACK'; +exports[1403] = 'ER_NONEXISTING_PROC_GRANT'; +exports[1404] = 'ER_PROC_AUTO_GRANT_FAIL'; +exports[1405] = 'ER_PROC_AUTO_REVOKE_FAIL'; +exports[1406] = 'ER_DATA_TOO_LONG'; +exports[1407] = 'ER_SP_BAD_SQLSTATE'; +exports[1408] = 'ER_STARTUP'; +exports[1409] = 'ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR'; +exports[1410] = 'ER_CANT_CREATE_USER_WITH_GRANT'; +exports[1411] = 'ER_WRONG_VALUE_FOR_TYPE'; +exports[1412] = 'ER_TABLE_DEF_CHANGED'; +exports[1413] = 'ER_SP_DUP_HANDLER'; +exports[1414] = 'ER_SP_NOT_VAR_ARG'; +exports[1415] = 'ER_SP_NO_RETSET'; +exports[1416] = 'ER_CANT_CREATE_GEOMETRY_OBJECT'; +exports[1417] = 'ER_FAILED_ROUTINE_BREAK_BINLOG'; +exports[1418] = 'ER_BINLOG_UNSAFE_ROUTINE'; +exports[1419] = 'ER_BINLOG_CREATE_ROUTINE_NEED_SUPER'; +exports[1420] = 'ER_EXEC_STMT_WITH_OPEN_CURSOR'; +exports[1421] = 'ER_STMT_HAS_NO_OPEN_CURSOR'; +exports[1422] = 'ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG'; +exports[1423] = 'ER_NO_DEFAULT_FOR_VIEW_FIELD'; +exports[1424] = 'ER_SP_NO_RECURSION'; +exports[1425] = 'ER_TOO_BIG_SCALE'; +exports[1426] = 'ER_TOO_BIG_PRECISION'; +exports[1427] = 'ER_M_BIGGER_THAN_D'; +exports[1428] = 'ER_WRONG_LOCK_OF_SYSTEM_TABLE'; +exports[1429] = 'ER_CONNECT_TO_FOREIGN_DATA_SOURCE'; +exports[1430] = 'ER_QUERY_ON_FOREIGN_DATA_SOURCE'; +exports[1431] = 'ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST'; +exports[1432] = 'ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE'; +exports[1433] = 'ER_FOREIGN_DATA_STRING_INVALID'; +exports[1434] = 'ER_CANT_CREATE_FEDERATED_TABLE'; +exports[1435] = 'ER_TRG_IN_WRONG_SCHEMA'; +exports[1436] = 'ER_STACK_OVERRUN_NEED_MORE'; +exports[1437] = 'ER_TOO_LONG_BODY'; +exports[1438] = 'ER_WARN_CANT_DROP_DEFAULT_KEYCACHE'; +exports[1439] = 'ER_TOO_BIG_DISPLAYWIDTH'; +exports[1440] = 'ER_XAER_DUPID'; +exports[1441] = 'ER_DATETIME_FUNCTION_OVERFLOW'; +exports[1442] = 'ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG'; +exports[1443] = 'ER_VIEW_PREVENT_UPDATE'; +exports[1444] = 'ER_PS_NO_RECURSION'; +exports[1445] = 'ER_SP_CANT_SET_AUTOCOMMIT'; +exports[1446] = 'ER_MALFORMED_DEFINER'; +exports[1447] = 'ER_VIEW_FRM_NO_USER'; +exports[1448] = 'ER_VIEW_OTHER_USER'; +exports[1449] = 'ER_NO_SUCH_USER'; +exports[1450] = 'ER_FORBID_SCHEMA_CHANGE'; +exports[1451] = 'ER_ROW_IS_REFERENCED_2'; +exports[1452] = 'ER_NO_REFERENCED_ROW_2'; +exports[1453] = 'ER_SP_BAD_VAR_SHADOW'; +exports[1454] = 'ER_TRG_NO_DEFINER'; +exports[1455] = 'ER_OLD_FILE_FORMAT'; +exports[1456] = 'ER_SP_RECURSION_LIMIT'; +exports[1457] = 'ER_SP_PROC_TABLE_CORRUPT'; +exports[1458] = 'ER_SP_WRONG_NAME'; +exports[1459] = 'ER_TABLE_NEEDS_UPGRADE'; +exports[1460] = 'ER_SP_NO_AGGREGATE'; +exports[1461] = 'ER_MAX_PREPARED_STMT_COUNT_REACHED'; +exports[1462] = 'ER_VIEW_RECURSIVE'; +exports[1463] = 'ER_NON_GROUPING_FIELD_USED'; +exports[1464] = 'ER_TABLE_CANT_HANDLE_SPKEYS'; +exports[1465] = 'ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA'; +exports[1466] = 'ER_REMOVED_SPACES'; +exports[1467] = 'ER_AUTOINC_READ_FAILED'; +exports[1468] = 'ER_USERNAME'; +exports[1469] = 'ER_HOSTNAME'; +exports[1470] = 'ER_WRONG_STRING_LENGTH'; +exports[1471] = 'ER_NON_INSERTABLE_TABLE'; +exports[1472] = 'ER_ADMIN_WRONG_MRG_TABLE'; +exports[1473] = 'ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT'; +exports[1474] = 'ER_NAME_BECOMES_EMPTY'; +exports[1475] = 'ER_AMBIGUOUS_FIELD_TERM'; +exports[1476] = 'ER_FOREIGN_SERVER_EXISTS'; +exports[1477] = 'ER_FOREIGN_SERVER_DOESNT_EXIST'; +exports[1478] = 'ER_ILLEGAL_HA_CREATE_OPTION'; +exports[1479] = 'ER_PARTITION_REQUIRES_VALUES_ERROR'; +exports[1480] = 'ER_PARTITION_WRONG_VALUES_ERROR'; +exports[1481] = 'ER_PARTITION_MAXVALUE_ERROR'; +exports[1482] = 'ER_PARTITION_SUBPARTITION_ERROR'; +exports[1483] = 'ER_PARTITION_SUBPART_MIX_ERROR'; +exports[1484] = 'ER_PARTITION_WRONG_NO_PART_ERROR'; +exports[1485] = 'ER_PARTITION_WRONG_NO_SUBPART_ERROR'; +exports[1486] = 'ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR'; +exports[1487] = 'ER_NO_CONST_EXPR_IN_RANGE_OR_LIST_ERROR'; +exports[1488] = 'ER_FIELD_NOT_FOUND_PART_ERROR'; +exports[1489] = 'ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR'; +exports[1490] = 'ER_INCONSISTENT_PARTITION_INFO_ERROR'; +exports[1491] = 'ER_PARTITION_FUNC_NOT_ALLOWED_ERROR'; +exports[1492] = 'ER_PARTITIONS_MUST_BE_DEFINED_ERROR'; +exports[1493] = 'ER_RANGE_NOT_INCREASING_ERROR'; +exports[1494] = 'ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR'; +exports[1495] = 'ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR'; +exports[1496] = 'ER_PARTITION_ENTRY_ERROR'; +exports[1497] = 'ER_MIX_HANDLER_ERROR'; +exports[1498] = 'ER_PARTITION_NOT_DEFINED_ERROR'; +exports[1499] = 'ER_TOO_MANY_PARTITIONS_ERROR'; +exports[1500] = 'ER_SUBPARTITION_ERROR'; +exports[1501] = 'ER_CANT_CREATE_HANDLER_FILE'; +exports[1502] = 'ER_BLOB_FIELD_IN_PART_FUNC_ERROR'; +exports[1503] = 'ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF'; +exports[1504] = 'ER_NO_PARTS_ERROR'; +exports[1505] = 'ER_PARTITION_MGMT_ON_NONPARTITIONED'; +exports[1506] = 'ER_FOREIGN_KEY_ON_PARTITIONED'; +exports[1507] = 'ER_DROP_PARTITION_NON_EXISTENT'; +exports[1508] = 'ER_DROP_LAST_PARTITION'; +exports[1509] = 'ER_COALESCE_ONLY_ON_HASH_PARTITION'; +exports[1510] = 'ER_REORG_HASH_ONLY_ON_SAME_NO'; +exports[1511] = 'ER_REORG_NO_PARAM_ERROR'; +exports[1512] = 'ER_ONLY_ON_RANGE_LIST_PARTITION'; +exports[1513] = 'ER_ADD_PARTITION_SUBPART_ERROR'; +exports[1514] = 'ER_ADD_PARTITION_NO_NEW_PARTITION'; +exports[1515] = 'ER_COALESCE_PARTITION_NO_PARTITION'; +exports[1516] = 'ER_REORG_PARTITION_NOT_EXIST'; +exports[1517] = 'ER_SAME_NAME_PARTITION'; +exports[1518] = 'ER_NO_BINLOG_ERROR'; +exports[1519] = 'ER_CONSECUTIVE_REORG_PARTITIONS'; +exports[1520] = 'ER_REORG_OUTSIDE_RANGE'; +exports[1521] = 'ER_PARTITION_FUNCTION_FAILURE'; +exports[1522] = 'ER_PART_STATE_ERROR'; +exports[1523] = 'ER_LIMITED_PART_RANGE'; +exports[1524] = 'ER_PLUGIN_IS_NOT_LOADED'; +exports[1525] = 'ER_WRONG_VALUE'; +exports[1526] = 'ER_NO_PARTITION_FOR_GIVEN_VALUE'; +exports[1527] = 'ER_FILEGROUP_OPTION_ONLY_ONCE'; +exports[1528] = 'ER_CREATE_FILEGROUP_FAILED'; +exports[1529] = 'ER_DROP_FILEGROUP_FAILED'; +exports[1530] = 'ER_TABLESPACE_AUTO_EXTEND_ERROR'; +exports[1531] = 'ER_WRONG_SIZE_NUMBER'; +exports[1532] = 'ER_SIZE_OVERFLOW_ERROR'; +exports[1533] = 'ER_ALTER_FILEGROUP_FAILED'; +exports[1534] = 'ER_BINLOG_ROW_LOGGING_FAILED'; +exports[1535] = 'ER_BINLOG_ROW_WRONG_TABLE_DEF'; +exports[1536] = 'ER_BINLOG_ROW_RBR_TO_SBR'; +exports[1537] = 'ER_EVENT_ALREADY_EXISTS'; +exports[1538] = 'ER_EVENT_STORE_FAILED'; +exports[1539] = 'ER_EVENT_DOES_NOT_EXIST'; +exports[1540] = 'ER_EVENT_CANT_ALTER'; +exports[1541] = 'ER_EVENT_DROP_FAILED'; +exports[1542] = 'ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG'; +exports[1543] = 'ER_EVENT_ENDS_BEFORE_STARTS'; +exports[1544] = 'ER_EVENT_EXEC_TIME_IN_THE_PAST'; +exports[1545] = 'ER_EVENT_OPEN_TABLE_FAILED'; +exports[1546] = 'ER_EVENT_NEITHER_M_EXPR_NOR_M_AT'; +exports[1547] = 'ER_COL_COUNT_DOESNT_MATCH_CORRUPTED'; +exports[1548] = 'ER_CANNOT_LOAD_FROM_TABLE'; +exports[1549] = 'ER_EVENT_CANNOT_DELETE'; +exports[1550] = 'ER_EVENT_COMPILE_ERROR'; +exports[1551] = 'ER_EVENT_SAME_NAME'; +exports[1552] = 'ER_EVENT_DATA_TOO_LONG'; +exports[1553] = 'ER_DROP_INDEX_FK'; +exports[1554] = 'ER_WARN_DEPRECATED_SYNTAX_WITH_VER'; +exports[1555] = 'ER_CANT_WRITE_LOCK_LOG_TABLE'; +exports[1556] = 'ER_CANT_LOCK_LOG_TABLE'; +exports[1557] = 'ER_FOREIGN_DUPLICATE_KEY'; +exports[1558] = 'ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE'; +exports[1559] = 'ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR'; +exports[1560] = 'ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT'; +exports[1561] = 'ER_NDB_CANT_SWITCH_BINLOG_FORMAT'; +exports[1562] = 'ER_PARTITION_NO_TEMPORARY'; +exports[1563] = 'ER_PARTITION_CONST_DOMAIN_ERROR'; +exports[1564] = 'ER_PARTITION_FUNCTION_IS_NOT_ALLOWED'; +exports[1565] = 'ER_DDL_LOG_ERROR'; +exports[1566] = 'ER_NULL_IN_VALUES_LESS_THAN'; +exports[1567] = 'ER_WRONG_PARTITION_NAME'; +exports[1568] = 'ER_CANT_CHANGE_TX_CHARACTERISTICS'; +exports[1569] = 'ER_DUP_ENTRY_AUTOINCREMENT_CASE'; +exports[1570] = 'ER_EVENT_MODIFY_QUEUE_ERROR'; +exports[1571] = 'ER_EVENT_SET_VAR_ERROR'; +exports[1572] = 'ER_PARTITION_MERGE_ERROR'; +exports[1573] = 'ER_CANT_ACTIVATE_LOG'; +exports[1574] = 'ER_RBR_NOT_AVAILABLE'; +exports[1575] = 'ER_BASE64_DECODE_ERROR'; +exports[1576] = 'ER_EVENT_RECURSION_FORBIDDEN'; +exports[1577] = 'ER_EVENTS_DB_ERROR'; +exports[1578] = 'ER_ONLY_INTEGERS_ALLOWED'; +exports[1579] = 'ER_UNSUPORTED_LOG_ENGINE'; +exports[1580] = 'ER_BAD_LOG_STATEMENT'; +exports[1581] = 'ER_CANT_RENAME_LOG_TABLE'; +exports[1582] = 'ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT'; +exports[1583] = 'ER_WRONG_PARAMETERS_TO_NATIVE_FCT'; +exports[1584] = 'ER_WRONG_PARAMETERS_TO_STORED_FCT'; +exports[1585] = 'ER_NATIVE_FCT_NAME_COLLISION'; +exports[1586] = 'ER_DUP_ENTRY_WITH_KEY_NAME'; +exports[1587] = 'ER_BINLOG_PURGE_EMFILE'; +exports[1588] = 'ER_EVENT_CANNOT_CREATE_IN_THE_PAST'; +exports[1589] = 'ER_EVENT_CANNOT_ALTER_IN_THE_PAST'; +exports[1590] = 'ER_SLAVE_INCIDENT'; +exports[1591] = 'ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT'; +exports[1592] = 'ER_BINLOG_UNSAFE_STATEMENT'; +exports[1593] = 'ER_BINLOG_FATAL_ERROR'; +exports[1594] = 'ER_SLAVE_RELAY_LOG_READ_FAILURE'; +exports[1595] = 'ER_SLAVE_RELAY_LOG_WRITE_FAILURE'; +exports[1596] = 'ER_SLAVE_CREATE_EVENT_FAILURE'; +exports[1597] = 'ER_SLAVE_MASTER_COM_FAILURE'; +exports[1598] = 'ER_BINLOG_LOGGING_IMPOSSIBLE'; +exports[1599] = 'ER_VIEW_NO_CREATION_CTX'; +exports[1600] = 'ER_VIEW_INVALID_CREATION_CTX'; +exports[1601] = 'ER_SR_INVALID_CREATION_CTX'; +exports[1602] = 'ER_TRG_CORRUPTED_FILE'; +exports[1603] = 'ER_TRG_NO_CREATION_CTX'; +exports[1604] = 'ER_TRG_INVALID_CREATION_CTX'; +exports[1605] = 'ER_EVENT_INVALID_CREATION_CTX'; +exports[1606] = 'ER_TRG_CANT_OPEN_TABLE'; +exports[1607] = 'ER_CANT_CREATE_SROUTINE'; +exports[1608] = 'ER_NEVER_USED'; +exports[1609] = 'ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT'; +exports[1610] = 'ER_REPLICA_CORRUPT_EVENT'; +exports[1611] = 'ER_LOAD_DATA_INVALID_COLUMN'; +exports[1612] = 'ER_LOG_PURGE_NO_FILE'; +exports[1613] = 'ER_XA_RBTIMEOUT'; +exports[1614] = 'ER_XA_RBDEADLOCK'; +exports[1615] = 'ER_NEED_REPREPARE'; +exports[1616] = 'ER_DELAYED_NOT_SUPPORTED'; +exports[1617] = 'WARN_NO_CONNECTION_METADATA'; +exports[1618] = 'WARN_OPTION_IGNORED'; +exports[1619] = 'ER_PLUGIN_DELETE_BUILTIN'; +exports[1620] = 'WARN_PLUGIN_BUSY'; +exports[1621] = 'ER_VARIABLE_IS_READONLY'; +exports[1622] = 'ER_WARN_ENGINE_TRANSACTION_ROLLBACK'; +exports[1623] = 'ER_SLAVE_HEARTBEAT_FAILURE'; +exports[1624] = 'ER_REPLICA_HEARTBEAT_VALUE_OUT_OF_RANGE'; +exports[1625] = 'ER_NDB_REPLICATION_SCHEMA_ERROR'; +exports[1626] = 'ER_CONFLICT_FN_PARSE_ERROR'; +exports[1627] = 'ER_EXCEPTIONS_WRITE_ERROR'; +exports[1628] = 'ER_TOO_LONG_TABLE_COMMENT'; +exports[1629] = 'ER_TOO_LONG_FIELD_COMMENT'; +exports[1630] = 'ER_FUNC_INEXISTENT_NAME_COLLISION'; +exports[1631] = 'ER_DATABASE_NAME'; +exports[1632] = 'ER_TABLE_NAME'; +exports[1633] = 'ER_PARTITION_NAME'; +exports[1634] = 'ER_SUBPARTITION_NAME'; +exports[1635] = 'ER_TEMPORARY_NAME'; +exports[1636] = 'ER_RENAMED_NAME'; +exports[1637] = 'ER_TOO_MANY_CONCURRENT_TRXS'; +exports[1638] = 'WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED'; +exports[1639] = 'ER_DEBUG_SYNC_TIMEOUT'; +exports[1640] = 'ER_DEBUG_SYNC_HIT_LIMIT'; +exports[1641] = 'ER_DUP_SIGNAL_SET'; +exports[1642] = 'ER_SIGNAL_WARN'; +exports[1643] = 'ER_SIGNAL_NOT_FOUND'; +exports[1644] = 'ER_SIGNAL_EXCEPTION'; +exports[1645] = 'ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER'; +exports[1646] = 'ER_SIGNAL_BAD_CONDITION_TYPE'; +exports[1647] = 'WARN_COND_ITEM_TRUNCATED'; +exports[1648] = 'ER_COND_ITEM_TOO_LONG'; +exports[1649] = 'ER_UNKNOWN_LOCALE'; +exports[1650] = 'ER_REPLICA_IGNORE_SERVER_IDS'; +exports[1651] = 'ER_QUERY_CACHE_DISABLED'; +exports[1652] = 'ER_SAME_NAME_PARTITION_FIELD'; +exports[1653] = 'ER_PARTITION_COLUMN_LIST_ERROR'; +exports[1654] = 'ER_WRONG_TYPE_COLUMN_VALUE_ERROR'; +exports[1655] = 'ER_TOO_MANY_PARTITION_FUNC_FIELDS_ERROR'; +exports[1656] = 'ER_MAXVALUE_IN_VALUES_IN'; +exports[1657] = 'ER_TOO_MANY_VALUES_ERROR'; +exports[1658] = 'ER_ROW_SINGLE_PARTITION_FIELD_ERROR'; +exports[1659] = 'ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD'; +exports[1660] = 'ER_PARTITION_FIELDS_TOO_LONG'; +exports[1661] = 'ER_BINLOG_ROW_ENGINE_AND_STMT_ENGINE'; +exports[1662] = 'ER_BINLOG_ROW_MODE_AND_STMT_ENGINE'; +exports[1663] = 'ER_BINLOG_UNSAFE_AND_STMT_ENGINE'; +exports[1664] = 'ER_BINLOG_ROW_INJECTION_AND_STMT_ENGINE'; +exports[1665] = 'ER_BINLOG_STMT_MODE_AND_ROW_ENGINE'; +exports[1666] = 'ER_BINLOG_ROW_INJECTION_AND_STMT_MODE'; +exports[1667] = 'ER_BINLOG_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE'; +exports[1668] = 'ER_BINLOG_UNSAFE_LIMIT'; +exports[1669] = 'ER_UNUSED4'; +exports[1670] = 'ER_BINLOG_UNSAFE_SYSTEM_TABLE'; +exports[1671] = 'ER_BINLOG_UNSAFE_AUTOINC_COLUMNS'; +exports[1672] = 'ER_BINLOG_UNSAFE_UDF'; +exports[1673] = 'ER_BINLOG_UNSAFE_SYSTEM_VARIABLE'; +exports[1674] = 'ER_BINLOG_UNSAFE_SYSTEM_FUNCTION'; +exports[1675] = 'ER_BINLOG_UNSAFE_NONTRANS_AFTER_TRANS'; +exports[1676] = 'ER_MESSAGE_AND_STATEMENT'; +exports[1677] = 'ER_SLAVE_CONVERSION_FAILED'; +exports[1678] = 'ER_REPLICA_CANT_CREATE_CONVERSION'; +exports[1679] = 'ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT'; +exports[1680] = 'ER_PATH_LENGTH'; +exports[1681] = 'ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT'; +exports[1682] = 'ER_WRONG_NATIVE_TABLE_STRUCTURE'; +exports[1683] = 'ER_WRONG_PERFSCHEMA_USAGE'; +exports[1684] = 'ER_WARN_I_S_SKIPPED_TABLE'; +exports[1685] = 'ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_DIRECT'; +exports[1686] = 'ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_DIRECT'; +exports[1687] = 'ER_SPATIAL_MUST_HAVE_GEOM_COL'; +exports[1688] = 'ER_TOO_LONG_INDEX_COMMENT'; +exports[1689] = 'ER_LOCK_ABORTED'; +exports[1690] = 'ER_DATA_OUT_OF_RANGE'; +exports[1691] = 'ER_WRONG_SPVAR_TYPE_IN_LIMIT'; +exports[1692] = 'ER_BINLOG_UNSAFE_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE'; +exports[1693] = 'ER_BINLOG_UNSAFE_MIXED_STATEMENT'; +exports[1694] = 'ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SQL_LOG_BIN'; +exports[1695] = 'ER_STORED_FUNCTION_PREVENTS_SWITCH_SQL_LOG_BIN'; +exports[1696] = 'ER_FAILED_READ_FROM_PAR_FILE'; +exports[1697] = 'ER_VALUES_IS_NOT_INT_TYPE_ERROR'; +exports[1698] = 'ER_ACCESS_DENIED_NO_PASSWORD_ERROR'; +exports[1699] = 'ER_SET_PASSWORD_AUTH_PLUGIN'; +exports[1700] = 'ER_GRANT_PLUGIN_USER_EXISTS'; +exports[1701] = 'ER_TRUNCATE_ILLEGAL_FK'; +exports[1702] = 'ER_PLUGIN_IS_PERMANENT'; +exports[1703] = 'ER_REPLICA_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN'; +exports[1704] = 'ER_REPLICA_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX'; +exports[1705] = 'ER_STMT_CACHE_FULL'; +exports[1706] = 'ER_MULTI_UPDATE_KEY_CONFLICT'; +exports[1707] = 'ER_TABLE_NEEDS_REBUILD'; +exports[1708] = 'WARN_OPTION_BELOW_LIMIT'; +exports[1709] = 'ER_INDEX_COLUMN_TOO_LONG'; +exports[1710] = 'ER_ERROR_IN_TRIGGER_BODY'; +exports[1711] = 'ER_ERROR_IN_UNKNOWN_TRIGGER_BODY'; +exports[1712] = 'ER_INDEX_CORRUPT'; +exports[1713] = 'ER_UNDO_RECORD_TOO_BIG'; +exports[1714] = 'ER_BINLOG_UNSAFE_INSERT_IGNORE_SELECT'; +exports[1715] = 'ER_BINLOG_UNSAFE_INSERT_SELECT_UPDATE'; +exports[1716] = 'ER_BINLOG_UNSAFE_REPLACE_SELECT'; +exports[1717] = 'ER_BINLOG_UNSAFE_CREATE_IGNORE_SELECT'; +exports[1718] = 'ER_BINLOG_UNSAFE_CREATE_REPLACE_SELECT'; +exports[1719] = 'ER_BINLOG_UNSAFE_UPDATE_IGNORE'; +exports[1720] = 'ER_PLUGIN_NO_UNINSTALL'; +exports[1721] = 'ER_PLUGIN_NO_INSTALL'; +exports[1722] = 'ER_BINLOG_UNSAFE_WRITE_AUTOINC_SELECT'; +exports[1723] = 'ER_BINLOG_UNSAFE_CREATE_SELECT_AUTOINC'; +exports[1724] = 'ER_BINLOG_UNSAFE_INSERT_TWO_KEYS'; +exports[1725] = 'ER_TABLE_IN_FK_CHECK'; +exports[1726] = 'ER_UNSUPPORTED_ENGINE'; +exports[1727] = 'ER_BINLOG_UNSAFE_AUTOINC_NOT_FIRST'; +exports[1728] = 'ER_CANNOT_LOAD_FROM_TABLE_V2'; +exports[1729] = 'ER_SOURCE_DELAY_VALUE_OUT_OF_RANGE'; +exports[1730] = 'ER_ONLY_FD_AND_RBR_EVENTS_ALLOWED_IN_BINLOG_STATEMENT'; +exports[1731] = 'ER_PARTITION_EXCHANGE_DIFFERENT_OPTION'; +exports[1732] = 'ER_PARTITION_EXCHANGE_PART_TABLE'; +exports[1733] = 'ER_PARTITION_EXCHANGE_TEMP_TABLE'; +exports[1734] = 'ER_PARTITION_INSTEAD_OF_SUBPARTITION'; +exports[1735] = 'ER_UNKNOWN_PARTITION'; +exports[1736] = 'ER_TABLES_DIFFERENT_METADATA'; +exports[1737] = 'ER_ROW_DOES_NOT_MATCH_PARTITION'; +exports[1738] = 'ER_BINLOG_CACHE_SIZE_GREATER_THAN_MAX'; +exports[1739] = 'ER_WARN_INDEX_NOT_APPLICABLE'; +exports[1740] = 'ER_PARTITION_EXCHANGE_FOREIGN_KEY'; +exports[1741] = 'ER_NO_SUCH_KEY_VALUE'; +exports[1742] = 'ER_RPL_INFO_DATA_TOO_LONG'; +exports[1743] = 'ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE'; +exports[1744] = 'ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE'; +exports[1745] = 'ER_BINLOG_STMT_CACHE_SIZE_GREATER_THAN_MAX'; +exports[1746] = 'ER_CANT_UPDATE_TABLE_IN_CREATE_TABLE_SELECT'; +exports[1747] = 'ER_PARTITION_CLAUSE_ON_NONPARTITIONED'; +exports[1748] = 'ER_ROW_DOES_NOT_MATCH_GIVEN_PARTITION_SET'; +exports[1749] = 'ER_NO_SUCH_PARTITION'; +exports[1750] = 'ER_CHANGE_RPL_INFO_REPOSITORY_FAILURE'; +exports[1751] = 'ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_CREATED_TEMP_TABLE'; +exports[1752] = 'ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_DROPPED_TEMP_TABLE'; +exports[1753] = 'ER_MTA_FEATURE_IS_NOT_SUPPORTED'; +exports[1754] = 'ER_MTA_UPDATED_DBS_GREATER_MAX'; +exports[1755] = 'ER_MTA_CANT_PARALLEL'; +exports[1756] = 'ER_MTA_INCONSISTENT_DATA'; +exports[1757] = 'ER_FULLTEXT_NOT_SUPPORTED_WITH_PARTITIONING'; +exports[1758] = 'ER_DA_INVALID_CONDITION_NUMBER'; +exports[1759] = 'ER_INSECURE_PLAIN_TEXT'; +exports[1760] = 'ER_INSECURE_CHANGE_SOURCE'; +exports[1761] = 'ER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO'; +exports[1762] = 'ER_FOREIGN_DUPLICATE_KEY_WITHOUT_CHILD_INFO'; +exports[1763] = 'ER_SQLTHREAD_WITH_SECURE_REPLICA'; +exports[1764] = 'ER_TABLE_HAS_NO_FT'; +exports[1765] = 'ER_VARIABLE_NOT_SETTABLE_IN_SF_OR_TRIGGER'; +exports[1766] = 'ER_VARIABLE_NOT_SETTABLE_IN_TRANSACTION'; +exports[1767] = 'ER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST'; +exports[1768] = 'ER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION'; +exports[1769] = 'ER_SET_STATEMENT_CANNOT_INVOKE_FUNCTION'; +exports[1770] = 'ER_GTID_NEXT_CANT_BE_AUTOMATIC_IF_GTID_NEXT_LIST_IS_NON_NULL'; +exports[1771] = 'ER_SKIPPING_LOGGED_TRANSACTION'; +exports[1772] = 'ER_MALFORMED_GTID_SET_SPECIFICATION'; +exports[1773] = 'ER_MALFORMED_GTID_SET_ENCODING'; +exports[1774] = 'ER_MALFORMED_GTID_SPECIFICATION'; +exports[1775] = 'ER_GNO_EXHAUSTED'; +exports[1776] = 'ER_BAD_REPLICA_AUTO_POSITION'; +exports[1777] = 'ER_AUTO_POSITION_REQUIRES_GTID_MODE_NOT_OFF'; +exports[1778] = 'ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET'; +exports[1779] = 'ER_GTID_MODE_ON_REQUIRES_ENFORCE_GTID_CONSISTENCY_ON'; +exports[1780] = 'ER_GTID_MODE_REQUIRES_BINLOG'; +exports[1781] = 'ER_CANT_SET_GTID_NEXT_TO_GTID_WHEN_GTID_MODE_IS_OFF'; +exports[1782] = 'ER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON'; +exports[1783] = 'ER_CANT_SET_GTID_NEXT_LIST_TO_NON_NULL_WHEN_GTID_MODE_IS_OFF'; +exports[1784] = 'ER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF'; +exports[1785] = 'ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE'; +exports[1786] = 'ER_GTID_UNSAFE_CREATE_SELECT'; +exports[1787] = 'ER_GTID_UNSAFE_CREATE_DROP_TEMP_TABLE_IN_TRANSACTION'; +exports[1788] = 'ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME'; +exports[1789] = 'ER_SOURCE_HAS_PURGED_REQUIRED_GTIDS'; +exports[1790] = 'ER_CANT_SET_GTID_NEXT_WHEN_OWNING_GTID'; +exports[1791] = 'ER_UNKNOWN_EXPLAIN_FORMAT'; +exports[1792] = 'ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION'; +exports[1793] = 'ER_TOO_LONG_TABLE_PARTITION_COMMENT'; +exports[1794] = 'ER_REPLICA_CONFIGURATION'; +exports[1795] = 'ER_INNODB_FT_LIMIT'; +exports[1796] = 'ER_INNODB_NO_FT_TEMP_TABLE'; +exports[1797] = 'ER_INNODB_FT_WRONG_DOCID_COLUMN'; +exports[1798] = 'ER_INNODB_FT_WRONG_DOCID_INDEX'; +exports[1799] = 'ER_INNODB_ONLINE_LOG_TOO_BIG'; +exports[1800] = 'ER_UNKNOWN_ALTER_ALGORITHM'; +exports[1801] = 'ER_UNKNOWN_ALTER_LOCK'; +exports[1802] = 'ER_MTA_CHANGE_SOURCE_CANT_RUN_WITH_GAPS'; +exports[1803] = 'ER_MTA_RECOVERY_FAILURE'; +exports[1804] = 'ER_MTA_RESET_WORKERS'; +exports[1805] = 'ER_COL_COUNT_DOESNT_MATCH_CORRUPTED_V2'; +exports[1806] = 'ER_REPLICA_SILENT_RETRY_TRANSACTION'; +exports[1807] = 'ER_DISCARD_FK_CHECKS_RUNNING'; +exports[1808] = 'ER_TABLE_SCHEMA_MISMATCH'; +exports[1809] = 'ER_TABLE_IN_SYSTEM_TABLESPACE'; +exports[1810] = 'ER_IO_READ_ERROR'; +exports[1811] = 'ER_IO_WRITE_ERROR'; +exports[1812] = 'ER_TABLESPACE_MISSING'; +exports[1813] = 'ER_TABLESPACE_EXISTS'; +exports[1814] = 'ER_TABLESPACE_DISCARDED'; +exports[1815] = 'ER_INTERNAL_ERROR'; +exports[1816] = 'ER_INNODB_IMPORT_ERROR'; +exports[1817] = 'ER_INNODB_INDEX_CORRUPT'; +exports[1818] = 'ER_INVALID_YEAR_COLUMN_LENGTH'; +exports[1819] = 'ER_NOT_VALID_PASSWORD'; +exports[1820] = 'ER_MUST_CHANGE_PASSWORD'; +exports[1821] = 'ER_FK_NO_INDEX_CHILD'; +exports[1822] = 'ER_FK_NO_INDEX_PARENT'; +exports[1823] = 'ER_FK_FAIL_ADD_SYSTEM'; +exports[1824] = 'ER_FK_CANNOT_OPEN_PARENT'; +exports[1825] = 'ER_FK_INCORRECT_OPTION'; +exports[1826] = 'ER_FK_DUP_NAME'; +exports[1827] = 'ER_PASSWORD_FORMAT'; +exports[1828] = 'ER_FK_COLUMN_CANNOT_DROP'; +exports[1829] = 'ER_FK_COLUMN_CANNOT_DROP_CHILD'; +exports[1830] = 'ER_FK_COLUMN_NOT_NULL'; +exports[1831] = 'ER_DUP_INDEX'; +exports[1832] = 'ER_FK_COLUMN_CANNOT_CHANGE'; +exports[1833] = 'ER_FK_COLUMN_CANNOT_CHANGE_CHILD'; +exports[1834] = 'ER_UNUSED5'; +exports[1835] = 'ER_MALFORMED_PACKET'; +exports[1836] = 'ER_READ_ONLY_MODE'; +exports[1837] = 'ER_GTID_NEXT_TYPE_UNDEFINED_GTID'; +exports[1838] = 'ER_VARIABLE_NOT_SETTABLE_IN_SP'; +exports[1839] = 'ER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF'; +exports[1840] = 'ER_CANT_SET_GTID_PURGED_WHEN_GTID_EXECUTED_IS_NOT_EMPTY'; +exports[1841] = 'ER_CANT_SET_GTID_PURGED_WHEN_OWNED_GTIDS_IS_NOT_EMPTY'; +exports[1842] = 'ER_GTID_PURGED_WAS_CHANGED'; +exports[1843] = 'ER_GTID_EXECUTED_WAS_CHANGED'; +exports[1844] = 'ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES'; +exports[1845] = 'ER_ALTER_OPERATION_NOT_SUPPORTED'; +exports[1846] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON'; +exports[1847] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COPY'; +exports[1848] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_PARTITION'; +exports[1849] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_RENAME'; +exports[1850] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE'; +exports[1851] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_CHECK'; +exports[1852] = 'ER_UNUSED6'; +exports[1853] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOPK'; +exports[1854] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_AUTOINC'; +exports[1855] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_HIDDEN_FTS'; +exports[1856] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_CHANGE_FTS'; +exports[1857] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FTS'; +exports[1858] = 'ER_SQL_REPLICA_SKIP_COUNTER_NOT_SETTABLE_IN_GTID_MODE'; +exports[1859] = 'ER_DUP_UNKNOWN_IN_INDEX'; +exports[1860] = 'ER_IDENT_CAUSES_TOO_LONG_PATH'; +exports[1861] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOT_NULL'; +exports[1862] = 'ER_MUST_CHANGE_PASSWORD_LOGIN'; +exports[1863] = 'ER_ROW_IN_WRONG_PARTITION'; +exports[1864] = 'ER_MTA_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX'; +exports[1865] = 'ER_INNODB_NO_FT_USES_PARSER'; +exports[1866] = 'ER_BINLOG_LOGICAL_CORRUPTION'; +exports[1867] = 'ER_WARN_PURGE_LOG_IN_USE'; +exports[1868] = 'ER_WARN_PURGE_LOG_IS_ACTIVE'; +exports[1869] = 'ER_AUTO_INCREMENT_CONFLICT'; +exports[1870] = 'WARN_ON_BLOCKHOLE_IN_RBR'; +exports[1871] = 'ER_REPLICA_CM_INIT_REPOSITORY'; +exports[1872] = 'ER_REPLICA_AM_INIT_REPOSITORY'; +exports[1873] = 'ER_ACCESS_DENIED_CHANGE_USER_ERROR'; +exports[1874] = 'ER_INNODB_READ_ONLY'; +exports[1875] = 'ER_STOP_REPLICA_SQL_THREAD_TIMEOUT'; +exports[1876] = 'ER_STOP_REPLICA_IO_THREAD_TIMEOUT'; +exports[1877] = 'ER_TABLE_CORRUPT'; +exports[1878] = 'ER_TEMP_FILE_WRITE_FAILURE'; +exports[1879] = 'ER_INNODB_FT_AUX_NOT_HEX_ID'; +exports[1880] = 'ER_OLD_TEMPORALS_UPGRADED'; +exports[1881] = 'ER_INNODB_FORCED_RECOVERY'; +exports[1882] = 'ER_AES_INVALID_IV'; +exports[1883] = 'ER_PLUGIN_CANNOT_BE_UNINSTALLED'; +exports[1884] = 'ER_GTID_UNSAFE_BINLOG_SPLITTABLE_STATEMENT_AND_ASSIGNED_GTID'; +exports[1885] = 'ER_REPLICA_HAS_MORE_GTIDS_THAN_SOURCE'; +exports[1886] = 'ER_MISSING_KEY'; +exports[1887] = 'WARN_NAMED_PIPE_ACCESS_EVERYONE'; +exports[3000] = 'ER_FILE_CORRUPT'; +exports[3001] = 'ER_ERROR_ON_SOURCE'; +exports[3002] = 'ER_INCONSISTENT_ERROR'; +exports[3003] = 'ER_STORAGE_ENGINE_NOT_LOADED'; +exports[3004] = 'ER_GET_STACKED_DA_WITHOUT_ACTIVE_HANDLER'; +exports[3005] = 'ER_WARN_LEGACY_SYNTAX_CONVERTED'; +exports[3006] = 'ER_BINLOG_UNSAFE_FULLTEXT_PLUGIN'; +exports[3007] = 'ER_CANNOT_DISCARD_TEMPORARY_TABLE'; +exports[3008] = 'ER_FK_DEPTH_EXCEEDED'; +exports[3009] = 'ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE_V2'; +exports[3010] = 'ER_WARN_TRIGGER_DOESNT_HAVE_CREATED'; +exports[3011] = 'ER_REFERENCED_TRG_DOES_NOT_EXIST'; +exports[3012] = 'ER_EXPLAIN_NOT_SUPPORTED'; +exports[3013] = 'ER_INVALID_FIELD_SIZE'; +exports[3014] = 'ER_MISSING_HA_CREATE_OPTION'; +exports[3015] = 'ER_ENGINE_OUT_OF_MEMORY'; +exports[3016] = 'ER_PASSWORD_EXPIRE_ANONYMOUS_USER'; +exports[3017] = 'ER_REPLICA_SQL_THREAD_MUST_STOP'; +exports[3018] = 'ER_NO_FT_MATERIALIZED_SUBQUERY'; +exports[3019] = 'ER_INNODB_UNDO_LOG_FULL'; +exports[3020] = 'ER_INVALID_ARGUMENT_FOR_LOGARITHM'; +exports[3021] = 'ER_REPLICA_CHANNEL_IO_THREAD_MUST_STOP'; +exports[3022] = 'ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO'; +exports[3023] = 'ER_WARN_ONLY_SOURCE_LOG_FILE_NO_POS'; +exports[3024] = 'ER_QUERY_TIMEOUT'; +exports[3025] = 'ER_NON_RO_SELECT_DISABLE_TIMER'; +exports[3026] = 'ER_DUP_LIST_ENTRY'; +exports[3027] = 'ER_SQL_MODE_NO_EFFECT'; +exports[3028] = 'ER_AGGREGATE_ORDER_FOR_UNION'; +exports[3029] = 'ER_AGGREGATE_ORDER_NON_AGG_QUERY'; +exports[3030] = 'ER_REPLICA_WORKER_STOPPED_PREVIOUS_THD_ERROR'; +exports[3031] = 'ER_DONT_SUPPORT_REPLICA_PRESERVE_COMMIT_ORDER'; +exports[3032] = 'ER_SERVER_OFFLINE_MODE'; +exports[3033] = 'ER_GIS_DIFFERENT_SRIDS'; +exports[3034] = 'ER_GIS_UNSUPPORTED_ARGUMENT'; +exports[3035] = 'ER_GIS_UNKNOWN_ERROR'; +exports[3036] = 'ER_GIS_UNKNOWN_EXCEPTION'; +exports[3037] = 'ER_GIS_INVALID_DATA'; +exports[3038] = 'ER_BOOST_GEOMETRY_EMPTY_INPUT_EXCEPTION'; +exports[3039] = 'ER_BOOST_GEOMETRY_CENTROID_EXCEPTION'; +exports[3040] = 'ER_BOOST_GEOMETRY_OVERLAY_INVALID_INPUT_EXCEPTION'; +exports[3041] = 'ER_BOOST_GEOMETRY_TURN_INFO_EXCEPTION'; +exports[3042] = 'ER_BOOST_GEOMETRY_SELF_INTERSECTION_POINT_EXCEPTION'; +exports[3043] = 'ER_BOOST_GEOMETRY_UNKNOWN_EXCEPTION'; +exports[3044] = 'ER_STD_BAD_ALLOC_ERROR'; +exports[3045] = 'ER_STD_DOMAIN_ERROR'; +exports[3046] = 'ER_STD_LENGTH_ERROR'; +exports[3047] = 'ER_STD_INVALID_ARGUMENT'; +exports[3048] = 'ER_STD_OUT_OF_RANGE_ERROR'; +exports[3049] = 'ER_STD_OVERFLOW_ERROR'; +exports[3050] = 'ER_STD_RANGE_ERROR'; +exports[3051] = 'ER_STD_UNDERFLOW_ERROR'; +exports[3052] = 'ER_STD_LOGIC_ERROR'; +exports[3053] = 'ER_STD_RUNTIME_ERROR'; +exports[3054] = 'ER_STD_UNKNOWN_EXCEPTION'; +exports[3055] = 'ER_GIS_DATA_WRONG_ENDIANESS'; +exports[3056] = 'ER_CHANGE_SOURCE_PASSWORD_LENGTH'; +exports[3057] = 'ER_USER_LOCK_WRONG_NAME'; +exports[3058] = 'ER_USER_LOCK_DEADLOCK'; +exports[3059] = 'ER_REPLACE_INACCESSIBLE_ROWS'; +exports[3060] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_GIS'; +exports[3061] = 'ER_ILLEGAL_USER_VAR'; +exports[3062] = 'ER_GTID_MODE_OFF'; +exports[3063] = 'ER_UNSUPPORTED_BY_REPLICATION_THREAD'; +exports[3064] = 'ER_INCORRECT_TYPE'; +exports[3065] = 'ER_FIELD_IN_ORDER_NOT_SELECT'; +exports[3066] = 'ER_AGGREGATE_IN_ORDER_NOT_SELECT'; +exports[3067] = 'ER_INVALID_RPL_WILD_TABLE_FILTER_PATTERN'; +exports[3068] = 'ER_NET_OK_PACKET_TOO_LARGE'; +exports[3069] = 'ER_INVALID_JSON_DATA'; +exports[3070] = 'ER_INVALID_GEOJSON_MISSING_MEMBER'; +exports[3071] = 'ER_INVALID_GEOJSON_WRONG_TYPE'; +exports[3072] = 'ER_INVALID_GEOJSON_UNSPECIFIED'; +exports[3073] = 'ER_DIMENSION_UNSUPPORTED'; +exports[3074] = 'ER_REPLICA_CHANNEL_DOES_NOT_EXIST'; +exports[3075] = 'ER_SLAVE_MULTIPLE_CHANNELS_HOST_PORT'; +exports[3076] = 'ER_REPLICA_CHANNEL_NAME_INVALID_OR_TOO_LONG'; +exports[3077] = 'ER_REPLICA_NEW_CHANNEL_WRONG_REPOSITORY'; +exports[3078] = 'ER_SLAVE_CHANNEL_DELETE'; +exports[3079] = 'ER_REPLICA_MULTIPLE_CHANNELS_CMD'; +exports[3080] = 'ER_REPLICA_MAX_CHANNELS_EXCEEDED'; +exports[3081] = 'ER_REPLICA_CHANNEL_MUST_STOP'; +exports[3082] = 'ER_REPLICA_CHANNEL_NOT_RUNNING'; +exports[3083] = 'ER_REPLICA_CHANNEL_WAS_RUNNING'; +exports[3084] = 'ER_REPLICA_CHANNEL_WAS_NOT_RUNNING'; +exports[3085] = 'ER_REPLICA_CHANNEL_SQL_THREAD_MUST_STOP'; +exports[3086] = 'ER_REPLICA_CHANNEL_SQL_SKIP_COUNTER'; +exports[3087] = 'ER_WRONG_FIELD_WITH_GROUP_V2'; +exports[3088] = 'ER_MIX_OF_GROUP_FUNC_AND_FIELDS_V2'; +exports[3089] = 'ER_WARN_DEPRECATED_SYSVAR_UPDATE'; +exports[3090] = 'ER_WARN_DEPRECATED_SQLMODE'; +exports[3091] = 'ER_CANNOT_LOG_PARTIAL_DROP_DATABASE_WITH_GTID'; +exports[3092] = 'ER_GROUP_REPLICATION_CONFIGURATION'; +exports[3093] = 'ER_GROUP_REPLICATION_RUNNING'; +exports[3094] = 'ER_GROUP_REPLICATION_APPLIER_INIT_ERROR'; +exports[3095] = 'ER_GROUP_REPLICATION_STOP_APPLIER_THREAD_TIMEOUT'; +exports[3096] = 'ER_GROUP_REPLICATION_COMMUNICATION_LAYER_SESSION_ERROR'; +exports[3097] = 'ER_GROUP_REPLICATION_COMMUNICATION_LAYER_JOIN_ERROR'; +exports[3098] = 'ER_BEFORE_DML_VALIDATION_ERROR'; +exports[3099] = 'ER_PREVENTS_VARIABLE_WITHOUT_RBR'; +exports[3100] = 'ER_RUN_HOOK_ERROR'; +exports[3101] = 'ER_TRANSACTION_ROLLBACK_DURING_COMMIT'; +exports[3102] = 'ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED'; +exports[3103] = 'ER_UNSUPPORTED_ALTER_INPLACE_ON_VIRTUAL_COLUMN'; +exports[3104] = 'ER_WRONG_FK_OPTION_FOR_GENERATED_COLUMN'; +exports[3105] = 'ER_NON_DEFAULT_VALUE_FOR_GENERATED_COLUMN'; +exports[3106] = 'ER_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN'; +exports[3107] = 'ER_GENERATED_COLUMN_NON_PRIOR'; +exports[3108] = 'ER_DEPENDENT_BY_GENERATED_COLUMN'; +exports[3109] = 'ER_GENERATED_COLUMN_REF_AUTO_INC'; +exports[3110] = 'ER_FEATURE_NOT_AVAILABLE'; +exports[3111] = 'ER_CANT_SET_GTID_MODE'; +exports[3112] = 'ER_CANT_USE_AUTO_POSITION_WITH_GTID_MODE_OFF'; +exports[3113] = 'ER_CANT_REPLICATE_ANONYMOUS_WITH_AUTO_POSITION'; +exports[3114] = 'ER_CANT_REPLICATE_ANONYMOUS_WITH_GTID_MODE_ON'; +exports[3115] = 'ER_CANT_REPLICATE_GTID_WITH_GTID_MODE_OFF'; +exports[3116] = + 'ER_CANT_ENFORCE_GTID_CONSISTENCY_WITH_ONGOING_GTID_VIOLATING_TX'; +exports[3117] = + 'ER_ENFORCE_GTID_CONSISTENCY_WARN_WITH_ONGOING_GTID_VIOLATING_TX'; +exports[3118] = 'ER_ACCOUNT_HAS_BEEN_LOCKED'; +exports[3119] = 'ER_WRONG_TABLESPACE_NAME'; +exports[3120] = 'ER_TABLESPACE_IS_NOT_EMPTY'; +exports[3121] = 'ER_WRONG_FILE_NAME'; +exports[3122] = 'ER_BOOST_GEOMETRY_INCONSISTENT_TURNS_EXCEPTION'; +exports[3123] = 'ER_WARN_OPTIMIZER_HINT_SYNTAX_ERROR'; +exports[3124] = 'ER_WARN_BAD_MAX_EXECUTION_TIME'; +exports[3125] = 'ER_WARN_UNSUPPORTED_MAX_EXECUTION_TIME'; +exports[3126] = 'ER_WARN_CONFLICTING_HINT'; +exports[3127] = 'ER_WARN_UNKNOWN_QB_NAME'; +exports[3128] = 'ER_UNRESOLVED_HINT_NAME'; +exports[3129] = 'ER_WARN_ON_MODIFYING_GTID_EXECUTED_TABLE'; +exports[3130] = 'ER_PLUGGABLE_PROTOCOL_COMMAND_NOT_SUPPORTED'; +exports[3131] = 'ER_LOCKING_SERVICE_WRONG_NAME'; +exports[3132] = 'ER_LOCKING_SERVICE_DEADLOCK'; +exports[3133] = 'ER_LOCKING_SERVICE_TIMEOUT'; +exports[3134] = 'ER_GIS_MAX_POINTS_IN_GEOMETRY_OVERFLOWED'; +exports[3135] = 'ER_SQL_MODE_MERGED'; +exports[3136] = 'ER_VTOKEN_PLUGIN_TOKEN_MISMATCH'; +exports[3137] = 'ER_VTOKEN_PLUGIN_TOKEN_NOT_FOUND'; +exports[3138] = 'ER_CANT_SET_VARIABLE_WHEN_OWNING_GTID'; +exports[3139] = 'ER_REPLICA_CHANNEL_OPERATION_NOT_ALLOWED'; +exports[3140] = 'ER_INVALID_JSON_TEXT'; +exports[3141] = 'ER_INVALID_JSON_TEXT_IN_PARAM'; +exports[3142] = 'ER_INVALID_JSON_BINARY_DATA'; +exports[3143] = 'ER_INVALID_JSON_PATH'; +exports[3144] = 'ER_INVALID_JSON_CHARSET'; +exports[3145] = 'ER_INVALID_JSON_CHARSET_IN_FUNCTION'; +exports[3146] = 'ER_INVALID_TYPE_FOR_JSON'; +exports[3147] = 'ER_INVALID_CAST_TO_JSON'; +exports[3148] = 'ER_INVALID_JSON_PATH_CHARSET'; +exports[3149] = 'ER_INVALID_JSON_PATH_WILDCARD'; +exports[3150] = 'ER_JSON_VALUE_TOO_BIG'; +exports[3151] = 'ER_JSON_KEY_TOO_BIG'; +exports[3152] = 'ER_JSON_USED_AS_KEY'; +exports[3153] = 'ER_JSON_VACUOUS_PATH'; +exports[3154] = 'ER_JSON_BAD_ONE_OR_ALL_ARG'; +exports[3155] = 'ER_NUMERIC_JSON_VALUE_OUT_OF_RANGE'; +exports[3156] = 'ER_INVALID_JSON_VALUE_FOR_CAST'; +exports[3157] = 'ER_JSON_DOCUMENT_TOO_DEEP'; +exports[3158] = 'ER_JSON_DOCUMENT_NULL_KEY'; +exports[3159] = 'ER_SECURE_TRANSPORT_REQUIRED'; +exports[3160] = 'ER_NO_SECURE_TRANSPORTS_CONFIGURED'; +exports[3161] = 'ER_DISABLED_STORAGE_ENGINE'; +exports[3162] = 'ER_USER_DOES_NOT_EXIST'; +exports[3163] = 'ER_USER_ALREADY_EXISTS'; +exports[3164] = 'ER_AUDIT_API_ABORT'; +exports[3165] = 'ER_INVALID_JSON_PATH_ARRAY_CELL'; +exports[3166] = 'ER_BUFPOOL_RESIZE_INPROGRESS'; +exports[3167] = 'ER_FEATURE_DISABLED_SEE_DOC'; +exports[3168] = 'ER_SERVER_ISNT_AVAILABLE'; +exports[3169] = 'ER_SESSION_WAS_KILLED'; +exports[3170] = 'ER_CAPACITY_EXCEEDED'; +exports[3171] = 'ER_CAPACITY_EXCEEDED_IN_RANGE_OPTIMIZER'; +exports[3172] = 'ER_TABLE_NEEDS_UPG_PART'; +exports[3173] = 'ER_CANT_WAIT_FOR_EXECUTED_GTID_SET_WHILE_OWNING_A_GTID'; +exports[3174] = 'ER_CANNOT_ADD_FOREIGN_BASE_COL_VIRTUAL'; +exports[3175] = 'ER_CANNOT_CREATE_VIRTUAL_INDEX_CONSTRAINT'; +exports[3176] = 'ER_ERROR_ON_MODIFYING_GTID_EXECUTED_TABLE'; +exports[3177] = 'ER_LOCK_REFUSED_BY_ENGINE'; +exports[3178] = 'ER_UNSUPPORTED_ALTER_ONLINE_ON_VIRTUAL_COLUMN'; +exports[3179] = 'ER_MASTER_KEY_ROTATION_NOT_SUPPORTED_BY_SE'; +exports[3180] = 'ER_MASTER_KEY_ROTATION_ERROR_BY_SE'; +exports[3181] = 'ER_MASTER_KEY_ROTATION_BINLOG_FAILED'; +exports[3182] = 'ER_MASTER_KEY_ROTATION_SE_UNAVAILABLE'; +exports[3183] = 'ER_TABLESPACE_CANNOT_ENCRYPT'; +exports[3184] = 'ER_INVALID_ENCRYPTION_OPTION'; +exports[3185] = 'ER_CANNOT_FIND_KEY_IN_KEYRING'; +exports[3186] = 'ER_CAPACITY_EXCEEDED_IN_PARSER'; +exports[3187] = 'ER_UNSUPPORTED_ALTER_ENCRYPTION_INPLACE'; +exports[3188] = 'ER_KEYRING_UDF_KEYRING_SERVICE_ERROR'; +exports[3189] = 'ER_USER_COLUMN_OLD_LENGTH'; +exports[3190] = 'ER_CANT_RESET_SOURCE'; +exports[3191] = 'ER_GROUP_REPLICATION_MAX_GROUP_SIZE'; +exports[3192] = 'ER_CANNOT_ADD_FOREIGN_BASE_COL_STORED'; +exports[3193] = 'ER_TABLE_REFERENCED'; +exports[3194] = 'ER_PARTITION_ENGINE_DEPRECATED_FOR_TABLE'; +exports[3195] = 'ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID_ZERO'; +exports[3196] = 'ER_WARN_USING_GEOMFROMWKB_TO_SET_SRID'; +exports[3197] = 'ER_XA_RETRY'; +exports[3198] = 'ER_KEYRING_AWS_UDF_AWS_KMS_ERROR'; +exports[3199] = 'ER_BINLOG_UNSAFE_XA'; +exports[3200] = 'ER_UDF_ERROR'; +exports[3201] = 'ER_KEYRING_MIGRATION_FAILURE'; +exports[3202] = 'ER_KEYRING_ACCESS_DENIED_ERROR'; +exports[3203] = 'ER_KEYRING_MIGRATION_STATUS'; +exports[3204] = 'ER_PLUGIN_FAILED_TO_OPEN_TABLES'; +exports[3205] = 'ER_PLUGIN_FAILED_TO_OPEN_TABLE'; +exports[3206] = 'ER_AUDIT_LOG_NO_KEYRING_PLUGIN_INSTALLED'; +exports[3207] = 'ER_AUDIT_LOG_ENCRYPTION_PASSWORD_HAS_NOT_BEEN_SET'; +exports[3208] = 'ER_AUDIT_LOG_COULD_NOT_CREATE_AES_KEY'; +exports[3209] = 'ER_AUDIT_LOG_ENCRYPTION_PASSWORD_CANNOT_BE_FETCHED'; +exports[3210] = 'ER_AUDIT_LOG_JSON_FILTERING_NOT_ENABLED'; +exports[3211] = 'ER_AUDIT_LOG_UDF_INSUFFICIENT_PRIVILEGE'; +exports[3212] = 'ER_AUDIT_LOG_SUPER_PRIVILEGE_REQUIRED'; +exports[3213] = 'ER_COULD_NOT_REINITIALIZE_AUDIT_LOG_FILTERS'; +exports[3214] = 'ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_TYPE'; +exports[3215] = 'ER_AUDIT_LOG_UDF_INVALID_ARGUMENT_COUNT'; +exports[3216] = 'ER_AUDIT_LOG_HAS_NOT_BEEN_INSTALLED'; +exports[3217] = 'ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_TYPE'; +exports[3218] = 'ER_AUDIT_LOG_UDF_READ_INVALID_MAX_ARRAY_LENGTH_ARG_VALUE'; +exports[3219] = 'ER_AUDIT_LOG_JSON_FILTER_PARSING_ERROR'; +exports[3220] = 'ER_AUDIT_LOG_JSON_FILTER_NAME_CANNOT_BE_EMPTY'; +exports[3221] = 'ER_AUDIT_LOG_JSON_USER_NAME_CANNOT_BE_EMPTY'; +exports[3222] = 'ER_AUDIT_LOG_JSON_FILTER_DOES_NOT_EXISTS'; +exports[3223] = 'ER_AUDIT_LOG_USER_FIRST_CHARACTER_MUST_BE_ALPHANUMERIC'; +exports[3224] = 'ER_AUDIT_LOG_USER_NAME_INVALID_CHARACTER'; +exports[3225] = 'ER_AUDIT_LOG_HOST_NAME_INVALID_CHARACTER'; +exports[3226] = 'WARN_DEPRECATED_MAXDB_SQL_MODE_FOR_TIMESTAMP'; +exports[3227] = 'ER_XA_REPLICATION_FILTERS'; +exports[3228] = 'ER_CANT_OPEN_ERROR_LOG'; +exports[3229] = 'ER_GROUPING_ON_TIMESTAMP_IN_DST'; +exports[3230] = 'ER_CANT_START_SERVER_NAMED_PIPE'; +exports[3231] = 'ER_WRITE_SET_EXCEEDS_LIMIT'; +exports[3232] = 'ER_DEPRECATED_TLS_VERSION_SESSION_57'; +exports[3233] = 'ER_WARN_DEPRECATED_TLS_VERSION_57'; +exports[3234] = 'ER_WARN_WRONG_NATIVE_TABLE_STRUCTURE'; +exports[3235] = 'ER_AES_INVALID_KDF_NAME'; +exports[3236] = 'ER_AES_INVALID_KDF_ITERATIONS'; +exports[3237] = 'WARN_AES_KEY_SIZE'; +exports[3238] = 'ER_AES_INVALID_KDF_OPTION_SIZE'; +exports[3500] = 'ER_UNSUPPORT_COMPRESSED_TEMPORARY_TABLE'; +exports[3501] = 'ER_ACL_OPERATION_FAILED'; +exports[3502] = 'ER_UNSUPPORTED_INDEX_ALGORITHM'; +exports[3503] = 'ER_NO_SUCH_DB'; +exports[3504] = 'ER_TOO_BIG_ENUM'; +exports[3505] = 'ER_TOO_LONG_SET_ENUM_VALUE'; +exports[3506] = 'ER_INVALID_DD_OBJECT'; +exports[3507] = 'ER_UPDATING_DD_TABLE'; +exports[3508] = 'ER_INVALID_DD_OBJECT_ID'; +exports[3509] = 'ER_INVALID_DD_OBJECT_NAME'; +exports[3510] = 'ER_TABLESPACE_MISSING_WITH_NAME'; +exports[3511] = 'ER_TOO_LONG_ROUTINE_COMMENT'; +exports[3512] = 'ER_SP_LOAD_FAILED'; +exports[3513] = 'ER_INVALID_BITWISE_OPERANDS_SIZE'; +exports[3514] = 'ER_INVALID_BITWISE_AGGREGATE_OPERANDS_SIZE'; +exports[3515] = 'ER_WARN_UNSUPPORTED_HINT'; +exports[3516] = 'ER_UNEXPECTED_GEOMETRY_TYPE'; +exports[3517] = 'ER_SRS_PARSE_ERROR'; +exports[3518] = 'ER_SRS_PROJ_PARAMETER_MISSING'; +exports[3519] = 'ER_WARN_SRS_NOT_FOUND'; +exports[3520] = 'ER_SRS_NOT_CARTESIAN'; +exports[3521] = 'ER_SRS_NOT_CARTESIAN_UNDEFINED'; +exports[3522] = 'ER_PK_INDEX_CANT_BE_INVISIBLE'; +exports[3523] = 'ER_UNKNOWN_AUTHID'; +exports[3524] = 'ER_FAILED_ROLE_GRANT'; +exports[3525] = 'ER_OPEN_ROLE_TABLES'; +exports[3526] = 'ER_FAILED_DEFAULT_ROLES'; +exports[3527] = 'ER_COMPONENTS_NO_SCHEME'; +exports[3528] = 'ER_COMPONENTS_NO_SCHEME_SERVICE'; +exports[3529] = 'ER_COMPONENTS_CANT_LOAD'; +exports[3530] = 'ER_ROLE_NOT_GRANTED'; +exports[3531] = 'ER_FAILED_REVOKE_ROLE'; +exports[3532] = 'ER_RENAME_ROLE'; +exports[3533] = 'ER_COMPONENTS_CANT_ACQUIRE_SERVICE_IMPLEMENTATION'; +exports[3534] = 'ER_COMPONENTS_CANT_SATISFY_DEPENDENCY'; +exports[3535] = 'ER_COMPONENTS_LOAD_CANT_REGISTER_SERVICE_IMPLEMENTATION'; +exports[3536] = 'ER_COMPONENTS_LOAD_CANT_INITIALIZE'; +exports[3537] = 'ER_COMPONENTS_UNLOAD_NOT_LOADED'; +exports[3538] = 'ER_COMPONENTS_UNLOAD_CANT_DEINITIALIZE'; +exports[3539] = 'ER_COMPONENTS_CANT_RELEASE_SERVICE'; +exports[3540] = 'ER_COMPONENTS_UNLOAD_CANT_UNREGISTER_SERVICE'; +exports[3541] = 'ER_COMPONENTS_CANT_UNLOAD'; +exports[3542] = 'ER_WARN_UNLOAD_THE_NOT_PERSISTED'; +exports[3543] = 'ER_COMPONENT_TABLE_INCORRECT'; +exports[3544] = 'ER_COMPONENT_MANIPULATE_ROW_FAILED'; +exports[3545] = 'ER_COMPONENTS_UNLOAD_DUPLICATE_IN_GROUP'; +exports[3546] = 'ER_CANT_SET_GTID_PURGED_DUE_SETS_CONSTRAINTS'; +exports[3547] = 'ER_CANNOT_LOCK_USER_MANAGEMENT_CACHES'; +exports[3548] = 'ER_SRS_NOT_FOUND'; +exports[3549] = 'ER_VARIABLE_NOT_PERSISTED'; +exports[3550] = 'ER_IS_QUERY_INVALID_CLAUSE'; +exports[3551] = 'ER_UNABLE_TO_STORE_STATISTICS'; +exports[3552] = 'ER_NO_SYSTEM_SCHEMA_ACCESS'; +exports[3553] = 'ER_NO_SYSTEM_TABLESPACE_ACCESS'; +exports[3554] = 'ER_NO_SYSTEM_TABLE_ACCESS'; +exports[3555] = 'ER_NO_SYSTEM_TABLE_ACCESS_FOR_DICTIONARY_TABLE'; +exports[3556] = 'ER_NO_SYSTEM_TABLE_ACCESS_FOR_SYSTEM_TABLE'; +exports[3557] = 'ER_NO_SYSTEM_TABLE_ACCESS_FOR_TABLE'; +exports[3558] = 'ER_INVALID_OPTION_KEY'; +exports[3559] = 'ER_INVALID_OPTION_VALUE'; +exports[3560] = 'ER_INVALID_OPTION_KEY_VALUE_PAIR'; +exports[3561] = 'ER_INVALID_OPTION_START_CHARACTER'; +exports[3562] = 'ER_INVALID_OPTION_END_CHARACTER'; +exports[3563] = 'ER_INVALID_OPTION_CHARACTERS'; +exports[3564] = 'ER_DUPLICATE_OPTION_KEY'; +exports[3565] = 'ER_WARN_SRS_NOT_FOUND_AXIS_ORDER'; +exports[3566] = 'ER_NO_ACCESS_TO_NATIVE_FCT'; +exports[3567] = 'ER_RESET_SOURCE_TO_VALUE_OUT_OF_RANGE'; +exports[3568] = 'ER_UNRESOLVED_TABLE_LOCK'; +exports[3569] = 'ER_DUPLICATE_TABLE_LOCK'; +exports[3570] = 'ER_BINLOG_UNSAFE_SKIP_LOCKED'; +exports[3571] = 'ER_BINLOG_UNSAFE_NOWAIT'; +exports[3572] = 'ER_LOCK_NOWAIT'; +exports[3573] = 'ER_CTE_RECURSIVE_REQUIRES_UNION'; +exports[3574] = 'ER_CTE_RECURSIVE_REQUIRES_NONRECURSIVE_FIRST'; +exports[3575] = 'ER_CTE_RECURSIVE_FORBIDS_AGGREGATION'; +exports[3576] = 'ER_CTE_RECURSIVE_FORBIDDEN_JOIN_ORDER'; +exports[3577] = 'ER_CTE_RECURSIVE_REQUIRES_SINGLE_REFERENCE'; +exports[3578] = 'ER_SWITCH_TMP_ENGINE'; +exports[3579] = 'ER_WINDOW_NO_SUCH_WINDOW'; +exports[3580] = 'ER_WINDOW_CIRCULARITY_IN_WINDOW_GRAPH'; +exports[3581] = 'ER_WINDOW_NO_CHILD_PARTITIONING'; +exports[3582] = 'ER_WINDOW_NO_INHERIT_FRAME'; +exports[3583] = 'ER_WINDOW_NO_REDEFINE_ORDER_BY'; +exports[3584] = 'ER_WINDOW_FRAME_START_ILLEGAL'; +exports[3585] = 'ER_WINDOW_FRAME_END_ILLEGAL'; +exports[3586] = 'ER_WINDOW_FRAME_ILLEGAL'; +exports[3587] = 'ER_WINDOW_RANGE_FRAME_ORDER_TYPE'; +exports[3588] = 'ER_WINDOW_RANGE_FRAME_TEMPORAL_TYPE'; +exports[3589] = 'ER_WINDOW_RANGE_FRAME_NUMERIC_TYPE'; +exports[3590] = 'ER_WINDOW_RANGE_BOUND_NOT_CONSTANT'; +exports[3591] = 'ER_WINDOW_DUPLICATE_NAME'; +exports[3592] = 'ER_WINDOW_ILLEGAL_ORDER_BY'; +exports[3593] = 'ER_WINDOW_INVALID_WINDOW_FUNC_USE'; +exports[3594] = 'ER_WINDOW_INVALID_WINDOW_FUNC_ALIAS_USE'; +exports[3595] = 'ER_WINDOW_NESTED_WINDOW_FUNC_USE_IN_WINDOW_SPEC'; +exports[3596] = 'ER_WINDOW_ROWS_INTERVAL_USE'; +exports[3597] = 'ER_WINDOW_NO_GROUP_ORDER'; +exports[3598] = 'ER_WINDOW_EXPLAIN_JSON'; +exports[3599] = 'ER_WINDOW_FUNCTION_IGNORES_FRAME'; +exports[3600] = 'ER_WL9236_NOW'; +exports[3601] = 'ER_INVALID_NO_OF_ARGS'; +exports[3602] = 'ER_FIELD_IN_GROUPING_NOT_GROUP_BY'; +exports[3603] = 'ER_TOO_LONG_TABLESPACE_COMMENT'; +exports[3604] = 'ER_ENGINE_CANT_DROP_TABLE'; +exports[3605] = 'ER_ENGINE_CANT_DROP_MISSING_TABLE'; +exports[3606] = 'ER_TABLESPACE_DUP_FILENAME'; +exports[3607] = 'ER_DB_DROP_RMDIR2'; +exports[3608] = 'ER_IMP_NO_FILES_MATCHED'; +exports[3609] = 'ER_IMP_SCHEMA_DOES_NOT_EXIST'; +exports[3610] = 'ER_IMP_TABLE_ALREADY_EXISTS'; +exports[3611] = 'ER_IMP_INCOMPATIBLE_MYSQLD_VERSION'; +exports[3612] = 'ER_IMP_INCOMPATIBLE_DD_VERSION'; +exports[3613] = 'ER_IMP_INCOMPATIBLE_SDI_VERSION'; +exports[3614] = 'ER_WARN_INVALID_HINT'; +exports[3615] = 'ER_VAR_DOES_NOT_EXIST'; +exports[3616] = 'ER_LONGITUDE_OUT_OF_RANGE'; +exports[3617] = 'ER_LATITUDE_OUT_OF_RANGE'; +exports[3618] = 'ER_NOT_IMPLEMENTED_FOR_GEOGRAPHIC_SRS'; +exports[3619] = 'ER_ILLEGAL_PRIVILEGE_LEVEL'; +exports[3620] = 'ER_NO_SYSTEM_VIEW_ACCESS'; +exports[3621] = 'ER_COMPONENT_FILTER_FLABBERGASTED'; +exports[3622] = 'ER_PART_EXPR_TOO_LONG'; +exports[3623] = 'ER_UDF_DROP_DYNAMICALLY_REGISTERED'; +exports[3624] = 'ER_UNABLE_TO_STORE_COLUMN_STATISTICS'; +exports[3625] = 'ER_UNABLE_TO_UPDATE_COLUMN_STATISTICS'; +exports[3626] = 'ER_UNABLE_TO_DROP_COLUMN_STATISTICS'; +exports[3627] = 'ER_UNABLE_TO_BUILD_HISTOGRAM'; +exports[3628] = 'ER_MANDATORY_ROLE'; +exports[3629] = 'ER_MISSING_TABLESPACE_FILE'; +exports[3630] = 'ER_PERSIST_ONLY_ACCESS_DENIED_ERROR'; +exports[3631] = 'ER_CMD_NEED_SUPER'; +exports[3632] = 'ER_PATH_IN_DATADIR'; +exports[3633] = 'ER_CLONE_DDL_IN_PROGRESS'; +exports[3634] = 'ER_CLONE_TOO_MANY_CONCURRENT_CLONES'; +exports[3635] = 'ER_APPLIER_LOG_EVENT_VALIDATION_ERROR'; +exports[3636] = 'ER_CTE_MAX_RECURSION_DEPTH'; +exports[3637] = 'ER_NOT_HINT_UPDATABLE_VARIABLE'; +exports[3638] = 'ER_CREDENTIALS_CONTRADICT_TO_HISTORY'; +exports[3639] = 'ER_WARNING_PASSWORD_HISTORY_CLAUSES_VOID'; +exports[3640] = 'ER_CLIENT_DOES_NOT_SUPPORT'; +exports[3641] = 'ER_I_S_SKIPPED_TABLESPACE'; +exports[3642] = 'ER_TABLESPACE_ENGINE_MISMATCH'; +exports[3643] = 'ER_WRONG_SRID_FOR_COLUMN'; +exports[3644] = 'ER_CANNOT_ALTER_SRID_DUE_TO_INDEX'; +exports[3645] = 'ER_WARN_BINLOG_PARTIAL_UPDATES_DISABLED'; +exports[3646] = 'ER_WARN_BINLOG_V1_ROW_EVENTS_DISABLED'; +exports[3647] = 'ER_WARN_BINLOG_PARTIAL_UPDATES_SUGGESTS_PARTIAL_IMAGES'; +exports[3648] = 'ER_COULD_NOT_APPLY_JSON_DIFF'; +exports[3649] = 'ER_CORRUPTED_JSON_DIFF'; +exports[3650] = 'ER_RESOURCE_GROUP_EXISTS'; +exports[3651] = 'ER_RESOURCE_GROUP_NOT_EXISTS'; +exports[3652] = 'ER_INVALID_VCPU_ID'; +exports[3653] = 'ER_INVALID_VCPU_RANGE'; +exports[3654] = 'ER_INVALID_THREAD_PRIORITY'; +exports[3655] = 'ER_DISALLOWED_OPERATION'; +exports[3656] = 'ER_RESOURCE_GROUP_BUSY'; +exports[3657] = 'ER_RESOURCE_GROUP_DISABLED'; +exports[3658] = 'ER_FEATURE_UNSUPPORTED'; +exports[3659] = 'ER_ATTRIBUTE_IGNORED'; +exports[3660] = 'ER_INVALID_THREAD_ID'; +exports[3661] = 'ER_RESOURCE_GROUP_BIND_FAILED'; +exports[3662] = 'ER_INVALID_USE_OF_FORCE_OPTION'; +exports[3663] = 'ER_GROUP_REPLICATION_COMMAND_FAILURE'; +exports[3664] = 'ER_SDI_OPERATION_FAILED'; +exports[3665] = 'ER_MISSING_JSON_TABLE_VALUE'; +exports[3666] = 'ER_WRONG_JSON_TABLE_VALUE'; +exports[3667] = 'ER_TF_MUST_HAVE_ALIAS'; +exports[3668] = 'ER_TF_FORBIDDEN_JOIN_TYPE'; +exports[3669] = 'ER_JT_VALUE_OUT_OF_RANGE'; +exports[3670] = 'ER_JT_MAX_NESTED_PATH'; +exports[3671] = 'ER_PASSWORD_EXPIRATION_NOT_SUPPORTED_BY_AUTH_METHOD'; +exports[3672] = 'ER_INVALID_GEOJSON_CRS_NOT_TOP_LEVEL'; +exports[3673] = 'ER_BAD_NULL_ERROR_NOT_IGNORED'; +exports[3674] = 'WARN_USELESS_SPATIAL_INDEX'; +exports[3675] = 'ER_DISK_FULL_NOWAIT'; +exports[3676] = 'ER_PARSE_ERROR_IN_DIGEST_FN'; +exports[3677] = 'ER_UNDISCLOSED_PARSE_ERROR_IN_DIGEST_FN'; +exports[3678] = 'ER_SCHEMA_DIR_EXISTS'; +exports[3679] = 'ER_SCHEMA_DIR_MISSING'; +exports[3680] = 'ER_SCHEMA_DIR_CREATE_FAILED'; +exports[3681] = 'ER_SCHEMA_DIR_UNKNOWN'; +exports[3682] = 'ER_ONLY_IMPLEMENTED_FOR_SRID_0_AND_4326'; +exports[3683] = 'ER_BINLOG_EXPIRE_LOG_DAYS_AND_SECS_USED_TOGETHER'; +exports[3684] = 'ER_REGEXP_BUFFER_OVERFLOW'; +exports[3685] = 'ER_REGEXP_ILLEGAL_ARGUMENT'; +exports[3686] = 'ER_REGEXP_INDEX_OUTOFBOUNDS_ERROR'; +exports[3687] = 'ER_REGEXP_INTERNAL_ERROR'; +exports[3688] = 'ER_REGEXP_RULE_SYNTAX'; +exports[3689] = 'ER_REGEXP_BAD_ESCAPE_SEQUENCE'; +exports[3690] = 'ER_REGEXP_UNIMPLEMENTED'; +exports[3691] = 'ER_REGEXP_MISMATCHED_PAREN'; +exports[3692] = 'ER_REGEXP_BAD_INTERVAL'; +exports[3693] = 'ER_REGEXP_MAX_LT_MIN'; +exports[3694] = 'ER_REGEXP_INVALID_BACK_REF'; +exports[3695] = 'ER_REGEXP_LOOK_BEHIND_LIMIT'; +exports[3696] = 'ER_REGEXP_MISSING_CLOSE_BRACKET'; +exports[3697] = 'ER_REGEXP_INVALID_RANGE'; +exports[3698] = 'ER_REGEXP_STACK_OVERFLOW'; +exports[3699] = 'ER_REGEXP_TIME_OUT'; +exports[3700] = 'ER_REGEXP_PATTERN_TOO_BIG'; +exports[3701] = 'ER_CANT_SET_ERROR_LOG_SERVICE'; +exports[3702] = 'ER_EMPTY_PIPELINE_FOR_ERROR_LOG_SERVICE'; +exports[3703] = 'ER_COMPONENT_FILTER_DIAGNOSTICS'; +exports[3704] = 'ER_NOT_IMPLEMENTED_FOR_CARTESIAN_SRS'; +exports[3705] = 'ER_NOT_IMPLEMENTED_FOR_PROJECTED_SRS'; +exports[3706] = 'ER_NONPOSITIVE_RADIUS'; +exports[3707] = 'ER_RESTART_SERVER_FAILED'; +exports[3708] = 'ER_SRS_MISSING_MANDATORY_ATTRIBUTE'; +exports[3709] = 'ER_SRS_MULTIPLE_ATTRIBUTE_DEFINITIONS'; +exports[3710] = 'ER_SRS_NAME_CANT_BE_EMPTY_OR_WHITESPACE'; +exports[3711] = 'ER_SRS_ORGANIZATION_CANT_BE_EMPTY_OR_WHITESPACE'; +exports[3712] = 'ER_SRS_ID_ALREADY_EXISTS'; +exports[3713] = 'ER_WARN_SRS_ID_ALREADY_EXISTS'; +exports[3714] = 'ER_CANT_MODIFY_SRID_0'; +exports[3715] = 'ER_WARN_RESERVED_SRID_RANGE'; +exports[3716] = 'ER_CANT_MODIFY_SRS_USED_BY_COLUMN'; +exports[3717] = 'ER_SRS_INVALID_CHARACTER_IN_ATTRIBUTE'; +exports[3718] = 'ER_SRS_ATTRIBUTE_STRING_TOO_LONG'; +exports[3719] = 'ER_DEPRECATED_UTF8_ALIAS'; +exports[3720] = 'ER_DEPRECATED_NATIONAL'; +exports[3721] = 'ER_INVALID_DEFAULT_UTF8MB4_COLLATION'; +exports[3722] = 'ER_UNABLE_TO_COLLECT_LOG_STATUS'; +exports[3723] = 'ER_RESERVED_TABLESPACE_NAME'; +exports[3724] = 'ER_UNABLE_TO_SET_OPTION'; +exports[3725] = 'ER_REPLICA_POSSIBLY_DIVERGED_AFTER_DDL'; +exports[3726] = 'ER_SRS_NOT_GEOGRAPHIC'; +exports[3727] = 'ER_POLYGON_TOO_LARGE'; +exports[3728] = 'ER_SPATIAL_UNIQUE_INDEX'; +exports[3729] = 'ER_INDEX_TYPE_NOT_SUPPORTED_FOR_SPATIAL_INDEX'; +exports[3730] = 'ER_FK_CANNOT_DROP_PARENT'; +exports[3731] = 'ER_GEOMETRY_PARAM_LONGITUDE_OUT_OF_RANGE'; +exports[3732] = 'ER_GEOMETRY_PARAM_LATITUDE_OUT_OF_RANGE'; +exports[3733] = 'ER_FK_CANNOT_USE_VIRTUAL_COLUMN'; +exports[3734] = 'ER_FK_NO_COLUMN_PARENT'; +exports[3735] = 'ER_CANT_SET_ERROR_SUPPRESSION_LIST'; +exports[3736] = 'ER_SRS_GEOGCS_INVALID_AXES'; +exports[3737] = 'ER_SRS_INVALID_SEMI_MAJOR_AXIS'; +exports[3738] = 'ER_SRS_INVALID_INVERSE_FLATTENING'; +exports[3739] = 'ER_SRS_INVALID_ANGULAR_UNIT'; +exports[3740] = 'ER_SRS_INVALID_PRIME_MERIDIAN'; +exports[3741] = 'ER_TRANSFORM_SOURCE_SRS_NOT_SUPPORTED'; +exports[3742] = 'ER_TRANSFORM_TARGET_SRS_NOT_SUPPORTED'; +exports[3743] = 'ER_TRANSFORM_SOURCE_SRS_MISSING_TOWGS84'; +exports[3744] = 'ER_TRANSFORM_TARGET_SRS_MISSING_TOWGS84'; +exports[3745] = 'ER_TEMP_TABLE_PREVENTS_SWITCH_SESSION_BINLOG_FORMAT'; +exports[3746] = 'ER_TEMP_TABLE_PREVENTS_SWITCH_GLOBAL_BINLOG_FORMAT'; +exports[3747] = 'ER_RUNNING_APPLIER_PREVENTS_SWITCH_GLOBAL_BINLOG_FORMAT'; +exports[3748] = 'ER_CLIENT_GTID_UNSAFE_CREATE_DROP_TEMP_TABLE_IN_TRX_IN_SBR'; +exports[3749] = 'ER_XA_CANT_CREATE_MDL_BACKUP'; +exports[3750] = 'ER_TABLE_WITHOUT_PK'; +exports[3751] = 'ER_WARN_DATA_TRUNCATED_FUNCTIONAL_INDEX'; +exports[3752] = 'ER_WARN_DATA_OUT_OF_RANGE_FUNCTIONAL_INDEX'; +exports[3753] = 'ER_FUNCTIONAL_INDEX_ON_JSON_OR_GEOMETRY_FUNCTION'; +exports[3754] = 'ER_FUNCTIONAL_INDEX_REF_AUTO_INCREMENT'; +exports[3755] = 'ER_CANNOT_DROP_COLUMN_FUNCTIONAL_INDEX'; +exports[3756] = 'ER_FUNCTIONAL_INDEX_PRIMARY_KEY'; +exports[3757] = 'ER_FUNCTIONAL_INDEX_ON_LOB'; +exports[3758] = 'ER_FUNCTIONAL_INDEX_FUNCTION_IS_NOT_ALLOWED'; +exports[3759] = 'ER_FULLTEXT_FUNCTIONAL_INDEX'; +exports[3760] = 'ER_SPATIAL_FUNCTIONAL_INDEX'; +exports[3761] = 'ER_WRONG_KEY_COLUMN_FUNCTIONAL_INDEX'; +exports[3762] = 'ER_FUNCTIONAL_INDEX_ON_FIELD'; +exports[3763] = 'ER_GENERATED_COLUMN_NAMED_FUNCTION_IS_NOT_ALLOWED'; +exports[3764] = 'ER_GENERATED_COLUMN_ROW_VALUE'; +exports[3765] = 'ER_GENERATED_COLUMN_VARIABLES'; +exports[3766] = 'ER_DEPENDENT_BY_DEFAULT_GENERATED_VALUE'; +exports[3767] = 'ER_DEFAULT_VAL_GENERATED_NON_PRIOR'; +exports[3768] = 'ER_DEFAULT_VAL_GENERATED_REF_AUTO_INC'; +exports[3769] = 'ER_DEFAULT_VAL_GENERATED_FUNCTION_IS_NOT_ALLOWED'; +exports[3770] = 'ER_DEFAULT_VAL_GENERATED_NAMED_FUNCTION_IS_NOT_ALLOWED'; +exports[3771] = 'ER_DEFAULT_VAL_GENERATED_ROW_VALUE'; +exports[3772] = 'ER_DEFAULT_VAL_GENERATED_VARIABLES'; +exports[3773] = 'ER_DEFAULT_AS_VAL_GENERATED'; +exports[3774] = 'ER_UNSUPPORTED_ACTION_ON_DEFAULT_VAL_GENERATED'; +exports[3775] = 'ER_GTID_UNSAFE_ALTER_ADD_COL_WITH_DEFAULT_EXPRESSION'; +exports[3776] = 'ER_FK_CANNOT_CHANGE_ENGINE'; +exports[3777] = 'ER_WARN_DEPRECATED_USER_SET_EXPR'; +exports[3778] = 'ER_WARN_DEPRECATED_UTF8MB3_COLLATION'; +exports[3779] = 'ER_WARN_DEPRECATED_NESTED_COMMENT_SYNTAX'; +exports[3780] = 'ER_FK_INCOMPATIBLE_COLUMNS'; +exports[3781] = 'ER_GR_HOLD_WAIT_TIMEOUT'; +exports[3782] = 'ER_GR_HOLD_KILLED'; +exports[3783] = 'ER_GR_HOLD_MEMBER_STATUS_ERROR'; +exports[3784] = 'ER_RPL_ENCRYPTION_FAILED_TO_FETCH_KEY'; +exports[3785] = 'ER_RPL_ENCRYPTION_KEY_NOT_FOUND'; +exports[3786] = 'ER_RPL_ENCRYPTION_KEYRING_INVALID_KEY'; +exports[3787] = 'ER_RPL_ENCRYPTION_HEADER_ERROR'; +exports[3788] = 'ER_RPL_ENCRYPTION_FAILED_TO_ROTATE_LOGS'; +exports[3789] = 'ER_RPL_ENCRYPTION_KEY_EXISTS_UNEXPECTED'; +exports[3790] = 'ER_RPL_ENCRYPTION_FAILED_TO_GENERATE_KEY'; +exports[3791] = 'ER_RPL_ENCRYPTION_FAILED_TO_STORE_KEY'; +exports[3792] = 'ER_RPL_ENCRYPTION_FAILED_TO_REMOVE_KEY'; +exports[3793] = 'ER_RPL_ENCRYPTION_UNABLE_TO_CHANGE_OPTION'; +exports[3794] = 'ER_RPL_ENCRYPTION_MASTER_KEY_RECOVERY_FAILED'; +exports[3795] = 'ER_SLOW_LOG_MODE_IGNORED_WHEN_NOT_LOGGING_TO_FILE'; +exports[3796] = 'ER_GRP_TRX_CONSISTENCY_NOT_ALLOWED'; +exports[3797] = 'ER_GRP_TRX_CONSISTENCY_BEFORE'; +exports[3798] = 'ER_GRP_TRX_CONSISTENCY_AFTER_ON_TRX_BEGIN'; +exports[3799] = 'ER_GRP_TRX_CONSISTENCY_BEGIN_NOT_ALLOWED'; +exports[3800] = 'ER_FUNCTIONAL_INDEX_ROW_VALUE_IS_NOT_ALLOWED'; +exports[3801] = 'ER_RPL_ENCRYPTION_FAILED_TO_ENCRYPT'; +exports[3802] = 'ER_PAGE_TRACKING_NOT_STARTED'; +exports[3803] = 'ER_PAGE_TRACKING_RANGE_NOT_TRACKED'; +exports[3804] = 'ER_PAGE_TRACKING_CANNOT_PURGE'; +exports[3805] = 'ER_RPL_ENCRYPTION_CANNOT_ROTATE_BINLOG_MASTER_KEY'; +exports[3806] = 'ER_BINLOG_MASTER_KEY_RECOVERY_OUT_OF_COMBINATION'; +exports[3807] = 'ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_OPERATE_KEY'; +exports[3808] = 'ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_ROTATE_LOGS'; +exports[3809] = 'ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_REENCRYPT_LOG'; +exports[3810] = 'ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_CLEANUP_UNUSED_KEYS'; +exports[3811] = 'ER_BINLOG_MASTER_KEY_ROTATION_FAIL_TO_CLEANUP_AUX_KEY'; +exports[3812] = 'ER_NON_BOOLEAN_EXPR_FOR_CHECK_CONSTRAINT'; +exports[3813] = 'ER_COLUMN_CHECK_CONSTRAINT_REFERENCES_OTHER_COLUMN'; +exports[3814] = 'ER_CHECK_CONSTRAINT_NAMED_FUNCTION_IS_NOT_ALLOWED'; +exports[3815] = 'ER_CHECK_CONSTRAINT_FUNCTION_IS_NOT_ALLOWED'; +exports[3816] = 'ER_CHECK_CONSTRAINT_VARIABLES'; +exports[3817] = 'ER_CHECK_CONSTRAINT_ROW_VALUE'; +exports[3818] = 'ER_CHECK_CONSTRAINT_REFERS_AUTO_INCREMENT_COLUMN'; +exports[3819] = 'ER_CHECK_CONSTRAINT_VIOLATED'; +exports[3820] = 'ER_CHECK_CONSTRAINT_REFERS_UNKNOWN_COLUMN'; +exports[3821] = 'ER_CHECK_CONSTRAINT_NOT_FOUND'; +exports[3822] = 'ER_CHECK_CONSTRAINT_DUP_NAME'; +exports[3823] = 'ER_CHECK_CONSTRAINT_CLAUSE_USING_FK_REFER_ACTION_COLUMN'; +exports[3824] = 'WARN_UNENCRYPTED_TABLE_IN_ENCRYPTED_DB'; +exports[3825] = 'ER_INVALID_ENCRYPTION_REQUEST'; +exports[3826] = 'ER_CANNOT_SET_TABLE_ENCRYPTION'; +exports[3827] = 'ER_CANNOT_SET_DATABASE_ENCRYPTION'; +exports[3828] = 'ER_CANNOT_SET_TABLESPACE_ENCRYPTION'; +exports[3829] = 'ER_TABLESPACE_CANNOT_BE_ENCRYPTED'; +exports[3830] = 'ER_TABLESPACE_CANNOT_BE_DECRYPTED'; +exports[3831] = 'ER_TABLESPACE_TYPE_UNKNOWN'; +exports[3832] = 'ER_TARGET_TABLESPACE_UNENCRYPTED'; +exports[3833] = 'ER_CANNOT_USE_ENCRYPTION_CLAUSE'; +exports[3834] = 'ER_INVALID_MULTIPLE_CLAUSES'; +exports[3835] = 'ER_UNSUPPORTED_USE_OF_GRANT_AS'; +exports[3836] = 'ER_UKNOWN_AUTH_ID_OR_ACCESS_DENIED_FOR_GRANT_AS'; +exports[3837] = 'ER_DEPENDENT_BY_FUNCTIONAL_INDEX'; +exports[3838] = 'ER_PLUGIN_NOT_EARLY'; +exports[3839] = 'ER_INNODB_REDO_LOG_ARCHIVE_START_SUBDIR_PATH'; +exports[3840] = 'ER_INNODB_REDO_LOG_ARCHIVE_START_TIMEOUT'; +exports[3841] = 'ER_INNODB_REDO_LOG_ARCHIVE_DIRS_INVALID'; +exports[3842] = 'ER_INNODB_REDO_LOG_ARCHIVE_LABEL_NOT_FOUND'; +exports[3843] = 'ER_INNODB_REDO_LOG_ARCHIVE_DIR_EMPTY'; +exports[3844] = 'ER_INNODB_REDO_LOG_ARCHIVE_NO_SUCH_DIR'; +exports[3845] = 'ER_INNODB_REDO_LOG_ARCHIVE_DIR_CLASH'; +exports[3846] = 'ER_INNODB_REDO_LOG_ARCHIVE_DIR_PERMISSIONS'; +exports[3847] = 'ER_INNODB_REDO_LOG_ARCHIVE_FILE_CREATE'; +exports[3848] = 'ER_INNODB_REDO_LOG_ARCHIVE_ACTIVE'; +exports[3849] = 'ER_INNODB_REDO_LOG_ARCHIVE_INACTIVE'; +exports[3850] = 'ER_INNODB_REDO_LOG_ARCHIVE_FAILED'; +exports[3851] = 'ER_INNODB_REDO_LOG_ARCHIVE_SESSION'; +exports[3852] = 'ER_STD_REGEX_ERROR'; +exports[3853] = 'ER_INVALID_JSON_TYPE'; +exports[3854] = 'ER_CANNOT_CONVERT_STRING'; +exports[3855] = 'ER_DEPENDENT_BY_PARTITION_FUNC'; +exports[3856] = 'ER_WARN_DEPRECATED_FLOAT_AUTO_INCREMENT'; +exports[3857] = 'ER_RPL_CANT_STOP_REPLICA_WHILE_LOCKED_BACKUP'; +exports[3858] = 'ER_WARN_DEPRECATED_FLOAT_DIGITS'; +exports[3859] = 'ER_WARN_DEPRECATED_FLOAT_UNSIGNED'; +exports[3860] = 'ER_WARN_DEPRECATED_INTEGER_DISPLAY_WIDTH'; +exports[3861] = 'ER_WARN_DEPRECATED_ZEROFILL'; +exports[3862] = 'ER_CLONE_DONOR'; +exports[3863] = 'ER_CLONE_PROTOCOL'; +exports[3864] = 'ER_CLONE_DONOR_VERSION'; +exports[3865] = 'ER_CLONE_OS'; +exports[3866] = 'ER_CLONE_PLATFORM'; +exports[3867] = 'ER_CLONE_CHARSET'; +exports[3868] = 'ER_CLONE_CONFIG'; +exports[3869] = 'ER_CLONE_SYS_CONFIG'; +exports[3870] = 'ER_CLONE_PLUGIN_MATCH'; +exports[3871] = 'ER_CLONE_LOOPBACK'; +exports[3872] = 'ER_CLONE_ENCRYPTION'; +exports[3873] = 'ER_CLONE_DISK_SPACE'; +exports[3874] = 'ER_CLONE_IN_PROGRESS'; +exports[3875] = 'ER_CLONE_DISALLOWED'; +exports[3876] = 'ER_CANNOT_GRANT_ROLES_TO_ANONYMOUS_USER'; +exports[3877] = 'ER_SECONDARY_ENGINE_PLUGIN'; +exports[3878] = 'ER_SECOND_PASSWORD_CANNOT_BE_EMPTY'; +exports[3879] = 'ER_DB_ACCESS_DENIED'; +exports[3880] = 'ER_DA_AUTH_ID_WITH_SYSTEM_USER_PRIV_IN_MANDATORY_ROLES'; +exports[3881] = 'ER_DA_RPL_GTID_TABLE_CANNOT_OPEN'; +exports[3882] = 'ER_GEOMETRY_IN_UNKNOWN_LENGTH_UNIT'; +exports[3883] = 'ER_DA_PLUGIN_INSTALL_ERROR'; +exports[3884] = 'ER_NO_SESSION_TEMP'; +exports[3885] = 'ER_DA_UNKNOWN_ERROR_NUMBER'; +exports[3886] = 'ER_COLUMN_CHANGE_SIZE'; +exports[3887] = 'ER_REGEXP_INVALID_CAPTURE_GROUP_NAME'; +exports[3888] = 'ER_DA_SSL_LIBRARY_ERROR'; +exports[3889] = 'ER_SECONDARY_ENGINE'; +exports[3890] = 'ER_SECONDARY_ENGINE_DDL'; +exports[3891] = 'ER_INCORRECT_CURRENT_PASSWORD'; +exports[3892] = 'ER_MISSING_CURRENT_PASSWORD'; +exports[3893] = 'ER_CURRENT_PASSWORD_NOT_REQUIRED'; +exports[3894] = 'ER_PASSWORD_CANNOT_BE_RETAINED_ON_PLUGIN_CHANGE'; +exports[3895] = 'ER_CURRENT_PASSWORD_CANNOT_BE_RETAINED'; +exports[3896] = 'ER_PARTIAL_REVOKES_EXIST'; +exports[3897] = 'ER_CANNOT_GRANT_SYSTEM_PRIV_TO_MANDATORY_ROLE'; +exports[3898] = 'ER_XA_REPLICATION_FILTERS'; +exports[3899] = 'ER_UNSUPPORTED_SQL_MODE'; +exports[3900] = 'ER_REGEXP_INVALID_FLAG'; +exports[3901] = 'ER_PARTIAL_REVOKE_AND_DB_GRANT_BOTH_EXISTS'; +exports[3902] = 'ER_UNIT_NOT_FOUND'; +exports[3903] = 'ER_INVALID_JSON_VALUE_FOR_FUNC_INDEX'; +exports[3904] = 'ER_JSON_VALUE_OUT_OF_RANGE_FOR_FUNC_INDEX'; +exports[3905] = 'ER_EXCEEDED_MV_KEYS_NUM'; +exports[3906] = 'ER_EXCEEDED_MV_KEYS_SPACE'; +exports[3907] = 'ER_FUNCTIONAL_INDEX_DATA_IS_TOO_LONG'; +exports[3908] = 'ER_WRONG_MVI_VALUE'; +exports[3909] = 'ER_WARN_FUNC_INDEX_NOT_APPLICABLE'; +exports[3910] = 'ER_GRP_RPL_UDF_ERROR'; +exports[3911] = 'ER_UPDATE_GTID_PURGED_WITH_GR'; +exports[3912] = 'ER_GROUPING_ON_TIMESTAMP_IN_DST'; +exports[3913] = 'ER_TABLE_NAME_CAUSES_TOO_LONG_PATH'; +exports[3914] = 'ER_AUDIT_LOG_INSUFFICIENT_PRIVILEGE'; +exports[3915] = 'ER_AUDIT_LOG_PASSWORD_HAS_BEEN_COPIED'; +exports[3916] = 'ER_DA_GRP_RPL_STARTED_AUTO_REJOIN'; +exports[3917] = 'ER_SYSVAR_CHANGE_DURING_QUERY'; +exports[3918] = 'ER_GLOBSTAT_CHANGE_DURING_QUERY'; +exports[3919] = 'ER_GRP_RPL_MESSAGE_SERVICE_INIT_FAILURE'; +exports[3920] = 'ER_CHANGE_SOURCE_WRONG_COMPRESSION_ALGORITHM_CLIENT'; +exports[3921] = 'ER_CHANGE_SOURCE_WRONG_COMPRESSION_LEVEL_CLIENT'; +exports[3922] = 'ER_WRONG_COMPRESSION_ALGORITHM_CLIENT'; +exports[3923] = 'ER_WRONG_COMPRESSION_LEVEL_CLIENT'; +exports[3924] = 'ER_CHANGE_SOURCE_WRONG_COMPRESSION_ALGORITHM_LIST_CLIENT'; +exports[3925] = 'ER_CLIENT_PRIVILEGE_CHECKS_USER_CANNOT_BE_ANONYMOUS'; +exports[3926] = 'ER_CLIENT_PRIVILEGE_CHECKS_USER_DOES_NOT_EXIST'; +exports[3927] = 'ER_CLIENT_PRIVILEGE_CHECKS_USER_CORRUPT'; +exports[3928] = 'ER_CLIENT_PRIVILEGE_CHECKS_USER_NEEDS_RPL_APPLIER_PRIV'; +exports[3929] = 'ER_WARN_DA_PRIVILEGE_NOT_REGISTERED'; +exports[3930] = 'ER_CLIENT_KEYRING_UDF_KEY_INVALID'; +exports[3931] = 'ER_CLIENT_KEYRING_UDF_KEY_TYPE_INVALID'; +exports[3932] = 'ER_CLIENT_KEYRING_UDF_KEY_TOO_LONG'; +exports[3933] = 'ER_CLIENT_KEYRING_UDF_KEY_TYPE_TOO_LONG'; +exports[3934] = 'ER_JSON_SCHEMA_VALIDATION_ERROR_WITH_DETAILED_REPORT'; +exports[3935] = 'ER_DA_UDF_INVALID_CHARSET_SPECIFIED'; +exports[3936] = 'ER_DA_UDF_INVALID_CHARSET'; +exports[3937] = 'ER_DA_UDF_INVALID_COLLATION'; +exports[3938] = 'ER_DA_UDF_INVALID_EXTENSION_ARGUMENT_TYPE'; +exports[3939] = 'ER_MULTIPLE_CONSTRAINTS_WITH_SAME_NAME'; +exports[3940] = 'ER_CONSTRAINT_NOT_FOUND'; +exports[3941] = 'ER_ALTER_CONSTRAINT_ENFORCEMENT_NOT_SUPPORTED'; +exports[3942] = 'ER_TABLE_VALUE_CONSTRUCTOR_MUST_HAVE_COLUMNS'; +exports[3943] = 'ER_TABLE_VALUE_CONSTRUCTOR_CANNOT_HAVE_DEFAULT'; +exports[3944] = 'ER_CLIENT_QUERY_FAILURE_INVALID_NON_ROW_FORMAT'; +exports[3945] = 'ER_REQUIRE_ROW_FORMAT_INVALID_VALUE'; +exports[3946] = 'ER_FAILED_TO_DETERMINE_IF_ROLE_IS_MANDATORY'; +exports[3947] = 'ER_FAILED_TO_FETCH_MANDATORY_ROLE_LIST'; +exports[3948] = 'ER_CLIENT_LOCAL_FILES_DISABLED'; +exports[3949] = 'ER_IMP_INCOMPATIBLE_CFG_VERSION'; +exports[3950] = 'ER_DA_OOM'; +exports[3951] = 'ER_DA_UDF_INVALID_ARGUMENT_TO_SET_CHARSET'; +exports[3952] = 'ER_DA_UDF_INVALID_RETURN_TYPE_TO_SET_CHARSET'; +exports[3953] = 'ER_MULTIPLE_INTO_CLAUSES'; +exports[3954] = 'ER_MISPLACED_INTO'; +exports[3955] = + 'ER_USER_ACCESS_DENIED_FOR_USER_ACCOUNT_BLOCKED_BY_PASSWORD_LOCK'; +exports[3956] = 'ER_WARN_DEPRECATED_YEAR_UNSIGNED'; +exports[3957] = 'ER_CLONE_NETWORK_PACKET'; +exports[3958] = 'ER_SDI_OPERATION_FAILED_MISSING_RECORD'; +exports[3959] = 'ER_DEPENDENT_BY_CHECK_CONSTRAINT'; +exports[3960] = 'ER_GRP_OPERATION_NOT_ALLOWED_GR_MUST_STOP'; +exports[3961] = 'ER_WARN_DEPRECATED_JSON_TABLE_ON_ERROR_ON_EMPTY'; +exports[3962] = 'ER_WARN_DEPRECATED_INNER_INTO'; +exports[3963] = 'ER_WARN_DEPRECATED_VALUES_FUNCTION_ALWAYS_NULL'; +exports[3964] = 'ER_WARN_DEPRECATED_SQL_CALC_FOUND_ROWS'; +exports[3965] = 'ER_WARN_DEPRECATED_FOUND_ROWS'; +exports[3966] = 'ER_MISSING_JSON_VALUE'; +exports[3967] = 'ER_MULTIPLE_JSON_VALUES'; +exports[3968] = 'ER_HOSTNAME_TOO_LONG'; +exports[3969] = 'ER_WARN_CLIENT_DEPRECATED_PARTITION_PREFIX_KEY'; +exports[3970] = 'ER_GROUP_REPLICATION_USER_EMPTY_MSG'; +exports[3971] = 'ER_GROUP_REPLICATION_USER_MANDATORY_MSG'; +exports[3972] = 'ER_GROUP_REPLICATION_PASSWORD_LENGTH'; +exports[3973] = 'ER_SUBQUERY_TRANSFORM_REJECTED'; +exports[3974] = 'ER_DA_GRP_RPL_RECOVERY_ENDPOINT_FORMAT'; +exports[3975] = 'ER_DA_GRP_RPL_RECOVERY_ENDPOINT_INVALID'; +exports[3976] = 'ER_WRONG_VALUE_FOR_VAR_PLUS_ACTIONABLE_PART'; +exports[3977] = 'ER_STATEMENT_NOT_ALLOWED_AFTER_START_TRANSACTION'; +exports[3978] = 'ER_FOREIGN_KEY_WITH_ATOMIC_CREATE_SELECT'; +exports[3979] = 'ER_NOT_ALLOWED_WITH_START_TRANSACTION'; +exports[3980] = 'ER_INVALID_JSON_ATTRIBUTE'; +exports[3981] = 'ER_ENGINE_ATTRIBUTE_NOT_SUPPORTED'; +exports[3982] = 'ER_INVALID_USER_ATTRIBUTE_JSON'; +exports[3983] = 'ER_INNODB_REDO_DISABLED'; +exports[3984] = 'ER_INNODB_REDO_ARCHIVING_ENABLED'; +exports[3985] = 'ER_MDL_OUT_OF_RESOURCES'; +exports[3986] = 'ER_IMPLICIT_COMPARISON_FOR_JSON'; +exports[3987] = 'ER_FUNCTION_DOES_NOT_SUPPORT_CHARACTER_SET'; +exports[3988] = 'ER_IMPOSSIBLE_STRING_CONVERSION'; +exports[3989] = 'ER_SCHEMA_READ_ONLY'; +exports[3990] = 'ER_RPL_ASYNC_RECONNECT_GTID_MODE_OFF'; +exports[3991] = 'ER_RPL_ASYNC_RECONNECT_AUTO_POSITION_OFF'; +exports[3992] = 'ER_DISABLE_GTID_MODE_REQUIRES_ASYNC_RECONNECT_OFF'; +exports[3993] = 'ER_DISABLE_AUTO_POSITION_REQUIRES_ASYNC_RECONNECT_OFF'; +exports[3994] = 'ER_INVALID_PARAMETER_USE'; +exports[3995] = 'ER_CHARACTER_SET_MISMATCH'; +exports[3996] = 'ER_WARN_VAR_VALUE_CHANGE_NOT_SUPPORTED'; +exports[3997] = 'ER_INVALID_TIME_ZONE_INTERVAL'; +exports[3998] = 'ER_INVALID_CAST'; +exports[3999] = 'ER_HYPERGRAPH_NOT_SUPPORTED_YET'; +exports[4000] = 'ER_WARN_HYPERGRAPH_EXPERIMENTAL'; +exports[4001] = 'ER_DA_NO_ERROR_LOG_PARSER_CONFIGURED'; +exports[4002] = 'ER_DA_ERROR_LOG_TABLE_DISABLED'; +exports[4003] = 'ER_DA_ERROR_LOG_MULTIPLE_FILTERS'; +exports[4004] = 'ER_DA_CANT_OPEN_ERROR_LOG'; +exports[4005] = 'ER_USER_REFERENCED_AS_DEFINER'; +exports[4006] = 'ER_CANNOT_USER_REFERENCED_AS_DEFINER'; +exports[4007] = 'ER_REGEX_NUMBER_TOO_BIG'; +exports[4008] = 'ER_SPVAR_NONINTEGER_TYPE'; +exports[4009] = 'WARN_UNSUPPORTED_ACL_TABLES_READ'; +exports[4010] = 'ER_BINLOG_UNSAFE_ACL_TABLE_READ_IN_DML_DDL'; +exports[4011] = 'ER_STOP_REPLICA_MONITOR_IO_THREAD_TIMEOUT'; +exports[4012] = 'ER_STARTING_REPLICA_MONITOR_IO_THREAD'; +exports[4013] = 'ER_CANT_USE_ANONYMOUS_TO_GTID_WITH_GTID_MODE_NOT_ON'; +exports[4014] = 'ER_CANT_COMBINE_ANONYMOUS_TO_GTID_AND_AUTOPOSITION'; +exports[4015] = + 'ER_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS_REQUIRES_GTID_MODE_ON'; +exports[4016] = 'ER_SQL_REPLICA_SKIP_COUNTER_USED_WITH_GTID_MODE_ON'; +exports[4017] = + 'ER_USING_ASSIGN_GTIDS_TO_ANONYMOUS_TRANSACTIONS_AS_LOCAL_OR_UUID'; +exports[4018] = + 'ER_CANT_SET_ANONYMOUS_TO_GTID_AND_WAIT_UNTIL_SQL_THD_AFTER_GTIDS'; +exports[4019] = 'ER_CANT_SET_SQL_AFTER_OR_BEFORE_GTIDS_WITH_ANONYMOUS_TO_GTID'; +exports[4020] = 'ER_ANONYMOUS_TO_GTID_UUID_SAME_AS_GROUP_NAME'; +exports[4021] = 'ER_CANT_USE_SAME_UUID_AS_GROUP_NAME'; +exports[4022] = 'ER_GRP_RPL_RECOVERY_CHANNEL_STILL_RUNNING'; +exports[4023] = 'ER_INNODB_INVALID_AUTOEXTEND_SIZE_VALUE'; +exports[4024] = 'ER_INNODB_INCOMPATIBLE_WITH_TABLESPACE'; +exports[4025] = 'ER_INNODB_AUTOEXTEND_SIZE_OUT_OF_RANGE'; +exports[4026] = 'ER_CANNOT_USE_AUTOEXTEND_SIZE_CLAUSE'; +exports[4027] = 'ER_ROLE_GRANTED_TO_ITSELF'; +exports[4028] = 'ER_TABLE_MUST_HAVE_A_VISIBLE_COLUMN'; +exports[4029] = 'ER_INNODB_COMPRESSION_FAILURE'; +exports[4030] = 'ER_WARN_ASYNC_CONN_FAILOVER_NETWORK_NAMESPACE'; +exports[4031] = 'ER_CLIENT_INTERACTION_TIMEOUT'; +exports[4032] = 'ER_INVALID_CAST_TO_GEOMETRY'; +exports[4033] = 'ER_INVALID_CAST_POLYGON_RING_DIRECTION'; +exports[4034] = 'ER_GIS_DIFFERENT_SRIDS_AGGREGATION'; +exports[4035] = 'ER_RELOAD_KEYRING_FAILURE'; +exports[4036] = 'ER_SDI_GET_KEYS_INVALID_TABLESPACE'; +exports[4037] = 'ER_CHANGE_RPL_SRC_WRONG_COMPRESSION_ALGORITHM_SIZE'; +exports[4038] = 'ER_WARN_DEPRECATED_TLS_VERSION_FOR_CHANNEL_CLI'; +exports[4039] = 'ER_CANT_USE_SAME_UUID_AS_VIEW_CHANGE_UUID'; +exports[4040] = 'ER_ANONYMOUS_TO_GTID_UUID_SAME_AS_VIEW_CHANGE_UUID'; +exports[4041] = 'ER_GRP_RPL_VIEW_CHANGE_UUID_FAIL_GET_VARIABLE'; +exports[4042] = 'ER_WARN_ADUIT_LOG_MAX_SIZE_AND_PRUNE_SECONDS'; +exports[4043] = 'ER_WARN_ADUIT_LOG_MAX_SIZE_CLOSE_TO_ROTATE_ON_SIZE'; +exports[4044] = 'ER_KERBEROS_CREATE_USER'; +exports[4045] = 'ER_INSTALL_PLUGIN_CONFLICT_CLIENT'; +exports[4046] = 'ER_DA_ERROR_LOG_COMPONENT_FLUSH_FAILED'; +exports[4047] = 'ER_WARN_SQL_AFTER_MTS_GAPS_GAP_NOT_CALCULATED'; +exports[4048] = 'ER_INVALID_ASSIGNMENT_TARGET'; +exports[4049] = 'ER_OPERATION_NOT_ALLOWED_ON_GR_SECONDARY'; +exports[4050] = 'ER_GRP_RPL_FAILOVER_CHANNEL_STATUS_PROPAGATION'; +exports[4051] = 'ER_WARN_AUDIT_LOG_FORMAT_UNIX_TIMESTAMP_ONLY_WHEN_JSON'; +exports[4052] = 'ER_INVALID_MFA_PLUGIN_SPECIFIED'; +exports[4053] = 'ER_IDENTIFIED_BY_UNSUPPORTED'; +exports[4054] = 'ER_INVALID_PLUGIN_FOR_REGISTRATION'; +exports[4055] = 'ER_PLUGIN_REQUIRES_REGISTRATION'; +exports[4056] = 'ER_MFA_METHOD_EXISTS'; +exports[4057] = 'ER_MFA_METHOD_NOT_EXISTS'; +exports[4058] = 'ER_AUTHENTICATION_POLICY_MISMATCH'; +exports[4059] = 'ER_PLUGIN_REGISTRATION_DONE'; +exports[4060] = 'ER_INVALID_USER_FOR_REGISTRATION'; +exports[4061] = 'ER_USER_REGISTRATION_FAILED'; +exports[4062] = 'ER_MFA_METHODS_INVALID_ORDER'; +exports[4063] = 'ER_MFA_METHODS_IDENTICAL'; +exports[4064] = 'ER_INVALID_MFA_OPERATIONS_FOR_PASSWORDLESS_USER'; +exports[4065] = 'ER_CHANGE_REPLICATION_SOURCE_NO_OPTIONS_FOR_GTID_ONLY'; +exports[4066] = + 'ER_CHANGE_REP_SOURCE_CANT_DISABLE_REQ_ROW_FORMAT_WITH_GTID_ONLY'; +exports[4067] = + 'ER_CHANGE_REP_SOURCE_CANT_DISABLE_AUTO_POSITION_WITH_GTID_ONLY'; +exports[4068] = 'ER_CHANGE_REP_SOURCE_CANT_DISABLE_GTID_ONLY_WITHOUT_POSITIONS'; +exports[4069] = 'ER_CHANGE_REP_SOURCE_CANT_DISABLE_AUTO_POS_WITHOUT_POSITIONS'; +exports[4070] = 'ER_CHANGE_REP_SOURCE_GR_CHANNEL_WITH_GTID_MODE_NOT_ON'; +exports[4071] = 'ER_CANT_USE_GTID_ONLY_WITH_GTID_MODE_NOT_ON'; +exports[4072] = 'ER_WARN_C_DISABLE_GTID_ONLY_WITH_SOURCE_AUTO_POS_INVALID_POS'; +exports[4073] = 'ER_DA_SSL_FIPS_MODE_ERROR'; +exports[4074] = 'ER_VALUE_OUT_OF_RANGE'; +exports[4075] = 'ER_FULLTEXT_WITH_ROLLUP'; +exports[4076] = 'ER_REGEXP_MISSING_RESOURCE'; +exports[4077] = 'ER_WARN_REGEXP_USING_DEFAULT'; +exports[4078] = 'ER_REGEXP_MISSING_FILE'; +exports[4079] = 'ER_WARN_DEPRECATED_COLLATION'; +exports[4080] = 'ER_CONCURRENT_PROCEDURE_USAGE'; +exports[4081] = 'ER_DA_GLOBAL_CONN_LIMIT'; +exports[4082] = 'ER_DA_CONN_LIMIT'; +exports[4083] = 'ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE_INSTANT'; +exports[4084] = 'ER_WARN_SF_UDF_NAME_COLLISION'; +exports[4085] = 'ER_CANNOT_PURGE_BINLOG_WITH_BACKUP_LOCK'; +exports[4086] = 'ER_TOO_MANY_WINDOWS'; +exports[4087] = 'ER_MYSQLBACKUP_CLIENT_MSG'; +exports[4088] = 'ER_COMMENT_CONTAINS_INVALID_STRING'; +exports[4089] = 'ER_DEFINITION_CONTAINS_INVALID_STRING'; +exports[4090] = 'ER_CANT_EXECUTE_COMMAND_WITH_ASSIGNED_GTID_NEXT'; +exports[4091] = 'ER_XA_TEMP_TABLE'; +exports[4092] = 'ER_INNODB_MAX_ROW_VERSION'; +exports[4093] = 'ER_INNODB_INSTANT_ADD_NOT_SUPPORTED_MAX_SIZE'; +exports[4094] = 'ER_OPERATION_NOT_ALLOWED_WHILE_PRIMARY_CHANGE_IS_RUNNING'; +exports[4095] = 'ER_WARN_DEPRECATED_DATETIME_DELIMITER'; +exports[4096] = 'ER_WARN_DEPRECATED_SUPERFLUOUS_DELIMITER'; +exports[4097] = 'ER_CANNOT_PERSIST_SENSITIVE_VARIABLES'; +exports[4098] = 'ER_WARN_CANNOT_SECURELY_PERSIST_SENSITIVE_VARIABLES'; +exports[4099] = 'ER_WARN_TRG_ALREADY_EXISTS'; +exports[4100] = 'ER_IF_NOT_EXISTS_UNSUPPORTED_TRG_EXISTS_ON_DIFFERENT_TABLE'; +exports[4101] = 'ER_IF_NOT_EXISTS_UNSUPPORTED_UDF_NATIVE_FCT_NAME_COLLISION'; +exports[4102] = 'ER_SET_PASSWORD_AUTH_PLUGIN_ERROR'; +exports[4103] = 'ER_REDUCED_DBLWR_FILE_CORRUPTED'; +exports[4104] = 'ER_REDUCED_DBLWR_PAGE_FOUND'; +exports[4105] = 'ER_SRS_INVALID_LATITUDE_OF_ORIGIN'; +exports[4106] = 'ER_SRS_INVALID_LONGITUDE_OF_ORIGIN'; +exports[4107] = 'ER_SRS_UNUSED_PROJ_PARAMETER_PRESENT'; +exports[4108] = 'ER_GIPK_COLUMN_EXISTS'; +exports[4109] = 'ER_GIPK_FAILED_AUTOINC_COLUMN_EXISTS'; +exports[4110] = 'ER_GIPK_COLUMN_ALTER_NOT_ALLOWED'; +exports[4111] = 'ER_DROP_PK_COLUMN_TO_DROP_GIPK'; +exports[4112] = 'ER_CREATE_SELECT_WITH_GIPK_DISALLOWED_IN_SBR'; +exports[4113] = 'ER_DA_EXPIRE_LOGS_DAYS_IGNORED'; +exports[4114] = 'ER_CTE_RECURSIVE_NOT_UNION'; +exports[4115] = 'ER_COMMAND_BACKEND_FAILED_TO_FETCH_SECURITY_CTX'; +exports[4116] = 'ER_COMMAND_SERVICE_BACKEND_FAILED'; +exports[4117] = 'ER_CLIENT_FILE_PRIVILEGE_FOR_REPLICATION_CHECKS'; +exports[4118] = 'ER_GROUP_REPLICATION_FORCE_MEMBERS_COMMAND_FAILURE'; +exports[4119] = 'ER_WARN_DEPRECATED_IDENT'; +exports[4120] = 'ER_INTERSECT_ALL_MAX_DUPLICATES_EXCEEDED'; +exports[4121] = 'ER_TP_QUERY_THRS_PER_GRP_EXCEEDS_TXN_THR_LIMIT'; +exports[4122] = 'ER_BAD_TIMESTAMP_FORMAT'; +exports[4123] = 'ER_SHAPE_PRIDICTION_UDF'; +exports[4124] = 'ER_SRS_INVALID_HEIGHT'; +exports[4125] = 'ER_SRS_INVALID_SCALING'; +exports[4126] = 'ER_SRS_INVALID_ZONE_WIDTH'; +exports[4127] = 'ER_SRS_INVALID_LATITUDE_POLAR_STERE_VAR_A'; +exports[4128] = 'ER_WARN_DEPRECATED_CLIENT_NO_SCHEMA_OPTION'; +exports[4129] = 'ER_TABLE_NOT_EMPTY'; +exports[4130] = 'ER_TABLE_NO_PRIMARY_KEY'; +exports[4131] = 'ER_TABLE_IN_SHARED_TABLESPACE'; +exports[4132] = 'ER_INDEX_OTHER_THAN_PK'; +exports[4133] = 'ER_LOAD_BULK_DATA_UNSORTED'; +exports[4134] = 'ER_BULK_EXECUTOR_ERROR'; +exports[4135] = 'ER_BULK_READER_LIBCURL_INIT_FAILED'; +exports[4136] = 'ER_BULK_READER_LIBCURL_ERROR'; +exports[4137] = 'ER_BULK_READER_SERVER_ERROR'; +exports[4138] = 'ER_BULK_READER_COMMUNICATION_ERROR'; +exports[4139] = 'ER_BULK_LOAD_DATA_FAILED'; +exports[4140] = 'ER_BULK_LOADER_COLUMN_TOO_BIG_FOR_LEFTOVER_BUFFER'; +exports[4141] = 'ER_BULK_LOADER_COMPONENT_ERROR'; +exports[4142] = 'ER_BULK_LOADER_FILE_CONTAINS_LESS_LINES_THAN_IGNORE_CLAUSE'; +exports[4143] = 'ER_BULK_PARSER_MISSING_ENCLOSED_BY'; +exports[4144] = 'ER_BULK_PARSER_ROW_BUFFER_MAX_TOTAL_COLS_EXCEEDED'; +exports[4145] = 'ER_BULK_PARSER_COPY_BUFFER_SIZE_EXCEEDED'; +exports[4146] = 'ER_BULK_PARSER_UNEXPECTED_END_OF_INPUT'; +exports[4147] = 'ER_BULK_PARSER_UNEXPECTED_ROW_TERMINATOR'; +exports[4148] = 'ER_BULK_PARSER_UNEXPECTED_CHAR_AFTER_ENDING_ENCLOSED_BY'; +exports[4149] = 'ER_BULK_PARSER_UNEXPECTED_CHAR_AFTER_NULL_ESCAPE'; +exports[4150] = 'ER_BULK_PARSER_UNEXPECTED_CHAR_AFTER_COLUMN_TERMINATOR'; +exports[4151] = 'ER_BULK_PARSER_INCOMPLETE_ESCAPE_SEQUENCE'; +exports[4152] = 'ER_LOAD_BULK_DATA_FAILED'; +exports[4153] = 'ER_LOAD_BULK_DATA_WRONG_VALUE_FOR_FIELD'; +exports[4154] = 'ER_LOAD_BULK_DATA_WARN_NULL_TO_NOTNULL'; +exports[4155] = 'ER_REQUIRE_TABLE_PRIMARY_KEY_CHECK_GENERATE_WITH_GR'; +exports[4156] = 'ER_CANT_CHANGE_SYS_VAR_IN_READ_ONLY_MODE'; +exports[4157] = 'ER_INNODB_INSTANT_ADD_DROP_NOT_SUPPORTED_MAX_SIZE'; +exports[4158] = 'ER_INNODB_INSTANT_ADD_NOT_SUPPORTED_MAX_FIELDS'; +exports[4159] = 'ER_CANT_SET_PERSISTED'; +exports[4160] = 'ER_INSTALL_COMPONENT_SET_NULL_VALUE'; +exports[4161] = 'ER_INSTALL_COMPONENT_SET_UNUSED_VALUE'; +exports[4162] = 'ER_WARN_DEPRECATED_USER_DEFINED_COLLATIONS'; diff --git a/node_modules/mysql2/lib/constants/field_flags.js b/node_modules/mysql2/lib/constants/field_flags.js new file mode 100644 index 0000000..184905c --- /dev/null +++ b/node_modules/mysql2/lib/constants/field_flags.js @@ -0,0 +1,20 @@ +'use strict'; + +// Manually extracted from mysql-5.5.23/include/mysql_com.h +exports.NOT_NULL = 1; /* Field can't be NULL */ +exports.PRI_KEY = 2; /* Field is part of a primary key */ +exports.UNIQUE_KEY = 4; /* Field is part of a unique key */ +exports.MULTIPLE_KEY = 8; /* Field is part of a key */ +exports.BLOB = 16; /* Field is a blob */ +exports.UNSIGNED = 32; /* Field is unsigned */ +exports.ZEROFILL = 64; /* Field is zerofill */ +exports.BINARY = 128; /* Field is binary */ + +/* The following are only sent to new clients */ +exports.ENUM = 256; /* field is an enum */ +exports.AUTO_INCREMENT = 512; /* field is a autoincrement field */ +exports.TIMESTAMP = 1024; /* Field is a timestamp */ +exports.SET = 2048; /* field is a set */ +exports.NO_DEFAULT_VALUE = 4096; /* Field doesn't have default value */ +exports.ON_UPDATE_NOW = 8192; /* Field is set to NOW on UPDATE */ +exports.NUM = 32768; /* Field is num (for clients) */ diff --git a/node_modules/mysql2/lib/constants/server_status.js b/node_modules/mysql2/lib/constants/server_status.js new file mode 100644 index 0000000..828c851 --- /dev/null +++ b/node_modules/mysql2/lib/constants/server_status.js @@ -0,0 +1,44 @@ +'use strict'; + +// Manually extracted from mysql-5.5.23/include/mysql_com.h + +/** + Is raised when a multi-statement transaction + has been started, either explicitly, by means + of BEGIN or COMMIT AND CHAIN, or + implicitly, by the first transactional + statement, when autocommit=off. +*/ +exports.SERVER_STATUS_IN_TRANS = 1; +exports.SERVER_STATUS_AUTOCOMMIT = 2; /* Server in auto_commit mode */ +exports.SERVER_MORE_RESULTS_EXISTS = 8; /* Multi query - next query exists */ +exports.SERVER_QUERY_NO_GOOD_INDEX_USED = 16; +exports.SERVER_QUERY_NO_INDEX_USED = 32; +/** + The server was able to fulfill the clients request and opened a + read-only non-scrollable cursor for a query. This flag comes + in reply to COM_STMT_EXECUTE and COM_STMT_FETCH commands. +*/ +exports.SERVER_STATUS_CURSOR_EXISTS = 64; +/** + This flag is sent when a read-only cursor is exhausted, in reply to + COM_STMT_FETCH command. +*/ +exports.SERVER_STATUS_LAST_ROW_SENT = 128; +exports.SERVER_STATUS_DB_DROPPED = 256; /* A database was dropped */ +exports.SERVER_STATUS_NO_BACKSLASH_ESCAPES = 512; +/** + Sent to the client if after a prepared statement reprepare + we discovered that the new statement returns a different + number of result set columns. +*/ +exports.SERVER_STATUS_METADATA_CHANGED = 1024; +exports.SERVER_QUERY_WAS_SLOW = 2048; + +/** + To mark ResultSet containing output parameter values. +*/ +exports.SERVER_PS_OUT_PARAMS = 4096; + +exports.SERVER_STATUS_IN_TRANS_READONLY = 0x2000; // in a read-only transaction +exports.SERVER_SESSION_STATE_CHANGED = 0x4000; diff --git a/node_modules/mysql2/lib/constants/session_track.js b/node_modules/mysql2/lib/constants/session_track.js new file mode 100644 index 0000000..85d8fbf --- /dev/null +++ b/node_modules/mysql2/lib/constants/session_track.js @@ -0,0 +1,11 @@ +'use strict'; + +exports.SYSTEM_VARIABLES = 0; +exports.SCHEMA = 1; +exports.STATE_CHANGE = 2; +exports.STATE_GTIDS = 3; +exports.TRANSACTION_CHARACTERISTICS = 4; +exports.TRANSACTION_STATE = 5; + +exports.FIRST_KEY = exports.SYSTEM_VARIABLES; +exports.LAST_KEY = exports.TRANSACTION_STATE; diff --git a/node_modules/mysql2/lib/constants/ssl_profiles.js b/node_modules/mysql2/lib/constants/ssl_profiles.js new file mode 100644 index 0000000..11adc6f --- /dev/null +++ b/node_modules/mysql2/lib/constants/ssl_profiles.js @@ -0,0 +1,11 @@ +'use strict'; + +const awsCaBundle = require('aws-ssl-profiles'); + +/** + * @deprecated + * Please, use [**aws-ssl-profiles**](https://github.com/mysqljs/aws-ssl-profiles). + */ +exports['Amazon RDS'] = { + ca: awsCaBundle.ca, +}; diff --git a/node_modules/mysql2/lib/constants/types.js b/node_modules/mysql2/lib/constants/types.js new file mode 100644 index 0000000..82a6655 --- /dev/null +++ b/node_modules/mysql2/lib/constants/types.js @@ -0,0 +1,64 @@ +'use strict'; + +module.exports = { + 0x00: 'DECIMAL', // aka DECIMAL + 0x01: 'TINY', // aka TINYINT, 1 byte + 0x02: 'SHORT', // aka SMALLINT, 2 bytes + 0x03: 'LONG', // aka INT, 4 bytes + 0x04: 'FLOAT', // aka FLOAT, 4-8 bytes + 0x05: 'DOUBLE', // aka DOUBLE, 8 bytes + 0x06: 'NULL', // NULL (used for prepared statements, I think) + 0x07: 'TIMESTAMP', // aka TIMESTAMP + 0x08: 'LONGLONG', // aka BIGINT, 8 bytes + 0x09: 'INT24', // aka MEDIUMINT, 3 bytes + 0x0a: 'DATE', // aka DATE + 0x0b: 'TIME', // aka TIME + 0x0c: 'DATETIME', // aka DATETIME + 0x0d: 'YEAR', // aka YEAR, 1 byte (don't ask) + 0x0e: 'NEWDATE', // aka ? + 0x0f: 'VARCHAR', // aka VARCHAR (?) + 0x10: 'BIT', // aka BIT, 1-8 byte + 0xf5: 'JSON', + 0xf6: 'NEWDECIMAL', // aka DECIMAL + 0xf7: 'ENUM', // aka ENUM + 0xf8: 'SET', // aka SET + 0xf9: 'TINY_BLOB', // aka TINYBLOB, TINYTEXT + 0xfa: 'MEDIUM_BLOB', // aka MEDIUMBLOB, MEDIUMTEXT + 0xfb: 'LONG_BLOB', // aka LONGBLOG, LONGTEXT + 0xfc: 'BLOB', // aka BLOB, TEXT + 0xfd: 'VAR_STRING', // aka VARCHAR, VARBINARY + 0xfe: 'STRING', // aka CHAR, BINARY + 0xff: 'GEOMETRY', // aka GEOMETRY +}; + +// Manually extracted from mysql-5.5.23/include/mysql_com.h +// some more info here: http://dev.mysql.com/doc/refman/5.5/en/c-api-prepared-statement-type-codes.html +module.exports.DECIMAL = 0x00; // aka DECIMAL (http://dev.mysql.com/doc/refman/5.0/en/precision-math-decimal-changes.html) +module.exports.TINY = 0x01; // aka TINYINT, 1 byte +module.exports.SHORT = 0x02; // aka SMALLINT, 2 bytes +module.exports.LONG = 0x03; // aka INT, 4 bytes +module.exports.FLOAT = 0x04; // aka FLOAT, 4-8 bytes +module.exports.DOUBLE = 0x05; // aka DOUBLE, 8 bytes +module.exports.NULL = 0x06; // NULL (used for prepared statements, I think) +module.exports.TIMESTAMP = 0x07; // aka TIMESTAMP +module.exports.LONGLONG = 0x08; // aka BIGINT, 8 bytes +module.exports.INT24 = 0x09; // aka MEDIUMINT, 3 bytes +module.exports.DATE = 0x0a; // aka DATE +module.exports.TIME = 0x0b; // aka TIME +module.exports.DATETIME = 0x0c; // aka DATETIME +module.exports.YEAR = 0x0d; // aka YEAR, 1 byte (don't ask) +module.exports.NEWDATE = 0x0e; // aka ? +module.exports.VARCHAR = 0x0f; // aka VARCHAR (?) +module.exports.BIT = 0x10; // aka BIT, 1-8 byte +module.exports.VECTOR = 0xf2; +module.exports.JSON = 0xf5; +module.exports.NEWDECIMAL = 0xf6; // aka DECIMAL +module.exports.ENUM = 0xf7; // aka ENUM +module.exports.SET = 0xf8; // aka SET +module.exports.TINY_BLOB = 0xf9; // aka TINYBLOB, TINYTEXT +module.exports.MEDIUM_BLOB = 0xfa; // aka MEDIUMBLOB, MEDIUMTEXT +module.exports.LONG_BLOB = 0xfb; // aka LONGBLOG, LONGTEXT +module.exports.BLOB = 0xfc; // aka BLOB, TEXT +module.exports.VAR_STRING = 0xfd; // aka VARCHAR, VARBINARY +module.exports.STRING = 0xfe; // aka CHAR, BINARY +module.exports.GEOMETRY = 0xff; // aka GEOMETRY diff --git a/node_modules/mysql2/lib/create_connection.js b/node_modules/mysql2/lib/create_connection.js new file mode 100644 index 0000000..d39618f --- /dev/null +++ b/node_modules/mysql2/lib/create_connection.js @@ -0,0 +1,10 @@ +'use strict'; + +const Connection = require('./connection.js'); +const ConnectionConfig = require('./connection_config.js'); + +function createConnection(opts) { + return new Connection({ config: new ConnectionConfig(opts) }); +} + +module.exports = createConnection; diff --git a/node_modules/mysql2/lib/create_pool.js b/node_modules/mysql2/lib/create_pool.js new file mode 100644 index 0000000..ad19d77 --- /dev/null +++ b/node_modules/mysql2/lib/create_pool.js @@ -0,0 +1,10 @@ +'use strict'; + +const Pool = require('./pool.js'); +const PoolConfig = require('./pool_config.js'); + +function createPool(config) { + return new Pool({ config: new PoolConfig(config) }); +} + +module.exports = createPool; diff --git a/node_modules/mysql2/lib/create_pool_cluster.js b/node_modules/mysql2/lib/create_pool_cluster.js new file mode 100644 index 0000000..4ded78b --- /dev/null +++ b/node_modules/mysql2/lib/create_pool_cluster.js @@ -0,0 +1,9 @@ +'use strict'; + +const PoolCluster = require('./pool_cluster.js'); + +function createPoolCluster(config) { + return new PoolCluster(config); +} + +module.exports = createPoolCluster; diff --git a/node_modules/mysql2/lib/helpers.js b/node_modules/mysql2/lib/helpers.js new file mode 100644 index 0000000..672bb5e --- /dev/null +++ b/node_modules/mysql2/lib/helpers.js @@ -0,0 +1,86 @@ +'use strict'; + +/* + + this seems to be not only shorter, but faster than + string.replace(/\\/g, '\\\\'). + replace(/\u0008/g, '\\b'). + replace(/\t/g, '\\t'). + replace(/\n/g, '\\n'). + replace(/\f/g, '\\f'). + replace(/\r/g, '\\r'). + replace(/'/g, '\\\''). + replace(/"/g, '\\"'); + or string.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&") + see http://jsperf.com/string-escape-regexp-vs-json-stringify + */ +function srcEscape(str) { + return JSON.stringify({ + [str]: 1, + }).slice(1, -3); +} + +exports.srcEscape = srcEscape; + +let highlightFn; +let cardinalRecommended = false; +try { + // the purpose of this is to prevent projects using Webpack from displaying a warning during runtime if cardinal is not a dependency + const REQUIRE_TERMINATOR = ''; + highlightFn = require(`cardinal${REQUIRE_TERMINATOR}`).highlight; +} catch (err) { + highlightFn = (text) => { + if (!cardinalRecommended) { + // eslint-disable-next-line no-console + console.log('For nicer debug output consider install cardinal@^2.0.0'); + cardinalRecommended = true; + } + return text; + }; +} + +/** + * Prints debug message with code frame, will try to use `cardinal` if available. + */ +function printDebugWithCode(msg, code) { + // eslint-disable-next-line no-console + console.log(`\n\n${msg}:\n`); + // eslint-disable-next-line no-console + console.log(`${highlightFn(code)}\n`); +} + +exports.printDebugWithCode = printDebugWithCode; + +/** + * checks whether the `type` is in the `list` + */ +function typeMatch(type, list, Types) { + if (Array.isArray(list)) { + return list.some((t) => type === Types[t]); + } + + return !!list; +} + +exports.typeMatch = typeMatch; + +const privateObjectProps = new Set([ + '__defineGetter__', + '__defineSetter__', + '__lookupGetter__', + '__lookupSetter__', + '__proto__', +]); + +exports.privateObjectProps = privateObjectProps; + +const fieldEscape = (field, isEval = true) => { + if (privateObjectProps.has(field)) { + throw new Error( + `The field name (${field}) can't be the same as an object's private property.` + ); + } + + return isEval ? srcEscape(field) : field; +}; +exports.fieldEscape = fieldEscape; diff --git a/node_modules/mysql2/lib/packet_parser.js b/node_modules/mysql2/lib/packet_parser.js new file mode 100644 index 0000000..989510c --- /dev/null +++ b/node_modules/mysql2/lib/packet_parser.js @@ -0,0 +1,195 @@ +'use strict'; + +const Packet = require('./packets/packet.js'); + +const MAX_PACKET_LENGTH = 16777215; + +function readPacketLength(b, off) { + const b0 = b[off]; + const b1 = b[off + 1]; + const b2 = b[off + 2]; + if (b1 + b2 === 0) { + return b0; + } + return b0 + (b1 << 8) + (b2 << 16); +} + +class PacketParser { + constructor(onPacket, packetHeaderLength) { + // 4 for normal packets, 7 for comprssed protocol packets + if (typeof packetHeaderLength === 'undefined') { + packetHeaderLength = 4; + } + // array of last payload chunks + // only used when current payload is not complete + this.buffer = []; + // total length of chunks on buffer + this.bufferLength = 0; + this.packetHeaderLength = packetHeaderLength; + // incomplete header state: number of header bytes received + this.headerLen = 0; + // expected payload length + this.length = 0; + this.largePacketParts = []; + this.firstPacketSequenceId = 0; + this.onPacket = onPacket; + this.execute = PacketParser.prototype.executeStart; + this._flushLargePacket = + packetHeaderLength === 7 + ? this._flushLargePacket7 + : this._flushLargePacket4; + } + + _flushLargePacket4() { + const numPackets = this.largePacketParts.length; + this.largePacketParts.unshift(Buffer.from([0, 0, 0, 0])); // insert header + const body = Buffer.concat(this.largePacketParts); + const packet = new Packet(this.firstPacketSequenceId, body, 0, body.length); + this.largePacketParts.length = 0; + packet.numPackets = numPackets; + this.onPacket(packet); + } + + _flushLargePacket7() { + const numPackets = this.largePacketParts.length; + this.largePacketParts.unshift(Buffer.from([0, 0, 0, 0, 0, 0, 0])); // insert header + const body = Buffer.concat(this.largePacketParts); + this.largePacketParts.length = 0; + const packet = new Packet(this.firstPacketSequenceId, body, 0, body.length); + packet.numPackets = numPackets; + this.onPacket(packet); + } + + executeStart(chunk) { + let start = 0; + const end = chunk.length; + while (end - start >= 3) { + this.length = readPacketLength(chunk, start); + if (end - start >= this.length + this.packetHeaderLength) { + // at least one full packet + const sequenceId = chunk[start + 3]; + if ( + this.length < MAX_PACKET_LENGTH && + this.largePacketParts.length === 0 + ) { + this.onPacket( + new Packet( + sequenceId, + chunk, + start, + start + this.packetHeaderLength + this.length + ) + ); + } else { + // first large packet - remember it's id + if (this.largePacketParts.length === 0) { + this.firstPacketSequenceId = sequenceId; + } + this.largePacketParts.push( + chunk.slice( + start + this.packetHeaderLength, + start + this.packetHeaderLength + this.length + ) + ); + if (this.length < MAX_PACKET_LENGTH) { + this._flushLargePacket(); + } + } + start += this.packetHeaderLength + this.length; + } else { + // payload is incomplete + this.buffer = [chunk.slice(start + 3, end)]; + this.bufferLength = end - start - 3; + this.execute = PacketParser.prototype.executePayload; + return; + } + } + if (end - start > 0) { + // there is start of length header, but it's not full 3 bytes + this.headerLen = end - start; // 1 or 2 bytes + this.length = chunk[start]; + if (this.headerLen === 2) { + this.length = chunk[start] + (chunk[start + 1] << 8); + this.execute = PacketParser.prototype.executeHeader3; + } else { + this.execute = PacketParser.prototype.executeHeader2; + } + } + } + + executePayload(chunk) { + let start = 0; + const end = chunk.length; + const remainingPayload = + this.length - this.bufferLength + this.packetHeaderLength - 3; + if (end - start >= remainingPayload) { + // last chunk for payload + const payload = Buffer.allocUnsafe(this.length + this.packetHeaderLength); + let offset = 3; + for (let i = 0; i < this.buffer.length; ++i) { + this.buffer[i].copy(payload, offset); + offset += this.buffer[i].length; + } + chunk.copy(payload, offset, start, start + remainingPayload); + const sequenceId = payload[3]; + if ( + this.length < MAX_PACKET_LENGTH && + this.largePacketParts.length === 0 + ) { + this.onPacket( + new Packet( + sequenceId, + payload, + 0, + this.length + this.packetHeaderLength + ) + ); + } else { + // first large packet - remember it's id + if (this.largePacketParts.length === 0) { + this.firstPacketSequenceId = sequenceId; + } + this.largePacketParts.push( + payload.slice( + this.packetHeaderLength, + this.packetHeaderLength + this.length + ) + ); + if (this.length < MAX_PACKET_LENGTH) { + this._flushLargePacket(); + } + } + this.buffer = []; + this.bufferLength = 0; + this.execute = PacketParser.prototype.executeStart; + start += remainingPayload; + if (end - start > 0) { + return this.execute(chunk.slice(start, end)); + } + } else { + this.buffer.push(chunk); + this.bufferLength += chunk.length; + } + return null; + } + + executeHeader2(chunk) { + this.length += chunk[0] << 8; + if (chunk.length > 1) { + this.length += chunk[1] << 16; + this.execute = PacketParser.prototype.executePayload; + return this.executePayload(chunk.slice(2)); + } + this.execute = PacketParser.prototype.executeHeader3; + + return null; + } + + executeHeader3(chunk) { + this.length += chunk[0] << 16; + this.execute = PacketParser.prototype.executePayload; + return this.executePayload(chunk.slice(1)); + } +} + +module.exports = PacketParser; diff --git a/node_modules/mysql2/lib/packets/auth_next_factor.js b/node_modules/mysql2/lib/packets/auth_next_factor.js new file mode 100644 index 0000000..ba9fbd8 --- /dev/null +++ b/node_modules/mysql2/lib/packets/auth_next_factor.js @@ -0,0 +1,35 @@ +// Copyright (c) 2021, Oracle and/or its affiliates. + +'use strict'; + +const Packet = require('../packets/packet'); + +class AuthNextFactor { + constructor(opts) { + this.pluginName = opts.pluginName; + this.pluginData = opts.pluginData; + } + + toPacket(encoding) { + const length = 6 + this.pluginName.length + this.pluginData.length; + const buffer = Buffer.allocUnsafe(length); + const packet = new Packet(0, buffer, 0, length); + packet.offset = 4; + packet.writeInt8(0x02); + packet.writeNullTerminatedString(this.pluginName, encoding); + packet.writeBuffer(this.pluginData); + return packet; + } + + static fromPacket(packet, encoding) { + packet.readInt8(); // marker + const name = packet.readNullTerminatedString(encoding); + const data = packet.readBuffer(); + return new AuthNextFactor({ + pluginName: name, + pluginData: data, + }); + } +} + +module.exports = AuthNextFactor; diff --git a/node_modules/mysql2/lib/packets/auth_switch_request.js b/node_modules/mysql2/lib/packets/auth_switch_request.js new file mode 100644 index 0000000..7c3ed4d --- /dev/null +++ b/node_modules/mysql2/lib/packets/auth_switch_request.js @@ -0,0 +1,38 @@ +'use strict'; + +// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchRequest + +const Packet = require('../packets/packet'); + +class AuthSwitchRequest { + constructor(opts) { + this.pluginName = opts.pluginName; + this.pluginData = opts.pluginData; + } + + toPacket() { + const length = 6 + this.pluginName.length + this.pluginData.length; + const buffer = Buffer.allocUnsafe(length); + const packet = new Packet(0, buffer, 0, length); + packet.offset = 4; + packet.writeInt8(0xfe); + // TODO: use server encoding + packet.writeNullTerminatedString(this.pluginName, 'cesu8'); + packet.writeBuffer(this.pluginData); + return packet; + } + + static fromPacket(packet) { + packet.readInt8(); // marker + // assert marker == 0xfe? + // TODO: use server encoding + const name = packet.readNullTerminatedString('cesu8'); + const data = packet.readBuffer(); + return new AuthSwitchRequest({ + pluginName: name, + pluginData: data, + }); + } +} + +module.exports = AuthSwitchRequest; diff --git a/node_modules/mysql2/lib/packets/auth_switch_request_more_data.js b/node_modules/mysql2/lib/packets/auth_switch_request_more_data.js new file mode 100644 index 0000000..7294d08 --- /dev/null +++ b/node_modules/mysql2/lib/packets/auth_switch_request_more_data.js @@ -0,0 +1,33 @@ +'use strict'; + +// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchRequest + +const Packet = require('../packets/packet'); + +class AuthSwitchRequestMoreData { + constructor(data) { + this.data = data; + } + + toPacket() { + const length = 5 + this.data.length; + const buffer = Buffer.allocUnsafe(length); + const packet = new Packet(0, buffer, 0, length); + packet.offset = 4; + packet.writeInt8(0x01); + packet.writeBuffer(this.data); + return packet; + } + + static fromPacket(packet) { + packet.readInt8(); // marker + const data = packet.readBuffer(); + return new AuthSwitchRequestMoreData(data); + } + + static verifyMarker(packet) { + return packet.peekByte() === 0x01; + } +} + +module.exports = AuthSwitchRequestMoreData; diff --git a/node_modules/mysql2/lib/packets/auth_switch_response.js b/node_modules/mysql2/lib/packets/auth_switch_response.js new file mode 100644 index 0000000..2a821a0 --- /dev/null +++ b/node_modules/mysql2/lib/packets/auth_switch_response.js @@ -0,0 +1,30 @@ +'use strict'; + +// http://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::AuthSwitchRequest + +const Packet = require('../packets/packet'); + +class AuthSwitchResponse { + constructor(data) { + if (!Buffer.isBuffer(data)) { + data = Buffer.from(data); + } + this.data = data; + } + + toPacket() { + const length = 4 + this.data.length; + const buffer = Buffer.allocUnsafe(length); + const packet = new Packet(0, buffer, 0, length); + packet.offset = 4; + packet.writeBuffer(this.data); + return packet; + } + + static fromPacket(packet) { + const data = packet.readBuffer(); + return new AuthSwitchResponse(data); + } +} + +module.exports = AuthSwitchResponse; diff --git a/node_modules/mysql2/lib/packets/binary_row.js b/node_modules/mysql2/lib/packets/binary_row.js new file mode 100644 index 0000000..d374b8d --- /dev/null +++ b/node_modules/mysql2/lib/packets/binary_row.js @@ -0,0 +1,95 @@ +'use strict'; + +const Types = require('../constants/types'); +const Packet = require('../packets/packet'); + +const binaryReader = new Array(256); + +class BinaryRow { + constructor(columns) { + this.columns = columns || []; + } + + static toPacket(columns, encoding) { + // throw new Error('Not implemented'); + const sequenceId = 0; // TODO remove, this is calculated now in connecton + let length = 0; + columns.forEach((val) => { + if (val === null || typeof val === 'undefined') { + ++length; + return; + } + length += Packet.lengthCodedStringLength(val.toString(10), encoding); + }); + + length = length + 2; + + const buffer = Buffer.allocUnsafe(length + 4); + const packet = new Packet(sequenceId, buffer, 0, length + 4); + packet.offset = 4; + + packet.writeInt8(0); + + let bitmap = 0; + let bitValue = 1; + columns.forEach((parameter) => { + if (parameter.type === Types.NULL) { + bitmap += bitValue; + } + bitValue *= 2; + if (bitValue === 256) { + packet.writeInt8(bitmap); + bitmap = 0; + bitValue = 1; + } + }); + if (bitValue !== 1) { + packet.writeInt8(bitmap); + } + + columns.forEach((val) => { + if (val === null) { + packet.writeNull(); + return; + } + if (typeof val === 'undefined') { + packet.writeInt8(0); + return; + } + packet.writeLengthCodedString(val.toString(10), encoding); + }); + return packet; + } + + // TODO: complete list of types... + static fromPacket(fields, packet) { + const columns = new Array(fields.length); + packet.readInt8(); // TODO check it's 0 + const nullBitmapLength = Math.floor((fields.length + 7 + 2) / 8); + // TODO: read and interpret null bitmap + packet.skip(nullBitmapLength); + for (let i = 0; i < columns.length; ++i) { + columns[i] = binaryReader[fields[i].columnType].apply(packet); + } + return new BinaryRow(columns); + } +} + +// TODO: replace with constants.MYSQL_TYPE_* +binaryReader[Types.DECIMAL] = Packet.prototype.readLengthCodedString; +binaryReader[1] = Packet.prototype.readInt8; // tiny +binaryReader[2] = Packet.prototype.readInt16; // short +binaryReader[3] = Packet.prototype.readInt32; // long +binaryReader[4] = Packet.prototype.readFloat; // float +binaryReader[5] = Packet.prototype.readDouble; // double +binaryReader[6] = Packet.prototype.assertInvalid; // null, should be skipped vie null bitmap +binaryReader[7] = Packet.prototype.readTimestamp; // timestamp, http://dev.mysql.com/doc/internals/en/prepared-statements.html#packet-ProtocolBinary::MYSQL_TYPE_TIMESTAMP +binaryReader[8] = Packet.prototype.readInt64; // long long +binaryReader[9] = Packet.prototype.readInt32; // int24 +binaryReader[10] = Packet.prototype.readTimestamp; // date +binaryReader[11] = Packet.prototype.readTime; // time, http://dev.mysql.com/doc/internals/en/prepared-statements.html#packet-ProtocolBinary::MYSQL_TYPE_TIME +binaryReader[12] = Packet.prototype.readDateTime; // datetime, http://dev.mysql.com/doc/internals/en/prepared-statements.html#packet-ProtocolBinary::MYSQL_TYPE_DATETIME +binaryReader[13] = Packet.prototype.readInt16; // year +binaryReader[Types.VAR_STRING] = Packet.prototype.readLengthCodedString; // var string + +module.exports = BinaryRow; diff --git a/node_modules/mysql2/lib/packets/binlog_dump.js b/node_modules/mysql2/lib/packets/binlog_dump.js new file mode 100644 index 0000000..e014837 --- /dev/null +++ b/node_modules/mysql2/lib/packets/binlog_dump.js @@ -0,0 +1,33 @@ +'use strict'; + +// http://dev.mysql.com/doc/internals/en/com-binlog-dump.html#packet-COM_BINLOG_DUMP + +const Packet = require('../packets/packet'); +const CommandCodes = require('../constants/commands'); + +// TODO: add flag to constants +// 0x01 - BINLOG_DUMP_NON_BLOCK +// send EOF instead of blocking +class BinlogDump { + constructor(opts) { + this.binlogPos = opts.binlogPos || 0; + this.serverId = opts.serverId || 0; + this.flags = opts.flags || 0; + this.filename = opts.filename || ''; + } + + toPacket() { + const length = 15 + Buffer.byteLength(this.filename, 'utf8'); // TODO: should be ascii? + const buffer = Buffer.allocUnsafe(length); + const packet = new Packet(0, buffer, 0, length); + packet.offset = 4; + packet.writeInt8(CommandCodes.BINLOG_DUMP); + packet.writeInt32(this.binlogPos); + packet.writeInt16(this.flags); + packet.writeInt32(this.serverId); + packet.writeString(this.filename); + return packet; + } +} + +module.exports = BinlogDump; diff --git a/node_modules/mysql2/lib/packets/binlog_query_statusvars.js b/node_modules/mysql2/lib/packets/binlog_query_statusvars.js new file mode 100644 index 0000000..7338d60 --- /dev/null +++ b/node_modules/mysql2/lib/packets/binlog_query_statusvars.js @@ -0,0 +1,115 @@ +'use strict'; + +// http://dev.mysql.com/doc/internals/en/query-event.html + +const keys = { + FLAGS2: 0, + SQL_MODE: 1, + CATALOG: 2, + AUTO_INCREMENT: 3, + CHARSET: 4, + TIME_ZONE: 5, + CATALOG_NZ: 6, + LC_TIME_NAMES: 7, + CHARSET_DATABASE: 8, + TABLE_MAP_FOR_UPDATE: 9, + MASTER_DATA_WRITTEN: 10, + INVOKERS: 11, + UPDATED_DB_NAMES: 12, + MICROSECONDS: 3, +}; + +module.exports = function parseStatusVars(buffer) { + const result = {}; + let offset = 0; + let key, length, prevOffset; + while (offset < buffer.length) { + key = buffer[offset++]; + switch (key) { + case keys.FLAGS2: + result.flags = buffer.readUInt32LE(offset); + offset += 4; + break; + case keys.SQL_MODE: + // value is 8 bytes, but all dcumented flags are in first 4 bytes + result.sqlMode = buffer.readUInt32LE(offset); + offset += 8; + break; + case keys.CATALOG: + length = buffer[offset++]; + result.catalog = buffer.toString('utf8', offset, offset + length); + offset += length + 1; // null byte after string + break; + case keys.CHARSET: + result.clientCharset = buffer.readUInt16LE(offset); + result.connectionCollation = buffer.readUInt16LE(offset + 2); + result.serverCharset = buffer.readUInt16LE(offset + 4); + offset += 6; + break; + case keys.TIME_ZONE: + length = buffer[offset++]; + result.timeZone = buffer.toString('utf8', offset, offset + length); + offset += length; // no null byte + break; + case keys.CATALOG_NZ: + length = buffer[offset++]; + result.catalogNz = buffer.toString('utf8', offset, offset + length); + offset += length; // no null byte + break; + case keys.LC_TIME_NAMES: + result.lcTimeNames = buffer.readUInt16LE(offset); + offset += 2; + break; + case keys.CHARSET_DATABASE: + result.schemaCharset = buffer.readUInt16LE(offset); + offset += 2; + break; + case keys.TABLE_MAP_FOR_UPDATE: + result.mapForUpdate1 = buffer.readUInt32LE(offset); + result.mapForUpdate2 = buffer.readUInt32LE(offset + 4); + offset += 8; + break; + case keys.MASTER_DATA_WRITTEN: + result.masterDataWritten = buffer.readUInt32LE(offset); + offset += 4; + break; + case keys.INVOKERS: + length = buffer[offset++]; + result.invokerUsername = buffer.toString( + 'utf8', + offset, + offset + length + ); + offset += length; + length = buffer[offset++]; + result.invokerHostname = buffer.toString( + 'utf8', + offset, + offset + length + ); + offset += length; + break; + case keys.UPDATED_DB_NAMES: + length = buffer[offset++]; + // length - number of null-terminated strings + result.updatedDBs = []; // we'll store them as array here + for (; length; --length) { + prevOffset = offset; + // fast forward to null terminating byte + while (buffer[offset++] && offset < buffer.length) { + // empty body, everything inside while condition + } + result.updatedDBs.push( + buffer.toString('utf8', prevOffset, offset - 1) + ); + } + break; + case keys.MICROSECONDS: + result.microseconds = + // REVIEW: INVALID UNKNOWN VARIABLE! + buffer.readInt16LE(offset) + (buffer[offset + 2] << 16); + offset += 3; + } + } + return result; +}; diff --git a/node_modules/mysql2/lib/packets/change_user.js b/node_modules/mysql2/lib/packets/change_user.js new file mode 100644 index 0000000..242145e --- /dev/null +++ b/node_modules/mysql2/lib/packets/change_user.js @@ -0,0 +1,97 @@ +'use strict'; + +const CommandCode = require('../constants/commands.js'); +const ClientConstants = require('../constants/client.js'); +const Packet = require('../packets/packet.js'); +const auth41 = require('../auth_41.js'); +const CharsetToEncoding = require('../constants/charset_encodings.js'); + +// https://dev.mysql.com/doc/internals/en/com-change-user.html#packet-COM_CHANGE_USER +class ChangeUser { + constructor(opts) { + this.flags = opts.flags; + this.user = opts.user || ''; + this.database = opts.database || ''; + this.password = opts.password || ''; + this.passwordSha1 = opts.passwordSha1; + this.authPluginData1 = opts.authPluginData1; + this.authPluginData2 = opts.authPluginData2; + this.connectAttributes = opts.connectAttrinutes || {}; + let authToken; + if (this.passwordSha1) { + authToken = auth41.calculateTokenFromPasswordSha( + this.passwordSha1, + this.authPluginData1, + this.authPluginData2 + ); + } else { + authToken = auth41.calculateToken( + this.password, + this.authPluginData1, + this.authPluginData2 + ); + } + this.authToken = authToken; + this.charsetNumber = opts.charsetNumber; + } + + // TODO + // ChangeUser.fromPacket = function(packet) + // }; + serializeToBuffer(buffer) { + const isSet = (flag) => this.flags & ClientConstants[flag]; + const packet = new Packet(0, buffer, 0, buffer.length); + packet.offset = 4; + const encoding = CharsetToEncoding[this.charsetNumber]; + packet.writeInt8(CommandCode.CHANGE_USER); + packet.writeNullTerminatedString(this.user, encoding); + if (isSet('SECURE_CONNECTION')) { + packet.writeInt8(this.authToken.length); + packet.writeBuffer(this.authToken); + } else { + packet.writeBuffer(this.authToken); + packet.writeInt8(0); + } + packet.writeNullTerminatedString(this.database, encoding); + packet.writeInt16(this.charsetNumber); + if (isSet('PLUGIN_AUTH')) { + // TODO: read this from parameters + packet.writeNullTerminatedString('mysql_native_password', 'latin1'); + } + if (isSet('CONNECT_ATTRS')) { + const connectAttributes = this.connectAttributes; + const attrNames = Object.keys(connectAttributes); + let keysLength = 0; + for (let k = 0; k < attrNames.length; ++k) { + keysLength += Packet.lengthCodedStringLength(attrNames[k], encoding); + keysLength += Packet.lengthCodedStringLength( + connectAttributes[attrNames[k]], + encoding + ); + } + packet.writeLengthCodedNumber(keysLength); + for (let k = 0; k < attrNames.length; ++k) { + packet.writeLengthCodedString(attrNames[k], encoding); + packet.writeLengthCodedString( + connectAttributes[attrNames[k]], + encoding + ); + } + } + return packet; + } + + toPacket() { + if (typeof this.user !== 'string') { + throw new Error('"user" connection config property must be a string'); + } + if (typeof this.database !== 'string') { + throw new Error('"database" connection config property must be a string'); + } + // dry run: calculate resulting packet length + const p = this.serializeToBuffer(Packet.MockBuffer()); + return this.serializeToBuffer(Buffer.allocUnsafe(p.offset)); + } +} + +module.exports = ChangeUser; diff --git a/node_modules/mysql2/lib/packets/close_statement.js b/node_modules/mysql2/lib/packets/close_statement.js new file mode 100644 index 0000000..d8be98d --- /dev/null +++ b/node_modules/mysql2/lib/packets/close_statement.js @@ -0,0 +1,21 @@ +'use strict'; + +const Packet = require('../packets/packet'); +const CommandCodes = require('../constants/commands'); + +class CloseStatement { + constructor(id) { + this.id = id; + } + + // note: no response sent back + toPacket() { + const packet = new Packet(0, Buffer.allocUnsafe(9), 0, 9); + packet.offset = 4; + packet.writeInt8(CommandCodes.STMT_CLOSE); + packet.writeInt32(this.id); + return packet; + } +} + +module.exports = CloseStatement; diff --git a/node_modules/mysql2/lib/packets/column_definition.js b/node_modules/mysql2/lib/packets/column_definition.js new file mode 100644 index 0000000..7cd3c27 --- /dev/null +++ b/node_modules/mysql2/lib/packets/column_definition.js @@ -0,0 +1,291 @@ +'use strict'; + +const Packet = require('../packets/packet'); +const StringParser = require('../parsers/string'); +const CharsetToEncoding = require('../constants/charset_encodings.js'); + +const fields = ['catalog', 'schema', 'table', 'orgTable', 'name', 'orgName']; + +// creating JS string is relatively expensive (compared to +// reading few bytes from buffer) because all string properties +// except for name are unlikely to be used we postpone +// string conversion until property access +// +// TODO: watch for integration benchmarks (one with real network buffer) +// there could be bad side effect as keeping reference to a buffer makes it +// sit in the memory longer (usually until final .query() callback) +// Latest v8 perform much better in regard to bufferer -> string conversion, +// at some point of time this optimisation might become unnecessary +// see https://github.com/sidorares/node-mysql2/pull/137 +// +class ColumnDefinition { + constructor(packet, clientEncoding) { + this._buf = packet.buffer; + this._clientEncoding = clientEncoding; + this._catalogLength = packet.readLengthCodedNumber(); + this._catalogStart = packet.offset; + packet.offset += this._catalogLength; + this._schemaLength = packet.readLengthCodedNumber(); + this._schemaStart = packet.offset; + packet.offset += this._schemaLength; + this._tableLength = packet.readLengthCodedNumber(); + this._tableStart = packet.offset; + packet.offset += this._tableLength; + this._orgTableLength = packet.readLengthCodedNumber(); + this._orgTableStart = packet.offset; + packet.offset += this._orgTableLength; + // name is always used, don't make it lazy + const _nameLength = packet.readLengthCodedNumber(); + const _nameStart = packet.offset; + packet.offset += _nameLength; + this._orgNameLength = packet.readLengthCodedNumber(); + this._orgNameStart = packet.offset; + packet.offset += this._orgNameLength; + packet.skip(1); // length of the following fields (always 0x0c) + this.characterSet = packet.readInt16(); + this.encoding = CharsetToEncoding[this.characterSet]; + this.name = StringParser.decode( + this._buf, + this.encoding === 'binary' ? this._clientEncoding : this.encoding, + _nameStart, + _nameStart + _nameLength + ); + this.columnLength = packet.readInt32(); + this.columnType = packet.readInt8(); + this.type = this.columnType; + this.flags = packet.readInt16(); + this.decimals = packet.readInt8(); + } + + inspect() { + return { + catalog: this.catalog, + schema: this.schema, + name: this.name, + orgName: this.orgName, + table: this.table, + orgTable: this.orgTable, + characterSet: this.characterSet, + encoding: this.encoding, + columnLength: this.columnLength, + type: this.columnType, + flags: this.flags, + decimals: this.decimals, + }; + } + + [Symbol.for('nodejs.util.inspect.custom')](depth, inspectOptions, inspect) { + const Types = require('../constants/types.js'); + const typeNames = []; + for (const t in Types) { + typeNames[Types[t]] = t; + } + const fiedFlags = require('../constants/field_flags.js'); + const flagNames = []; + // TODO: respect inspectOptions.showHidden + //const inspectFlags = inspectOptions.showHidden ? this.flags : this.flags & ~fiedFlags.PRI_KEY; + const inspectFlags = this.flags; + for (const f in fiedFlags) { + if (inspectFlags & fiedFlags[f]) { + if (f === 'PRI_KEY') { + flagNames.push('PRIMARY KEY'); + } else if (f === 'NOT_NULL') { + flagNames.push('NOT NULL'); + } else if (f === 'BINARY') { + // ignore flag for now + } else if (f === 'MULTIPLE_KEY') { + // not sure if that should be part of inspection. + // in the schema usually this is part of index definition + // example: UNIQUE KEY `my_uniq_id` (`id_box_elements`,`id_router`) + // note that only first column has MULTIPLE_KEY flag set in this case + // so there is no good way of knowing that this is part of index just + // by looking at indifidual field flags + } else if (f === 'NO_DEFAULT_VALUE') { + // almost the same as NOT_NULL? + } else if (f === 'BLOB') { + // included in the type + } else if (f === 'UNSIGNED') { + // this should be first after type + } else if (f === 'TIMESTAMP') { + // timestamp flag is redundant for inspection - already included in type + } else if (f === 'ON_UPDATE_NOW') { + flagNames.push('ON UPDATE CURRENT_TIMESTAMP'); + } else { + flagNames.push(f); + } + } + } + + if (depth > 1) { + return inspect({ + ...this.inspect(), + typeName: typeNames[this.columnType], + flags: flagNames, + }); + } + + const isUnsigned = this.flags & fiedFlags.UNSIGNED; + + let typeName = typeNames[this.columnType]; + if (typeName === 'BLOB') { + // TODO: check for non-utf8mb4 encoding + if (this.columnLength === 4294967295) { + typeName = 'LONGTEXT'; + } else if (this.columnLength === 67108860) { + typeName = 'MEDIUMTEXT'; + } else if (this.columnLength === 262140) { + typeName = 'TEXT'; + } else if (this.columnLength === 1020) { + // 255*4 + typeName = 'TINYTEXT'; + } else { + typeName = `BLOB(${this.columnLength})`; + } + } else if (typeName === 'VAR_STRING') { + // TODO: check for non-utf8mb4 encoding + typeName = `VARCHAR(${Math.ceil(this.columnLength / 4)})`; + } else if (typeName === 'TINY') { + if ( + (this.columnLength === 3 && isUnsigned) || + (this.columnLength === 4 && !isUnsigned) + ) { + typeName = 'TINYINT'; + } else { + typeName = `TINYINT(${this.columnLength})`; + } + } else if (typeName === 'LONGLONG') { + if (this.columnLength === 20) { + typeName = 'BIGINT'; + } else { + typeName = `BIGINT(${this.columnLength})`; + } + } else if (typeName === 'SHORT') { + if (isUnsigned && this.columnLength === 5) { + typeName = 'SMALLINT'; + } else if (!isUnsigned && this.columnLength === 6) { + typeName = 'SMALLINT'; + } else { + typeName = `SMALLINT(${this.columnLength})`; + } + } else if (typeName === 'LONG') { + if (isUnsigned && this.columnLength === 10) { + typeName = 'INT'; + } else if (!isUnsigned && this.columnLength === 11) { + typeName = 'INT'; + } else { + typeName = `INT(${this.columnLength})`; + } + } else if (typeName === 'INT24') { + if (isUnsigned && this.columnLength === 8) { + typeName = 'MEDIUMINT'; + } else if (!isUnsigned && this.columnLength === 9) { + typeName = 'MEDIUMINT'; + } else { + typeName = `MEDIUMINT(${this.columnLength})`; + } + } else if (typeName === 'DOUBLE') { + // DOUBLE without modifiers is reported as DOUBLE(22, 31) + if (this.columnLength === 22 && this.decimals === 31) { + typeName = 'DOUBLE'; + } else { + typeName = `DOUBLE(${this.columnLength},${this.decimals})`; + } + } else if (typeName === 'FLOAT') { + // FLOAT without modifiers is reported as FLOAT(12, 31) + if (this.columnLength === 12 && this.decimals === 31) { + typeName = 'FLOAT'; + } else { + typeName = `FLOAT(${this.columnLength},${this.decimals})`; + } + } else if (typeName === 'NEWDECIMAL') { + if (this.columnLength === 11 && this.decimals === 0) { + typeName = 'DECIMAL'; + } else if (this.decimals === 0) { + // not sure why, but DECIMAL(13) is reported as DECIMAL(14, 0) + // and DECIMAL(13, 9) is reported as NEWDECIMAL(15, 9) + if (isUnsigned) { + typeName = `DECIMAL(${this.columnLength})`; + } else { + typeName = `DECIMAL(${this.columnLength - 1})`; + } + } else { + typeName = `DECIMAL(${this.columnLength - 2},${this.decimals})`; + } + } else { + typeName = `${typeNames[this.columnType]}(${this.columnLength})`; + } + + if (isUnsigned) { + typeName += ' UNSIGNED'; + } + + // TODO respect colors option + return `\`${this.name}\` ${[typeName, ...flagNames].join(' ')}`; + } + + static toPacket(column, sequenceId) { + let length = 17; // = 4 padding + 1 + 12 for the rest + fields.forEach((field) => { + length += Packet.lengthCodedStringLength( + column[field], + CharsetToEncoding[column.characterSet] + ); + }); + const buffer = Buffer.allocUnsafe(length); + + const packet = new Packet(sequenceId, buffer, 0, length); + function writeField(name) { + packet.writeLengthCodedString( + column[name], + CharsetToEncoding[column.characterSet] + ); + } + packet.offset = 4; + fields.forEach(writeField); + packet.writeInt8(0x0c); + packet.writeInt16(column.characterSet); + packet.writeInt32(column.columnLength); + packet.writeInt8(column.columnType); + packet.writeInt16(column.flags); + packet.writeInt8(column.decimals); + packet.writeInt16(0); // filler + return packet; + } + + // node-mysql compatibility: alias "db" to "schema" + get db() { + return this.schema; + } +} + +const addString = function (name) { + Object.defineProperty(ColumnDefinition.prototype, name, { + get: function () { + const start = this[`_${name}Start`]; + const end = start + this[`_${name}Length`]; + const val = StringParser.decode( + this._buf, + this.encoding === 'binary' ? this._clientEncoding : this.encoding, + start, + end + ); + + Object.defineProperty(this, name, { + value: val, + writable: false, + configurable: false, + enumerable: false, + }); + + return val; + }, + }); +}; + +addString('catalog'); +addString('schema'); +addString('table'); +addString('orgTable'); +addString('orgName'); + +module.exports = ColumnDefinition; diff --git a/node_modules/mysql2/lib/packets/execute.js b/node_modules/mysql2/lib/packets/execute.js new file mode 100644 index 0000000..ffbbc91 --- /dev/null +++ b/node_modules/mysql2/lib/packets/execute.js @@ -0,0 +1,214 @@ +'use strict'; + +const CursorType = require('../constants/cursor'); +const CommandCodes = require('../constants/commands'); +const Types = require('../constants/types'); +const Packet = require('../packets/packet'); +const CharsetToEncoding = require('../constants/charset_encodings.js'); + +function isJSON(value) { + return ( + Array.isArray(value) || + value.constructor === Object || + (typeof value.toJSON === 'function' && !Buffer.isBuffer(value)) + ); +} + +/** + * Converts a value to an object describing type, String/Buffer representation and length + * @param {*} value + */ +function toParameter(value, encoding, timezone) { + let type = Types.VAR_STRING; + let length; + let writer = function (value) { + // eslint-disable-next-line no-invalid-this + return Packet.prototype.writeLengthCodedString.call(this, value, encoding); + }; + if (value !== null) { + switch (typeof value) { + case 'undefined': + throw new TypeError('Bind parameters must not contain undefined'); + + case 'number': + type = Types.DOUBLE; + length = 8; + writer = Packet.prototype.writeDouble; + break; + + case 'boolean': + value = value | 0; + type = Types.TINY; + length = 1; + writer = Packet.prototype.writeInt8; + break; + + case 'object': + if (Object.prototype.toString.call(value) === '[object Date]') { + type = Types.DATETIME; + length = 12; + writer = function (value) { + // eslint-disable-next-line no-invalid-this + return Packet.prototype.writeDate.call(this, value, timezone); + }; + } else if (isJSON(value)) { + value = JSON.stringify(value); + type = Types.JSON; + } else if (Buffer.isBuffer(value)) { + length = Packet.lengthCodedNumberLength(value.length) + value.length; + writer = Packet.prototype.writeLengthCodedBuffer; + } + break; + + default: + value = value.toString(); + } + } else { + value = ''; + type = Types.NULL; + } + if (!length) { + length = Packet.lengthCodedStringLength(value, encoding); + } + return { value, type, length, writer }; +} + +class Execute { + constructor(id, parameters, charsetNumber, timezone) { + this.id = id; + this.parameters = parameters; + this.encoding = CharsetToEncoding[charsetNumber]; + this.timezone = timezone; + } + + static fromPacket(packet, encoding) { + const stmtId = packet.readInt32(); + const flags = packet.readInt8(); + const iterationCount = packet.readInt32(); + + let i = packet.offset; + while (i < packet.end - 1) { + if ( + (packet.buffer[i + 1] === Types.VAR_STRING || + packet.buffer[i + 1] === Types.NULL || + packet.buffer[i + 1] === Types.DOUBLE || + packet.buffer[i + 1] === Types.TINY || + packet.buffer[i + 1] === Types.DATETIME || + packet.buffer[i + 1] === Types.JSON) && + packet.buffer[i] === 1 && + packet.buffer[i + 2] === 0 + ) { + break; + } else { + packet.readInt8(); + } + i++; + } + + const types = []; + + for (let i = packet.offset + 1; i < packet.end - 1; i++) { + if ( + (packet.buffer[i] === Types.VAR_STRING || + packet.buffer[i] === Types.NULL || + packet.buffer[i] === Types.DOUBLE || + packet.buffer[i] === Types.TINY || + packet.buffer[i] === Types.DATETIME || + packet.buffer[i] === Types.JSON) && + packet.buffer[i + 1] === 0 + ) { + types.push(packet.buffer[i]); + packet.skip(2); + } + } + + packet.skip(1); + + const values = []; + for (let i = 0; i < types.length; i++) { + if (types[i] === Types.VAR_STRING) { + values.push(packet.readLengthCodedString(encoding)); + } else if (types[i] === Types.DOUBLE) { + values.push(packet.readDouble()); + } else if (types[i] === Types.TINY) { + values.push(packet.readInt8()); + } else if (types[i] === Types.DATETIME) { + values.push(packet.readDateTime()); + } else if (types[i] === Types.JSON) { + values.push(JSON.parse(packet.readLengthCodedString(encoding))); + } + if (types[i] === Types.NULL) { + values.push(null); + } + } + + return { stmtId, flags, iterationCount, values }; + } + + toPacket() { + // TODO: don't try to calculate packet length in advance, allocate some big buffer in advance (header + 256 bytes?) + // and copy + reallocate if not enough + // 0 + 4 - length, seqId + // 4 + 1 - COM_EXECUTE + // 5 + 4 - stmtId + // 9 + 1 - flags + // 10 + 4 - iteration-count (always 1) + let length = 14; + let parameters; + if (this.parameters && this.parameters.length > 0) { + length += Math.floor((this.parameters.length + 7) / 8); + length += 1; // new-params-bound-flag + length += 2 * this.parameters.length; // type byte for each parameter if new-params-bound-flag is set + parameters = this.parameters.map((value) => + toParameter(value, this.encoding, this.timezone) + ); + length += parameters.reduce( + (accumulator, parameter) => accumulator + parameter.length, + 0 + ); + } + const buffer = Buffer.allocUnsafe(length); + const packet = new Packet(0, buffer, 0, length); + packet.offset = 4; + packet.writeInt8(CommandCodes.STMT_EXECUTE); + packet.writeInt32(this.id); + packet.writeInt8(CursorType.NO_CURSOR); // flags + packet.writeInt32(1); // iteration-count, always 1 + if (parameters) { + let bitmap = 0; + let bitValue = 1; + parameters.forEach((parameter) => { + if (parameter.type === Types.NULL) { + bitmap += bitValue; + } + bitValue *= 2; + if (bitValue === 256) { + packet.writeInt8(bitmap); + bitmap = 0; + bitValue = 1; + } + }); + if (bitValue !== 1) { + packet.writeInt8(bitmap); + } + // TODO: explain meaning of the flag + // afaik, if set n*2 bytes with type of parameter are sent before parameters + // if not, previous execution types are used (TODO prooflink) + packet.writeInt8(1); // new-params-bound-flag + // Write parameter types + parameters.forEach((parameter) => { + packet.writeInt8(parameter.type); // field type + packet.writeInt8(0); // parameter flag + }); + // Write parameter values + parameters.forEach((parameter) => { + if (parameter.type !== Types.NULL) { + parameter.writer.call(packet, parameter.value); + } + }); + } + return packet; + } +} + +module.exports = Execute; diff --git a/node_modules/mysql2/lib/packets/handshake.js b/node_modules/mysql2/lib/packets/handshake.js new file mode 100644 index 0000000..ee894a0 --- /dev/null +++ b/node_modules/mysql2/lib/packets/handshake.js @@ -0,0 +1,112 @@ +'use strict'; + +const Packet = require('../packets/packet'); +const ClientConstants = require('../constants/client.js'); + +// https://dev.mysql.com/doc/internals/en/connection-phase-packets.html#packet-Protocol::Handshake + +class Handshake { + constructor(args) { + this.protocolVersion = args.protocolVersion; + this.serverVersion = args.serverVersion; + this.capabilityFlags = args.capabilityFlags; + this.connectionId = args.connectionId; + this.authPluginData1 = args.authPluginData1; + this.authPluginData2 = args.authPluginData2; + this.characterSet = args.characterSet; + this.statusFlags = args.statusFlags; + this.authPluginName = args.authPluginName; + } + + setScrambleData(cb) { + require('crypto').randomBytes(20, (err, data) => { + if (err) { + cb(err); + return; + } + this.authPluginData1 = data.slice(0, 8); + this.authPluginData2 = data.slice(8, 20); + cb(); + }); + } + + toPacket(sequenceId) { + const length = 68 + Buffer.byteLength(this.serverVersion, 'utf8'); + const buffer = Buffer.alloc(length + 4, 0); // zero fill, 10 bytes filler later needs to contain zeros + const packet = new Packet(sequenceId, buffer, 0, length + 4); + packet.offset = 4; + packet.writeInt8(this.protocolVersion); + packet.writeString(this.serverVersion, 'cesu8'); + packet.writeInt8(0); + packet.writeInt32(this.connectionId); + packet.writeBuffer(this.authPluginData1); + packet.writeInt8(0); + const capabilityFlagsBuffer = Buffer.allocUnsafe(4); + capabilityFlagsBuffer.writeUInt32LE(this.capabilityFlags, 0); + packet.writeBuffer(capabilityFlagsBuffer.slice(0, 2)); + packet.writeInt8(this.characterSet); + packet.writeInt16(this.statusFlags); + packet.writeBuffer(capabilityFlagsBuffer.slice(2, 4)); + packet.writeInt8(21); // authPluginDataLength + packet.skip(10); + packet.writeBuffer(this.authPluginData2); + packet.writeInt8(0); + packet.writeString('mysql_native_password', 'latin1'); + packet.writeInt8(0); + return packet; + } + + static fromPacket(packet) { + const args = {}; + args.protocolVersion = packet.readInt8(); + args.serverVersion = packet.readNullTerminatedString('cesu8'); + args.connectionId = packet.readInt32(); + args.authPluginData1 = packet.readBuffer(8); + packet.skip(1); + const capabilityFlagsBuffer = Buffer.allocUnsafe(4); + capabilityFlagsBuffer[0] = packet.readInt8(); + capabilityFlagsBuffer[1] = packet.readInt8(); + if (packet.haveMoreData()) { + args.characterSet = packet.readInt8(); + args.statusFlags = packet.readInt16(); + // upper 2 bytes + capabilityFlagsBuffer[2] = packet.readInt8(); + capabilityFlagsBuffer[3] = packet.readInt8(); + args.capabilityFlags = capabilityFlagsBuffer.readUInt32LE(0); + if (args.capabilityFlags & ClientConstants.PLUGIN_AUTH) { + args.authPluginDataLength = packet.readInt8(); + } else { + args.authPluginDataLength = 0; + packet.skip(1); + } + packet.skip(10); + } else { + args.capabilityFlags = capabilityFlagsBuffer.readUInt16LE(0); + } + + const isSecureConnection = + args.capabilityFlags & ClientConstants.SECURE_CONNECTION; + if (isSecureConnection) { + const authPluginDataLength = args.authPluginDataLength; + if (authPluginDataLength === 0) { + // for Secure Password Authentication + args.authPluginDataLength = 20; + args.authPluginData2 = packet.readBuffer(12); + packet.skip(1); + } else { + // length > 0 + // for Custom Auth Plugin (PLUGIN_AUTH) + const len = Math.max(13, authPluginDataLength - 8); + args.authPluginData2 = packet.readBuffer(len); + } + } + + if (args.capabilityFlags & ClientConstants.PLUGIN_AUTH) { + args.authPluginName = packet.readNullTerminatedString('ascii'); + } + + return new Handshake(args); + } +} + +module.exports = Handshake; diff --git a/node_modules/mysql2/lib/packets/handshake_response.js b/node_modules/mysql2/lib/packets/handshake_response.js new file mode 100644 index 0000000..b90f2b2 --- /dev/null +++ b/node_modules/mysql2/lib/packets/handshake_response.js @@ -0,0 +1,144 @@ +'use strict'; + +const ClientConstants = require('../constants/client.js'); +const CharsetToEncoding = require('../constants/charset_encodings.js'); +const Packet = require('../packets/packet.js'); + +const auth41 = require('../auth_41.js'); + +class HandshakeResponse { + constructor(handshake) { + this.user = handshake.user || ''; + this.database = handshake.database || ''; + this.password = handshake.password || ''; + this.passwordSha1 = handshake.passwordSha1; + this.authPluginData1 = handshake.authPluginData1; + this.authPluginData2 = handshake.authPluginData2; + this.compress = handshake.compress; + this.clientFlags = handshake.flags; + // TODO: pre-4.1 auth support + let authToken; + if (this.passwordSha1) { + authToken = auth41.calculateTokenFromPasswordSha( + this.passwordSha1, + this.authPluginData1, + this.authPluginData2 + ); + } else { + authToken = auth41.calculateToken( + this.password, + this.authPluginData1, + this.authPluginData2 + ); + } + this.authToken = authToken; + this.charsetNumber = handshake.charsetNumber; + this.encoding = CharsetToEncoding[handshake.charsetNumber]; + this.connectAttributes = handshake.connectAttributes; + } + + serializeResponse(buffer) { + const isSet = (flag) => this.clientFlags & ClientConstants[flag]; + const packet = new Packet(0, buffer, 0, buffer.length); + packet.offset = 4; + packet.writeInt32(this.clientFlags); + packet.writeInt32(0); // max packet size. todo: move to config + packet.writeInt8(this.charsetNumber); + packet.skip(23); + const encoding = this.encoding; + packet.writeNullTerminatedString(this.user, encoding); + let k; + if (isSet('PLUGIN_AUTH_LENENC_CLIENT_DATA')) { + packet.writeLengthCodedNumber(this.authToken.length); + packet.writeBuffer(this.authToken); + } else if (isSet('SECURE_CONNECTION')) { + packet.writeInt8(this.authToken.length); + packet.writeBuffer(this.authToken); + } else { + packet.writeBuffer(this.authToken); + packet.writeInt8(0); + } + if (isSet('CONNECT_WITH_DB')) { + packet.writeNullTerminatedString(this.database, encoding); + } + if (isSet('PLUGIN_AUTH')) { + // TODO: pass from config + packet.writeNullTerminatedString('mysql_native_password', 'latin1'); + } + if (isSet('CONNECT_ATTRS')) { + const connectAttributes = this.connectAttributes || {}; + const attrNames = Object.keys(connectAttributes); + let keysLength = 0; + for (k = 0; k < attrNames.length; ++k) { + keysLength += Packet.lengthCodedStringLength(attrNames[k], encoding); + keysLength += Packet.lengthCodedStringLength( + connectAttributes[attrNames[k]], + encoding + ); + } + packet.writeLengthCodedNumber(keysLength); + for (k = 0; k < attrNames.length; ++k) { + packet.writeLengthCodedString(attrNames[k], encoding); + packet.writeLengthCodedString( + connectAttributes[attrNames[k]], + encoding + ); + } + } + return packet; + } + + toPacket() { + if (typeof this.user !== 'string') { + throw new Error('"user" connection config property must be a string'); + } + if (typeof this.database !== 'string') { + throw new Error('"database" connection config property must be a string'); + } + // dry run: calculate resulting packet length + const p = this.serializeResponse(Packet.MockBuffer()); + return this.serializeResponse(Buffer.alloc(p.offset)); + } + static fromPacket(packet) { + const args = {}; + args.clientFlags = packet.readInt32(); + function isSet(flag) { + return args.clientFlags & ClientConstants[flag]; + } + args.maxPacketSize = packet.readInt32(); + args.charsetNumber = packet.readInt8(); + const encoding = CharsetToEncoding[args.charsetNumber]; + args.encoding = encoding; + packet.skip(23); + args.user = packet.readNullTerminatedString(encoding); + let authTokenLength; + if (isSet('PLUGIN_AUTH_LENENC_CLIENT_DATA')) { + authTokenLength = packet.readLengthCodedNumber(encoding); + args.authToken = packet.readBuffer(authTokenLength); + } else if (isSet('SECURE_CONNECTION')) { + authTokenLength = packet.readInt8(); + args.authToken = packet.readBuffer(authTokenLength); + } else { + args.authToken = packet.readNullTerminatedString(encoding); + } + if (isSet('CONNECT_WITH_DB')) { + args.database = packet.readNullTerminatedString(encoding); + } + if (isSet('PLUGIN_AUTH')) { + args.authPluginName = packet.readNullTerminatedString(encoding); + } + if (isSet('CONNECT_ATTRS')) { + const keysLength = packet.readLengthCodedNumber(encoding); + const keysEnd = packet.offset + keysLength; + const attrs = {}; + while (packet.offset < keysEnd) { + attrs[packet.readLengthCodedString(encoding)] = + packet.readLengthCodedString(encoding); + } + args.connectAttributes = attrs; + } + return args; + } +} + +module.exports = HandshakeResponse; diff --git a/node_modules/mysql2/lib/packets/index.js b/node_modules/mysql2/lib/packets/index.js new file mode 100644 index 0000000..0d5a0b5 --- /dev/null +++ b/node_modules/mysql2/lib/packets/index.js @@ -0,0 +1,152 @@ +// This file was modified by Oracle on June 1, 2021. +// A utility method was introduced to generate an Error instance from a +// binary server packet. +// Modifications copyright (c) 2021, Oracle and/or its affiliates. + +// This file was modified by Oracle on September 21, 2021. +// The new AuthNextFactor packet is now available. +// Modifications copyright (c) 2021, Oracle and/or its affiliates. + +'use strict'; + +const process = require('process'); + +const AuthNextFactor = require('./auth_next_factor'); +const AuthSwitchRequest = require('./auth_switch_request'); +const AuthSwitchRequestMoreData = require('./auth_switch_request_more_data'); +const AuthSwitchResponse = require('./auth_switch_response'); +const BinaryRow = require('./binary_row'); +const BinlogDump = require('./binlog_dump'); +const ChangeUser = require('./change_user'); +const CloseStatement = require('./close_statement'); +const ColumnDefinition = require('./column_definition'); +const Execute = require('./execute'); +const Handshake = require('./handshake'); +const HandshakeResponse = require('./handshake_response'); +const PrepareStatement = require('./prepare_statement'); +const PreparedStatementHeader = require('./prepared_statement_header'); +const Query = require('./query'); +const RegisterSlave = require('./register_slave'); +const ResultSetHeader = require('./resultset_header'); +const SSLRequest = require('./ssl_request'); +const TextRow = require('./text_row'); + +const ctorMap = { + AuthNextFactor, + AuthSwitchRequest, + AuthSwitchRequestMoreData, + AuthSwitchResponse, + BinaryRow, + BinlogDump, + ChangeUser, + CloseStatement, + ColumnDefinition, + Execute, + Handshake, + HandshakeResponse, + PrepareStatement, + PreparedStatementHeader, + Query, + RegisterSlave, + ResultSetHeader, + SSLRequest, + TextRow, +}; +Object.entries(ctorMap).forEach(([name, ctor]) => { + module.exports[name] = ctor; + // monkey-patch it to include name if debug is on + if (process.env.NODE_DEBUG) { + if (ctor.prototype.toPacket) { + const old = ctor.prototype.toPacket; + ctor.prototype.toPacket = function () { + const p = old.call(this); + p._name = name; + return p; + }; + } + } +}); + +// simple packets: +const Packet = require('./packet'); +exports.Packet = Packet; + +class OK { + static toPacket(args, encoding) { + args = args || {}; + const affectedRows = args.affectedRows || 0; + const insertId = args.insertId || 0; + const serverStatus = args.serverStatus || 0; + const warningCount = args.warningCount || 0; + const message = args.message || ''; + + let length = 9 + Packet.lengthCodedNumberLength(affectedRows); + length += Packet.lengthCodedNumberLength(insertId); + + const buffer = Buffer.allocUnsafe(length); + const packet = new Packet(0, buffer, 0, length); + packet.offset = 4; + packet.writeInt8(0); + packet.writeLengthCodedNumber(affectedRows); + packet.writeLengthCodedNumber(insertId); + packet.writeInt16(serverStatus); + packet.writeInt16(warningCount); + packet.writeString(message, encoding); + packet._name = 'OK'; + return packet; + } +} + +exports.OK = OK; + +// warnings, statusFlags +class EOF { + static toPacket(warnings, statusFlags) { + if (typeof warnings === 'undefined') { + warnings = 0; + } + if (typeof statusFlags === 'undefined') { + statusFlags = 0; + } + const packet = new Packet(0, Buffer.allocUnsafe(9), 0, 9); + packet.offset = 4; + packet.writeInt8(0xfe); + packet.writeInt16(warnings); + packet.writeInt16(statusFlags); + packet._name = 'EOF'; + return packet; + } +} + +exports.EOF = EOF; + +class Error { + static toPacket(args, encoding) { + const length = 13 + Buffer.byteLength(args.message, 'utf8'); + const packet = new Packet(0, Buffer.allocUnsafe(length), 0, length); + packet.offset = 4; + packet.writeInt8(0xff); + packet.writeInt16(args.code); + // TODO: sql state parameter + packet.writeString('#_____', encoding); + packet.writeString(args.message, encoding); + packet._name = 'Error'; + return packet; + } + + static fromPacket(packet) { + packet.readInt8(); // marker + const code = packet.readInt16(); + packet.readString(1, 'ascii'); // sql state marker + // The SQL state of the ERR_Packet which is always 5 bytes long. + // https://dev.mysql.com/doc/dev/mysql-server/8.0.11/page_protocol_basic_dt_strings.html#sect_protocol_basic_dt_string_fix + packet.readString(5, 'ascii'); // sql state (ignore for now) + const message = packet.readNullTerminatedString('utf8'); + const error = new Error(); + error.message = message; + error.code = code; + return error; + } +} + +exports.Error = Error; diff --git a/node_modules/mysql2/lib/packets/packet.js b/node_modules/mysql2/lib/packets/packet.js new file mode 100644 index 0000000..b9e7755 --- /dev/null +++ b/node_modules/mysql2/lib/packets/packet.js @@ -0,0 +1,931 @@ +// This file was modified by Oracle on June 1, 2021. +// A comment describing some changes in the strict default SQL mode regarding +// non-standard dates was introduced. +// Modifications copyright (c) 2021, Oracle and/or its affiliates. + +'use strict'; + +const ErrorCodeToName = require('../constants/errors.js'); +const NativeBuffer = require('buffer').Buffer; +const Long = require('long'); +const StringParser = require('../parsers/string.js'); +const Types = require('../constants/types.js'); +const INVALID_DATE = new Date(NaN); + +// this is nearly duplicate of previous function so generated code is not slower +// due to "if (dateStrings)" branching +const pad = '000000000000'; +function leftPad(num, value) { + const s = value.toString(); + // if we don't need to pad + if (s.length >= num) { + return s; + } + return (pad + s).slice(-num); +} + +// The whole reason parse* function below exist +// is because String creation is relatively expensive (at least with V8), and if we have +// a buffer with "12345" content ideally we would like to bypass intermediate +// "12345" string creation and directly build 12345 number out of +// data. +// In my benchmarks the difference is ~25M 8-digit numbers per second vs +// 4.5 M using Number(packet.readLengthCodedString()) +// not used when size is close to max precision as series of *10 accumulate error +// and approximate result mihgt be diffreent from (approximate as well) Number(bigNumStringValue)) +// In the futire node version if speed difference is smaller parse* functions might be removed +// don't consider them as Packet public API + +const minus = '-'.charCodeAt(0); +const plus = '+'.charCodeAt(0); + +// TODO: handle E notation +const dot = '.'.charCodeAt(0); +const exponent = 'e'.charCodeAt(0); +const exponentCapital = 'E'.charCodeAt(0); + +class Packet { + constructor(id, buffer, start, end) { + // hot path, enable checks when testing only + // if (!Buffer.isBuffer(buffer) || typeof start == 'undefined' || typeof end == 'undefined') + // throw new Error('invalid packet'); + this.sequenceId = id; + this.numPackets = 1; + this.buffer = buffer; + this.start = start; + this.offset = start + 4; + this.end = end; + } + + // ============================== + // readers + // ============================== + reset() { + this.offset = this.start + 4; + } + + length() { + return this.end - this.start; + } + + slice() { + return this.buffer.slice(this.start, this.end); + } + + dump() { + // eslint-disable-next-line no-console + console.log( + [this.buffer.asciiSlice(this.start, this.end)], + this.buffer.slice(this.start, this.end), + this.length(), + this.sequenceId + ); + } + + haveMoreData() { + return this.end > this.offset; + } + + skip(num) { + this.offset += num; + } + + readInt8() { + return this.buffer[this.offset++]; + } + + readInt16() { + this.offset += 2; + return this.buffer.readUInt16LE(this.offset - 2); + } + + readInt24() { + return this.readInt16() + (this.readInt8() << 16); + } + + readInt32() { + this.offset += 4; + return this.buffer.readUInt32LE(this.offset - 4); + } + + readSInt8() { + return this.buffer.readInt8(this.offset++); + } + + readSInt16() { + this.offset += 2; + return this.buffer.readInt16LE(this.offset - 2); + } + + readSInt32() { + this.offset += 4; + return this.buffer.readInt32LE(this.offset - 4); + } + + readInt64JSNumber() { + const word0 = this.readInt32(); + const word1 = this.readInt32(); + const l = new Long(word0, word1, true); + return l.toNumber(); + } + + readSInt64JSNumber() { + const word0 = this.readInt32(); + const word1 = this.readInt32(); + if (!(word1 & 0x80000000)) { + return word0 + 0x100000000 * word1; + } + const l = new Long(word0, word1, false); + return l.toNumber(); + } + + readInt64String() { + const word0 = this.readInt32(); + const word1 = this.readInt32(); + const res = new Long(word0, word1, true); + return res.toString(); + } + + readSInt64String() { + const word0 = this.readInt32(); + const word1 = this.readInt32(); + const res = new Long(word0, word1, false); + return res.toString(); + } + + readInt64() { + const word0 = this.readInt32(); + const word1 = this.readInt32(); + let res = new Long(word0, word1, true); + const resNumber = res.toNumber(); + const resString = res.toString(); + res = resNumber.toString() === resString ? resNumber : resString; + return res; + } + + readSInt64() { + const word0 = this.readInt32(); + const word1 = this.readInt32(); + let res = new Long(word0, word1, false); + const resNumber = res.toNumber(); + const resString = res.toString(); + res = resNumber.toString() === resString ? resNumber : resString; + return res; + } + + isEOF() { + return this.buffer[this.offset] === 0xfe && this.length() < 13; + } + + eofStatusFlags() { + return this.buffer.readInt16LE(this.offset + 3); + } + + eofWarningCount() { + return this.buffer.readInt16LE(this.offset + 1); + } + + readLengthCodedNumber(bigNumberStrings, signed) { + const byte1 = this.buffer[this.offset++]; + if (byte1 < 251) { + return byte1; + } + return this.readLengthCodedNumberExt(byte1, bigNumberStrings, signed); + } + + readLengthCodedNumberSigned(bigNumberStrings) { + return this.readLengthCodedNumber(bigNumberStrings, true); + } + + readLengthCodedNumberExt(tag, bigNumberStrings, signed) { + let word0, word1; + let res; + if (tag === 0xfb) { + return null; + } + if (tag === 0xfc) { + return this.readInt8() + (this.readInt8() << 8); + } + if (tag === 0xfd) { + return this.readInt8() + (this.readInt8() << 8) + (this.readInt8() << 16); + } + if (tag === 0xfe) { + // TODO: check version + // Up to MySQL 3.22, 0xfe was followed by a 4-byte integer. + word0 = this.readInt32(); + word1 = this.readInt32(); + if (word1 === 0) { + return word0; // don't convert to float if possible + } + if (word1 < 2097152) { + // max exact float point int, 2^52 / 2^32 + return word1 * 0x100000000 + word0; + } + res = new Long(word0, word1, !signed); // Long need unsigned + const resNumber = res.toNumber(); + const resString = res.toString(); + res = resNumber.toString() === resString ? resNumber : resString; + return bigNumberStrings ? resString : res; + } + // eslint-disable-next-line no-console + console.trace(); + throw new Error(`Should not reach here: ${tag}`); + } + + readFloat() { + const res = this.buffer.readFloatLE(this.offset); + this.offset += 4; + return res; + } + + readDouble() { + const res = this.buffer.readDoubleLE(this.offset); + this.offset += 8; + return res; + } + + readBuffer(len) { + if (typeof len === 'undefined') { + len = this.end - this.offset; + } + this.offset += len; + return this.buffer.slice(this.offset - len, this.offset); + } + + // DATE, DATETIME and TIMESTAMP + readDateTime(timezone) { + if (!timezone || timezone === 'Z' || timezone === 'local') { + const length = this.readInt8(); + if (length === 0xfb) { + return null; + } + let y = 0; + let m = 0; + let d = 0; + let H = 0; + let M = 0; + let S = 0; + let ms = 0; + if (length > 3) { + y = this.readInt16(); + m = this.readInt8(); + d = this.readInt8(); + } + if (length > 6) { + H = this.readInt8(); + M = this.readInt8(); + S = this.readInt8(); + } + if (length > 10) { + ms = this.readInt32() / 1000; + } + // NO_ZERO_DATE mode and NO_ZERO_IN_DATE mode are part of the strict + // default SQL mode used by MySQL 8.0. This means that non-standard + // dates like '0000-00-00' become NULL. For older versions and other + // possible MySQL flavours we still need to account for the + // non-standard behaviour. + if (y + m + d + H + M + S + ms === 0) { + return INVALID_DATE; + } + if (timezone === 'Z') { + return new Date(Date.UTC(y, m - 1, d, H, M, S, ms)); + } + return new Date(y, m - 1, d, H, M, S, ms); + } + let str = this.readDateTimeString(6, 'T', null); + if (str.length === 10) { + str += 'T00:00:00'; + } + return new Date(str + timezone); + } + + readDateTimeString(decimals, timeSep, columnType) { + const length = this.readInt8(); + let y = 0; + let m = 0; + let d = 0; + let H = 0; + let M = 0; + let S = 0; + let ms = 0; + let str; + if (length > 3) { + y = this.readInt16(); + m = this.readInt8(); + d = this.readInt8(); + str = [leftPad(4, y), leftPad(2, m), leftPad(2, d)].join('-'); + } + if (length > 6) { + H = this.readInt8(); + M = this.readInt8(); + S = this.readInt8(); + str += `${timeSep || ' '}${[ + leftPad(2, H), + leftPad(2, M), + leftPad(2, S), + ].join(':')}`; + } else if (columnType === Types.DATETIME) { + str += ' 00:00:00'; + } + if (length > 10) { + ms = this.readInt32(); + str += '.'; + if (decimals) { + ms = leftPad(6, ms); + if (ms.length > decimals) { + ms = ms.substring(0, decimals); // rounding is done at the MySQL side, only 0 are here + } + } + str += ms; + } + return str; + } + + // TIME - value as a string, Can be negative + readTimeString(convertTtoMs) { + const length = this.readInt8(); + if (length === 0) { + return '00:00:00'; + } + const sign = this.readInt8() ? -1 : 1; // 'isNegative' flag byte + let d = 0; + let H = 0; + let M = 0; + let S = 0; + let ms = 0; + if (length > 6) { + d = this.readInt32(); + H = this.readInt8(); + M = this.readInt8(); + S = this.readInt8(); + } + if (length > 10) { + ms = this.readInt32(); + } + if (convertTtoMs) { + H += d * 24; + M += H * 60; + S += M * 60; + ms += S * 1000; + ms *= sign; + return ms; + } + // Format follows mySQL TIME format ([-][h]hh:mm:ss[.u[u[u[u[u[u]]]]]]) + // For positive times below 24 hours, this makes it equal to ISO 8601 times + return ( + (sign === -1 ? '-' : '') + + [leftPad(2, d * 24 + H), leftPad(2, M), leftPad(2, S)].join(':') + + (ms ? `.${ms}`.replace(/0+$/, '') : '') + ); + } + + readLengthCodedString(encoding) { + const len = this.readLengthCodedNumber(); + // TODO: check manually first byte here to avoid polymorphic return type? + if (len === null) { + return null; + } + this.offset += len; + // TODO: Use characterSetCode to get proper encoding + // https://github.com/sidorares/node-mysql2/pull/374 + return StringParser.decode( + this.buffer, + encoding, + this.offset - len, + this.offset + ); + } + + readLengthCodedBuffer() { + const len = this.readLengthCodedNumber(); + if (len === null) { + return null; + } + return this.readBuffer(len); + } + + readNullTerminatedString(encoding) { + const start = this.offset; + let end = this.offset; + while (this.buffer[end]) { + end = end + 1; // TODO: handle OOB check + } + this.offset = end + 1; + return StringParser.decode(this.buffer, encoding, start, end); + } + + // TODO reuse? + readString(len, encoding) { + if (typeof len === 'string' && typeof encoding === 'undefined') { + encoding = len; + len = undefined; + } + if (typeof len === 'undefined') { + len = this.end - this.offset; + } + this.offset += len; + return StringParser.decode( + this.buffer, + encoding, + this.offset - len, + this.offset + ); + } + + parseInt(len, supportBigNumbers) { + if (len === null) { + return null; + } + if (len >= 14 && !supportBigNumbers) { + const s = this.buffer.toString('ascii', this.offset, this.offset + len); + this.offset += len; + return Number(s); + } + let result = 0; + const start = this.offset; + const end = this.offset + len; + let sign = 1; + if (len === 0) { + return 0; // TODO: assert? exception? + } + if (this.buffer[this.offset] === minus) { + this.offset++; + sign = -1; + } + // max precise int is 9007199254740992 + let str; + const numDigits = end - this.offset; + if (supportBigNumbers) { + if (numDigits >= 15) { + str = this.readString(end - this.offset, 'binary'); + result = parseInt(str, 10); + if (result.toString() === str) { + return sign * result; + } + return sign === -1 ? `-${str}` : str; + } + if (numDigits > 16) { + str = this.readString(end - this.offset); + return sign === -1 ? `-${str}` : str; + } + } + if (this.buffer[this.offset] === plus) { + this.offset++; // just ignore + } + while (this.offset < end) { + result *= 10; + result += this.buffer[this.offset] - 48; + this.offset++; + } + const num = result * sign; + if (!supportBigNumbers) { + return num; + } + str = this.buffer.toString('ascii', start, end); + if (num.toString() === str) { + return num; + } + return str; + } + + // note that if value of inputNumberAsString is bigger than MAX_SAFE_INTEGER + // ( or smaller than MIN_SAFE_INTEGER ) the parseIntNoBigCheck result might be + // different from what you would get from Number(inputNumberAsString) + // String(parseIntNoBigCheck) <> String(Number(inputNumberAsString)) <> inputNumberAsString + parseIntNoBigCheck(len) { + if (len === null) { + return null; + } + let result = 0; + const end = this.offset + len; + let sign = 1; + if (len === 0) { + return 0; // TODO: assert? exception? + } + if (this.buffer[this.offset] === minus) { + this.offset++; + sign = -1; + } + if (this.buffer[this.offset] === plus) { + this.offset++; // just ignore + } + while (this.offset < end) { + result *= 10; + result += this.buffer[this.offset] - 48; + this.offset++; + } + return result * sign; + } + + // copy-paste from https://github.com/mysqljs/mysql/blob/master/lib/protocol/Parser.js + parseGeometryValue() { + const buffer = this.readLengthCodedBuffer(); + let offset = 4; + if (buffer === null || !buffer.length) { + return null; + } + function parseGeometry() { + let x, y, i, j, numPoints, line; + let result = null; + const byteOrder = buffer.readUInt8(offset); + offset += 1; + const wkbType = byteOrder + ? buffer.readUInt32LE(offset) + : buffer.readUInt32BE(offset); + offset += 4; + switch (wkbType) { + case 1: // WKBPoint + x = byteOrder + ? buffer.readDoubleLE(offset) + : buffer.readDoubleBE(offset); + offset += 8; + y = byteOrder + ? buffer.readDoubleLE(offset) + : buffer.readDoubleBE(offset); + offset += 8; + result = { x: x, y: y }; + break; + case 2: // WKBLineString + numPoints = byteOrder + ? buffer.readUInt32LE(offset) + : buffer.readUInt32BE(offset); + offset += 4; + result = []; + for (i = numPoints; i > 0; i--) { + x = byteOrder + ? buffer.readDoubleLE(offset) + : buffer.readDoubleBE(offset); + offset += 8; + y = byteOrder + ? buffer.readDoubleLE(offset) + : buffer.readDoubleBE(offset); + offset += 8; + result.push({ x: x, y: y }); + } + break; + case 3: // WKBPolygon + // eslint-disable-next-line no-case-declarations + const numRings = byteOrder + ? buffer.readUInt32LE(offset) + : buffer.readUInt32BE(offset); + offset += 4; + result = []; + for (i = numRings; i > 0; i--) { + numPoints = byteOrder + ? buffer.readUInt32LE(offset) + : buffer.readUInt32BE(offset); + offset += 4; + line = []; + for (j = numPoints; j > 0; j--) { + x = byteOrder + ? buffer.readDoubleLE(offset) + : buffer.readDoubleBE(offset); + offset += 8; + y = byteOrder + ? buffer.readDoubleLE(offset) + : buffer.readDoubleBE(offset); + offset += 8; + line.push({ x: x, y: y }); + } + result.push(line); + } + break; + case 4: // WKBMultiPoint + case 5: // WKBMultiLineString + case 6: // WKBMultiPolygon + case 7: // WKBGeometryCollection + // eslint-disable-next-line no-case-declarations + const num = byteOrder + ? buffer.readUInt32LE(offset) + : buffer.readUInt32BE(offset); + offset += 4; + result = []; + for (i = num; i > 0; i--) { + result.push(parseGeometry()); + } + break; + } + return result; + } + return parseGeometry(); + } + + parseVector() { + const bufLen = this.readLengthCodedNumber(); + const vectorEnd = this.offset + bufLen; + const result = []; + while (this.offset < vectorEnd && this.offset < this.end) { + result.push(this.readFloat()); + } + return result; + } + + parseDate(timezone) { + const strLen = this.readLengthCodedNumber(); + if (strLen === null) { + return null; + } + if (strLen !== 10) { + // we expect only YYYY-MM-DD here. + // if for some reason it's not the case return invalid date + return new Date(NaN); + } + const y = this.parseInt(4); + this.offset++; // - + const m = this.parseInt(2); + this.offset++; // - + const d = this.parseInt(2); + if (!timezone || timezone === 'local') { + return new Date(y, m - 1, d); + } + if (timezone === 'Z') { + return new Date(Date.UTC(y, m - 1, d)); + } + return new Date( + `${leftPad(4, y)}-${leftPad(2, m)}-${leftPad(2, d)}T00:00:00${timezone}` + ); + } + + parseDateTime(timezone) { + const str = this.readLengthCodedString('binary'); + if (str === null) { + return null; + } + if (!timezone || timezone === 'local') { + return new Date(str); + } + return new Date(`${str}${timezone}`); + } + + parseFloat(len) { + if (len === null) { + return null; + } + let result = 0; + const end = this.offset + len; + let factor = 1; + let pastDot = false; + let charCode = 0; + if (len === 0) { + return 0; // TODO: assert? exception? + } + if (this.buffer[this.offset] === minus) { + this.offset++; + factor = -1; + } + if (this.buffer[this.offset] === plus) { + this.offset++; // just ignore + } + while (this.offset < end) { + charCode = this.buffer[this.offset]; + if (charCode === dot) { + pastDot = true; + this.offset++; + } else if (charCode === exponent || charCode === exponentCapital) { + this.offset++; + const exponentValue = this.parseInt(end - this.offset); + return (result / factor) * Math.pow(10, exponentValue); + } else { + result *= 10; + result += this.buffer[this.offset] - 48; + this.offset++; + if (pastDot) { + factor = factor * 10; + } + } + } + return result / factor; + } + + parseLengthCodedIntNoBigCheck() { + return this.parseIntNoBigCheck(this.readLengthCodedNumber()); + } + + parseLengthCodedInt(supportBigNumbers) { + return this.parseInt(this.readLengthCodedNumber(), supportBigNumbers); + } + + parseLengthCodedIntString() { + return this.readLengthCodedString('binary'); + } + + parseLengthCodedFloat() { + return this.parseFloat(this.readLengthCodedNumber()); + } + + peekByte() { + return this.buffer[this.offset]; + } + + // OxFE is often used as "Alt" flag - not ok, not error. + // For example, it's first byte of AuthSwitchRequest + isAlt() { + return this.peekByte() === 0xfe; + } + + isError() { + return this.peekByte() === 0xff; + } + + asError(encoding) { + this.reset(); + this.readInt8(); // fieldCount + const errorCode = this.readInt16(); + let sqlState = ''; + if (this.buffer[this.offset] === 0x23) { + this.skip(1); + sqlState = this.readBuffer(5).toString(); + } + const message = this.readString(undefined, encoding); + const err = new Error(message); + err.code = ErrorCodeToName[errorCode]; + err.errno = errorCode; + err.sqlState = sqlState; + err.sqlMessage = message; + return err; + } + + writeInt32(n) { + this.buffer.writeUInt32LE(n, this.offset); + this.offset += 4; + } + + writeInt24(n) { + this.writeInt8(n & 0xff); + this.writeInt16(n >> 8); + } + + writeInt16(n) { + this.buffer.writeUInt16LE(n, this.offset); + this.offset += 2; + } + + writeInt8(n) { + this.buffer.writeUInt8(n, this.offset); + this.offset++; + } + + writeDouble(n) { + this.buffer.writeDoubleLE(n, this.offset); + this.offset += 8; + } + + writeBuffer(b) { + b.copy(this.buffer, this.offset); + this.offset += b.length; + } + + writeNull() { + this.buffer[this.offset] = 0xfb; + this.offset++; + } + + // TODO: refactor following three? + writeNullTerminatedString(s, encoding) { + const buf = StringParser.encode(s, encoding); + this.buffer.length && buf.copy(this.buffer, this.offset); + this.offset += buf.length; + this.writeInt8(0); + } + + writeString(s, encoding) { + if (s === null) { + this.writeInt8(0xfb); + return; + } + if (s.length === 0) { + return; + } + // const bytes = Buffer.byteLength(s, 'utf8'); + // this.buffer.write(s, this.offset, bytes, 'utf8'); + // this.offset += bytes; + const buf = StringParser.encode(s, encoding); + this.buffer.length && buf.copy(this.buffer, this.offset); + this.offset += buf.length; + } + + writeLengthCodedString(s, encoding) { + const buf = StringParser.encode(s, encoding); + this.writeLengthCodedNumber(buf.length); + this.buffer.length && buf.copy(this.buffer, this.offset); + this.offset += buf.length; + } + + writeLengthCodedBuffer(b) { + this.writeLengthCodedNumber(b.length); + b.copy(this.buffer, this.offset); + this.offset += b.length; + } + + writeLengthCodedNumber(n) { + if (n < 0xfb) { + return this.writeInt8(n); + } + if (n < 0xffff) { + this.writeInt8(0xfc); + return this.writeInt16(n); + } + if (n < 0xffffff) { + this.writeInt8(0xfd); + return this.writeInt24(n); + } + if (n === null) { + return this.writeInt8(0xfb); + } + // TODO: check that n is out of int precision + this.writeInt8(0xfe); + this.buffer.writeUInt32LE(n, this.offset); + this.offset += 4; + this.buffer.writeUInt32LE(n >> 32, this.offset); + this.offset += 4; + return this.offset; + } + + writeDate(d, timezone) { + this.buffer.writeUInt8(11, this.offset); + if (!timezone || timezone === 'local') { + this.buffer.writeUInt16LE(d.getFullYear(), this.offset + 1); + this.buffer.writeUInt8(d.getMonth() + 1, this.offset + 3); + this.buffer.writeUInt8(d.getDate(), this.offset + 4); + this.buffer.writeUInt8(d.getHours(), this.offset + 5); + this.buffer.writeUInt8(d.getMinutes(), this.offset + 6); + this.buffer.writeUInt8(d.getSeconds(), this.offset + 7); + this.buffer.writeUInt32LE(d.getMilliseconds() * 1000, this.offset + 8); + } else { + if (timezone !== 'Z') { + const offset = + (timezone[0] === '-' ? -1 : 1) * + (parseInt(timezone.substring(1, 3), 10) * 60 + + parseInt(timezone.substring(4), 10)); + if (offset !== 0) { + d = new Date(d.getTime() + 60000 * offset); + } + } + this.buffer.writeUInt16LE(d.getUTCFullYear(), this.offset + 1); + this.buffer.writeUInt8(d.getUTCMonth() + 1, this.offset + 3); + this.buffer.writeUInt8(d.getUTCDate(), this.offset + 4); + this.buffer.writeUInt8(d.getUTCHours(), this.offset + 5); + this.buffer.writeUInt8(d.getUTCMinutes(), this.offset + 6); + this.buffer.writeUInt8(d.getUTCSeconds(), this.offset + 7); + this.buffer.writeUInt32LE(d.getUTCMilliseconds() * 1000, this.offset + 8); + } + this.offset += 12; + } + + writeHeader(sequenceId) { + const offset = this.offset; + this.offset = 0; + this.writeInt24(this.buffer.length - 4); + this.writeInt8(sequenceId); + this.offset = offset; + } + + clone() { + return new Packet(this.sequenceId, this.buffer, this.start, this.end); + } + + type() { + if (this.isEOF()) { + return 'EOF'; + } + if (this.isError()) { + return 'Error'; + } + if (this.buffer[this.offset] === 0) { + return 'maybeOK'; // could be other packet types as well + } + return ''; + } + + static lengthCodedNumberLength(n) { + if (n < 0xfb) { + return 1; + } + if (n < 0xffff) { + return 3; + } + if (n < 0xffffff) { + return 5; + } + return 9; + } + + static lengthCodedStringLength(str, encoding) { + const buf = StringParser.encode(str, encoding); + const slen = buf.length; + return Packet.lengthCodedNumberLength(slen) + slen; + } + + static MockBuffer() { + const noop = function () {}; + const res = Buffer.alloc(0); + for (const op in NativeBuffer.prototype) { + if (typeof res[op] === 'function') { + res[op] = noop; + } + } + return res; + } +} + +module.exports = Packet; diff --git a/node_modules/mysql2/lib/packets/prepare_statement.js b/node_modules/mysql2/lib/packets/prepare_statement.js new file mode 100644 index 0000000..d53c222 --- /dev/null +++ b/node_modules/mysql2/lib/packets/prepare_statement.js @@ -0,0 +1,27 @@ +'use strict'; + +const Packet = require('../packets/packet'); +const CommandCodes = require('../constants/commands'); +const StringParser = require('../parsers/string.js'); +const CharsetToEncoding = require('../constants/charset_encodings.js'); + +class PrepareStatement { + constructor(sql, charsetNumber) { + this.query = sql; + this.charsetNumber = charsetNumber; + this.encoding = CharsetToEncoding[charsetNumber]; + } + + toPacket() { + const buf = StringParser.encode(this.query, this.encoding); + const length = 5 + buf.length; + const buffer = Buffer.allocUnsafe(length); + const packet = new Packet(0, buffer, 0, length); + packet.offset = 4; + packet.writeInt8(CommandCodes.STMT_PREPARE); + packet.writeBuffer(buf); + return packet; + } +} + +module.exports = PrepareStatement; diff --git a/node_modules/mysql2/lib/packets/prepared_statement_header.js b/node_modules/mysql2/lib/packets/prepared_statement_header.js new file mode 100644 index 0000000..70b263a --- /dev/null +++ b/node_modules/mysql2/lib/packets/prepared_statement_header.js @@ -0,0 +1,16 @@ +'use strict'; + +class PreparedStatementHeader { + constructor(packet) { + packet.skip(1); // should be 0 + this.id = packet.readInt32(); + this.fieldCount = packet.readInt16(); + this.parameterCount = packet.readInt16(); + packet.skip(1); // should be 0 + this.warningCount = packet.readInt16(); + } +} + +// TODO: toPacket + +module.exports = PreparedStatementHeader; diff --git a/node_modules/mysql2/lib/packets/query.js b/node_modules/mysql2/lib/packets/query.js new file mode 100644 index 0000000..b650b35 --- /dev/null +++ b/node_modules/mysql2/lib/packets/query.js @@ -0,0 +1,27 @@ +'use strict'; + +const Packet = require('../packets/packet.js'); +const CommandCode = require('../constants/commands.js'); +const StringParser = require('../parsers/string.js'); +const CharsetToEncoding = require('../constants/charset_encodings.js'); + +class Query { + constructor(sql, charsetNumber) { + this.query = sql; + this.charsetNumber = charsetNumber; + this.encoding = CharsetToEncoding[charsetNumber]; + } + + toPacket() { + const buf = StringParser.encode(this.query, this.encoding); + const length = 5 + buf.length; + const buffer = Buffer.allocUnsafe(length); + const packet = new Packet(0, buffer, 0, length); + packet.offset = 4; + packet.writeInt8(CommandCode.QUERY); + packet.writeBuffer(buf); + return packet; + } +} + +module.exports = Query; diff --git a/node_modules/mysql2/lib/packets/register_slave.js b/node_modules/mysql2/lib/packets/register_slave.js new file mode 100644 index 0000000..26e802f --- /dev/null +++ b/node_modules/mysql2/lib/packets/register_slave.js @@ -0,0 +1,46 @@ +'use strict'; + +// http://dev.mysql.com/doc/internals/en/com-register-slave.html +// note that documentation is incorrect, for example command code is actually 0x15 but documented as 0x14 + +const Packet = require('../packets/packet'); +const CommandCodes = require('../constants/commands'); + +class RegisterSlave { + constructor(opts) { + this.serverId = opts.serverId || 0; + this.slaveHostname = opts.slaveHostname || ''; + this.slaveUser = opts.slaveUser || ''; + this.slavePassword = opts.slavePassword || ''; + this.slavePort = opts.slavePort || 0; + this.replicationRank = opts.replicationRank || 0; + this.masterId = opts.masterId || 0; + } + + toPacket() { + const length = + 15 + // TODO: should be ascii? + Buffer.byteLength(this.slaveHostname, 'utf8') + + Buffer.byteLength(this.slaveUser, 'utf8') + + Buffer.byteLength(this.slavePassword, 'utf8') + + 3 + + 4; + const buffer = Buffer.allocUnsafe(length); + const packet = new Packet(0, buffer, 0, length); + packet.offset = 4; + packet.writeInt8(CommandCodes.REGISTER_SLAVE); + packet.writeInt32(this.serverId); + packet.writeInt8(Buffer.byteLength(this.slaveHostname, 'utf8')); + packet.writeString(this.slaveHostname); + packet.writeInt8(Buffer.byteLength(this.slaveUser, 'utf8')); + packet.writeString(this.slaveUser); + packet.writeInt8(Buffer.byteLength(this.slavePassword, 'utf8')); + packet.writeString(this.slavePassword); + packet.writeInt16(this.slavePort); + packet.writeInt32(this.replicationRank); + packet.writeInt32(this.masterId); + return packet; + } +} + +module.exports = RegisterSlave; diff --git a/node_modules/mysql2/lib/packets/resultset_header.js b/node_modules/mysql2/lib/packets/resultset_header.js new file mode 100644 index 0000000..ed0ffd4 --- /dev/null +++ b/node_modules/mysql2/lib/packets/resultset_header.js @@ -0,0 +1,124 @@ +'use strict'; + +// TODO: rename to OK packet +// https://dev.mysql.com/doc/internals/en/packet-OK_Packet.html + +const Packet = require('./packet.js'); +const ClientConstants = require('../constants/client.js'); +const ServerSatusFlags = require('../constants/server_status.js'); + +const EncodingToCharset = require('../constants/encoding_charset.js'); +const sessionInfoTypes = require('../constants/session_track.js'); + +class ResultSetHeader { + constructor(packet, connection) { + const bigNumberStrings = connection.config.bigNumberStrings; + const encoding = connection.serverEncoding; + const flags = connection._handshakePacket.capabilityFlags; + const isSet = function (flag) { + return flags & ClientConstants[flag]; + }; + if (packet.buffer[packet.offset] !== 0) { + this.fieldCount = packet.readLengthCodedNumber(); + if (this.fieldCount === null) { + this.infileName = packet.readString(undefined, encoding); + } + return; + } + this.fieldCount = packet.readInt8(); // skip OK byte + this.affectedRows = packet.readLengthCodedNumber(bigNumberStrings); + this.insertId = packet.readLengthCodedNumberSigned(bigNumberStrings); + this.info = ''; + if (isSet('PROTOCOL_41')) { + this.serverStatus = packet.readInt16(); + this.warningStatus = packet.readInt16(); + } else if (isSet('TRANSACTIONS')) { + this.serverStatus = packet.readInt16(); + } + let stateChanges = null; + if (isSet('SESSION_TRACK') && packet.offset < packet.end) { + this.info = packet.readLengthCodedString(encoding); + + if (this.serverStatus && ServerSatusFlags.SERVER_SESSION_STATE_CHANGED) { + // session change info record - see + // https://dev.mysql.com/doc/internals/en/packet-OK_Packet.html#cs-sect-packet-ok-sessioninfo + let len = + packet.offset < packet.end ? packet.readLengthCodedNumber() : 0; + const end = packet.offset + len; + let type, key, stateEnd; + if (len > 0) { + stateChanges = { + systemVariables: {}, + schema: null, + gtids: [], + trackStateChange: null, + }; + } + while (packet.offset < end) { + type = packet.readInt8(); + len = packet.readLengthCodedNumber(); + stateEnd = packet.offset + len; + if (type === sessionInfoTypes.SYSTEM_VARIABLES) { + key = packet.readLengthCodedString(encoding); + const val = packet.readLengthCodedString(encoding); + stateChanges.systemVariables[key] = val; + if (key === 'character_set_client') { + const charsetNumber = EncodingToCharset[val]; + // TODO - better api for driver users to handle unknown encodings? + // maybe custom coverter in the config? + // For now just ignore character_set_client command if there is + // no known mapping from reported encoding to a charset code + if (typeof charsetNumber !== 'undefined') { + connection.config.charsetNumber = charsetNumber; + } + } + } else if (type === sessionInfoTypes.SCHEMA) { + key = packet.readLengthCodedString(encoding); + stateChanges.schema = key; + } else if (type === sessionInfoTypes.STATE_CHANGE) { + stateChanges.trackStateChange = + packet.readLengthCodedString(encoding); + } else if (type === sessionInfoTypes.STATE_GTIDS) { + // TODO: find if the first length coded string means anything. Usually comes as empty + // eslint-disable-next-line no-unused-vars + const _unknownString = packet.readLengthCodedString(encoding); + const gtid = packet.readLengthCodedString(encoding); + stateChanges.gtids = gtid.split(','); + } else { + // unsupported session track type. For now just ignore + } + packet.offset = stateEnd; + } + } + } else { + this.info = packet.readString(undefined, encoding); + } + if (stateChanges) { + this.stateChanges = stateChanges; + } + const m = this.info.match(/\schanged:\s*(\d+)/i); + if (m !== null) { + this.changedRows = parseInt(m[1], 10); + } else { + this.changedRows = 0; + } + } + + // TODO: should be consistent instance member, but it's just easier here to have just function + static toPacket(fieldCount, insertId) { + let length = 4 + Packet.lengthCodedNumberLength(fieldCount); + if (typeof insertId !== 'undefined') { + length += Packet.lengthCodedNumberLength(insertId); + } + const buffer = Buffer.allocUnsafe(length); + const packet = new Packet(0, buffer, 0, length); + packet.offset = 4; + packet.writeLengthCodedNumber(fieldCount); + if (typeof insertId !== 'undefined') { + packet.writeLengthCodedNumber(insertId); + } + return packet; + } +} + +module.exports = ResultSetHeader; diff --git a/node_modules/mysql2/lib/packets/ssl_request.js b/node_modules/mysql2/lib/packets/ssl_request.js new file mode 100644 index 0000000..69eec24 --- /dev/null +++ b/node_modules/mysql2/lib/packets/ssl_request.js @@ -0,0 +1,25 @@ +'use strict'; + +const ClientConstants = require('../constants/client'); +const Packet = require('../packets/packet'); + +class SSLRequest { + constructor(flags, charset) { + this.clientFlags = flags | ClientConstants.SSL; + this.charset = charset; + } + + toPacket() { + const length = 36; + const buffer = Buffer.allocUnsafe(length); + const packet = new Packet(0, buffer, 0, length); + buffer.fill(0); + packet.offset = 4; + packet.writeInt32(this.clientFlags); + packet.writeInt32(0); // max packet size. todo: move to config + packet.writeInt8(this.charset); + return packet; + } +} + +module.exports = SSLRequest; diff --git a/node_modules/mysql2/lib/packets/text_row.js b/node_modules/mysql2/lib/packets/text_row.js new file mode 100644 index 0000000..ecb8d10 --- /dev/null +++ b/node_modules/mysql2/lib/packets/text_row.js @@ -0,0 +1,47 @@ +'use strict'; + +const Packet = require('../packets/packet'); + +class TextRow { + constructor(columns) { + this.columns = columns || []; + } + + static fromPacket(packet) { + // packet.reset(); // set offset to starting point? + const columns = []; + while (packet.haveMoreData()) { + columns.push(packet.readLengthCodedString()); + } + return new TextRow(columns); + } + + static toPacket(columns, encoding) { + const sequenceId = 0; // TODO remove, this is calculated now in connecton + let length = 0; + columns.forEach((val) => { + if (val === null || typeof val === 'undefined') { + ++length; + return; + } + length += Packet.lengthCodedStringLength(val.toString(10), encoding); + }); + const buffer = Buffer.allocUnsafe(length + 4); + const packet = new Packet(sequenceId, buffer, 0, length + 4); + packet.offset = 4; + columns.forEach((val) => { + if (val === null) { + packet.writeNull(); + return; + } + if (typeof val === 'undefined') { + packet.writeInt8(0); + return; + } + packet.writeLengthCodedString(val.toString(10), encoding); + }); + return packet; + } +} + +module.exports = TextRow; diff --git a/node_modules/mysql2/lib/parsers/binary_parser.js b/node_modules/mysql2/lib/parsers/binary_parser.js new file mode 100644 index 0000000..ce3c908 --- /dev/null +++ b/node_modules/mysql2/lib/parsers/binary_parser.js @@ -0,0 +1,231 @@ +'use strict'; + +const FieldFlags = require('../constants/field_flags.js'); +const Charsets = require('../constants/charsets.js'); +const Types = require('../constants/types.js'); +const helpers = require('../helpers'); +const genFunc = require('generate-function'); +const parserCache = require('./parser_cache.js'); +const typeNames = []; +for (const t in Types) { + typeNames[Types[t]] = t; +} + +function readCodeFor(field, config, options, fieldNum) { + const supportBigNumbers = Boolean( + options.supportBigNumbers || config.supportBigNumbers + ); + const bigNumberStrings = Boolean( + options.bigNumberStrings || config.bigNumberStrings + ); + const timezone = options.timezone || config.timezone; + const dateStrings = options.dateStrings || config.dateStrings; + const unsigned = field.flags & FieldFlags.UNSIGNED; + switch (field.columnType) { + case Types.TINY: + return unsigned ? 'packet.readInt8();' : 'packet.readSInt8();'; + case Types.SHORT: + return unsigned ? 'packet.readInt16();' : 'packet.readSInt16();'; + case Types.LONG: + case Types.INT24: // in binary protocol int24 is encoded in 4 bytes int32 + return unsigned ? 'packet.readInt32();' : 'packet.readSInt32();'; + case Types.YEAR: + return 'packet.readInt16()'; + case Types.FLOAT: + return 'packet.readFloat();'; + case Types.DOUBLE: + return 'packet.readDouble();'; + case Types.NULL: + return 'null;'; + case Types.DATE: + case Types.DATETIME: + case Types.TIMESTAMP: + case Types.NEWDATE: + if (helpers.typeMatch(field.columnType, dateStrings, Types)) { + return `packet.readDateTimeString(${parseInt(field.decimals, 10)}, ${null}, ${field.columnType});`; + } + return `packet.readDateTime(${helpers.srcEscape(timezone)});`; + case Types.TIME: + return 'packet.readTimeString()'; + case Types.DECIMAL: + case Types.NEWDECIMAL: + if (config.decimalNumbers) { + return 'packet.parseLengthCodedFloat();'; + } + return 'packet.readLengthCodedString("ascii");'; + case Types.GEOMETRY: + return 'packet.parseGeometryValue();'; + case Types.VECTOR: + return 'packet.parseVector()'; + case Types.JSON: + // Since for JSON columns mysql always returns charset 63 (BINARY), + // we have to handle it according to JSON specs and use "utf8", + // see https://github.com/sidorares/node-mysql2/issues/409 + return config.jsonStrings + ? 'packet.readLengthCodedString("utf8")' + : 'JSON.parse(packet.readLengthCodedString("utf8"));'; + case Types.LONGLONG: + if (!supportBigNumbers) { + return unsigned + ? 'packet.readInt64JSNumber();' + : 'packet.readSInt64JSNumber();'; + } + if (bigNumberStrings) { + return unsigned + ? 'packet.readInt64String();' + : 'packet.readSInt64String();'; + } + return unsigned ? 'packet.readInt64();' : 'packet.readSInt64();'; + + default: + if (field.characterSet === Charsets.BINARY) { + return 'packet.readLengthCodedBuffer();'; + } + return `packet.readLengthCodedString(fields[${fieldNum}].encoding)`; + } +} + +function compile(fields, options, config) { + const parserFn = genFunc(); + const nullBitmapLength = Math.floor((fields.length + 7 + 2) / 8); + + function wrap(field, packet) { + return { + type: typeNames[field.columnType], + length: field.columnLength, + db: field.schema, + table: field.table, + name: field.name, + string: function (encoding = field.encoding) { + if (field.columnType === Types.JSON && encoding === field.encoding) { + // Since for JSON columns mysql always returns charset 63 (BINARY), + // we have to handle it according to JSON specs and use "utf8", + // see https://github.com/sidorares/node-mysql2/issues/1661 + console.warn( + `typeCast: JSON column "${field.name}" is interpreted as BINARY by default, recommended to manually set utf8 encoding: \`field.string("utf8")\`` + ); + } + + if ( + [Types.DATETIME, Types.NEWDATE, Types.TIMESTAMP, Types.DATE].includes( + field.columnType + ) + ) { + return packet.readDateTimeString(parseInt(field.decimals, 10)); + } + + if (field.columnType === Types.TINY) { + const unsigned = field.flags & FieldFlags.UNSIGNED; + + return String(unsigned ? packet.readInt8() : packet.readSInt8()); + } + + if (field.columnType === Types.TIME) { + return packet.readTimeString(); + } + + return packet.readLengthCodedString(encoding); + }, + buffer: function () { + return packet.readLengthCodedBuffer(); + }, + geometry: function () { + return packet.parseGeometryValue(); + }, + }; + } + + parserFn('(function(){'); + parserFn('return class BinaryRow {'); + parserFn('constructor() {'); + parserFn('}'); + + parserFn('next(packet, fields, options) {'); + if (options.rowsAsArray) { + parserFn(`const result = new Array(${fields.length});`); + } else { + parserFn('const result = {};'); + } + + // Global typeCast + if ( + typeof config.typeCast === 'function' && + typeof options.typeCast !== 'function' + ) { + options.typeCast = config.typeCast; + } + + parserFn('packet.readInt8();'); // status byte + for (let i = 0; i < nullBitmapLength; ++i) { + parserFn(`const nullBitmaskByte${i} = packet.readInt8();`); + } + + let lvalue = ''; + let currentFieldNullBit = 4; + let nullByteIndex = 0; + let fieldName = ''; + let tableName = ''; + + for (let i = 0; i < fields.length; i++) { + fieldName = helpers.fieldEscape(fields[i].name); + // parserFn(`// ${fieldName}: ${typeNames[fields[i].columnType]}`); + + if (typeof options.nestTables === 'string') { + lvalue = `result[${helpers.fieldEscape(fields[i].table + options.nestTables + fields[i].name)}]`; + } else if (options.nestTables === true) { + tableName = helpers.fieldEscape(fields[i].table); + + parserFn(`if (!result[${tableName}]) result[${tableName}] = {};`); + lvalue = `result[${tableName}][${fieldName}]`; + } else if (options.rowsAsArray) { + lvalue = `result[${i.toString(10)}]`; + } else { + lvalue = `result[${fieldName}]`; + } + + parserFn(`if (nullBitmaskByte${nullByteIndex} & ${currentFieldNullBit}) `); + parserFn(`${lvalue} = null;`); + parserFn('else {'); + + if (options.typeCast === false) { + parserFn(`${lvalue} = packet.readLengthCodedBuffer();`); + } else { + const fieldWrapperVar = `fieldWrapper${i}`; + parserFn(`const ${fieldWrapperVar} = wrap(fields[${i}], packet);`); + const readCode = readCodeFor(fields[i], config, options, i); + + if (typeof options.typeCast === 'function') { + parserFn( + `${lvalue} = options.typeCast(${fieldWrapperVar}, function() { return ${readCode} });` + ); + } else { + parserFn(`${lvalue} = ${readCode};`); + } + } + parserFn('}'); + + currentFieldNullBit *= 2; + if (currentFieldNullBit === 0x100) { + currentFieldNullBit = 1; + nullByteIndex++; + } + } + + parserFn('return result;'); + parserFn('}'); + parserFn('};')('})()'); + + if (config.debug) { + helpers.printDebugWithCode( + 'Compiled binary protocol row parser', + parserFn.toString() + ); + } + return parserFn.toFunction({ wrap }); +} + +function getBinaryParser(fields, options, config) { + return parserCache.getParser('binary', fields, options, config, compile); +} + +module.exports = getBinaryParser; diff --git a/node_modules/mysql2/lib/parsers/parser_cache.js b/node_modules/mysql2/lib/parsers/parser_cache.js new file mode 100644 index 0000000..2dd6891 --- /dev/null +++ b/node_modules/mysql2/lib/parsers/parser_cache.js @@ -0,0 +1,66 @@ +'use strict'; + +const { createLRU } = require('lru.min'); + +const parserCache = createLRU({ + max: 15000, +}); + +function keyFromFields(type, fields, options, config) { + const res = [ + type, + typeof options.nestTables, + options.nestTables, + Boolean(options.rowsAsArray), + Boolean(options.supportBigNumbers || config.supportBigNumbers), + Boolean(options.bigNumberStrings || config.bigNumberStrings), + typeof options.typeCast, + options.timezone || config.timezone, + Boolean(options.decimalNumbers), + options.dateStrings, + ]; + + for (let i = 0; i < fields.length; ++i) { + const field = fields[i]; + + res.push([ + field.name, + field.columnType, + field.length, + field.schema, + field.table, + field.flags, + field.characterSet, + ]); + } + + return JSON.stringify(res, null, 0); +} + +function getParser(type, fields, options, config, compiler) { + const key = keyFromFields(type, fields, options, config); + let parser = parserCache.get(key); + + if (parser) { + return parser; + } + + parser = compiler(fields, options, config); + parserCache.set(key, parser); + return parser; +} + +function setMaxCache(max) { + parserCache.resize(max); +} + +function clearCache() { + parserCache.clear(); +} + +module.exports = { + getParser: getParser, + setMaxCache: setMaxCache, + clearCache: clearCache, + _keyFromFields: keyFromFields, +}; diff --git a/node_modules/mysql2/lib/parsers/static_binary_parser.js b/node_modules/mysql2/lib/parsers/static_binary_parser.js new file mode 100644 index 0000000..b83cb86 --- /dev/null +++ b/node_modules/mysql2/lib/parsers/static_binary_parser.js @@ -0,0 +1,211 @@ +'use strict'; + +const FieldFlags = require('../constants/field_flags.js'); +const Charsets = require('../constants/charsets.js'); +const Types = require('../constants/types.js'); +const helpers = require('../helpers'); + +const typeNames = []; +for (const t in Types) { + typeNames[Types[t]] = t; +} + +function getBinaryParser(fields, _options, config) { + function readCode(field, config, options, fieldNum, packet) { + const supportBigNumbers = Boolean( + options.supportBigNumbers || config.supportBigNumbers + ); + const bigNumberStrings = Boolean( + options.bigNumberStrings || config.bigNumberStrings + ); + const timezone = options.timezone || config.timezone; + const dateStrings = options.dateStrings || config.dateStrings; + const unsigned = field.flags & FieldFlags.UNSIGNED; + + switch (field.columnType) { + case Types.TINY: + return unsigned ? packet.readInt8() : packet.readSInt8(); + case Types.SHORT: + return unsigned ? packet.readInt16() : packet.readSInt16(); + case Types.LONG: + case Types.INT24: // in binary protocol int24 is encoded in 4 bytes int32 + return unsigned ? packet.readInt32() : packet.readSInt32(); + case Types.YEAR: + return packet.readInt16(); + case Types.FLOAT: + return packet.readFloat(); + case Types.DOUBLE: + return packet.readDouble(); + case Types.NULL: + return null; + case Types.DATE: + case Types.DATETIME: + case Types.TIMESTAMP: + case Types.NEWDATE: + return helpers.typeMatch(field.columnType, dateStrings, Types) + ? packet.readDateTimeString( + parseInt(field.decimals, 10), + null, + field.columnType + ) + : packet.readDateTime(timezone); + case Types.TIME: + return packet.readTimeString(); + case Types.DECIMAL: + case Types.NEWDECIMAL: + return config.decimalNumbers + ? packet.parseLengthCodedFloat() + : packet.readLengthCodedString('ascii'); + case Types.GEOMETRY: + return packet.parseGeometryValue(); + case Types.VECTOR: + return packet.parseVector(); + case Types.JSON: + // Since for JSON columns mysql always returns charset 63 (BINARY), + // we have to handle it according to JSON specs and use "utf8", + // see https://github.com/sidorares/node-mysql2/issues/409 + return config.jsonStrings + ? packet.readLengthCodedString('utf8') + : JSON.parse(packet.readLengthCodedString('utf8')); + case Types.LONGLONG: + if (!supportBigNumbers) + return unsigned + ? packet.readInt64JSNumber() + : packet.readSInt64JSNumber(); + return bigNumberStrings + ? unsigned + ? packet.readInt64String() + : packet.readSInt64String() + : unsigned + ? packet.readInt64() + : packet.readSInt64(); + default: + return field.characterSet === Charsets.BINARY + ? packet.readLengthCodedBuffer() + : packet.readLengthCodedString(fields[fieldNum].encoding); + } + } + + return class BinaryRow { + constructor() {} + + next(packet, fields, options) { + packet.readInt8(); // status byte + + const nullBitmapLength = Math.floor((fields.length + 7 + 2) / 8); + const nullBitmaskBytes = new Array(nullBitmapLength); + + for (let i = 0; i < nullBitmapLength; i++) { + nullBitmaskBytes[i] = packet.readInt8(); + } + + const result = options.rowsAsArray ? new Array(fields.length) : {}; + let currentFieldNullBit = 4; + let nullByteIndex = 0; + + for (let i = 0; i < fields.length; i++) { + const field = fields[i]; + const typeCast = + options.typeCast !== undefined ? options.typeCast : config.typeCast; + + let value; + if (nullBitmaskBytes[nullByteIndex] & currentFieldNullBit) { + value = null; + } else if (options.typeCast === false) { + value = packet.readLengthCodedBuffer(); + } else { + const next = () => readCode(field, config, options, i, packet); + value = + typeof typeCast === 'function' + ? typeCast( + { + type: typeNames[field.columnType], + length: field.columnLength, + db: field.schema, + table: field.table, + name: field.name, + string: function (encoding = field.encoding) { + if ( + field.columnType === Types.JSON && + encoding === field.encoding + ) { + // Since for JSON columns mysql always returns charset 63 (BINARY), + // we have to handle it according to JSON specs and use "utf8", + // see https://github.com/sidorares/node-mysql2/issues/1661 + console.warn( + `typeCast: JSON column "${field.name}" is interpreted as BINARY by default, recommended to manually set utf8 encoding: \`field.string("utf8")\`` + ); + } + + if ( + [ + Types.DATETIME, + Types.NEWDATE, + Types.TIMESTAMP, + Types.DATE, + ].includes(field.columnType) + ) { + return packet.readDateTimeString( + parseInt(field.decimals, 10) + ); + } + + if (field.columnType === Types.TINY) { + const unsigned = field.flags & FieldFlags.UNSIGNED; + + return String( + unsigned ? packet.readInt8() : packet.readSInt8() + ); + } + + if (field.columnType === Types.TIME) { + return packet.readTimeString(); + } + + return packet.readLengthCodedString(encoding); + }, + buffer: function () { + return packet.readLengthCodedBuffer(); + }, + geometry: function () { + return packet.parseGeometryValue(); + }, + }, + next + ) + : next(); + } + + if (options.rowsAsArray) { + result[i] = value; + } else if (typeof options.nestTables === 'string') { + const key = helpers.fieldEscape( + field.table + options.nestTables + field.name, + false + ); + result[key] = value; + } else if (options.nestTables === true) { + const tableName = helpers.fieldEscape(field.table, false); + if (!result[tableName]) { + result[tableName] = {}; + } + const fieldName = helpers.fieldEscape(field.name, false); + result[tableName][fieldName] = value; + } else { + const key = helpers.fieldEscape(field.name, false); + result[key] = value; + } + + currentFieldNullBit *= 2; + if (currentFieldNullBit === 0x100) { + currentFieldNullBit = 1; + nullByteIndex++; + } + } + + return result; + } + }; +} + +module.exports = getBinaryParser; diff --git a/node_modules/mysql2/lib/parsers/static_text_parser.js b/node_modules/mysql2/lib/parsers/static_text_parser.js new file mode 100644 index 0000000..69cc2a4 --- /dev/null +++ b/node_modules/mysql2/lib/parsers/static_text_parser.js @@ -0,0 +1,152 @@ +'use strict'; + +const Types = require('../constants/types.js'); +const Charsets = require('../constants/charsets.js'); +const helpers = require('../helpers'); + +const typeNames = []; +for (const t in Types) { + typeNames[Types[t]] = t; +} + +function readField({ packet, type, charset, encoding, config, options }) { + const supportBigNumbers = Boolean( + options.supportBigNumbers || config.supportBigNumbers + ); + const bigNumberStrings = Boolean( + options.bigNumberStrings || config.bigNumberStrings + ); + const timezone = options.timezone || config.timezone; + const dateStrings = options.dateStrings || config.dateStrings; + + switch (type) { + case Types.TINY: + case Types.SHORT: + case Types.LONG: + case Types.INT24: + case Types.YEAR: + return packet.parseLengthCodedIntNoBigCheck(); + case Types.LONGLONG: + if (supportBigNumbers && bigNumberStrings) { + return packet.parseLengthCodedIntString(); + } + return packet.parseLengthCodedInt(supportBigNumbers); + case Types.FLOAT: + case Types.DOUBLE: + return packet.parseLengthCodedFloat(); + case Types.NULL: + case Types.DECIMAL: + case Types.NEWDECIMAL: + if (config.decimalNumbers) { + return packet.parseLengthCodedFloat(); + } + return packet.readLengthCodedString('ascii'); + case Types.DATE: + if (helpers.typeMatch(type, dateStrings, Types)) { + return packet.readLengthCodedString('ascii'); + } + return packet.parseDate(timezone); + case Types.DATETIME: + case Types.TIMESTAMP: + if (helpers.typeMatch(type, dateStrings, Types)) { + return packet.readLengthCodedString('ascii'); + } + return packet.parseDateTime(timezone); + case Types.TIME: + return packet.readLengthCodedString('ascii'); + case Types.GEOMETRY: + return packet.parseGeometryValue(); + case Types.VECTOR: + return packet.parseVector(); + case Types.JSON: + // Since for JSON columns mysql always returns charset 63 (BINARY), + // we have to handle it according to JSON specs and use "utf8", + // see https://github.com/sidorares/node-mysql2/issues/409 + return config.jsonStrings + ? packet.readLengthCodedString('utf8') + : JSON.parse(packet.readLengthCodedString('utf8')); + default: + if (charset === Charsets.BINARY) { + return packet.readLengthCodedBuffer(); + } + return packet.readLengthCodedString(encoding); + } +} + +function createTypecastField(field, packet) { + return { + type: typeNames[field.columnType], + length: field.columnLength, + db: field.schema, + table: field.table, + name: field.name, + string: function (encoding = field.encoding) { + if (field.columnType === Types.JSON && encoding === field.encoding) { + // Since for JSON columns mysql always returns charset 63 (BINARY), + // we have to handle it according to JSON specs and use "utf8", + // see https://github.com/sidorares/node-mysql2/issues/1661 + console.warn( + `typeCast: JSON column "${field.name}" is interpreted as BINARY by default, recommended to manually set utf8 encoding: \`field.string("utf8")\`` + ); + } + return packet.readLengthCodedString(encoding); + }, + buffer: function () { + return packet.readLengthCodedBuffer(); + }, + geometry: function () { + return packet.parseGeometryValue(); + }, + }; +} + +function getTextParser(_fields, _options, config) { + return { + next(packet, fields, options) { + const result = options.rowsAsArray ? [] : {}; + for (let i = 0; i < fields.length; i++) { + const field = fields[i]; + const typeCast = options.typeCast ? options.typeCast : config.typeCast; + const next = () => + readField({ + packet, + type: field.columnType, + encoding: field.encoding, + charset: field.characterSet, + config, + options, + }); + + let value; + + if (options.typeCast === false) { + value = packet.readLengthCodedBuffer(); + } else if (typeof typeCast === 'function') { + value = typeCast(createTypecastField(field, packet), next); + } else { + value = next(); + } + + if (options.rowsAsArray) { + result.push(value); + } else if (typeof options.nestTables === 'string') { + result[ + `${helpers.fieldEscape(field.table, false)}${options.nestTables}${helpers.fieldEscape(field.name, false)}` + ] = value; + } else if (options.nestTables) { + const tableName = helpers.fieldEscape(field.table, false); + if (!result[tableName]) { + result[tableName] = {}; + } + result[tableName][helpers.fieldEscape(field.name, false)] = value; + } else { + result[helpers.fieldEscape(field.name, false)] = value; + } + } + + return result; + }, + }; +} + +module.exports = getTextParser; diff --git a/node_modules/mysql2/lib/parsers/string.js b/node_modules/mysql2/lib/parsers/string.js new file mode 100644 index 0000000..2368e50 --- /dev/null +++ b/node_modules/mysql2/lib/parsers/string.js @@ -0,0 +1,50 @@ +'use strict'; + +const Iconv = require('iconv-lite'); +const { createLRU } = require('lru.min'); + +const decoderCache = createLRU({ + max: 500, +}); + +exports.decode = function (buffer, encoding, start, end, options) { + if (Buffer.isEncoding(encoding)) { + return buffer.toString(encoding, start, end); + } + + // Optimize for common case: encoding="short_string", options=undefined. + let decoder; + if (!options) { + decoder = decoderCache.get(encoding); + if (!decoder) { + decoder = Iconv.getDecoder(encoding); + decoderCache.set(encoding, decoder); + } + } else { + const decoderArgs = { encoding, options }; + const decoderKey = JSON.stringify(decoderArgs); + decoder = decoderCache.get(decoderKey); + if (!decoder) { + decoder = Iconv.getDecoder(decoderArgs.encoding, decoderArgs.options); + decoderCache.set(decoderKey, decoder); + } + } + + const res = decoder.write(buffer.slice(start, end)); + const trail = decoder.end(); + + return trail ? res + trail : res; +}; + +exports.encode = function (string, encoding, options) { + if (Buffer.isEncoding(encoding)) { + return Buffer.from(string, encoding); + } + + const encoder = Iconv.getEncoder(encoding, options || {}); + + const res = encoder.write(string); + const trail = encoder.end(); + + return trail && trail.length > 0 ? Buffer.concat([res, trail]) : res; +}; diff --git a/node_modules/mysql2/lib/parsers/text_parser.js b/node_modules/mysql2/lib/parsers/text_parser.js new file mode 100644 index 0000000..69b7e21 --- /dev/null +++ b/node_modules/mysql2/lib/parsers/text_parser.js @@ -0,0 +1,214 @@ +'use strict'; + +const Types = require('../constants/types.js'); +const Charsets = require('../constants/charsets.js'); +const helpers = require('../helpers'); +const genFunc = require('generate-function'); +const parserCache = require('./parser_cache.js'); + +const typeNames = []; +for (const t in Types) { + typeNames[Types[t]] = t; +} + +function readCodeFor(type, charset, encodingExpr, config, options) { + const supportBigNumbers = Boolean( + options.supportBigNumbers || config.supportBigNumbers + ); + const bigNumberStrings = Boolean( + options.bigNumberStrings || config.bigNumberStrings + ); + const timezone = options.timezone || config.timezone; + const dateStrings = options.dateStrings || config.dateStrings; + + switch (type) { + case Types.TINY: + case Types.SHORT: + case Types.LONG: + case Types.INT24: + case Types.YEAR: + return 'packet.parseLengthCodedIntNoBigCheck()'; + case Types.LONGLONG: + if (supportBigNumbers && bigNumberStrings) { + return 'packet.parseLengthCodedIntString()'; + } + return `packet.parseLengthCodedInt(${supportBigNumbers})`; + case Types.FLOAT: + case Types.DOUBLE: + return 'packet.parseLengthCodedFloat()'; + case Types.NULL: + return 'packet.readLengthCodedNumber()'; + case Types.DECIMAL: + case Types.NEWDECIMAL: + if (config.decimalNumbers) { + return 'packet.parseLengthCodedFloat()'; + } + return 'packet.readLengthCodedString("ascii")'; + case Types.DATE: + if (helpers.typeMatch(type, dateStrings, Types)) { + return 'packet.readLengthCodedString("ascii")'; + } + return `packet.parseDate(${helpers.srcEscape(timezone)})`; + case Types.DATETIME: + case Types.TIMESTAMP: + if (helpers.typeMatch(type, dateStrings, Types)) { + return 'packet.readLengthCodedString("ascii")'; + } + return `packet.parseDateTime(${helpers.srcEscape(timezone)})`; + case Types.TIME: + return 'packet.readLengthCodedString("ascii")'; + case Types.GEOMETRY: + return 'packet.parseGeometryValue()'; + case Types.VECTOR: + return 'packet.parseVector()'; + case Types.JSON: + // Since for JSON columns mysql always returns charset 63 (BINARY), + // we have to handle it according to JSON specs and use "utf8", + // see https://github.com/sidorares/node-mysql2/issues/409 + return config.jsonStrings + ? 'packet.readLengthCodedString("utf8")' + : 'JSON.parse(packet.readLengthCodedString("utf8"))'; + default: + if (charset === Charsets.BINARY) { + return 'packet.readLengthCodedBuffer()'; + } + return `packet.readLengthCodedString(${encodingExpr})`; + } +} + +function compile(fields, options, config) { + // use global typeCast if current query doesn't specify one + if ( + typeof config.typeCast === 'function' && + typeof options.typeCast !== 'function' + ) { + options.typeCast = config.typeCast; + } + + function wrap(field, _this) { + return { + type: typeNames[field.columnType], + length: field.columnLength, + db: field.schema, + table: field.table, + name: field.name, + string: function (encoding = field.encoding) { + if (field.columnType === Types.JSON && encoding === field.encoding) { + // Since for JSON columns mysql always returns charset 63 (BINARY), + // we have to handle it according to JSON specs and use "utf8", + // see https://github.com/sidorares/node-mysql2/issues/1661 + console.warn( + `typeCast: JSON column "${field.name}" is interpreted as BINARY by default, recommended to manually set utf8 encoding: \`field.string("utf8")\`` + ); + } + + return _this.packet.readLengthCodedString(encoding); + }, + buffer: function () { + return _this.packet.readLengthCodedBuffer(); + }, + geometry: function () { + return _this.packet.parseGeometryValue(); + }, + }; + } + + const parserFn = genFunc(); + + parserFn('(function () {')('return class TextRow {'); + + // constructor method + parserFn('constructor(fields) {'); + // node-mysql typeCast compatibility wrapper + // see https://github.com/mysqljs/mysql/blob/96fdd0566b654436624e2375c7b6604b1f50f825/lib/protocol/packets/Field.js + if (typeof options.typeCast === 'function') { + parserFn('const _this = this;'); + parserFn('for(let i=0; i clusterIds[index++ % clusterIds.length]; + }, + RANDOM() { + return (clusterIds) => + clusterIds[Math.floor(Math.random() * clusterIds.length)]; + }, + ORDER() { + return (clusterIds) => clusterIds[0]; + }, +}; + +const getMonotonicMilliseconds = function () { + let ms; + + if (typeof process.hrtime === 'function') { + ms = process.hrtime(); + ms = ms[0] * 1e3 + ms[1] * 1e-6; + } else { + ms = process.uptime() * 1000; + } + + return Math.floor(ms); +}; + +const patternRegExp = function (pattern) { + if (pattern instanceof RegExp) { + return pattern; + } + + const source = pattern + .replace(/([.+?^=!:${}()|[\]/\\])/g, '\\$1') + .replace(/\*/g, '.*'); + + return new RegExp(`^${source}$`); +}; + +class PoolNamespace { + constructor(cluster, pattern, selector) { + this._cluster = cluster; + this._pattern = pattern; + this._selector = makeSelector[selector](); + } + + getConnection(cb) { + const clusterNode = this._getClusterNode(); + if (clusterNode === null) { + let err = new Error('Pool does Not exist.'); + err.code = 'POOL_NOEXIST'; + + if (this._cluster._findNodeIds(this._pattern, true).length !== 0) { + err = new Error('Pool does Not have online node.'); + err.code = 'POOL_NONEONLINE'; + } + + return cb(err); + } + return this._cluster._getConnection(clusterNode, (err, connection) => { + if (err) { + if ( + this._cluster._canRetry && + this._cluster._findNodeIds(this._pattern).length !== 0 + ) { + this._cluster.emit('warn', err); + return this.getConnection(cb); + } + + return cb(err); + } + return cb(null, connection); + }); + } + + /** + * pool cluster query + * @param {*} sql + * @param {*} values + * @param {*} cb + * @returns query + */ + query(sql, values, cb) { + const query = Connection.createQuery(sql, values, cb, {}); + this.getConnection((err, conn) => { + if (err) { + if (typeof query.onResult === 'function') { + query.onResult(err); + } else { + query.emit('error', err); + } + return; + } + try { + conn.query(query).once('end', () => { + conn.release(); + }); + } catch (e) { + conn.release(); + throw e; + } + }); + return query; + } + + /** + * pool cluster execute + * @param {*} sql + * @param {*} values + * @param {*} cb + */ + execute(sql, values, cb) { + if (typeof values === 'function') { + cb = values; + values = []; + } + this.getConnection((err, conn) => { + if (err) { + return cb(err); + } + try { + conn.execute(sql, values, cb).once('end', () => { + conn.release(); + }); + } catch (e) { + conn.release(); + throw e; + } + }); + } + + _getClusterNode() { + const foundNodeIds = this._cluster._findNodeIds(this._pattern); + if (foundNodeIds.length === 0) { + return null; + } + const nodeId = + foundNodeIds.length === 1 + ? foundNodeIds[0] + : this._selector(foundNodeIds); + return this._cluster._getNode(nodeId); + } +} + +class PoolCluster extends EventEmitter { + constructor(config) { + super(); + config = config || {}; + this._canRetry = + typeof config.canRetry === 'undefined' ? true : config.canRetry; + this._removeNodeErrorCount = config.removeNodeErrorCount || 5; + this._restoreNodeTimeout = config.restoreNodeTimeout || 0; + this._defaultSelector = config.defaultSelector || 'RR'; + this._closed = false; + this._lastId = 0; + this._nodes = {}; + this._serviceableNodeIds = []; + this._namespaces = {}; + this._findCaches = {}; + } + + of(pattern, selector) { + pattern = pattern || '*'; + selector = selector || this._defaultSelector; + selector = selector.toUpperCase(); + if (!makeSelector[selector] === 'undefined') { + selector = this._defaultSelector; + } + const key = pattern + selector; + if (typeof this._namespaces[key] === 'undefined') { + this._namespaces[key] = new PoolNamespace(this, pattern, selector); + } + return this._namespaces[key]; + } + + add(id, config) { + if (typeof id === 'object') { + config = id; + id = `CLUSTER::${++this._lastId}`; + } + if (typeof this._nodes[id] === 'undefined') { + this._nodes[id] = { + id: id, + errorCount: 0, + pool: new Pool({ config: new PoolConfig(config) }), + _offlineUntil: 0, + }; + this._serviceableNodeIds.push(id); + this._clearFindCaches(); + } + } + + remove(pattern) { + const foundNodeIds = this._findNodeIds(pattern, true); + + for (let i = 0; i < foundNodeIds.length; i++) { + const node = this._getNode(foundNodeIds[i]); + + if (node) { + this._removeNode(node); + } + } + } + + getConnection(pattern, selector, cb) { + let namespace; + if (typeof pattern === 'function') { + cb = pattern; + namespace = this.of(); + } else { + if (typeof selector === 'function') { + cb = selector; + selector = this._defaultSelector; + } + namespace = this.of(pattern, selector); + } + namespace.getConnection(cb); + } + + end(callback) { + const cb = + callback !== undefined + ? callback + : (err) => { + if (err) { + throw err; + } + }; + if (this._closed) { + process.nextTick(cb); + return; + } + + this._closed = true; + + let calledBack = false; + let waitingClose = 0; + const onEnd = (err) => { + if (!calledBack && (err || --waitingClose <= 0)) { + calledBack = true; + return cb(err); + } + }; + + for (const id in this._nodes) { + waitingClose++; + this._nodes[id].pool.end(onEnd); + } + + if (waitingClose === 0) { + process.nextTick(onEnd); + } + } + + _findNodeIds(pattern, includeOffline) { + let currentTime = 0; + let foundNodeIds = this._findCaches[pattern]; + + if (foundNodeIds === undefined) { + const expression = patternRegExp(pattern); + + foundNodeIds = this._serviceableNodeIds.filter((id) => + id.match(expression) + ); + } + + this._findCaches[pattern] = foundNodeIds; + + if (includeOffline) { + return foundNodeIds; + } + + return foundNodeIds.filter((nodeId) => { + const node = this._getNode(nodeId); + + if (!node._offlineUntil) { + return true; + } + + if (!currentTime) { + currentTime = getMonotonicMilliseconds(); + } + + return node._offlineUntil <= currentTime; + }); + } + + _getNode(id) { + return this._nodes[id] || null; + } + + _increaseErrorCount(node) { + const errorCount = ++node.errorCount; + + if (this._removeNodeErrorCount > errorCount) { + return; + } + + if (this._restoreNodeTimeout > 0) { + node._offlineUntil = + getMonotonicMilliseconds() + this._restoreNodeTimeout; + this.emit('offline', node.id); + return; + } + + this._removeNode(node); + this.emit('remove', node.id); + } + + _decreaseErrorCount(node) { + let errorCount = node.errorCount; + + if (errorCount > this._removeNodeErrorCount) { + errorCount = this._removeNodeErrorCount; + } + + if (errorCount < 1) { + errorCount = 1; + } + + node.errorCount = errorCount - 1; + + if (node._offlineUntil) { + node._offlineUntil = 0; + this.emit('online', node.id); + } + } + + _getConnection(node, cb) { + node.pool.getConnection((err, connection) => { + if (err) { + this._increaseErrorCount(node); + return cb(err); + } + this._decreaseErrorCount(node); + + connection._clusterId = node.id; + return cb(null, connection); + }); + } + + _removeNode(node) { + const index = this._serviceableNodeIds.indexOf(node.id); + if (index !== -1) { + this._serviceableNodeIds.splice(index, 1); + delete this._nodes[node.id]; + this._clearFindCaches(); + node.pool.end(); + } + } + + _clearFindCaches() { + this._findCaches = {}; + } +} + +module.exports = PoolCluster; diff --git a/node_modules/mysql2/lib/pool_config.js b/node_modules/mysql2/lib/pool_config.js new file mode 100644 index 0000000..0a4a260 --- /dev/null +++ b/node_modules/mysql2/lib/pool_config.js @@ -0,0 +1,30 @@ +'use strict'; + +const ConnectionConfig = require('./connection_config.js'); + +class PoolConfig { + constructor(options) { + if (typeof options === 'string') { + options = ConnectionConfig.parseUrl(options); + } + this.connectionConfig = new ConnectionConfig(options); + this.waitForConnections = + options.waitForConnections === undefined + ? true + : Boolean(options.waitForConnections); + this.connectionLimit = isNaN(options.connectionLimit) + ? 10 + : Number(options.connectionLimit); + this.maxIdle = isNaN(options.maxIdle) + ? this.connectionLimit + : Number(options.maxIdle); + this.idleTimeout = isNaN(options.idleTimeout) + ? 60000 + : Number(options.idleTimeout); + this.queueLimit = isNaN(options.queueLimit) + ? 0 + : Number(options.queueLimit); + } +} + +module.exports = PoolConfig; diff --git a/node_modules/mysql2/lib/pool_connection.js b/node_modules/mysql2/lib/pool_connection.js new file mode 100644 index 0000000..5cc94dc --- /dev/null +++ b/node_modules/mysql2/lib/pool_connection.js @@ -0,0 +1,12 @@ +'use strict'; + +const BasePoolConnection = require('./base/pool_connection.js'); + +class PoolConnection extends BasePoolConnection { + promise(promiseImpl) { + const PromisePoolConnection = require('./promise/pool_connection.js'); + return new PromisePoolConnection(this, promiseImpl); + } +} + +module.exports = PoolConnection; diff --git a/node_modules/mysql2/lib/promise/connection.js b/node_modules/mysql2/lib/promise/connection.js new file mode 100644 index 0000000..5a40545 --- /dev/null +++ b/node_modules/mysql2/lib/promise/connection.js @@ -0,0 +1,222 @@ +'use strict'; + +const EventEmitter = require('events').EventEmitter; +const PromisePreparedStatementInfo = require('./prepared_statement_info.js'); +const makeDoneCb = require('./make_done_cb.js'); +const inheritEvents = require('./inherit_events.js'); +const BaseConnection = require('../base/connection.js'); + +class PromiseConnection extends EventEmitter { + constructor(connection, promiseImpl) { + super(); + this.connection = connection; + this.Promise = promiseImpl || Promise; + inheritEvents(connection, this, [ + 'error', + 'drain', + 'connect', + 'end', + 'enqueue', + ]); + } + + release() { + this.connection.release(); + } + + query(query, params) { + const c = this.connection; + const localErr = new Error(); + if (typeof params === 'function') { + throw new Error( + 'Callback function is not available with promise clients.' + ); + } + return new this.Promise((resolve, reject) => { + const done = makeDoneCb(resolve, reject, localErr); + if (params !== undefined) { + c.query(query, params, done); + } else { + c.query(query, done); + } + }); + } + + execute(query, params) { + const c = this.connection; + const localErr = new Error(); + if (typeof params === 'function') { + throw new Error( + 'Callback function is not available with promise clients.' + ); + } + return new this.Promise((resolve, reject) => { + const done = makeDoneCb(resolve, reject, localErr); + if (params !== undefined) { + c.execute(query, params, done); + } else { + c.execute(query, done); + } + }); + } + + end() { + return new this.Promise((resolve) => { + this.connection.end(resolve); + }); + } + + beginTransaction() { + const c = this.connection; + const localErr = new Error(); + return new this.Promise((resolve, reject) => { + const done = makeDoneCb(resolve, reject, localErr); + c.beginTransaction(done); + }); + } + + commit() { + const c = this.connection; + const localErr = new Error(); + return new this.Promise((resolve, reject) => { + const done = makeDoneCb(resolve, reject, localErr); + c.commit(done); + }); + } + + rollback() { + const c = this.connection; + const localErr = new Error(); + return new this.Promise((resolve, reject) => { + const done = makeDoneCb(resolve, reject, localErr); + c.rollback(done); + }); + } + + ping() { + const c = this.connection; + const localErr = new Error(); + return new this.Promise((resolve, reject) => { + c.ping((err) => { + if (err) { + localErr.message = err.message; + localErr.code = err.code; + localErr.errno = err.errno; + localErr.sqlState = err.sqlState; + localErr.sqlMessage = err.sqlMessage; + reject(localErr); + } else { + resolve(true); + } + }); + }); + } + + connect() { + const c = this.connection; + const localErr = new Error(); + return new this.Promise((resolve, reject) => { + c.connect((err, param) => { + if (err) { + localErr.message = err.message; + localErr.code = err.code; + localErr.errno = err.errno; + localErr.sqlState = err.sqlState; + localErr.sqlMessage = err.sqlMessage; + reject(localErr); + } else { + resolve(param); + } + }); + }); + } + + prepare(options) { + const c = this.connection; + const promiseImpl = this.Promise; + const localErr = new Error(); + return new this.Promise((resolve, reject) => { + c.prepare(options, (err, statement) => { + if (err) { + localErr.message = err.message; + localErr.code = err.code; + localErr.errno = err.errno; + localErr.sqlState = err.sqlState; + localErr.sqlMessage = err.sqlMessage; + reject(localErr); + } else { + const wrappedStatement = new PromisePreparedStatementInfo( + statement, + promiseImpl + ); + resolve(wrappedStatement); + } + }); + }); + } + + changeUser(options) { + const c = this.connection; + const localErr = new Error(); + return new this.Promise((resolve, reject) => { + c.changeUser(options, (err) => { + if (err) { + localErr.message = err.message; + localErr.code = err.code; + localErr.errno = err.errno; + localErr.sqlState = err.sqlState; + localErr.sqlMessage = err.sqlMessage; + reject(localErr); + } else { + resolve(); + } + }); + }); + } + + get config() { + return this.connection.config; + } + + get threadId() { + return this.connection.threadId; + } +} +// patching PromiseConnection +// create facade functions for prototype functions on "Connection" that are not yet +// implemented with PromiseConnection + +// proxy synchronous functions only +(function (functionsToWrap) { + for (let i = 0; functionsToWrap && i < functionsToWrap.length; i++) { + const func = functionsToWrap[i]; + + if ( + typeof BaseConnection.prototype[func] === 'function' && + PromiseConnection.prototype[func] === undefined + ) { + PromiseConnection.prototype[func] = (function factory(funcName) { + return function () { + return BaseConnection.prototype[funcName].apply( + this.connection, + arguments + ); + }; + })(func); + } + } +})([ + // synchronous functions + 'close', + 'createBinlogStream', + 'destroy', + 'escape', + 'escapeId', + 'format', + 'pause', + 'pipe', + 'resume', + 'unprepare', +]); + +module.exports = PromiseConnection; diff --git a/node_modules/mysql2/lib/promise/inherit_events.js b/node_modules/mysql2/lib/promise/inherit_events.js new file mode 100644 index 0000000..4127acd --- /dev/null +++ b/node_modules/mysql2/lib/promise/inherit_events.js @@ -0,0 +1,27 @@ +'use strict'; + +function inheritEvents(source, target, events) { + const listeners = {}; + target + .on('newListener', (eventName) => { + if (events.indexOf(eventName) >= 0 && !target.listenerCount(eventName)) { + source.on( + eventName, + (listeners[eventName] = function () { + const args = [].slice.call(arguments); + args.unshift(eventName); + + target.emit.apply(target, args); + }) + ); + } + }) + .on('removeListener', (eventName) => { + if (events.indexOf(eventName) >= 0 && !target.listenerCount(eventName)) { + source.removeListener(eventName, listeners[eventName]); + delete listeners[eventName]; + } + }); +} + +module.exports = inheritEvents; diff --git a/node_modules/mysql2/lib/promise/make_done_cb.js b/node_modules/mysql2/lib/promise/make_done_cb.js new file mode 100644 index 0000000..124303f --- /dev/null +++ b/node_modules/mysql2/lib/promise/make_done_cb.js @@ -0,0 +1,19 @@ +'use strict'; + +function makeDoneCb(resolve, reject, localErr) { + return function (err, rows, fields) { + if (err) { + localErr.message = err.message; + localErr.code = err.code; + localErr.errno = err.errno; + localErr.sql = err.sql; + localErr.sqlState = err.sqlState; + localErr.sqlMessage = err.sqlMessage; + reject(localErr); + } else { + resolve([rows, fields]); + } + }; +} + +module.exports = makeDoneCb; diff --git a/node_modules/mysql2/lib/promise/pool.js b/node_modules/mysql2/lib/promise/pool.js new file mode 100644 index 0000000..0912c95 --- /dev/null +++ b/node_modules/mysql2/lib/promise/pool.js @@ -0,0 +1,112 @@ +'use strict'; + +const EventEmitter = require('events').EventEmitter; +const makeDoneCb = require('./make_done_cb.js'); +const PromisePoolConnection = require('./pool_connection.js'); +const inheritEvents = require('./inherit_events.js'); +const BasePool = require('../base/pool.js'); + +class PromisePool extends EventEmitter { + constructor(pool, thePromise) { + super(); + this.pool = pool; + this.Promise = thePromise || Promise; + inheritEvents(pool, this, ['acquire', 'connection', 'enqueue', 'release']); + } + + getConnection() { + const corePool = this.pool; + return new this.Promise((resolve, reject) => { + corePool.getConnection((err, coreConnection) => { + if (err) { + reject(err); + } else { + resolve(new PromisePoolConnection(coreConnection, this.Promise)); + } + }); + }); + } + + releaseConnection(connection) { + if (connection instanceof PromisePoolConnection) connection.release(); + } + + query(sql, args) { + const corePool = this.pool; + const localErr = new Error(); + if (typeof args === 'function') { + throw new Error( + 'Callback function is not available with promise clients.' + ); + } + return new this.Promise((resolve, reject) => { + const done = makeDoneCb(resolve, reject, localErr); + if (args !== undefined) { + corePool.query(sql, args, done); + } else { + corePool.query(sql, done); + } + }); + } + + execute(sql, args) { + const corePool = this.pool; + const localErr = new Error(); + if (typeof args === 'function') { + throw new Error( + 'Callback function is not available with promise clients.' + ); + } + return new this.Promise((resolve, reject) => { + const done = makeDoneCb(resolve, reject, localErr); + if (args) { + corePool.execute(sql, args, done); + } else { + corePool.execute(sql, done); + } + }); + } + + end() { + const corePool = this.pool; + const localErr = new Error(); + return new this.Promise((resolve, reject) => { + corePool.end((err) => { + if (err) { + localErr.message = err.message; + localErr.code = err.code; + localErr.errno = err.errno; + localErr.sqlState = err.sqlState; + localErr.sqlMessage = err.sqlMessage; + reject(localErr); + } else { + resolve(); + } + }); + }); + } +} + +(function (functionsToWrap) { + for (let i = 0; functionsToWrap && i < functionsToWrap.length; i++) { + const func = functionsToWrap[i]; + + if ( + typeof BasePool.prototype[func] === 'function' && + PromisePool.prototype[func] === undefined + ) { + PromisePool.prototype[func] = (function factory(funcName) { + return function () { + return BasePool.prototype[funcName].apply(this.pool, arguments); + }; + })(func); + } + } +})([ + // synchronous functions + 'escape', + 'escapeId', + 'format', +]); + +module.exports = PromisePool; diff --git a/node_modules/mysql2/lib/promise/pool_cluster.js b/node_modules/mysql2/lib/promise/pool_cluster.js new file mode 100644 index 0000000..0422ce7 --- /dev/null +++ b/node_modules/mysql2/lib/promise/pool_cluster.js @@ -0,0 +1,54 @@ +'use strict'; + +const PromisePoolConnection = require('./pool_connection'); +const makeDoneCb = require('./make_done_cb'); + +class PromisePoolNamespace { + constructor(poolNamespace, thePromise) { + this.poolNamespace = poolNamespace; + this.Promise = thePromise || Promise; + } + + getConnection() { + const corePoolNamespace = this.poolNamespace; + return new this.Promise((resolve, reject) => { + corePoolNamespace.getConnection((err, coreConnection) => { + if (err) { + reject(err); + } else { + resolve(new PromisePoolConnection(coreConnection, this.Promise)); + } + }); + }); + } + + query(sql, values) { + const corePoolNamespace = this.poolNamespace; + const localErr = new Error(); + if (typeof values === 'function') { + throw new Error( + 'Callback function is not available with promise clients.' + ); + } + return new this.Promise((resolve, reject) => { + const done = makeDoneCb(resolve, reject, localErr); + corePoolNamespace.query(sql, values, done); + }); + } + + execute(sql, values) { + const corePoolNamespace = this.poolNamespace; + const localErr = new Error(); + if (typeof values === 'function') { + throw new Error( + 'Callback function is not available with promise clients.' + ); + } + return new this.Promise((resolve, reject) => { + const done = makeDoneCb(resolve, reject, localErr); + corePoolNamespace.execute(sql, values, done); + }); + } +} + +module.exports = PromisePoolNamespace; diff --git a/node_modules/mysql2/lib/promise/pool_connection.js b/node_modules/mysql2/lib/promise/pool_connection.js new file mode 100644 index 0000000..05f85ed --- /dev/null +++ b/node_modules/mysql2/lib/promise/pool_connection.js @@ -0,0 +1,19 @@ +'use strict'; + +const PromiseConnection = require('./connection.js'); +const BasePoolConnection = require('../base/pool_connection.js'); + +class PromisePoolConnection extends PromiseConnection { + constructor(connection, promiseImpl) { + super(connection, promiseImpl); + } + + destroy() { + return BasePoolConnection.prototype.destroy.apply( + this.connection, + arguments + ); + } +} + +module.exports = PromisePoolConnection; diff --git a/node_modules/mysql2/lib/promise/prepared_statement_info.js b/node_modules/mysql2/lib/promise/prepared_statement_info.js new file mode 100644 index 0000000..47b9bed --- /dev/null +++ b/node_modules/mysql2/lib/promise/prepared_statement_info.js @@ -0,0 +1,32 @@ +'use strict'; + +const makeDoneCb = require('./make_done_cb.js'); + +class PromisePreparedStatementInfo { + constructor(statement, promiseImpl) { + this.statement = statement; + this.Promise = promiseImpl; + } + + execute(parameters) { + const s = this.statement; + const localErr = new Error(); + return new this.Promise((resolve, reject) => { + const done = makeDoneCb(resolve, reject, localErr); + if (parameters) { + s.execute(parameters, done); + } else { + s.execute(done); + } + }); + } + + close() { + return new this.Promise((resolve) => { + this.statement.close(); + resolve(); + }); + } +} + +module.exports = PromisePreparedStatementInfo; diff --git a/node_modules/mysql2/lib/results_stream.js b/node_modules/mysql2/lib/results_stream.js new file mode 100644 index 0000000..7f451fe --- /dev/null +++ b/node_modules/mysql2/lib/results_stream.js @@ -0,0 +1,38 @@ +'use strict'; + +const Readable = require('stream').Readable; + +// copy-paste from https://github.com/mysqljs/mysql/blob/master/lib/protocol/sequences/Query.js +module.exports = function (command, connectionStream) { + command.stream = function (options) { + let stream; + + options = options || {}; + options.objectMode = true; + (stream = new Readable(options)), + (stream._read = function () { + connectionStream.resume(); + }); + + this.on('result', (row, i) => { + if (!stream.push(row)) { + connectionStream.pause(); + } + stream.emit('result', row, i); // replicate old emitter + }); + + this.on('error', (err) => { + stream.emit('error', err); // Pass on any errors + }); + + this.on('end', () => { + stream.push(null); // pushing null, indicating EOF + }); + + this.on('fields', (fields, i) => { + stream.emit('fields', fields, i); // replicate old emitter + }); + + return stream; + }; +}; diff --git a/node_modules/mysql2/lib/server.js b/node_modules/mysql2/lib/server.js new file mode 100644 index 0000000..e0633e8 --- /dev/null +++ b/node_modules/mysql2/lib/server.js @@ -0,0 +1,37 @@ +'use strict'; + +const net = require('net'); +const EventEmitter = require('events').EventEmitter; + +const Connection = require('./connection'); +const ConnectionConfig = require('./connection_config'); + +// TODO: inherit Server from net.Server +class Server extends EventEmitter { + constructor() { + super(); + this.connections = []; + this._server = net.createServer(this._handleConnection.bind(this)); + } + + _handleConnection(socket) { + const connectionConfig = new ConnectionConfig({ + stream: socket, + isServer: true, + }); + const connection = new Connection({ config: connectionConfig }); + this.emit('connection', connection); + } + + listen(port) { + this._port = port; + this._server.listen.apply(this._server, arguments); + return this; + } + + close(cb) { + this._server.close(cb); + } +} + +module.exports = Server; diff --git a/node_modules/mysql2/package.json b/node_modules/mysql2/package.json new file mode 100644 index 0000000..f4755ed --- /dev/null +++ b/node_modules/mysql2/package.json @@ -0,0 +1,80 @@ +{ + "name": "mysql2", + "version": "3.14.1", + "description": "fast mysql driver. Implements core protocol, prepared statements, ssl and compression in native JS", + "main": "index.js", + "typings": "typings/mysql/index", + "type": "commonjs", + "scripts": { + "lint": "eslint . && prettier --check .", + "lint:fix": "eslint . --fix && prettier --write .", + "test": "poku -d -r=verbose --sequential test/esm test/unit test/integration", + "test:bun": "bun poku -d --sequential test/esm test/unit test/integration", + "test:deno": "deno run --allow-read --allow-env --allow-run npm:poku -d --sequential --denoAllow=\"read,env,net,sys\" test/esm test/unit test/integration", + "test:tsc-build": "cd \"test/tsc-build\" && npx tsc -p \"tsconfig.json\"", + "coverage-test": "c8 npm run test", + "benchmark": "node ./benchmarks/benchmark.js", + "wait-port": "wait-on" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/sidorares/node-mysql2.git" + }, + "homepage": "https://sidorares.github.io/node-mysql2/docs", + "keywords": [ + "mysql", + "client", + "server" + ], + "files": [ + "lib", + "typings/mysql", + "index.js", + "index.d.ts", + "promise.js", + "promise.d.ts" + ], + "exports": { + ".": "./index.js", + "./package.json": "./package.json", + "./promise": "./promise.js", + "./promise.js": "./promise.js" + }, + "engines": { + "node": ">= 8.0" + }, + "author": "Andrey Sidorov ", + "license": "MIT", + "dependencies": { + "aws-ssl-profiles": "^1.1.1", + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^5.2.1", + "lru.min": "^1.0.0", + "named-placeholders": "^1.1.3", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "devDependencies": { + "@eslint/eslintrc": "^3.3.0", + "@eslint/js": "^9.21.0", + "@eslint/markdown": "^6.2.2", + "@types/node": "^22.0.0", + "@typescript-eslint/eslint-plugin": "^8.26.0", + "@typescript-eslint/parser": "^8.26.0", + "assert-diff": "^3.0.2", + "benchmark": "^2.1.4", + "c8": "^10.1.1", + "error-stack-parser": "^2.0.3", + "eslint-config-prettier": "^10.0.2", + "eslint-plugin-async-await": "^0.0.0", + "eslint-plugin-markdown": "^5.1.0", + "eslint-plugin-prettier": "^5.2.3", + "globals": "^16.0.0", + "poku": "^3.0.0", + "portfinder": "^1.0.28", + "prettier": "^3.0.0", + "typescript": "^5.0.2" + } +} diff --git a/node_modules/mysql2/promise.d.ts b/node_modules/mysql2/promise.d.ts new file mode 100644 index 0000000..4afb6a7 --- /dev/null +++ b/node_modules/mysql2/promise.d.ts @@ -0,0 +1,131 @@ +import { EventEmitter } from 'events'; + +import { + RowDataPacket, + OkPacket, + ResultSetHeader, + FieldPacket, + QueryOptions, + ConnectionOptions, + PoolOptions, + PoolClusterOptions, + Pool as CorePool, +} from './index.js'; +import { ExecutableBase as ExecutableBaseClass } from './typings/mysql/lib/protocol/sequences/promise/ExecutableBase.js'; +import { QueryableBase as QueryableBaseClass } from './typings/mysql/lib/protocol/sequences/promise/QueryableBase.js'; + +export * from './index.js'; + +// Expose class interfaces +declare class QueryableAndExecutableBase extends QueryableBaseClass( + ExecutableBaseClass(EventEmitter) +) {} + +export interface PreparedStatementInfo { + close(): Promise; + execute( + parameters: any | any[] | { [param: string]: any } + ): Promise< + [ + ( + | RowDataPacket[][] + | RowDataPacket[] + | OkPacket + | OkPacket[] + | ResultSetHeader + ), + FieldPacket[], + ] + >; +} + +export interface Connection extends QueryableAndExecutableBase { + config: ConnectionOptions; + + threadId: number; + + connect(): Promise; + + ping(): Promise; + + beginTransaction(): Promise; + + commit(): Promise; + + rollback(): Promise; + + changeUser(options: ConnectionOptions): Promise; + + prepare(options: string | QueryOptions): Promise; + + unprepare(sql: string | QueryOptions): void; + + end(options?: any): Promise; + + destroy(): void; + + pause(): void; + + resume(): void; + + escape(value: any): string; + + escapeId(value: string): string; + escapeId(values: string[]): string; + + format(sql: string, values?: any | any[] | { [param: string]: any }): string; +} + +export interface PoolConnection extends Connection { + release(): void; + connection: Connection; +} + +export interface Pool extends Connection { + getConnection(): Promise; + + releaseConnection(connection: PoolConnection): void; + + on(event: 'connection', listener: (connection: PoolConnection) => any): this; + on(event: 'acquire', listener: (connection: PoolConnection) => any): this; + on(event: 'release', listener: (connection: PoolConnection) => any): this; + on(event: 'enqueue', listener: () => any): this; + + end(): Promise; + + pool: CorePool; +} + +export interface PoolNamespace extends QueryableAndExecutableBase { + getConnection(): Promise; +} + +export interface PoolCluster extends EventEmitter { + config: PoolClusterOptions; + + add(config: PoolOptions): void; + add(group: string, connectionUri: string): void; + add(group: string, config: PoolOptions): void; + + end(): Promise; + + getConnection(): Promise; + getConnection(group: string): Promise; + getConnection(group: string, selector: string): Promise; + + of(pattern: string, selector?: string): PoolNamespace; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: 'remove', listener: (nodeId: number) => void): this; + on(event: 'warn', listener: (err: Error) => void): this; +} + +export function createConnection(connectionUri: string): Promise; +export function createConnection( + config: ConnectionOptions +): Promise; + +export function createPool(connectionUri: string): Pool; +export function createPool(config: PoolOptions): Pool; + +export function createPoolCluster(config?: PoolClusterOptions): PoolCluster; diff --git a/node_modules/mysql2/promise.js b/node_modules/mysql2/promise.js new file mode 100644 index 0000000..5095738 --- /dev/null +++ b/node_modules/mysql2/promise.js @@ -0,0 +1,202 @@ +'use strict'; + +const SqlString = require('sqlstring'); +const EventEmitter = require('events').EventEmitter; +const parserCache = require('./lib/parsers/parser_cache.js'); +const PoolCluster = require('./lib/pool_cluster.js'); +const createConnection = require('./lib/create_connection.js'); +const createPool = require('./lib/create_pool.js'); +const createPoolCluster = require('./lib/create_pool_cluster.js'); +const PromiseConnection = require('./lib/promise/connection.js'); +const PromisePool = require('./lib/promise/pool.js'); +const makeDoneCb = require('./lib/promise/make_done_cb.js'); +const PromisePoolConnection = require('./lib/promise/pool_connection.js'); +const inheritEvents = require('./lib/promise/inherit_events.js'); +const PromisePoolNamespace = require('./lib/promise/pool_cluster'); + +function createConnectionPromise(opts) { + const coreConnection = createConnection(opts); + const createConnectionErr = new Error(); + const thePromise = opts.Promise || Promise; + if (!thePromise) { + throw new Error( + 'no Promise implementation available.' + + 'Use promise-enabled node version or pass userland Promise' + + " implementation as parameter, for example: { Promise: require('bluebird') }" + ); + } + return new thePromise((resolve, reject) => { + coreConnection.once('connect', () => { + resolve(new PromiseConnection(coreConnection, thePromise)); + }); + coreConnection.once('error', (err) => { + createConnectionErr.message = err.message; + createConnectionErr.code = err.code; + createConnectionErr.errno = err.errno; + createConnectionErr.sqlState = err.sqlState; + reject(createConnectionErr); + }); + }); +} + +// note: the callback of "changeUser" is not called on success +// hence there is no possibility to call "resolve" + +function createPromisePool(opts) { + const corePool = createPool(opts); + const thePromise = opts.Promise || Promise; + if (!thePromise) { + throw new Error( + 'no Promise implementation available.' + + 'Use promise-enabled node version or pass userland Promise' + + " implementation as parameter, for example: { Promise: require('bluebird') }" + ); + } + + return new PromisePool(corePool, thePromise); +} + +class PromisePoolCluster extends EventEmitter { + constructor(poolCluster, thePromise) { + super(); + this.poolCluster = poolCluster; + this.Promise = thePromise || Promise; + inheritEvents(poolCluster, this, ['warn', 'remove', 'online', 'offline']); + } + + getConnection(pattern, selector) { + const corePoolCluster = this.poolCluster; + return new this.Promise((resolve, reject) => { + corePoolCluster.getConnection( + pattern, + selector, + (err, coreConnection) => { + if (err) { + reject(err); + } else { + resolve(new PromisePoolConnection(coreConnection, this.Promise)); + } + } + ); + }); + } + + query(sql, args) { + const corePoolCluster = this.poolCluster; + const localErr = new Error(); + if (typeof args === 'function') { + throw new Error( + 'Callback function is not available with promise clients.' + ); + } + return new this.Promise((resolve, reject) => { + const done = makeDoneCb(resolve, reject, localErr); + corePoolCluster.query(sql, args, done); + }); + } + + execute(sql, args) { + const corePoolCluster = this.poolCluster; + const localErr = new Error(); + if (typeof args === 'function') { + throw new Error( + 'Callback function is not available with promise clients.' + ); + } + return new this.Promise((resolve, reject) => { + const done = makeDoneCb(resolve, reject, localErr); + corePoolCluster.execute(sql, args, done); + }); + } + + of(pattern, selector) { + return new PromisePoolNamespace( + this.poolCluster.of(pattern, selector), + this.Promise + ); + } + + end() { + const corePoolCluster = this.poolCluster; + const localErr = new Error(); + return new this.Promise((resolve, reject) => { + corePoolCluster.end((err) => { + if (err) { + localErr.message = err.message; + localErr.code = err.code; + localErr.errno = err.errno; + localErr.sqlState = err.sqlState; + localErr.sqlMessage = err.sqlMessage; + reject(localErr); + } else { + resolve(); + } + }); + }); + } +} + +/** + * proxy poolCluster synchronous functions + */ +(function (functionsToWrap) { + for (let i = 0; functionsToWrap && i < functionsToWrap.length; i++) { + const func = functionsToWrap[i]; + + if ( + typeof PoolCluster.prototype[func] === 'function' && + PromisePoolCluster.prototype[func] === undefined + ) { + PromisePoolCluster.prototype[func] = (function factory(funcName) { + return function () { + return PoolCluster.prototype[funcName].apply( + this.poolCluster, + arguments + ); + }; + })(func); + } + } +})(['add', 'remove']); + +function createPromisePoolCluster(opts) { + const corePoolCluster = createPoolCluster(opts); + const thePromise = (opts && opts.Promise) || Promise; + if (!thePromise) { + throw new Error( + 'no Promise implementation available.' + + 'Use promise-enabled node version or pass userland Promise' + + " implementation as parameter, for example: { Promise: require('bluebird') }" + ); + } + return new PromisePoolCluster(corePoolCluster, thePromise); +} + +exports.createConnection = createConnectionPromise; +exports.createPool = createPromisePool; +exports.createPoolCluster = createPromisePoolCluster; +exports.escape = SqlString.escape; +exports.escapeId = SqlString.escapeId; +exports.format = SqlString.format; +exports.raw = SqlString.raw; +exports.PromisePool = PromisePool; +exports.PromiseConnection = PromiseConnection; +exports.PromisePoolConnection = PromisePoolConnection; + +exports.__defineGetter__('Types', () => require('./lib/constants/types.js')); + +exports.__defineGetter__('Charsets', () => + require('./lib/constants/charsets.js') +); + +exports.__defineGetter__('CharsetToEncoding', () => + require('./lib/constants/charset_encodings.js') +); + +exports.setMaxParserCache = function (max) { + parserCache.setMaxCache(max); +}; + +exports.clearParserCache = function () { + parserCache.clearCache(); +}; diff --git a/node_modules/mysql2/typings/mysql/LICENSE.txt b/node_modules/mysql2/typings/mysql/LICENSE.txt new file mode 100644 index 0000000..fc35417 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/LICENSE.txt @@ -0,0 +1,15 @@ +ISC License + +Copyright (c) 2016, Felix Frederick Becker + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/node_modules/mysql2/typings/mysql/index.d.ts b/node_modules/mysql2/typings/mysql/index.d.ts new file mode 100644 index 0000000..a402c36 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/index.d.ts @@ -0,0 +1,95 @@ +/** + * sqlstring types are based on https://www.npmjs.com/package/@types/sqlstring, version 2.3.2 + */ +import { Pool as BasePool, PoolOptions } from './lib/Pool.js'; +import { + Connection as BaseConnection, + ConnectionOptions, + SslOptions, +} from './lib/Connection.js'; +import { + Query as BaseQuery, + QueryOptions, + QueryError, +} from './lib/protocol/sequences/Query.js'; +import { + PoolCluster as BasePoolCluster, + PoolClusterOptions, + PoolNamespace, +} from './lib/PoolCluster.js'; +import { PoolConnection as BasePoolConnection } from './lib/PoolConnection.js'; +import { + Prepare as BasePrepare, + PrepareStatementInfo, +} from './lib/protocol/sequences/Prepare.js'; +import { Server } from './lib/Server.js'; + +export { + ConnectionOptions, + SslOptions, + PoolOptions, + PoolClusterOptions, + PoolNamespace, + QueryOptions, + QueryError, + PrepareStatementInfo, +}; + +export * from './lib/protocol/packets/index.js'; +export * from './lib/Auth.js'; +export * from './lib/constants/index.js'; +export * from './lib/parsers/index.js'; + +// Expose class interfaces +export interface Connection extends BaseConnection {} +export interface Pool extends BasePool {} +export interface PoolConnection extends BasePoolConnection {} +export interface PoolCluster extends BasePoolCluster {} +export interface Query extends BaseQuery {} +export interface Prepare extends BasePrepare {} + +export function createConnection(connectionUri: string): BaseConnection; +export function createConnection(config: ConnectionOptions): BaseConnection; + +export function createPool(connectionUri: string): BasePool; +export function createPool(config: PoolOptions): BasePool; + +export function createPoolCluster(config?: PoolClusterOptions): PoolCluster; + +type TimeZone = 'local' | 'Z' | (string & NonNullable); +export function escape( + value: any, + stringifyObjects?: boolean, + timeZone?: TimeZone +): string; + +export function escapeId(value: any, forbidQualified?: boolean): string; + +export function format(sql: string): string; +export function format( + sql: string, + values: any | any[], + stringifyObjects?: boolean, + timeZone?: TimeZone +): string; + +export function raw(sql: string): { + toSqlString: () => string; +}; + +export interface ConnectionConfig extends ConnectionOptions { + mergeFlags(defaultFlags: string[], userFlags: string[] | string): number; + getDefaultFlags(options?: ConnectionOptions): string[]; + getCharsetNumber(charset: string): number; + getSSLProfile(name: string): { ca: string[] }; + parseUrl(url: string): { + host: string; + port: number; + database: string; + user: string; + password: string; + [key: string]: any; + }; +} + +export function createServer(handler: (conn: BaseConnection) => any): Server; diff --git a/node_modules/mysql2/typings/mysql/info.txt b/node_modules/mysql2/typings/mysql/info.txt new file mode 100644 index 0000000..8ee9419 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/info.txt @@ -0,0 +1 @@ +temporary workaround, see https://github.com/sidorares/node-mysql2/issues/1210 diff --git a/node_modules/mysql2/typings/mysql/lib/Auth.d.ts b/node_modules/mysql2/typings/mysql/lib/Auth.d.ts new file mode 100644 index 0000000..c2adc98 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/Auth.d.ts @@ -0,0 +1,30 @@ +import { RsaPublicKey, RsaPrivateKey, KeyLike } from 'crypto'; +import { Connection } from './Connection.js'; + +export type AuthPlugin = (pluginMetadata: { + connection: Connection; + command: string; +}) => ( + pluginData: Buffer +) => Promise | string | Buffer | Promise | null; + +type AuthPluginDefinition = (pluginOptions?: T) => AuthPlugin; + +export const authPlugins: { + caching_sha2_password: AuthPluginDefinition<{ + overrideIsSecure?: boolean; + serverPublicKey?: RsaPublicKey | RsaPrivateKey | KeyLike; + onServerPublicKey?: (data: Buffer) => void; + }>; + mysql_clear_password: AuthPluginDefinition<{ + password?: string; + }>; + mysql_native_password: AuthPluginDefinition<{ + password?: string; + passwordSha1?: string; + }>; + sha256_password: AuthPluginDefinition<{ + serverPublicKey?: RsaPublicKey | RsaPrivateKey | KeyLike; + onServerPublicKey?: (data: Buffer) => void; + }>; +}; diff --git a/node_modules/mysql2/typings/mysql/lib/Connection.d.ts b/node_modules/mysql2/typings/mysql/lib/Connection.d.ts new file mode 100644 index 0000000..dffc2a8 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/Connection.d.ts @@ -0,0 +1,428 @@ +// This file was modified by Oracle on November 04, 2021. +// Type definitions and corresponding descriptions were introduced for the +// connection options relevant for multifactor authentication. +// Modifications copyright (c) 2021, Oracle and/or its affiliates. + +import { EventEmitter } from 'events'; +import { Readable } from 'stream'; +import { Query, QueryError } from './protocol/sequences/Query.js'; +import { Prepare, PrepareStatementInfo } from './protocol/sequences/Prepare.js'; +import { + OkPacket, + FieldPacket, + RowDataPacket, + ResultSetHeader, + OkPacketParams, + ErrorPacketParams, +} from './protocol/packets/index.js'; +import { Connection as PromiseConnection } from '../../../promise.js'; +import { AuthPlugin } from './Auth.js'; +import { QueryableBase } from './protocol/sequences/QueryableBase.js'; +import { ExecutableBase } from './protocol/sequences/ExecutableBase.js'; +import { TypeCast } from './parsers/typeCast.js'; + +export interface SslOptions { + /** + * A string or buffer holding the PFX or PKCS12 encoded private key, certificate and CA certificates + */ + pfx?: string; + + /** + * Either a string/buffer or list of strings/Buffers holding the PEM encoded private key(s) to use + */ + key?: string | string[] | Buffer | Buffer[]; + + /** + * A string of passphrase for the private key or pfx + */ + passphrase?: string; + + /** + * A string/buffer or list of strings/Buffers holding the PEM encoded certificate(s) + */ + cert?: string | string[] | Buffer | Buffer[]; + + /** + * Either a string/Buffer or list of strings/Buffers of PEM encoded CA certificates to trust. + */ + ca?: string | string[] | Buffer | Buffer[]; + + /** + * Either a string or list of strings of PEM encoded CRLs (Certificate Revocation List) + */ + crl?: string | string[]; + + /** + * A string describing the ciphers to use or exclude + */ + ciphers?: string; + + /** + * You can also connect to a MySQL server without properly providing the appropriate CA to trust. You should not do this. + */ + rejectUnauthorized?: boolean; + + /** + * Configure the minimum supported version of SSL, the default is TLSv1.2. + */ + minVersion?: string; + + /** + * Configure the maximum supported version of SSL, the default is TLSv1.3. + */ + maxVersion?: string; + + /** + * You can verify the server name identity presented on the server certificate when connecting to a MySQL server. + * You should enable this but it is disabled by default right now for backwards compatibility. + */ + verifyIdentity?: boolean; +} + +export interface ConnectionOptions { + /** + * DECIMAL and NEWDECIMAL types will be returned as numbers if this option is set to `true` ( default: `false`). + */ + decimalNumbers?: boolean; + + /** + * The MySQL user to authenticate as + */ + user?: string; + + /** + * The password of that MySQL user + */ + password?: string; + + /** + * Alias for the MySQL user password. Makes a bit more sense in a multifactor authentication setup (see + * "password2" and "password3") + */ + password1?: string; + + /** + * 2nd factor authentication password. Mandatory when the authentication policy for the MySQL user account + * requires an additional authentication method that needs a password. + * https://dev.mysql.com/doc/refman/8.0/en/multifactor-authentication.html + */ + password2?: string; + + /** + * 3rd factor authentication password. Mandatory when the authentication policy for the MySQL user account + * requires two additional authentication methods and the last one needs a password. + * https://dev.mysql.com/doc/refman/8.0/en/multifactor-authentication.html + */ + password3?: string; + + /** + * Name of the database to use for this connection + */ + database?: string; + + /** + * The charset for the connection. This is called 'collation' in the SQL-level of MySQL (like utf8_general_ci). + * If a SQL-level charset is specified (like utf8mb4) then the default collation for that charset is used. + * (Default: 'UTF8_GENERAL_CI') + */ + charset?: string; + + /** + * The hostname of the database you are connecting to. (Default: localhost) + */ + host?: string; + + /** + * The port number to connect to. (Default: 3306) + */ + port?: number; + + /** + * The source IP address to use for TCP connection + */ + localAddress?: string; + + /** + * The path to a unix domain socket to connect to. When used host and port are ignored + */ + socketPath?: string; + + /** + * The timezone used to store local dates. (Default: 'local') + */ + timezone?: string | 'local'; + + /** + * The milliseconds before a timeout occurs during the initial connection to the MySQL server. (Default: 10 seconds) + */ + connectTimeout?: number; + + /** + * Stringify objects instead of converting to values. (Default: 'false') + */ + stringifyObjects?: boolean; + + /** + * Allow connecting to MySQL instances that ask for the old (insecure) authentication method. (Default: false) + */ + insecureAuth?: boolean; + + /** + * By specifying a function that returns a readable stream, an arbitrary stream can be sent when sending a local fs file. + */ + infileStreamFactory?: (path: string) => Readable; + + /** + * Determines if column values should be converted to native JavaScript types. + * + * @default true + * + * It is not recommended (and may go away / change in the future) to disable type casting, but you can currently do so on either the connection or query level. + * + * --- + * + * You can also specify a function to do the type casting yourself: + * ```ts + * (field: Field, next: () => unknown) => { + * return next(); + * } + * ``` + * + * --- + * + * **WARNING:** + * + * YOU MUST INVOKE the parser using one of these three field functions in your custom typeCast callback. They can only be called once: + * + * ```js + * field.string(); + * field.buffer(); + * field.geometry(); + * ``` + + * Which are aliases for: + * + * ```js + * parser.parseLengthCodedString(); + * parser.parseLengthCodedBuffer(); + * parser.parseGeometryValue(); + * ``` + * + * You can find which field function you need to use by looking at `RowDataPacket.prototype._typeCast`. + */ + typeCast?: TypeCast; + + /** + * A custom query format function + */ + queryFormat?: (query: string, values: any) => void; + + /** + * When dealing with big numbers (BIGINT and DECIMAL columns) in the database, you should enable this option + * (Default: false) + */ + supportBigNumbers?: boolean; + + /** + * Enabling both supportBigNumbers and bigNumberStrings forces big numbers (BIGINT and DECIMAL columns) to be + * always returned as JavaScript String objects (Default: false). Enabling supportBigNumbers but leaving + * bigNumberStrings disabled will return big numbers as String objects only when they cannot be accurately + * represented with [JavaScript Number objects](https://262.ecma-international.org/5.1/#sec-8.5) + * (which happens when they exceed the [-2^53, +2^53] range), otherwise they will be returned as Number objects. + * This option is ignored if supportBigNumbers is disabled. + */ + bigNumberStrings?: boolean; + + /** + * Force date types (TIMESTAMP, DATETIME, DATE) to be returned as strings rather then inflated into JavaScript Date + * objects. Can be true/false or an array of type names to keep as strings. + * + * (Default: false) + */ + dateStrings?: boolean | Array<'TIMESTAMP' | 'DATETIME' | 'DATE'>; + + /** + * This will print all incoming and outgoing packets on stdout. + * You can also restrict debugging to packet types by passing an array of types (strings) to debug; + * + * (Default: false) + */ + debug?: any; + + /** + * Generates stack traces on Error to include call site of library entrance ('long stack traces'). Slight + * performance penalty for most calls. (Default: true) + */ + trace?: boolean; + + /** + * Allow multiple mysql statements per query. Be careful with this, it exposes you to SQL injection attacks. (Default: false) + */ + multipleStatements?: boolean; + + /** + * List of connection flags to use other than the default ones. It is also possible to blacklist default ones + */ + flags?: Array; + + /** + * object with ssl parameters or a string containing name of ssl profile + */ + ssl?: string | SslOptions; + + /** + * Return each row as an array, not as an object. + * This is useful when you have duplicate column names. + * This can also be set in the `QueryOption` object to be applied per-query. + */ + rowsAsArray?: boolean; + + /** + * Enable keep-alive on the socket. (Default: true) + */ + enableKeepAlive?: boolean; + + /** + * If keep-alive is enabled users can supply an initial delay. (Default: 0) + */ + keepAliveInitialDelay?: number; + + charsetNumber?: number; + + compress?: boolean; + + authSwitchHandler?: (data: any, callback: () => void) => any; + + connectAttributes?: { [param: string]: any }; + + isServer?: boolean; + + maxPreparedStatements?: number; + + namedPlaceholders?: boolean; + + nestTables?: boolean | string; + + passwordSha1?: string; + + pool?: any; + + stream?: any; + + uri?: string; + + connectionLimit?: number; + + maxIdle?: number; + + idleTimeout?: number; + + Promise?: any; + + queueLimit?: number; + + waitForConnections?: boolean; + + disableEval?: boolean; + + authPlugins?: { + [key: string]: AuthPlugin; + }; + + /** + * Force JSON to be returned as string + * + * (Default: false) + */ + jsonStrings?: boolean; +} + +declare class Connection extends QueryableBase(ExecutableBase(EventEmitter)) { + config: ConnectionOptions; + + threadId: number; + + authorized: boolean; + + static createQuery< + T extends + | RowDataPacket[][] + | RowDataPacket[] + | OkPacket + | OkPacket[] + | ResultSetHeader, + >( + sql: string, + callback?: (err: QueryError | null, result: T, fields: FieldPacket[]) => any + ): Query; + static createQuery< + T extends + | RowDataPacket[][] + | RowDataPacket[] + | OkPacket + | OkPacket[] + | ResultSetHeader, + >( + sql: string, + values: any | any[] | { [param: string]: any }, + callback?: (err: QueryError | null, result: T, fields: FieldPacket[]) => any + ): Query; + + beginTransaction(callback: (err: QueryError | null) => void): void; + + connect(callback?: (err: QueryError | null) => void): void; + + commit(callback?: (err: QueryError | null) => void): void; + + changeUser( + options: ConnectionOptions, + callback?: (err: QueryError | null) => void + ): void; + + end(callback?: (err: QueryError | null) => void): void; + end(options: any, callback?: (err: QueryError | null) => void): void; + + destroy(): void; + + pause(): void; + + resume(): void; + + escape(value: any): string; + + escapeId(value: string): string; + escapeId(values: string[]): string; + + format(sql: string, values?: any | any[] | { [param: string]: any }): string; + + on(event: string, listener: (...args: any[]) => void): this; + + rollback(callback: (err: QueryError | null) => void): void; + + prepare( + sql: string, + callback?: (err: QueryError | null, statement: PrepareStatementInfo) => any + ): Prepare; + + unprepare(sql: string): PrepareStatementInfo; + + serverHandshake(args: any): any; + + promise(promiseImpl?: PromiseConstructor): PromiseConnection; + + ping(callback?: (err: QueryError | null) => any): void; + + writeOk(args?: OkPacketParams): void; + + writeError(args?: ErrorPacketParams): void; + + writeEof(warnings?: number, statusFlags?: number): void; + + writeTextResult(rows?: Array, columns?: Array): void; + + writePacket(packet: any): void; + + sequenceId: number; +} + +export { Connection }; diff --git a/node_modules/mysql2/typings/mysql/lib/Pool.d.ts b/node_modules/mysql2/typings/mysql/lib/Pool.d.ts new file mode 100644 index 0000000..90ed5e9 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/Pool.d.ts @@ -0,0 +1,69 @@ +import { EventEmitter } from 'events'; +import { PrepareStatementInfo } from './protocol/sequences/Prepare.js'; +import { ConnectionOptions } from './Connection.js'; +import { PoolConnection } from './PoolConnection.js'; +import { + Pool as PromisePool, + PoolConnection as PromisePoolConnection, +} from '../../../promise.js'; +import { QueryableBase } from './protocol/sequences/QueryableBase.js'; +import { ExecutableBase } from './protocol/sequences/ExecutableBase.js'; + +export interface PoolOptions extends ConnectionOptions { + /** + * Determines the pool's action when no connections are available and the limit has been reached. If true, the pool will queue + * the connection request and call it when one becomes available. If false, the pool will immediately call back with an error. + * (Default: true) + */ + waitForConnections?: boolean; + + /** + * The maximum number of connections to create at once. (Default: 10) + */ + connectionLimit?: number; + + /** + * The maximum number of idle connections. (Default: same as `connectionLimit`) + */ + maxIdle?: number; + + /** + * The idle connections timeout, in milliseconds. (Default: 60000) + */ + idleTimeout?: number; + + /** + * The maximum number of connection requests the pool will queue before returning an error from getConnection. If set to 0, there + * is no limit to the number of queued connection requests. (Default: 0) + */ + queueLimit?: number; +} + +declare class Pool extends QueryableBase(ExecutableBase(EventEmitter)) { + getConnection( + callback: ( + err: NodeJS.ErrnoException | null, + connection: PoolConnection + ) => any + ): void; + + releaseConnection(connection: PoolConnection | PromisePoolConnection): void; + + end( + callback?: (err: NodeJS.ErrnoException | null, ...args: any[]) => any + ): void; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: 'connection', listener: (connection: PoolConnection) => any): this; + on(event: 'acquire', listener: (connection: PoolConnection) => any): this; + on(event: 'release', listener: (connection: PoolConnection) => any): this; + on(event: 'enqueue', listener: () => any): this; + + unprepare(sql: string): PrepareStatementInfo; + + promise(promiseImpl?: PromiseConstructor): PromisePool; + + config: PoolOptions; +} + +export { Pool }; diff --git a/node_modules/mysql2/typings/mysql/lib/PoolCluster.d.ts b/node_modules/mysql2/typings/mysql/lib/PoolCluster.d.ts new file mode 100644 index 0000000..d4c538e --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/PoolCluster.d.ts @@ -0,0 +1,90 @@ +import { EventEmitter } from 'events'; +import { PoolConnection } from './PoolConnection.js'; +import { PoolOptions } from './Pool.js'; +import { ExecutableBase as ExecutableBaseClass } from './protocol/sequences/ExecutableBase.js'; +import { QueryableBase as QueryableBaseClass } from './protocol/sequences/QueryableBase.js'; + +// Expose class interfaces +declare class QueryableAndExecutableBase extends QueryableBaseClass( + ExecutableBaseClass(EventEmitter) +) {} + +export interface PoolClusterOptions { + /** + * If true, PoolCluster will attempt to reconnect when connection fails. (Default: true) + */ + canRetry?: boolean; + + /** + * If connection fails, node's errorCount increases. When errorCount is greater than removeNodeErrorCount, + * remove a node in the PoolCluster. (Default: 5) + */ + removeNodeErrorCount?: number; + + /** + * If connection fails, specifies the number of milliseconds before another connection attempt will be made. + * If set to 0, then node will be removed instead and never re-used. (Default: 0) + */ + restoreNodeTimeout?: number; + + /** + * The default selector. (Default: RR) + * RR: Select one alternately. (Round-Robin) + * RANDOM: Select the node by random function. + * ORDER: Select the first node available unconditionally. + */ + defaultSelector?: string; +} + +export interface PoolNamespace extends QueryableAndExecutableBase { + getConnection( + callback: ( + err: NodeJS.ErrnoException | null, + connection: PoolConnection + ) => any + ): void; +} + +declare class PoolCluster extends EventEmitter { + config: PoolClusterOptions; + + add(config: PoolOptions): void; + add(group: string, connectionUri: string): void; + add(group: string, config: PoolOptions): void; + + remove(pattern: string): void; + + end(): void; + + getConnection( + callback: ( + err: NodeJS.ErrnoException | null, + connection: PoolConnection + ) => void + ): void; + getConnection( + group: string, + callback: ( + err: NodeJS.ErrnoException | null, + connection: PoolConnection + ) => void + ): void; + getConnection( + group: string, + selector: string, + callback: ( + err: NodeJS.ErrnoException | null, + connection: PoolConnection + ) => void + ): void; + + of(pattern: string, selector?: string): PoolNamespace; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: 'online', listener: (nodeId: number) => void): this; + on(event: 'offline', listener: (nodeId: number) => void): this; + on(event: 'remove', listener: (nodeId: number) => void): this; + on(event: 'warn', listener: (err: Error) => void): this; +} + +export { PoolCluster }; diff --git a/node_modules/mysql2/typings/mysql/lib/PoolConnection.d.ts b/node_modules/mysql2/typings/mysql/lib/PoolConnection.d.ts new file mode 100644 index 0000000..cce4ef7 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/PoolConnection.d.ts @@ -0,0 +1,10 @@ +import { Connection } from './Connection.js'; +import { Pool as PromisePool } from '../../../promise.js'; + +declare class PoolConnection extends Connection { + connection: Connection; + release(): void; + promise(promiseImpl?: PromiseConstructor): PromisePool; +} + +export { PoolConnection }; diff --git a/node_modules/mysql2/typings/mysql/lib/Server.d.ts b/node_modules/mysql2/typings/mysql/lib/Server.d.ts new file mode 100644 index 0000000..195adee --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/Server.d.ts @@ -0,0 +1,11 @@ +import { EventEmitter } from 'events'; +import { Connection } from './Connection.js'; + +declare class Server extends EventEmitter { + connections: Array; + + listen(port: number): Server; + close(callback: (error: Error, count: number) => any): void; +} + +export { Server }; diff --git a/node_modules/mysql2/typings/mysql/lib/constants/CharsetToEncoding.d.ts b/node_modules/mysql2/typings/mysql/lib/constants/CharsetToEncoding.d.ts new file mode 100644 index 0000000..aa28389 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/constants/CharsetToEncoding.d.ts @@ -0,0 +1,8 @@ +/** + * Constant `CharsetToEncoding`. + * + * Please note that `CharsetToEncoding` can only be accessed from the `mysql` object and not imported directly. + */ +declare const CharsetToEncoding: string[]; + +export { CharsetToEncoding }; diff --git a/node_modules/mysql2/typings/mysql/lib/constants/Charsets.d.ts b/node_modules/mysql2/typings/mysql/lib/constants/Charsets.d.ts new file mode 100644 index 0000000..0b35769 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/constants/Charsets.d.ts @@ -0,0 +1,326 @@ +interface Charsets { + BIG5_CHINESE_CI: number; + LATIN2_CZECH_CS: number; + DEC8_SWEDISH_CI: number; + CP850_GENERAL_CI: number; + LATIN1_GERMAN1_CI: number; + HP8_ENGLISH_CI: number; + KOI8R_GENERAL_CI: number; + LATIN1_SWEDISH_CI: number; + LATIN2_GENERAL_CI: number; + SWE7_SWEDISH_CI: number; + ASCII_GENERAL_CI: number; + UJIS_JAPANESE_CI: number; + SJIS_JAPANESE_CI: number; + CP1251_BULGARIAN_CI: number; + LATIN1_DANISH_CI: number; + HEBREW_GENERAL_CI: number; + TIS620_THAI_CI: number; + EUCKR_KOREAN_CI: number; + LATIN7_ESTONIAN_CS: number; + LATIN2_HUNGARIAN_CI: number; + KOI8U_GENERAL_CI: number; + CP1251_UKRAINIAN_CI: number; + GB2312_CHINESE_CI: number; + GREEK_GENERAL_CI: number; + CP1250_GENERAL_CI: number; + LATIN2_CROATIAN_CI: number; + GBK_CHINESE_CI: number; + CP1257_LITHUANIAN_CI: number; + LATIN5_TURKISH_CI: number; + LATIN1_GERMAN2_CI: number; + ARMSCII8_GENERAL_CI: number; + UTF8_GENERAL_CI: number; + CP1250_CZECH_CS: number; + UCS2_GENERAL_CI: number; + CP866_GENERAL_CI: number; + KEYBCS2_GENERAL_CI: number; + MACCE_GENERAL_CI: number; + MACROMAN_GENERAL_CI: number; + CP852_GENERAL_CI: number; + LATIN7_GENERAL_CI: number; + LATIN7_GENERAL_CS: number; + MACCE_BIN: number; + CP1250_CROATIAN_CI: number; + UTF8MB4_GENERAL_CI: number; + UTF8MB4_BIN: number; + LATIN1_BIN: number; + LATIN1_GENERAL_CI: number; + LATIN1_GENERAL_CS: number; + CP1251_BIN: number; + CP1251_GENERAL_CI: number; + CP1251_GENERAL_CS: number; + MACROMAN_BIN: number; + UTF16_GENERAL_CI: number; + UTF16_BIN: number; + UTF16LE_GENERAL_CI: number; + CP1256_GENERAL_CI: number; + CP1257_BIN: number; + CP1257_GENERAL_CI: number; + UTF32_GENERAL_CI: number; + UTF32_BIN: number; + UTF16LE_BIN: number; + BINARY: number; + ARMSCII8_BIN: number; + ASCII_BIN: number; + CP1250_BIN: number; + CP1256_BIN: number; + CP866_BIN: number; + DEC8_BIN: number; + GREEK_BIN: number; + HEBREW_BIN: number; + HP8_BIN: number; + KEYBCS2_BIN: number; + KOI8R_BIN: number; + KOI8U_BIN: number; + UTF8_TOLOWER_CI: number; + LATIN2_BIN: number; + LATIN5_BIN: number; + LATIN7_BIN: number; + CP850_BIN: number; + CP852_BIN: number; + SWE7_BIN: number; + UTF8_BIN: number; + BIG5_BIN: number; + EUCKR_BIN: number; + GB2312_BIN: number; + GBK_BIN: number; + SJIS_BIN: number; + TIS620_BIN: number; + UCS2_BIN: number; + UJIS_BIN: number; + GEOSTD8_GENERAL_CI: number; + GEOSTD8_BIN: number; + LATIN1_SPANISH_CI: number; + CP932_JAPANESE_CI: number; + CP932_BIN: number; + EUCJPMS_JAPANESE_CI: number; + EUCJPMS_BIN: number; + CP1250_POLISH_CI: number; + UTF16_UNICODE_CI: number; + UTF16_ICELANDIC_CI: number; + UTF16_LATVIAN_CI: number; + UTF16_ROMANIAN_CI: number; + UTF16_SLOVENIAN_CI: number; + UTF16_POLISH_CI: number; + UTF16_ESTONIAN_CI: number; + UTF16_SPANISH_CI: number; + UTF16_SWEDISH_CI: number; + UTF16_TURKISH_CI: number; + UTF16_CZECH_CI: number; + UTF16_DANISH_CI: number; + UTF16_LITHUANIAN_CI: number; + UTF16_SLOVAK_CI: number; + UTF16_SPANISH2_CI: number; + UTF16_ROMAN_CI: number; + UTF16_PERSIAN_CI: number; + UTF16_ESPERANTO_CI: number; + UTF16_HUNGARIAN_CI: number; + UTF16_SINHALA_CI: number; + UTF16_GERMAN2_CI: number; + UTF16_CROATIAN_CI: number; + UTF16_UNICODE_520_CI: number; + UTF16_VIETNAMESE_CI: number; + UCS2_UNICODE_CI: number; + UCS2_ICELANDIC_CI: number; + UCS2_LATVIAN_CI: number; + UCS2_ROMANIAN_CI: number; + UCS2_SLOVENIAN_CI: number; + UCS2_POLISH_CI: number; + UCS2_ESTONIAN_CI: number; + UCS2_SPANISH_CI: number; + UCS2_SWEDISH_CI: number; + UCS2_TURKISH_CI: number; + UCS2_CZECH_CI: number; + UCS2_DANISH_CI: number; + UCS2_LITHUANIAN_CI: number; + UCS2_SLOVAK_CI: number; + UCS2_SPANISH2_CI: number; + UCS2_ROMAN_CI: number; + UCS2_PERSIAN_CI: number; + UCS2_ESPERANTO_CI: number; + UCS2_HUNGARIAN_CI: number; + UCS2_SINHALA_CI: number; + UCS2_GERMAN2_CI: number; + UCS2_CROATIAN_CI: number; + UCS2_UNICODE_520_CI: number; + UCS2_VIETNAMESE_CI: number; + UCS2_GENERAL_MYSQL500_CI: number; + UTF32_UNICODE_CI: number; + UTF32_ICELANDIC_CI: number; + UTF32_LATVIAN_CI: number; + UTF32_ROMANIAN_CI: number; + UTF32_SLOVENIAN_CI: number; + UTF32_POLISH_CI: number; + UTF32_ESTONIAN_CI: number; + UTF32_SPANISH_CI: number; + UTF32_SWEDISH_CI: number; + UTF32_TURKISH_CI: number; + UTF32_CZECH_CI: number; + UTF32_DANISH_CI: number; + UTF32_LITHUANIAN_CI: number; + UTF32_SLOVAK_CI: number; + UTF32_SPANISH2_CI: number; + UTF32_ROMAN_CI: number; + UTF32_PERSIAN_CI: number; + UTF32_ESPERANTO_CI: number; + UTF32_HUNGARIAN_CI: number; + UTF32_SINHALA_CI: number; + UTF32_GERMAN2_CI: number; + UTF32_CROATIAN_CI: number; + UTF32_UNICODE_520_CI: number; + UTF32_VIETNAMESE_CI: number; + UTF8_UNICODE_CI: number; + UTF8_ICELANDIC_CI: number; + UTF8_LATVIAN_CI: number; + UTF8_ROMANIAN_CI: number; + UTF8_SLOVENIAN_CI: number; + UTF8_POLISH_CI: number; + UTF8_ESTONIAN_CI: number; + UTF8_SPANISH_CI: number; + UTF8_SWEDISH_CI: number; + UTF8_TURKISH_CI: number; + UTF8_CZECH_CI: number; + UTF8_DANISH_CI: number; + UTF8_LITHUANIAN_CI: number; + UTF8_SLOVAK_CI: number; + UTF8_SPANISH2_CI: number; + UTF8_ROMAN_CI: number; + UTF8_PERSIAN_CI: number; + UTF8_ESPERANTO_CI: number; + UTF8_HUNGARIAN_CI: number; + UTF8_SINHALA_CI: number; + UTF8_GERMAN2_CI: number; + UTF8_CROATIAN_CI: number; + UTF8_UNICODE_520_CI: number; + UTF8_VIETNAMESE_CI: number; + UTF8_GENERAL_MYSQL500_CI: number; + UTF8MB4_UNICODE_CI: number; + UTF8MB4_ICELANDIC_CI: number; + UTF8MB4_LATVIAN_CI: number; + UTF8MB4_ROMANIAN_CI: number; + UTF8MB4_SLOVENIAN_CI: number; + UTF8MB4_POLISH_CI: number; + UTF8MB4_ESTONIAN_CI: number; + UTF8MB4_SPANISH_CI: number; + UTF8MB4_SWEDISH_CI: number; + UTF8MB4_TURKISH_CI: number; + UTF8MB4_CZECH_CI: number; + UTF8MB4_DANISH_CI: number; + UTF8MB4_LITHUANIAN_CI: number; + UTF8MB4_SLOVAK_CI: number; + UTF8MB4_SPANISH2_CI: number; + UTF8MB4_ROMAN_CI: number; + UTF8MB4_PERSIAN_CI: number; + UTF8MB4_ESPERANTO_CI: number; + UTF8MB4_HUNGARIAN_CI: number; + UTF8MB4_SINHALA_CI: number; + UTF8MB4_GERMAN2_CI: number; + UTF8MB4_CROATIAN_CI: number; + UTF8MB4_UNICODE_520_CI: number; + UTF8MB4_VIETNAMESE_CI: number; + GB18030_CHINESE_CI: number; + GB18030_BIN: number; + GB18030_UNICODE_520_CI: number; + /** @deprecated */ + UTF8_GENERAL50_CI: number; + UTF8MB4_0900_AI_CI: number; + UTF8MB4_DE_PB_0900_AI_CI: number; + UTF8MB4_IS_0900_AI_CI: number; + UTF8MB4_LV_0900_AI_CI: number; + UTF8MB4_RO_0900_AI_CI: number; + UTF8MB4_SL_0900_AI_CI: number; + UTF8MB4_PL_0900_AI_CI: number; + UTF8MB4_ET_0900_AI_CI: number; + UTF8MB4_ES_0900_AI_CI: number; + UTF8MB4_SV_0900_AI_CI: number; + UTF8MB4_TR_0900_AI_CI: number; + UTF8MB4_CS_0900_AI_CI: number; + UTF8MB4_DA_0900_AI_CI: number; + UTF8MB4_LT_0900_AI_CI: number; + UTF8MB4_SK_0900_AI_CI: number; + UTF8MB4_ES_TRAD_0900_AI_CI: number; + UTF8MB4_LA_0900_AI_CI: number; + UTF8MB4_EO_0900_AI_CI: number; + UTF8MB4_HU_0900_AI_CI: number; + UTF8MB4_HR_0900_AI_CI: number; + UTF8MB4_VI_0900_AI_CI: number; + UTF8MB4_0900_AS_CS: number; + UTF8MB4_DE_PB_0900_AS_CS: number; + UTF8MB4_IS_0900_AS_CS: number; + UTF8MB4_LV_0900_AS_CS: number; + UTF8MB4_RO_0900_AS_CS: number; + UTF8MB4_SL_0900_AS_CS: number; + UTF8MB4_PL_0900_AS_CS: number; + UTF8MB4_ET_0900_AS_CS: number; + UTF8MB4_ES_0900_AS_CS: number; + UTF8MB4_SV_0900_AS_CS: number; + UTF8MB4_TR_0900_AS_CS: number; + UTF8MB4_CS_0900_AS_CS: number; + UTF8MB4_DA_0900_AS_CS: number; + UTF8MB4_LT_0900_AS_CS: number; + UTF8MB4_SK_0900_AS_CS: number; + UTF8MB4_ES_TRAD_0900_AS_CS: number; + UTF8MB4_LA_0900_AS_CS: number; + UTF8MB4_EO_0900_AS_CS: number; + UTF8MB4_HU_0900_AS_CS: number; + UTF8MB4_HR_0900_AS_CS: number; + UTF8MB4_VI_0900_AS_CS: number; + UTF8MB4_JA_0900_AS_CS: number; + UTF8MB4_JA_0900_AS_CS_KS: number; + UTF8MB4_0900_AS_CI: number; + UTF8MB4_RU_0900_AI_CI: number; + UTF8MB4_RU_0900_AS_CS: number; + UTF8MB4_ZH_0900_AS_CS: number; + UTF8MB4_0900_BIN: number; + + BIG5: number; + DEC8: number; + CP850: number; + HP8: number; + KOI8R: number; + LATIN1: number; + LATIN2: number; + SWE7: number; + ASCII: number; + UJIS: number; + SJIS: number; + HEBREW: number; + TIS620: number; + EUCKR: number; + KOI8U: number; + GB2312: number; + GREEK: number; + CP1250: number; + GBK: number; + LATIN5: number; + ARMSCII8: number; + UTF8: number; + UCS2: number; + CP866: number; + KEYBCS2: number; + MACCE: number; + MACROMAN: number; + CP852: number; + LATIN7: number; + UTF8MB4: number; + CP1251: number; + UTF16: number; + UTF16LE: number; + CP1256: number; + CP1257: number; + UTF32: number; + CP932: number; + EUCJPMS: number; + GB18030: number; + GEOSTD8: number; +} + +/** + * Constant `Charsets`. + * + * Please note that `Charsets` can only be accessed from the `mysql` object and not imported directly. + */ +declare const Charsets: Charsets; + +export { Charsets }; diff --git a/node_modules/mysql2/typings/mysql/lib/constants/Types.d.ts b/node_modules/mysql2/typings/mysql/lib/constants/Types.d.ts new file mode 100644 index 0000000..2719509 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/constants/Types.d.ts @@ -0,0 +1,70 @@ +interface Types { + 0x00: string; + 0x01: string; + 0x02: string; + 0x03: string; + 0x04: string; + 0x05: string; + 0x06: string; + 0x07: string; + 0x08: string; + 0x09: string; + 0x0a: string; + 0x0b: string; + 0x0c: string; + 0x0d: string; + 0x0e: string; + 0x0f: string; + 0x10: string; + 0xf2: string; + 0xf5: string; + 0xf6: string; + 0xf7: string; + 0xf8: string; + 0xf9: string; + 0xfa: string; + 0xfb: string; + 0xfc: string; + 0xfd: string; + 0xfe: string; + 0xff: string; + + DECIMAL: number; + TINY: number; + SHORT: number; + LONG: number; + FLOAT: number; + DOUBLE: number; + NULL: number; + TIMESTAMP: number; + LONGLONG: number; + INT24: number; + DATE: number; + TIME: number; + DATETIME: number; + YEAR: number; + NEWDATE: number; + VARCHAR: number; + BIT: number; + VECTOR: number; + JSON: number; + NEWDECIMAL: number; + ENUM: number; + SET: number; + TINY_BLOB: number; + MEDIUM_BLOB: number; + LONG_BLOB: number; + BLOB: number; + VAR_STRING: number; + STRING: number; + GEOMETRY: number; +} + +/** + * Constant `Types`. + * + * Please note that `Types` can only be accessed from the `mysql` object and not imported directly. + */ +declare const Types: Types; + +export { Types }; diff --git a/node_modules/mysql2/typings/mysql/lib/constants/index.d.ts b/node_modules/mysql2/typings/mysql/lib/constants/index.d.ts new file mode 100644 index 0000000..d08ba2c --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/constants/index.d.ts @@ -0,0 +1,5 @@ +import { Types } from './Types.js'; +import { Charsets } from './Charsets.js'; +import { CharsetToEncoding } from './CharsetToEncoding.js'; + +export { Types, Charsets, CharsetToEncoding }; diff --git a/node_modules/mysql2/typings/mysql/lib/parsers/ParserCache.d.ts b/node_modules/mysql2/typings/mysql/lib/parsers/ParserCache.d.ts new file mode 100644 index 0000000..0f1e7fa --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/parsers/ParserCache.d.ts @@ -0,0 +1,4 @@ +declare function setMaxParserCache(max: number): void; +declare function clearParserCache(): void; + +export { setMaxParserCache, clearParserCache }; diff --git a/node_modules/mysql2/typings/mysql/lib/parsers/index.d.ts b/node_modules/mysql2/typings/mysql/lib/parsers/index.d.ts new file mode 100644 index 0000000..734c4d9 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/parsers/index.d.ts @@ -0,0 +1,18 @@ +import { setMaxParserCache, clearParserCache } from './ParserCache.js'; +import { + TypeCast, + Field as TypeCastField, + Geometry as TypeCastGeometry, + Next as TypeCastNext, + Type as TypeCastType, +} from './typeCast.js'; + +export { + setMaxParserCache, + clearParserCache, + TypeCast, + TypeCastField, + TypeCastGeometry, + TypeCastNext, + TypeCastType, +}; diff --git a/node_modules/mysql2/typings/mysql/lib/parsers/typeCast.d.ts b/node_modules/mysql2/typings/mysql/lib/parsers/typeCast.d.ts new file mode 100644 index 0000000..7d62b98 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/parsers/typeCast.d.ts @@ -0,0 +1,54 @@ +export type Geometry = { + x: number; + y: number; +}; + +export type Type = { + type: + | 'DECIMAL' + | 'TINY' + | 'SHORT' + | 'LONG' + | 'FLOAT' + | 'DOUBLE' + | 'NULL' + | 'TIMESTAMP' + | 'TIMESTAMP2' + | 'LONGLONG' + | 'INT24' + | 'DATE' + | 'TIME' + | 'TIME2' + | 'DATETIME' + | 'DATETIME2' + | 'YEAR' + | 'NEWDATE' + | 'VARCHAR' + | 'BIT' + | 'VECTOR' + | 'JSON' + | 'NEWDECIMAL' + | 'ENUM' + | 'SET' + | 'TINY_BLOB' + | 'MEDIUM_BLOB' + | 'LONG_BLOB' + | 'BLOB' + | 'VAR_STRING' + | 'STRING' + | 'GEOMETRY'; +}; + +export type Field = Type & { + length: number; + db: string; + table: string; + name: string; + string: (encoding?: BufferEncoding | string | undefined) => string | null; + buffer: () => Buffer | null; + geometry: () => Geometry | Geometry[] | null; +}; + +export type Next = () => unknown; + +export type TypeCast = ((field: Field, next: Next) => any) | boolean; diff --git a/node_modules/mysql2/typings/mysql/lib/protocol/packets/Field.d.ts b/node_modules/mysql2/typings/mysql/lib/protocol/packets/Field.d.ts new file mode 100644 index 0000000..a8c1690 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/protocol/packets/Field.d.ts @@ -0,0 +1,10 @@ +// TODO (major version): remove workaround for `Field` compatibility. +import { TypeCastField } from '../../../lib/parsers/index.js'; + +/** + * @deprecated + * `Field` is deprecated and might be removed in the future major release. Please use `TypeCastField` type instead. + */ +declare interface Field extends TypeCastField {} + +export { Field }; diff --git a/node_modules/mysql2/typings/mysql/lib/protocol/packets/FieldPacket.d.ts b/node_modules/mysql2/typings/mysql/lib/protocol/packets/FieldPacket.d.ts new file mode 100644 index 0000000..7e88669 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/protocol/packets/FieldPacket.d.ts @@ -0,0 +1,27 @@ +declare interface FieldPacket { + constructor: { + name: 'FieldPacket'; + }; + catalog: string; + charsetNr?: number; + db?: string; + schema?: string; + characterSet?: number; + decimals: number; + default?: any; + flags: number | string[]; + length?: number; + name: string; + orgName: string; + orgTable: string; + protocol41?: boolean; + table: string; + type?: number; + columnType?: number; + zerofill?: boolean; + typeName?: string; + encoding?: string; + columnLength?: number; +} + +export { FieldPacket }; diff --git a/node_modules/mysql2/typings/mysql/lib/protocol/packets/OkPacket.d.ts b/node_modules/mysql2/typings/mysql/lib/protocol/packets/OkPacket.d.ts new file mode 100644 index 0000000..056e960 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/protocol/packets/OkPacket.d.ts @@ -0,0 +1,23 @@ +/** + * @deprecated + * `OkPacket` is deprecated and might be removed in the future major release. Please use `ResultSetHeader` instead. + */ +declare interface OkPacket { + constructor: { + name: 'OkPacket'; + }; + fieldCount: number; + affectedRows: number; + /** + * @deprecated + * `changedRows` is deprecated and might be removed in the future major release. Please use `affectedRows` property instead. + */ + changedRows: number; + insertId: number; + serverStatus: number; + warningCount: number; + message: string; + protocol41: boolean; +} + +export { OkPacket }; diff --git a/node_modules/mysql2/typings/mysql/lib/protocol/packets/ProcedurePacket.d.ts b/node_modules/mysql2/typings/mysql/lib/protocol/packets/ProcedurePacket.d.ts new file mode 100644 index 0000000..ff5efb6 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/protocol/packets/ProcedurePacket.d.ts @@ -0,0 +1,13 @@ +import { OkPacket } from './OkPacket.js'; +import { ResultSetHeader } from './ResultSetHeader.js'; +import { RowDataPacket } from './RowDataPacket.js'; + +declare type ProcedureCallPacket< + T = [RowDataPacket[], ResultSetHeader] | ResultSetHeader, +> = T extends RowDataPacket[] + ? [T, ResultSetHeader] + : T extends ResultSetHeader | OkPacket + ? ResultSetHeader + : [RowDataPacket[], ResultSetHeader] | ResultSetHeader; + +export { ProcedureCallPacket }; diff --git a/node_modules/mysql2/typings/mysql/lib/protocol/packets/ResultSetHeader.d.ts b/node_modules/mysql2/typings/mysql/lib/protocol/packets/ResultSetHeader.d.ts new file mode 100644 index 0000000..00b596f --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/protocol/packets/ResultSetHeader.d.ts @@ -0,0 +1,18 @@ +declare interface ResultSetHeader { + constructor: { + name: 'ResultSetHeader'; + }; + affectedRows: number; + fieldCount: number; + info: string; + insertId: number; + serverStatus: number; + warningStatus: number; + /** + * @deprecated + * `changedRows` is deprecated and might be removed in the future major release. Please use `affectedRows` property instead. + */ + changedRows: number; +} + +export { ResultSetHeader }; diff --git a/node_modules/mysql2/typings/mysql/lib/protocol/packets/RowDataPacket.d.ts b/node_modules/mysql2/typings/mysql/lib/protocol/packets/RowDataPacket.d.ts new file mode 100644 index 0000000..d9cac1b --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/protocol/packets/RowDataPacket.d.ts @@ -0,0 +1,9 @@ +declare interface RowDataPacket { + constructor: { + name: 'RowDataPacket'; + }; + [column: string]: any; + [column: number]: any; +} + +export { RowDataPacket }; diff --git a/node_modules/mysql2/typings/mysql/lib/protocol/packets/index.d.ts b/node_modules/mysql2/typings/mysql/lib/protocol/packets/index.d.ts new file mode 100644 index 0000000..352abd2 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/protocol/packets/index.d.ts @@ -0,0 +1,28 @@ +import { OkPacket } from './OkPacket.js'; +import { RowDataPacket } from './RowDataPacket.js'; +import { FieldPacket } from './FieldPacket.js'; +import { Field } from './Field.js'; +import { ProcedureCallPacket } from './ProcedurePacket.js'; +import { ResultSetHeader } from './ResultSetHeader.js'; +import { OkPacketParams } from './params/OkPacketParams.js'; +import { ErrorPacketParams } from './params/ErrorPacketParams.js'; + +export type QueryResult = + | OkPacket + | ResultSetHeader + | ResultSetHeader[] + | RowDataPacket[] + | RowDataPacket[][] + | OkPacket[] + | ProcedureCallPacket; + +export { + OkPacket, + RowDataPacket, + FieldPacket, + Field, + ProcedureCallPacket, + ResultSetHeader, + OkPacketParams, + ErrorPacketParams, +}; diff --git a/node_modules/mysql2/typings/mysql/lib/protocol/packets/params/ErrorPacketParams.d.ts b/node_modules/mysql2/typings/mysql/lib/protocol/packets/params/ErrorPacketParams.d.ts new file mode 100644 index 0000000..dece3db --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/protocol/packets/params/ErrorPacketParams.d.ts @@ -0,0 +1,6 @@ +declare interface ErrorPacketParams { + message?: string; + code?: number | string; +} + +export { ErrorPacketParams }; diff --git a/node_modules/mysql2/typings/mysql/lib/protocol/packets/params/OkPacketParams.d.ts b/node_modules/mysql2/typings/mysql/lib/protocol/packets/params/OkPacketParams.d.ts new file mode 100644 index 0000000..a5d2d00 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/protocol/packets/params/OkPacketParams.d.ts @@ -0,0 +1,9 @@ +declare interface OkPacketParams { + affectedRows?: number; + insertId?: number; + serverStatus?: number; + warningCount?: number; + message?: string; +} + +export { OkPacketParams }; diff --git a/node_modules/mysql2/typings/mysql/lib/protocol/sequences/ExecutableBase.d.ts b/node_modules/mysql2/typings/mysql/lib/protocol/sequences/ExecutableBase.d.ts new file mode 100644 index 0000000..81e2802 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/protocol/sequences/ExecutableBase.d.ts @@ -0,0 +1,40 @@ +import { FieldPacket, QueryResult } from '../packets/index.js'; +import { + Query, + QueryError, + QueryOptions, + QueryableConstructor, +} from './Query.js'; + +export declare function ExecutableBase( + Base?: T +): { + new (...args: any[]): { + execute( + sql: string, + callback?: + | ((err: QueryError | null, result: T, fields: FieldPacket[]) => any) + | undefined + ): Query; + execute( + sql: string, + values: any, + callback?: + | ((err: QueryError | null, result: T, fields: FieldPacket[]) => any) + | undefined + ): Query; + execute( + options: QueryOptions, + callback?: + | ((err: QueryError | null, result: T, fields?: FieldPacket[]) => any) + | undefined + ): Query; + execute( + options: QueryOptions, + values: any, + callback?: + | ((err: QueryError | null, result: T, fields: FieldPacket[]) => any) + | undefined + ): Query; + }; +} & T; diff --git a/node_modules/mysql2/typings/mysql/lib/protocol/sequences/Prepare.d.ts b/node_modules/mysql2/typings/mysql/lib/protocol/sequences/Prepare.d.ts new file mode 100644 index 0000000..e8c69dc --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/protocol/sequences/Prepare.d.ts @@ -0,0 +1,65 @@ +import { Sequence } from './Sequence.js'; +import { Query, QueryError, StreamOptions } from '../sequences/Query.js'; +import { + OkPacket, + FieldPacket, + RowDataPacket, + ResultSetHeader, +} from '../packets/index.js'; +import { Readable } from 'stream'; + +export class PrepareStatementInfo { + close(): void; + execute< + T extends + | RowDataPacket[][] + | RowDataPacket[] + | OkPacket + | OkPacket[] + | ResultSetHeader, + >( + parameters: any | any[] | { [param: string]: any }, + callback?: (err: QueryError | null, result: T, fields: FieldPacket[]) => any + ): Query; +} + +declare class Prepare extends Sequence { + /** + * The SQL for a constructed query + */ + sql: string; + + /** + * Emits a query packet to start the query + */ + start(): void; + + /** + * Determines the packet class to use given the first byte of the packet. + * + * @param firstByte The first byte of the packet + * @param parser The packet parser + */ + determinePacket(firstByte: number, parser: any): any; + + /** + * Creates a Readable stream with the given options + * + * @param options The options for the stream. + */ + stream(options?: StreamOptions): Readable; + + on(event: string, listener: (args: []) => void): this; + on(event: 'error', listener: (err: QueryError) => any): this; + on( + event: 'fields', + listener: (fields: FieldPacket, index: number) => any + ): this; + on( + event: 'result', + listener: (result: RowDataPacket | OkPacket, index: number) => any + ): this; + on(event: 'end', listener: () => any): this; +} + +export { Prepare }; diff --git a/node_modules/mysql2/typings/mysql/lib/protocol/sequences/Query.d.ts b/node_modules/mysql2/typings/mysql/lib/protocol/sequences/Query.d.ts new file mode 100644 index 0000000..eee40b7 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/protocol/sequences/Query.d.ts @@ -0,0 +1,170 @@ +import { Sequence } from './Sequence.js'; +import { OkPacket, RowDataPacket, FieldPacket } from '../packets/index.js'; +import { Readable } from 'stream'; +import { TypeCast } from '../../parsers/typeCast.js'; + +export interface QueryOptions { + /** + * The SQL for the query + */ + sql: string; + + /** + * The values for the query + */ + values?: any | any[] | { [param: string]: any }; + + /** + * This overrides the namedPlaceholders option set at the connection level. + */ + namedPlaceholders?: boolean; + + /** + * Every operation takes an optional inactivity timeout option. This allows you to specify appropriate timeouts for + * operations. It is important to note that these timeouts are not part of the MySQL protocol, and rather timeout + * operations through the client. This means that when a timeout is reached, the connection it occurred on will be + * destroyed and no further operations can be performed. + */ + timeout?: number; + + /** + * Either a boolean or string. If true, tables will be nested objects. If string (e.g. '_'), tables will be + * nested as tableName_fieldName + */ + nestTables?: any; + + /** + * Determines if column values should be converted to native JavaScript types. + * + * @default true + * + * It is not recommended (and may go away / change in the future) to disable type casting, but you can currently do so on either the connection or query level. + * + * --- + * + * You can also specify a function to do the type casting yourself: + * ```ts + * (field: Field, next: () => unknown) => { + * return next(); + * } + * ``` + * + * --- + * + * **WARNING:** + * + * YOU MUST INVOKE the parser using one of these three field functions in your custom typeCast callback. They can only be called once: + * + * ```js + * field.string(); + * field.buffer(); + * field.geometry(); + * ``` + + * Which are aliases for: + * + * ```js + * parser.parseLengthCodedString(); + * parser.parseLengthCodedBuffer(); + * parser.parseGeometryValue(); + * ``` + * + * You can find which field function you need to use by looking at `RowDataPacket.prototype._typeCast`. + */ + typeCast?: TypeCast; + + /** + * This overrides the same option set at the connection level. + * + */ + rowsAsArray?: boolean; + + /** + * By specifying a function that returns a readable stream, an arbitrary stream can be sent when sending a local fs file. + */ + infileStreamFactory?: (path: string) => Readable; +} + +export interface StreamOptions { + /** + * Sets the max buffer size in objects of a stream + */ + highWaterMark?: number; + + /** + * The object mode of the stream (Default: true) + */ + objectMode?: any; +} + +export interface QueryError extends NodeJS.ErrnoException { + /** + * Either a MySQL server error (e.g. 'ER_ACCESS_DENIED_ERROR'), + * a node.js error (e.g. 'ECONNREFUSED') or an internal error + * (e.g. 'PROTOCOL_CONNECTION_LOST'). + */ + code: string; + + /** + * The sql state marker + */ + sqlStateMarker?: string; + + /** + * The sql state + */ + sqlState?: string; + + /** + * The field count + */ + fieldCount?: number; + + /** + * Boolean, indicating if this error is terminal to the connection object. + */ + fatal: boolean; +} + +declare class Query extends Sequence { + /** + * The SQL for a constructed query + */ + sql: string; + + /** + * Emits a query packet to start the query + */ + start(): void; + + /** + * Determines the packet class to use given the first byte of the packet. + * + * @param firstByte The first byte of the packet + * @param parser The packet parser + */ + determinePacket(firstByte: number, parser: any): any; + + /** + * Creates a Readable stream with the given options + * + * @param options The options for the stream. + */ + stream(options?: StreamOptions): Readable; + + on(event: string, listener: (...args: any[]) => void): this; + on(event: 'error', listener: (err: QueryError) => any): this; + on( + event: 'fields', + listener: (fields: FieldPacket, index: number) => any + ): this; + on( + event: 'result', + listener: (result: RowDataPacket | OkPacket, index: number) => any + ): this; + on(event: 'end', listener: () => any): this; +} + +export type QueryableConstructor = new (...args: any[]) => T; + +export { Query }; diff --git a/node_modules/mysql2/typings/mysql/lib/protocol/sequences/QueryableBase.d.ts b/node_modules/mysql2/typings/mysql/lib/protocol/sequences/QueryableBase.d.ts new file mode 100644 index 0000000..7d448ff --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/protocol/sequences/QueryableBase.d.ts @@ -0,0 +1,40 @@ +import { FieldPacket, QueryResult } from '../packets/index.js'; +import { + Query, + QueryError, + QueryOptions, + QueryableConstructor, +} from './Query.js'; + +export declare function QueryableBase( + Base?: T +): { + new (...args: any[]): { + query( + sql: string, + callback?: + | ((err: QueryError | null, result: T, fields: FieldPacket[]) => any) + | undefined + ): Query; + query( + sql: string, + values: any, + callback?: + | ((err: QueryError | null, result: T, fields: FieldPacket[]) => any) + | undefined + ): Query; + query( + options: QueryOptions, + callback?: + | ((err: QueryError | null, result: T, fields?: FieldPacket[]) => any) + | undefined + ): Query; + query( + options: QueryOptions, + values: any, + callback?: + | ((err: QueryError | null, result: T, fields: FieldPacket[]) => any) + | undefined + ): Query; + }; +} & T; diff --git a/node_modules/mysql2/typings/mysql/lib/protocol/sequences/Sequence.d.ts b/node_modules/mysql2/typings/mysql/lib/protocol/sequences/Sequence.d.ts new file mode 100644 index 0000000..05c91c3 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/protocol/sequences/Sequence.d.ts @@ -0,0 +1,5 @@ +import { EventEmitter } from 'events'; + +declare class Sequence extends EventEmitter {} + +export { Sequence }; diff --git a/node_modules/mysql2/typings/mysql/lib/protocol/sequences/promise/ExecutableBase.d.ts b/node_modules/mysql2/typings/mysql/lib/protocol/sequences/promise/ExecutableBase.d.ts new file mode 100644 index 0000000..d96602c --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/protocol/sequences/promise/ExecutableBase.d.ts @@ -0,0 +1,21 @@ +import { FieldPacket, QueryResult } from '../../packets/index.js'; +import { QueryOptions, QueryableConstructor } from '../Query.js'; + +export declare function ExecutableBase( + Base?: T +): { + new (...args: any[]): { + execute(sql: string): Promise<[T, FieldPacket[]]>; + execute( + sql: string, + values: any + ): Promise<[T, FieldPacket[]]>; + execute( + options: QueryOptions + ): Promise<[T, FieldPacket[]]>; + execute( + options: QueryOptions, + values: any + ): Promise<[T, FieldPacket[]]>; + }; +} & T; diff --git a/node_modules/mysql2/typings/mysql/lib/protocol/sequences/promise/QueryableBase.d.ts b/node_modules/mysql2/typings/mysql/lib/protocol/sequences/promise/QueryableBase.d.ts new file mode 100644 index 0000000..d3ca021 --- /dev/null +++ b/node_modules/mysql2/typings/mysql/lib/protocol/sequences/promise/QueryableBase.d.ts @@ -0,0 +1,21 @@ +import { FieldPacket, QueryResult } from '../../packets/index.js'; +import { QueryOptions, QueryableConstructor } from '../Query.js'; + +export declare function QueryableBase( + Base?: T +): { + new (...args: any[]): { + query(sql: string): Promise<[T, FieldPacket[]]>; + query( + sql: string, + values: any + ): Promise<[T, FieldPacket[]]>; + query( + options: QueryOptions + ): Promise<[T, FieldPacket[]]>; + query( + options: QueryOptions, + values: any + ): Promise<[T, FieldPacket[]]>; + }; +} & T; diff --git a/node_modules/named-placeholders/LICENSE b/node_modules/named-placeholders/LICENSE new file mode 100644 index 0000000..bc0223f --- /dev/null +++ b/node_modules/named-placeholders/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2014 Andrey Sidorov + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/node_modules/named-placeholders/README.md b/node_modules/named-placeholders/README.md new file mode 100644 index 0000000..5b88730 --- /dev/null +++ b/node_modules/named-placeholders/README.md @@ -0,0 +1,29 @@ +[![Flattr this git repo](http://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=sidorares&url=https://github.com/sidorares/named-placeholders&title=named-placeholders&language=&tags=github&category=software) + +[![NPM](https://nodei.co/npm/named-placeholders.png?downloads=true&stars=true)](https://nodei.co/npm/named-placeholders/) + +[![CI](https://github.com/mysqljs/named-placeholders/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/mysqljs/named-placeholders/actions/workflows/ci.yml) + +# named-placeholders + +compiles "select foo where foo.id = :bar and foo.baz < :baz" into "select foo where foo.id = ? and foo.baz < ?" + ["bar", "baz"] + +## usage + +```sh +npm install named-placeholders +``` + +see [this mysql2 discussion](https://github.com/sidorares/node-mysql2/issues/117) + +```js +var mysql = require('mysql'); +var toUnnamed = require('named-placeholders')(); + +var q = toUnnamed('select 1+:test', { test: 123}); +mysql.createConnection().query(q[0], q[1]); +``` + +## credits + +parser is based on @mscdex code of his excellent [node-mariasql](https://github.com/mscdex/node-mariasql) library diff --git a/node_modules/named-placeholders/index.js b/node_modules/named-placeholders/index.js new file mode 100644 index 0000000..3524ef5 --- /dev/null +++ b/node_modules/named-placeholders/index.js @@ -0,0 +1,179 @@ +'use strict'; + +// based on code from Brian White @mscdex mariasql library - https://github.com/mscdex/node-mariasql/blob/master/lib/Client.js#L272-L332 +// License: https://github.com/mscdex/node-mariasql/blob/master/LICENSE + +const RE_PARAM = /(?:\?)|(?::(\d+|(?:[a-zA-Z][a-zA-Z0-9_]*)))/g, +DQUOTE = 34, +SQUOTE = 39, +BSLASH = 92; + +function parse(query) { + let ppos = RE_PARAM.exec(query); + let curpos = 0; + let start = 0; + let end; + const parts = []; + let inQuote = false; + let escape = false; + let qchr; + const tokens = []; + let qcnt = 0; + let lastTokenEndPos = 0; + let i; + + if (ppos) { + do { + for (i=curpos,end=ppos.index; i params[n])]; +} + +module.exports = createCompiler; +module.exports.toNumbered = toNumbered; diff --git a/node_modules/named-placeholders/package.json b/node_modules/named-placeholders/package.json new file mode 100644 index 0000000..3b7c987 --- /dev/null +++ b/node_modules/named-placeholders/package.json @@ -0,0 +1,32 @@ +{ + "name": "named-placeholders", + "version": "1.1.3", + "description": "sql named placeholders to unnamed compiler", + "main": "index.js", + "scripts": { + "test": "mocha" + }, + "repository": { + "type": "git", + "url": "https://github.com/sidorares/named-placeholders" + }, + "keywords": [ + "sql", + "pdo", + "named", + "placeholders" + ], + "engines": { + "node": ">=12.0.0" + }, + "author": "Andrey Sidorov ", + "files": [], + "license": "MIT", + "devDependencies": { + "mocha": "^5.2.0", + "should": "^13.2.3" + }, + "dependencies": { + "lru-cache": "^7.14.1" + } +} diff --git a/node_modules/nth-check/LICENSE b/node_modules/nth-check/LICENSE new file mode 100644 index 0000000..c464f86 --- /dev/null +++ b/node_modules/nth-check/LICENSE @@ -0,0 +1,11 @@ +Copyright (c) Felix Bรถhm +All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +THIS IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS, +EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/nth-check/README.md b/node_modules/nth-check/README.md new file mode 100644 index 0000000..7a19d64 --- /dev/null +++ b/node_modules/nth-check/README.md @@ -0,0 +1,136 @@ +# nth-check [![Build Status](https://travis-ci.org/fb55/nth-check.svg)](https://travis-ci.org/fb55/nth-check) + +Parses and compiles CSS nth-checks to highly optimized functions. + +### About + +This module can be used to parse & compile nth-checks, as they are found in CSS 3's `nth-child()` and `nth-last-of-type()`. It can be used to check if a given index matches a given nth-rule, or to generate a sequence of indices matching a given nth-rule. + +`nth-check` focusses on speed, providing optimized functions for different kinds of nth-child formulas, while still following the [spec](http://www.w3.org/TR/css3-selectors/#nth-child-pseudo). + +### API + +```js +import nthCheck, { parse, compile } from "nth-check"; +``` + +##### `nthCheck(formula)` + +Parses and compiles a formula to a highly optimized function. Combination of `parse` and `compile`. + +If the formula doesn't match any elements, it returns [`boolbase`](https://github.com/fb55/boolbase)'s `falseFunc`. Otherwise, a function accepting an _index_ is returned, which returns whether or not the passed _index_ matches the formula. + +**Note**: The nth-rule starts counting at `1`, the returned function at `0`. + +**Example:** + +```js +const check = nthCheck("2n+3"); + +check(0); // `false` +check(1); // `false` +check(2); // `true` +check(3); // `false` +check(4); // `true` +check(5); // `false` +check(6); // `true` +``` + +##### `parse(formula)` + +Parses the expression, throws an `Error` if it fails. Otherwise, returns an array containing the integer step size and the integer offset of the nth rule. + +**Example:** + +```js +parse("2n+3"); // [2, 3] +``` + +##### `compile([a, b])` + +Takes an array with two elements (as returned by `.parse`) and returns a highly optimized function. + +**Example:** + +```js +const check = compile([2, 3]); + +check(0); // `false` +check(1); // `false` +check(2); // `true` +check(3); // `false` +check(4); // `true` +check(5); // `false` +check(6); // `true` +``` + +##### `generate([a, b])` + +Returns a function that produces a monotonously increasing sequence of indices. + +If the sequence has an end, the returned function will return `null` after the last index in the sequence. + +**Example:** An always increasing sequence + +```js +const gen = nthCheck.generate([2, 3]); + +gen(); // `1` +gen(); // `3` +gen(); // `5` +gen(); // `8` +gen(); // `11` +``` + +**Example:** With an end value + +```js +const gen = nthCheck.generate([-2, 5]); + +gen(); // 0 +gen(); // 2 +gen(); // 4 +gen(); // null +``` + +##### `sequence(formula)` + +Parses and compiles a formula to a generator that produces a sequence of indices. Combination of `parse` and `generate`. + +**Example:** An always increasing sequence + +```js +const gen = nthCheck.sequence("2n+3"); + +gen(); // `1` +gen(); // `3` +gen(); // `5` +gen(); // `8` +gen(); // `11` +``` + +**Example:** With an end value + +```js +const gen = nthCheck.sequence("-2n+5"); + +gen(); // 0 +gen(); // 2 +gen(); // 4 +gen(); // null +``` + +--- + +License: BSD-2-Clause + +## Security contact information + +To report a security vulnerability, please use the [Tidelift security contact](https://tidelift.com/security). +Tidelift will coordinate the fix and disclosure. + +## `nth-check` for enterprise + +Available as part of the Tidelift Subscription + +The maintainers of `nth-check` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-nth-check?utm_source=npm-nth-check&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) diff --git a/node_modules/nth-check/lib/compile.d.ts b/node_modules/nth-check/lib/compile.d.ts new file mode 100644 index 0000000..63e9be5 --- /dev/null +++ b/node_modules/nth-check/lib/compile.d.ts @@ -0,0 +1,55 @@ +/** + * Returns a function that checks if an elements index matches the given rule + * highly optimized to return the fastest solution. + * + * @param parsed A tuple [a, b], as returned by `parse`. + * @returns A highly optimized function that returns whether an index matches the nth-check. + * @example + * + * ```js + * const check = nthCheck.compile([2, 3]); + * + * check(0); // `false` + * check(1); // `false` + * check(2); // `true` + * check(3); // `false` + * check(4); // `true` + * check(5); // `false` + * check(6); // `true` + * ``` + */ +export declare function compile(parsed: [a: number, b: number]): (index: number) => boolean; +/** + * Returns a function that produces a monotonously increasing sequence of indices. + * + * If the sequence has an end, the returned function will return `null` after + * the last index in the sequence. + * + * @param parsed A tuple [a, b], as returned by `parse`. + * @returns A function that produces a sequence of indices. + * @example Always increasing (2n+3) + * + * ```js + * const gen = nthCheck.generate([2, 3]) + * + * gen() // `1` + * gen() // `3` + * gen() // `5` + * gen() // `8` + * gen() // `11` + * ``` + * + * @example With end value (-2n+10) + * + * ```js + * + * const gen = nthCheck.generate([-2, 5]); + * + * gen() // 0 + * gen() // 2 + * gen() // 4 + * gen() // null + * ``` + */ +export declare function generate(parsed: [a: number, b: number]): () => number | null; +//# sourceMappingURL=compile.d.ts.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/compile.d.ts.map b/node_modules/nth-check/lib/compile.d.ts.map new file mode 100644 index 0000000..bb64f76 --- /dev/null +++ b/node_modules/nth-check/lib/compile.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"compile.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["compile.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,OAAO,CACnB,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,GAC/B,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAgC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,MAAM,GAAG,IAAI,CA+B5E"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/compile.js b/node_modules/nth-check/lib/compile.js new file mode 100644 index 0000000..cef1af4 --- /dev/null +++ b/node_modules/nth-check/lib/compile.js @@ -0,0 +1,121 @@ +"use strict"; +var __importDefault = (this && this.__importDefault) || function (mod) { + return (mod && mod.__esModule) ? mod : { "default": mod }; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.generate = exports.compile = void 0; +var boolbase_1 = __importDefault(require("boolbase")); +/** + * Returns a function that checks if an elements index matches the given rule + * highly optimized to return the fastest solution. + * + * @param parsed A tuple [a, b], as returned by `parse`. + * @returns A highly optimized function that returns whether an index matches the nth-check. + * @example + * + * ```js + * const check = nthCheck.compile([2, 3]); + * + * check(0); // `false` + * check(1); // `false` + * check(2); // `true` + * check(3); // `false` + * check(4); // `true` + * check(5); // `false` + * check(6); // `true` + * ``` + */ +function compile(parsed) { + var a = parsed[0]; + // Subtract 1 from `b`, to convert from one- to zero-indexed. + var b = parsed[1] - 1; + /* + * When `b <= 0`, `a * n` won't be lead to any matches for `a < 0`. + * Besides, the specification states that no elements are + * matched when `a` and `b` are 0. + * + * `b < 0` here as we subtracted 1 from `b` above. + */ + if (b < 0 && a <= 0) + return boolbase_1.default.falseFunc; + // When `a` is in the range -1..1, it matches any element (so only `b` is checked). + if (a === -1) + return function (index) { return index <= b; }; + if (a === 0) + return function (index) { return index === b; }; + // When `b <= 0` and `a === 1`, they match any element. + if (a === 1) + return b < 0 ? boolbase_1.default.trueFunc : function (index) { return index >= b; }; + /* + * Otherwise, modulo can be used to check if there is a match. + * + * Modulo doesn't care about the sign, so let's use `a`s absolute value. + */ + var absA = Math.abs(a); + // Get `b mod a`, + a if this is negative. + var bMod = ((b % absA) + absA) % absA; + return a > 1 + ? function (index) { return index >= b && index % absA === bMod; } + : function (index) { return index <= b && index % absA === bMod; }; +} +exports.compile = compile; +/** + * Returns a function that produces a monotonously increasing sequence of indices. + * + * If the sequence has an end, the returned function will return `null` after + * the last index in the sequence. + * + * @param parsed A tuple [a, b], as returned by `parse`. + * @returns A function that produces a sequence of indices. + * @example Always increasing (2n+3) + * + * ```js + * const gen = nthCheck.generate([2, 3]) + * + * gen() // `1` + * gen() // `3` + * gen() // `5` + * gen() // `8` + * gen() // `11` + * ``` + * + * @example With end value (-2n+10) + * + * ```js + * + * const gen = nthCheck.generate([-2, 5]); + * + * gen() // 0 + * gen() // 2 + * gen() // 4 + * gen() // null + * ``` + */ +function generate(parsed) { + var a = parsed[0]; + // Subtract 1 from `b`, to convert from one- to zero-indexed. + var b = parsed[1] - 1; + var n = 0; + // Make sure to always return an increasing sequence + if (a < 0) { + var aPos_1 = -a; + // Get `b mod a` + var minValue_1 = ((b % aPos_1) + aPos_1) % aPos_1; + return function () { + var val = minValue_1 + aPos_1 * n++; + return val > b ? null : val; + }; + } + if (a === 0) + return b < 0 + ? // There are no result โ€” always return `null` + function () { return null; } + : // Return `b` exactly once + function () { return (n++ === 0 ? b : null); }; + if (b < 0) { + b += a * Math.ceil(-b / a); + } + return function () { return a * n++ + b; }; +} +exports.generate = generate; +//# sourceMappingURL=compile.js.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/compile.js.map b/node_modules/nth-check/lib/compile.js.map new file mode 100644 index 0000000..06ec5b9 --- /dev/null +++ b/node_modules/nth-check/lib/compile.js.map @@ -0,0 +1 @@ +{"version":3,"file":"compile.js","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["compile.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/compile.d.ts b/node_modules/nth-check/lib/esm/compile.d.ts new file mode 100644 index 0000000..63e9be5 --- /dev/null +++ b/node_modules/nth-check/lib/esm/compile.d.ts @@ -0,0 +1,55 @@ +/** + * Returns a function that checks if an elements index matches the given rule + * highly optimized to return the fastest solution. + * + * @param parsed A tuple [a, b], as returned by `parse`. + * @returns A highly optimized function that returns whether an index matches the nth-check. + * @example + * + * ```js + * const check = nthCheck.compile([2, 3]); + * + * check(0); // `false` + * check(1); // `false` + * check(2); // `true` + * check(3); // `false` + * check(4); // `true` + * check(5); // `false` + * check(6); // `true` + * ``` + */ +export declare function compile(parsed: [a: number, b: number]): (index: number) => boolean; +/** + * Returns a function that produces a monotonously increasing sequence of indices. + * + * If the sequence has an end, the returned function will return `null` after + * the last index in the sequence. + * + * @param parsed A tuple [a, b], as returned by `parse`. + * @returns A function that produces a sequence of indices. + * @example Always increasing (2n+3) + * + * ```js + * const gen = nthCheck.generate([2, 3]) + * + * gen() // `1` + * gen() // `3` + * gen() // `5` + * gen() // `8` + * gen() // `11` + * ``` + * + * @example With end value (-2n+10) + * + * ```js + * + * const gen = nthCheck.generate([-2, 5]); + * + * gen() // 0 + * gen() // 2 + * gen() // 4 + * gen() // null + * ``` + */ +export declare function generate(parsed: [a: number, b: number]): () => number | null; +//# sourceMappingURL=compile.d.ts.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/compile.d.ts.map b/node_modules/nth-check/lib/esm/compile.d.ts.map new file mode 100644 index 0000000..bb64f76 --- /dev/null +++ b/node_modules/nth-check/lib/esm/compile.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"compile.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["compile.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,OAAO,CACnB,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,GAC/B,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAgC5B;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,GAAG,MAAM,MAAM,GAAG,IAAI,CA+B5E"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/compile.js b/node_modules/nth-check/lib/esm/compile.js new file mode 100644 index 0000000..317d378 --- /dev/null +++ b/node_modules/nth-check/lib/esm/compile.js @@ -0,0 +1,113 @@ +import boolbase from "boolbase"; +/** + * Returns a function that checks if an elements index matches the given rule + * highly optimized to return the fastest solution. + * + * @param parsed A tuple [a, b], as returned by `parse`. + * @returns A highly optimized function that returns whether an index matches the nth-check. + * @example + * + * ```js + * const check = nthCheck.compile([2, 3]); + * + * check(0); // `false` + * check(1); // `false` + * check(2); // `true` + * check(3); // `false` + * check(4); // `true` + * check(5); // `false` + * check(6); // `true` + * ``` + */ +export function compile(parsed) { + const a = parsed[0]; + // Subtract 1 from `b`, to convert from one- to zero-indexed. + const b = parsed[1] - 1; + /* + * When `b <= 0`, `a * n` won't be lead to any matches for `a < 0`. + * Besides, the specification states that no elements are + * matched when `a` and `b` are 0. + * + * `b < 0` here as we subtracted 1 from `b` above. + */ + if (b < 0 && a <= 0) + return boolbase.falseFunc; + // When `a` is in the range -1..1, it matches any element (so only `b` is checked). + if (a === -1) + return (index) => index <= b; + if (a === 0) + return (index) => index === b; + // When `b <= 0` and `a === 1`, they match any element. + if (a === 1) + return b < 0 ? boolbase.trueFunc : (index) => index >= b; + /* + * Otherwise, modulo can be used to check if there is a match. + * + * Modulo doesn't care about the sign, so let's use `a`s absolute value. + */ + const absA = Math.abs(a); + // Get `b mod a`, + a if this is negative. + const bMod = ((b % absA) + absA) % absA; + return a > 1 + ? (index) => index >= b && index % absA === bMod + : (index) => index <= b && index % absA === bMod; +} +/** + * Returns a function that produces a monotonously increasing sequence of indices. + * + * If the sequence has an end, the returned function will return `null` after + * the last index in the sequence. + * + * @param parsed A tuple [a, b], as returned by `parse`. + * @returns A function that produces a sequence of indices. + * @example Always increasing (2n+3) + * + * ```js + * const gen = nthCheck.generate([2, 3]) + * + * gen() // `1` + * gen() // `3` + * gen() // `5` + * gen() // `8` + * gen() // `11` + * ``` + * + * @example With end value (-2n+10) + * + * ```js + * + * const gen = nthCheck.generate([-2, 5]); + * + * gen() // 0 + * gen() // 2 + * gen() // 4 + * gen() // null + * ``` + */ +export function generate(parsed) { + const a = parsed[0]; + // Subtract 1 from `b`, to convert from one- to zero-indexed. + let b = parsed[1] - 1; + let n = 0; + // Make sure to always return an increasing sequence + if (a < 0) { + const aPos = -a; + // Get `b mod a` + const minValue = ((b % aPos) + aPos) % aPos; + return () => { + const val = minValue + aPos * n++; + return val > b ? null : val; + }; + } + if (a === 0) + return b < 0 + ? // There are no result โ€” always return `null` + () => null + : // Return `b` exactly once + () => (n++ === 0 ? b : null); + if (b < 0) { + b += a * Math.ceil(-b / a); + } + return () => a * n++ + b; +} +//# sourceMappingURL=compile.js.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/compile.js.map b/node_modules/nth-check/lib/esm/compile.js.map new file mode 100644 index 0000000..8eccbba --- /dev/null +++ b/node_modules/nth-check/lib/esm/compile.js.map @@ -0,0 +1 @@ +{"version":3,"file":"compile.js","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["compile.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAEhC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,OAAO,CACnB,MAA8B;IAE9B,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,6DAA6D;IAC7D,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAExB;;;;;;OAMG;IACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC,SAAS,CAAC;IAE/C,mFAAmF;IACnF,IAAI,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;IAC3C,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,CAAC,CAAC;IAC3C,uDAAuD;IACvD,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;IAEtE;;;;OAIG;IACH,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACzB,0CAA0C;IAC1C,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAExC,OAAO,CAAC,GAAG,CAAC;QACR,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,KAAK,IAAI;QAChD,CAAC,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,IAAI,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC;AACzD,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,MAAM,UAAU,QAAQ,CAAC,MAA8B;IACnD,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,6DAA6D;IAC7D,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAEtB,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,oDAAoD;IACpD,IAAI,CAAC,GAAG,CAAC,EAAE;QACP,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC;QAChB,gBAAgB;QAChB,MAAM,QAAQ,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;QAC5C,OAAO,GAAG,EAAE;YACR,MAAM,GAAG,GAAG,QAAQ,GAAG,IAAI,GAAG,CAAC,EAAE,CAAC;YAElC,OAAO,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC;QAChC,CAAC,CAAC;KACL;IAED,IAAI,CAAC,KAAK,CAAC;QACP,OAAO,CAAC,GAAG,CAAC;YACR,CAAC,CAAC,6CAA6C;gBAC7C,GAAG,EAAE,CAAC,IAAI;YACZ,CAAC,CAAC,0BAA0B;gBAC1B,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAEvC,IAAI,CAAC,GAAG,CAAC,EAAE;QACP,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;KAC9B;IAED,OAAO,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7B,CAAC"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/index.d.ts b/node_modules/nth-check/lib/esm/index.d.ts new file mode 100644 index 0000000..2cddd39 --- /dev/null +++ b/node_modules/nth-check/lib/esm/index.d.ts @@ -0,0 +1,59 @@ +import { parse } from "./parse.js"; +import { compile, generate } from "./compile.js"; +export { parse, compile, generate }; +/** + * Parses and compiles a formula to a highly optimized function. + * Combination of {@link parse} and {@link compile}. + * + * If the formula doesn't match any elements, + * it returns [`boolbase`](https://github.com/fb55/boolbase)'s `falseFunc`. + * Otherwise, a function accepting an _index_ is returned, which returns + * whether or not the passed _index_ matches the formula. + * + * Note: The nth-rule starts counting at `1`, the returned function at `0`. + * + * @param formula The formula to compile. + * @example + * const check = nthCheck("2n+3"); + * + * check(0); // `false` + * check(1); // `false` + * check(2); // `true` + * check(3); // `false` + * check(4); // `true` + * check(5); // `false` + * check(6); // `true` + */ +export default function nthCheck(formula: string): (index: number) => boolean; +/** + * Parses and compiles a formula to a generator that produces a sequence of indices. + * Combination of {@link parse} and {@link generate}. + * + * @param formula The formula to compile. + * @returns A function that produces a sequence of indices. + * @example Always increasing + * + * ```js + * const gen = nthCheck.sequence('2n+3') + * + * gen() // `1` + * gen() // `3` + * gen() // `5` + * gen() // `8` + * gen() // `11` + * ``` + * + * @example With end value + * + * ```js + * + * const gen = nthCheck.sequence('-2n+5'); + * + * gen() // 0 + * gen() // 2 + * gen() // 4 + * gen() // null + * ``` + */ +export declare function sequence(formula: string): () => number | null; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/index.d.ts.map b/node_modules/nth-check/lib/esm/index.d.ts.map new file mode 100644 index 0000000..17f9cdb --- /dev/null +++ b/node_modules/nth-check/lib/esm/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAE5E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,MAAM,GAAG,IAAI,CAE7D"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/index.js b/node_modules/nth-check/lib/esm/index.js new file mode 100644 index 0000000..ae0a6f8 --- /dev/null +++ b/node_modules/nth-check/lib/esm/index.js @@ -0,0 +1,63 @@ +import { parse } from "./parse.js"; +import { compile, generate } from "./compile.js"; +export { parse, compile, generate }; +/** + * Parses and compiles a formula to a highly optimized function. + * Combination of {@link parse} and {@link compile}. + * + * If the formula doesn't match any elements, + * it returns [`boolbase`](https://github.com/fb55/boolbase)'s `falseFunc`. + * Otherwise, a function accepting an _index_ is returned, which returns + * whether or not the passed _index_ matches the formula. + * + * Note: The nth-rule starts counting at `1`, the returned function at `0`. + * + * @param formula The formula to compile. + * @example + * const check = nthCheck("2n+3"); + * + * check(0); // `false` + * check(1); // `false` + * check(2); // `true` + * check(3); // `false` + * check(4); // `true` + * check(5); // `false` + * check(6); // `true` + */ +export default function nthCheck(formula) { + return compile(parse(formula)); +} +/** + * Parses and compiles a formula to a generator that produces a sequence of indices. + * Combination of {@link parse} and {@link generate}. + * + * @param formula The formula to compile. + * @returns A function that produces a sequence of indices. + * @example Always increasing + * + * ```js + * const gen = nthCheck.sequence('2n+3') + * + * gen() // `1` + * gen() // `3` + * gen() // `5` + * gen() // `8` + * gen() // `11` + * ``` + * + * @example With end value + * + * ```js + * + * const gen = nthCheck.sequence('-2n+5'); + * + * gen() // 0 + * gen() // 2 + * gen() // 4 + * gen() // null + * ``` + */ +export function sequence(formula) { + return generate(parse(formula)); +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/index.js.map b/node_modules/nth-check/lib/esm/index.js.map new file mode 100644 index 0000000..f0b6906 --- /dev/null +++ b/node_modules/nth-check/lib/esm/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,OAAe;IAC5C,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe;IACpC,OAAO,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;AACpC,CAAC"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/package.json b/node_modules/nth-check/lib/esm/package.json new file mode 100644 index 0000000..089153b --- /dev/null +++ b/node_modules/nth-check/lib/esm/package.json @@ -0,0 +1 @@ +{"type":"module"} diff --git a/node_modules/nth-check/lib/esm/parse.d.ts b/node_modules/nth-check/lib/esm/parse.d.ts new file mode 100644 index 0000000..b4f817b --- /dev/null +++ b/node_modules/nth-check/lib/esm/parse.d.ts @@ -0,0 +1,9 @@ +/** + * Parses an expression. + * + * @throws An `Error` if parsing fails. + * @returns An array containing the integer step size and the integer offset of the nth rule. + * @example nthCheck.parse("2n+3"); // returns [2, 3] + */ +export declare function parse(formula: string): [a: number, b: number]; +//# sourceMappingURL=parse.d.ts.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/parse.d.ts.map b/node_modules/nth-check/lib/esm/parse.d.ts.map new file mode 100644 index 0000000..8cd4788 --- /dev/null +++ b/node_modules/nth-check/lib/esm/parse.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"parse.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["parse.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CA6E7D"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/parse.js b/node_modules/nth-check/lib/esm/parse.js new file mode 100644 index 0000000..96d1d48 --- /dev/null +++ b/node_modules/nth-check/lib/esm/parse.js @@ -0,0 +1,73 @@ +// Following http://www.w3.org/TR/css3-selectors/#nth-child-pseudo +// Whitespace as per https://www.w3.org/TR/selectors-3/#lex is " \t\r\n\f" +const whitespace = new Set([9, 10, 12, 13, 32]); +const ZERO = "0".charCodeAt(0); +const NINE = "9".charCodeAt(0); +/** + * Parses an expression. + * + * @throws An `Error` if parsing fails. + * @returns An array containing the integer step size and the integer offset of the nth rule. + * @example nthCheck.parse("2n+3"); // returns [2, 3] + */ +export function parse(formula) { + formula = formula.trim().toLowerCase(); + if (formula === "even") { + return [2, 0]; + } + else if (formula === "odd") { + return [2, 1]; + } + // Parse [ ['-'|'+']? INTEGER? {N} [ S* ['-'|'+'] S* INTEGER ]? + let idx = 0; + let a = 0; + let sign = readSign(); + let number = readNumber(); + if (idx < formula.length && formula.charAt(idx) === "n") { + idx++; + a = sign * (number !== null && number !== void 0 ? number : 1); + skipWhitespace(); + if (idx < formula.length) { + sign = readSign(); + skipWhitespace(); + number = readNumber(); + } + else { + sign = number = 0; + } + } + // Throw if there is anything else + if (number === null || idx < formula.length) { + throw new Error(`n-th rule couldn't be parsed ('${formula}')`); + } + return [a, sign * number]; + function readSign() { + if (formula.charAt(idx) === "-") { + idx++; + return -1; + } + if (formula.charAt(idx) === "+") { + idx++; + } + return 1; + } + function readNumber() { + const start = idx; + let value = 0; + while (idx < formula.length && + formula.charCodeAt(idx) >= ZERO && + formula.charCodeAt(idx) <= NINE) { + value = value * 10 + (formula.charCodeAt(idx) - ZERO); + idx++; + } + // Return `null` if we didn't read anything. + return idx === start ? null : value; + } + function skipWhitespace() { + while (idx < formula.length && + whitespace.has(formula.charCodeAt(idx))) { + idx++; + } + } +} +//# sourceMappingURL=parse.js.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/esm/parse.js.map b/node_modules/nth-check/lib/esm/parse.js.map new file mode 100644 index 0000000..33b6e33 --- /dev/null +++ b/node_modules/nth-check/lib/esm/parse.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parse.js","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/index.d.ts b/node_modules/nth-check/lib/index.d.ts new file mode 100644 index 0000000..2cddd39 --- /dev/null +++ b/node_modules/nth-check/lib/index.d.ts @@ -0,0 +1,59 @@ +import { parse } from "./parse.js"; +import { compile, generate } from "./compile.js"; +export { parse, compile, generate }; +/** + * Parses and compiles a formula to a highly optimized function. + * Combination of {@link parse} and {@link compile}. + * + * If the formula doesn't match any elements, + * it returns [`boolbase`](https://github.com/fb55/boolbase)'s `falseFunc`. + * Otherwise, a function accepting an _index_ is returned, which returns + * whether or not the passed _index_ matches the formula. + * + * Note: The nth-rule starts counting at `1`, the returned function at `0`. + * + * @param formula The formula to compile. + * @example + * const check = nthCheck("2n+3"); + * + * check(0); // `false` + * check(1); // `false` + * check(2); // `true` + * check(3); // `false` + * check(4); // `true` + * check(5); // `false` + * check(6); // `true` + */ +export default function nthCheck(formula: string): (index: number) => boolean; +/** + * Parses and compiles a formula to a generator that produces a sequence of indices. + * Combination of {@link parse} and {@link generate}. + * + * @param formula The formula to compile. + * @returns A function that produces a sequence of indices. + * @example Always increasing + * + * ```js + * const gen = nthCheck.sequence('2n+3') + * + * gen() // `1` + * gen() // `3` + * gen() // `5` + * gen() // `8` + * gen() // `11` + * ``` + * + * @example With end value + * + * ```js + * + * const gen = nthCheck.sequence('-2n+5'); + * + * gen() // 0 + * gen() // 2 + * gen() // 4 + * gen() // null + * ``` + */ +export declare function sequence(formula: string): () => number | null; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/index.d.ts.map b/node_modules/nth-check/lib/index.d.ts.map new file mode 100644 index 0000000..17f9cdb --- /dev/null +++ b/node_modules/nth-check/lib/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEjD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC;AAEpC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,OAAO,UAAU,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAE5E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,MAAM,GAAG,IAAI,CAE7D"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/index.js b/node_modules/nth-check/lib/index.js new file mode 100644 index 0000000..30a7e29 --- /dev/null +++ b/node_modules/nth-check/lib/index.js @@ -0,0 +1,70 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.sequence = exports.generate = exports.compile = exports.parse = void 0; +var parse_js_1 = require("./parse.js"); +Object.defineProperty(exports, "parse", { enumerable: true, get: function () { return parse_js_1.parse; } }); +var compile_js_1 = require("./compile.js"); +Object.defineProperty(exports, "compile", { enumerable: true, get: function () { return compile_js_1.compile; } }); +Object.defineProperty(exports, "generate", { enumerable: true, get: function () { return compile_js_1.generate; } }); +/** + * Parses and compiles a formula to a highly optimized function. + * Combination of {@link parse} and {@link compile}. + * + * If the formula doesn't match any elements, + * it returns [`boolbase`](https://github.com/fb55/boolbase)'s `falseFunc`. + * Otherwise, a function accepting an _index_ is returned, which returns + * whether or not the passed _index_ matches the formula. + * + * Note: The nth-rule starts counting at `1`, the returned function at `0`. + * + * @param formula The formula to compile. + * @example + * const check = nthCheck("2n+3"); + * + * check(0); // `false` + * check(1); // `false` + * check(2); // `true` + * check(3); // `false` + * check(4); // `true` + * check(5); // `false` + * check(6); // `true` + */ +function nthCheck(formula) { + return (0, compile_js_1.compile)((0, parse_js_1.parse)(formula)); +} +exports.default = nthCheck; +/** + * Parses and compiles a formula to a generator that produces a sequence of indices. + * Combination of {@link parse} and {@link generate}. + * + * @param formula The formula to compile. + * @returns A function that produces a sequence of indices. + * @example Always increasing + * + * ```js + * const gen = nthCheck.sequence('2n+3') + * + * gen() // `1` + * gen() // `3` + * gen() // `5` + * gen() // `8` + * gen() // `11` + * ``` + * + * @example With end value + * + * ```js + * + * const gen = nthCheck.sequence('-2n+5'); + * + * gen() // 0 + * gen() // 2 + * gen() // 4 + * gen() // null + * ``` + */ +function sequence(formula) { + return (0, compile_js_1.generate)((0, parse_js_1.parse)(formula)); +} +exports.sequence = sequence; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/index.js.map b/node_modules/nth-check/lib/index.js.map new file mode 100644 index 0000000..78a1bc5 --- /dev/null +++ b/node_modules/nth-check/lib/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["index.ts"],"names":[],"mappings":";;;AAAA,uCAAmC;AAG1B,sFAHA,gBAAK,OAGA;AAFd,2CAAiD;AAEjC,wFAFP,oBAAO,OAEO;AAAE,yFAFP,qBAAQ,OAEO;AAEjC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,SAAwB,QAAQ,CAAC,OAAe;IAC5C,OAAO,IAAA,oBAAO,EAAC,IAAA,gBAAK,EAAC,OAAO,CAAC,CAAC,CAAC;AACnC,CAAC;AAFD,2BAEC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AACH,SAAgB,QAAQ,CAAC,OAAe;IACpC,OAAO,IAAA,qBAAQ,EAAC,IAAA,gBAAK,EAAC,OAAO,CAAC,CAAC,CAAC;AACpC,CAAC;AAFD,4BAEC"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/parse.d.ts b/node_modules/nth-check/lib/parse.d.ts new file mode 100644 index 0000000..b4f817b --- /dev/null +++ b/node_modules/nth-check/lib/parse.d.ts @@ -0,0 +1,9 @@ +/** + * Parses an expression. + * + * @throws An `Error` if parsing fails. + * @returns An array containing the integer step size and the integer offset of the nth rule. + * @example nthCheck.parse("2n+3"); // returns [2, 3] + */ +export declare function parse(formula: string): [a: number, b: number]; +//# sourceMappingURL=parse.d.ts.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/parse.d.ts.map b/node_modules/nth-check/lib/parse.d.ts.map new file mode 100644 index 0000000..8cd4788 --- /dev/null +++ b/node_modules/nth-check/lib/parse.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"parse.d.ts","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["parse.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,CAAC,CA6E7D"} \ No newline at end of file diff --git a/node_modules/nth-check/lib/parse.js b/node_modules/nth-check/lib/parse.js new file mode 100644 index 0000000..904244c --- /dev/null +++ b/node_modules/nth-check/lib/parse.js @@ -0,0 +1,77 @@ +"use strict"; +// Following http://www.w3.org/TR/css3-selectors/#nth-child-pseudo +Object.defineProperty(exports, "__esModule", { value: true }); +exports.parse = void 0; +// Whitespace as per https://www.w3.org/TR/selectors-3/#lex is " \t\r\n\f" +var whitespace = new Set([9, 10, 12, 13, 32]); +var ZERO = "0".charCodeAt(0); +var NINE = "9".charCodeAt(0); +/** + * Parses an expression. + * + * @throws An `Error` if parsing fails. + * @returns An array containing the integer step size and the integer offset of the nth rule. + * @example nthCheck.parse("2n+3"); // returns [2, 3] + */ +function parse(formula) { + formula = formula.trim().toLowerCase(); + if (formula === "even") { + return [2, 0]; + } + else if (formula === "odd") { + return [2, 1]; + } + // Parse [ ['-'|'+']? INTEGER? {N} [ S* ['-'|'+'] S* INTEGER ]? + var idx = 0; + var a = 0; + var sign = readSign(); + var number = readNumber(); + if (idx < formula.length && formula.charAt(idx) === "n") { + idx++; + a = sign * (number !== null && number !== void 0 ? number : 1); + skipWhitespace(); + if (idx < formula.length) { + sign = readSign(); + skipWhitespace(); + number = readNumber(); + } + else { + sign = number = 0; + } + } + // Throw if there is anything else + if (number === null || idx < formula.length) { + throw new Error("n-th rule couldn't be parsed ('".concat(formula, "')")); + } + return [a, sign * number]; + function readSign() { + if (formula.charAt(idx) === "-") { + idx++; + return -1; + } + if (formula.charAt(idx) === "+") { + idx++; + } + return 1; + } + function readNumber() { + var start = idx; + var value = 0; + while (idx < formula.length && + formula.charCodeAt(idx) >= ZERO && + formula.charCodeAt(idx) <= NINE) { + value = value * 10 + (formula.charCodeAt(idx) - ZERO); + idx++; + } + // Return `null` if we didn't read anything. + return idx === start ? null : value; + } + function skipWhitespace() { + while (idx < formula.length && + whitespace.has(formula.charCodeAt(idx))) { + idx++; + } + } +} +exports.parse = parse; +//# sourceMappingURL=parse.js.map \ No newline at end of file diff --git a/node_modules/nth-check/lib/parse.js.map b/node_modules/nth-check/lib/parse.js.map new file mode 100644 index 0000000..c326b3d --- /dev/null +++ b/node_modules/nth-check/lib/parse.js.map @@ -0,0 +1 @@ +{"version":3,"file":"parse.js","sourceRoot":"https://raw.githubusercontent.com/fb55/nth-check/639fd2a4000b69f82350aad8c34cb43f77e483ba/src/","sources":["parse.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/nth-check/package.json b/node_modules/nth-check/package.json new file mode 100644 index 0000000..45ebe83 --- /dev/null +++ b/node_modules/nth-check/package.json @@ -0,0 +1,78 @@ +{ + "name": "nth-check", + "version": "2.1.1", + "description": "Parses and compiles CSS nth-checks to highly optimized functions.", + "author": "Felix Boehm ", + "license": "BSD-2-Clause", + "sideEffects": false, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + }, + "directories": { + "lib": "lib/" + }, + "main": "lib/index.js", + "types": "lib/index.d.ts", + "module": "lib/esm/index.js", + "exports": { + "require": "./lib/index.js", + "import": "./lib/esm/index.js" + }, + "files": [ + "lib/**/*" + ], + "scripts": { + "test": "npm run test:jest && npm run lint", + "test:jest": "jest", + "lint": "npm run lint:es && npm run lint:prettier", + "lint:es": "eslint .", + "lint:prettier": "npm run prettier -- --check", + "format": "npm run format:es && npm run format:prettier", + "format:es": "npm run lint:es -- --fix", + "format:prettier": "npm run prettier -- --write", + "prettier": "prettier '**/*.{ts,md,json,yml}'", + "build": "npm run build:cjs && npm run build:esm", + "build:cjs": "tsc --sourceRoot https://raw.githubusercontent.com/fb55/nth-check/$(git rev-parse HEAD)/src/", + "build:esm": "npm run build:cjs -- --module esnext --target es2019 --outDir lib/esm && echo '{\"type\":\"module\"}' > lib/esm/package.json", + "prepare": "npm run build" + }, + "repository": { + "type": "git", + "url": "https://github.com/fb55/nth-check" + }, + "keywords": [ + "nth-child", + "nth", + "css" + ], + "bugs": { + "url": "https://github.com/fb55/nth-check/issues" + }, + "homepage": "https://github.com/fb55/nth-check", + "dependencies": { + "boolbase": "^1.0.0" + }, + "devDependencies": { + "@types/boolbase": "^1.0.1", + "@types/jest": "^27.5.0", + "@types/node": "^17.0.35", + "@typescript-eslint/eslint-plugin": "^5.25.0", + "@typescript-eslint/parser": "^5.25.0", + "eslint": "^8.15.0", + "eslint-config-prettier": "^8.5.0", + "jest": "^27.5.1", + "prettier": "^2.6.2", + "ts-jest": "^27.1.4", + "typescript": "^4.6.4" + }, + "jest": { + "preset": "ts-jest", + "testEnvironment": "node", + "moduleNameMapper": { + "^(.*)\\.js$": "$1" + } + }, + "prettier": { + "tabWidth": 4 + } +} diff --git a/node_modules/parse5-htmlparser2-tree-adapter/LICENSE b/node_modules/parse5-htmlparser2-tree-adapter/LICENSE new file mode 100644 index 0000000..f3265d4 --- /dev/null +++ b/node_modules/parse5-htmlparser2-tree-adapter/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2013-2019 Ivan Nikulin (ifaaan@gmail.com, https://github.com/inikulin) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/parse5-htmlparser2-tree-adapter/README.md b/node_modules/parse5-htmlparser2-tree-adapter/README.md new file mode 100644 index 0000000..a2d272f --- /dev/null +++ b/node_modules/parse5-htmlparser2-tree-adapter/README.md @@ -0,0 +1,34 @@ +

    + + parse5 + +

    + +
    +

    parse5-htmlparser2-tree-adapter

    +htmlparser2 tree adapter for parse5. +
    +
    + +
    +npm install --save parse5-htmlparser2-tree-adapter +
    +
    + +

    + ๐Ÿ“– Documentation ๐Ÿ“– +

    + +--- + +

    + List of parse5 toolset packages +

    + +

    + GitHub +

    + +

    + Changelog +

    diff --git a/node_modules/parse5-htmlparser2-tree-adapter/dist/cjs/index.d.ts b/node_modules/parse5-htmlparser2-tree-adapter/dist/cjs/index.d.ts new file mode 100644 index 0000000..47e1f66 --- /dev/null +++ b/node_modules/parse5-htmlparser2-tree-adapter/dist/cjs/index.d.ts @@ -0,0 +1,6 @@ +import { type TreeAdapterTypeMap, type TreeAdapter } from 'parse5'; +import { type AnyNode, type ParentNode, type ChildNode, Element, Document, ProcessingInstruction, Comment, Text } from 'domhandler'; +export type Htmlparser2TreeAdapterMap = TreeAdapterTypeMap; +/** @internal */ +export declare function serializeDoctypeContent(name: string, publicId: string, systemId: string): string; +export declare const adapter: TreeAdapter; diff --git a/node_modules/parse5-htmlparser2-tree-adapter/dist/cjs/index.js b/node_modules/parse5-htmlparser2-tree-adapter/dist/cjs/index.js new file mode 100644 index 0000000..386066b --- /dev/null +++ b/node_modules/parse5-htmlparser2-tree-adapter/dist/cjs/index.js @@ -0,0 +1,214 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.adapter = void 0; +exports.serializeDoctypeContent = serializeDoctypeContent; +const parse5_1 = require("parse5"); +const domhandler_1 = require("domhandler"); +function enquoteDoctypeId(id) { + const quote = id.includes('"') ? "'" : '"'; + return quote + id + quote; +} +/** @internal */ +function serializeDoctypeContent(name, publicId, systemId) { + let str = '!DOCTYPE '; + if (name) { + str += name; + } + if (publicId) { + str += ` PUBLIC ${enquoteDoctypeId(publicId)}`; + } + else if (systemId) { + str += ' SYSTEM'; + } + if (systemId) { + str += ` ${enquoteDoctypeId(systemId)}`; + } + return str; +} +exports.adapter = { + // Re-exports from domhandler + isCommentNode: domhandler_1.isComment, + isElementNode: domhandler_1.isTag, + isTextNode: domhandler_1.isText, + //Node construction + createDocument() { + const node = new domhandler_1.Document([]); + node['x-mode'] = parse5_1.html.DOCUMENT_MODE.NO_QUIRKS; + return node; + }, + createDocumentFragment() { + return new domhandler_1.Document([]); + }, + createElement(tagName, namespaceURI, attrs) { + const attribs = Object.create(null); + const attribsNamespace = Object.create(null); + const attribsPrefix = Object.create(null); + for (let i = 0; i < attrs.length; i++) { + const attrName = attrs[i].name; + attribs[attrName] = attrs[i].value; + attribsNamespace[attrName] = attrs[i].namespace; + attribsPrefix[attrName] = attrs[i].prefix; + } + const node = new domhandler_1.Element(tagName, attribs, []); + node.namespace = namespaceURI; + node['x-attribsNamespace'] = attribsNamespace; + node['x-attribsPrefix'] = attribsPrefix; + return node; + }, + createCommentNode(data) { + return new domhandler_1.Comment(data); + }, + createTextNode(value) { + return new domhandler_1.Text(value); + }, + //Tree mutation + appendChild(parentNode, newNode) { + const prev = parentNode.children[parentNode.children.length - 1]; + if (prev) { + prev.next = newNode; + newNode.prev = prev; + } + parentNode.children.push(newNode); + newNode.parent = parentNode; + }, + insertBefore(parentNode, newNode, referenceNode) { + const insertionIdx = parentNode.children.indexOf(referenceNode); + const { prev } = referenceNode; + if (prev) { + prev.next = newNode; + newNode.prev = prev; + } + referenceNode.prev = newNode; + newNode.next = referenceNode; + parentNode.children.splice(insertionIdx, 0, newNode); + newNode.parent = parentNode; + }, + setTemplateContent(templateElement, contentElement) { + exports.adapter.appendChild(templateElement, contentElement); + }, + getTemplateContent(templateElement) { + return templateElement.children[0]; + }, + setDocumentType(document, name, publicId, systemId) { + const data = serializeDoctypeContent(name, publicId, systemId); + let doctypeNode = document.children.find((node) => (0, domhandler_1.isDirective)(node) && node.name === '!doctype'); + if (doctypeNode) { + doctypeNode.data = data !== null && data !== void 0 ? data : null; + } + else { + doctypeNode = new domhandler_1.ProcessingInstruction('!doctype', data); + exports.adapter.appendChild(document, doctypeNode); + } + doctypeNode['x-name'] = name; + doctypeNode['x-publicId'] = publicId; + doctypeNode['x-systemId'] = systemId; + }, + setDocumentMode(document, mode) { + document['x-mode'] = mode; + }, + getDocumentMode(document) { + return document['x-mode']; + }, + detachNode(node) { + if (node.parent) { + const idx = node.parent.children.indexOf(node); + const { prev, next } = node; + node.prev = null; + node.next = null; + if (prev) { + prev.next = next; + } + if (next) { + next.prev = prev; + } + node.parent.children.splice(idx, 1); + node.parent = null; + } + }, + insertText(parentNode, text) { + const lastChild = parentNode.children[parentNode.children.length - 1]; + if (lastChild && (0, domhandler_1.isText)(lastChild)) { + lastChild.data += text; + } + else { + exports.adapter.appendChild(parentNode, exports.adapter.createTextNode(text)); + } + }, + insertTextBefore(parentNode, text, referenceNode) { + const prevNode = parentNode.children[parentNode.children.indexOf(referenceNode) - 1]; + if (prevNode && (0, domhandler_1.isText)(prevNode)) { + prevNode.data += text; + } + else { + exports.adapter.insertBefore(parentNode, exports.adapter.createTextNode(text), referenceNode); + } + }, + adoptAttributes(recipient, attrs) { + for (let i = 0; i < attrs.length; i++) { + const attrName = attrs[i].name; + if (recipient.attribs[attrName] === undefined) { + recipient.attribs[attrName] = attrs[i].value; + recipient['x-attribsNamespace'][attrName] = attrs[i].namespace; + recipient['x-attribsPrefix'][attrName] = attrs[i].prefix; + } + } + }, + //Tree traversing + getFirstChild(node) { + return node.children[0]; + }, + getChildNodes(node) { + return node.children; + }, + getParentNode(node) { + return node.parent; + }, + getAttrList(element) { + return element.attributes; + }, + //Node data + getTagName(element) { + return element.name; + }, + getNamespaceURI(element) { + return element.namespace; + }, + getTextNodeContent(textNode) { + return textNode.data; + }, + getCommentNodeContent(commentNode) { + return commentNode.data; + }, + getDocumentTypeNodeName(doctypeNode) { + var _a; + return (_a = doctypeNode['x-name']) !== null && _a !== void 0 ? _a : ''; + }, + getDocumentTypeNodePublicId(doctypeNode) { + var _a; + return (_a = doctypeNode['x-publicId']) !== null && _a !== void 0 ? _a : ''; + }, + getDocumentTypeNodeSystemId(doctypeNode) { + var _a; + return (_a = doctypeNode['x-systemId']) !== null && _a !== void 0 ? _a : ''; + }, + //Node types + isDocumentTypeNode(node) { + return (0, domhandler_1.isDirective)(node) && node.name === '!doctype'; + }, + // Source code location + setNodeSourceCodeLocation(node, location) { + if (location) { + node.startIndex = location.startOffset; + node.endIndex = location.endOffset; + } + node.sourceCodeLocation = location; + }, + getNodeSourceCodeLocation(node) { + return node.sourceCodeLocation; + }, + updateNodeSourceCodeLocation(node, endLocation) { + if (endLocation.endOffset != null) + node.endIndex = endLocation.endOffset; + node.sourceCodeLocation = Object.assign(Object.assign({}, node.sourceCodeLocation), endLocation); + }, +}; diff --git a/node_modules/parse5-htmlparser2-tree-adapter/dist/cjs/package.json b/node_modules/parse5-htmlparser2-tree-adapter/dist/cjs/package.json new file mode 100644 index 0000000..729ac4d --- /dev/null +++ b/node_modules/parse5-htmlparser2-tree-adapter/dist/cjs/package.json @@ -0,0 +1 @@ +{"type":"commonjs"} diff --git a/node_modules/parse5-htmlparser2-tree-adapter/dist/index.d.ts b/node_modules/parse5-htmlparser2-tree-adapter/dist/index.d.ts new file mode 100644 index 0000000..47e1f66 --- /dev/null +++ b/node_modules/parse5-htmlparser2-tree-adapter/dist/index.d.ts @@ -0,0 +1,6 @@ +import { type TreeAdapterTypeMap, type TreeAdapter } from 'parse5'; +import { type AnyNode, type ParentNode, type ChildNode, Element, Document, ProcessingInstruction, Comment, Text } from 'domhandler'; +export type Htmlparser2TreeAdapterMap = TreeAdapterTypeMap; +/** @internal */ +export declare function serializeDoctypeContent(name: string, publicId: string, systemId: string): string; +export declare const adapter: TreeAdapter; diff --git a/node_modules/parse5-htmlparser2-tree-adapter/dist/index.js b/node_modules/parse5-htmlparser2-tree-adapter/dist/index.js new file mode 100644 index 0000000..3927df0 --- /dev/null +++ b/node_modules/parse5-htmlparser2-tree-adapter/dist/index.js @@ -0,0 +1,213 @@ +import { html } from 'parse5'; +import { Element, Document, ProcessingInstruction, Comment, Text, isDirective, isText, isComment, isTag, } from 'domhandler'; +function enquoteDoctypeId(id) { + const quote = id.includes('"') ? "'" : '"'; + return quote + id + quote; +} +/** @internal */ +export function serializeDoctypeContent(name, publicId, systemId) { + let str = '!DOCTYPE '; + if (name) { + str += name; + } + if (publicId) { + str += ` PUBLIC ${enquoteDoctypeId(publicId)}`; + } + else if (systemId) { + str += ' SYSTEM'; + } + if (systemId) { + str += ` ${enquoteDoctypeId(systemId)}`; + } + return str; +} +export const adapter = { + // Re-exports from domhandler + isCommentNode: isComment, + isElementNode: isTag, + isTextNode: isText, + //Node construction + createDocument() { + const node = new Document([]); + node['x-mode'] = html.DOCUMENT_MODE.NO_QUIRKS; + return node; + }, + createDocumentFragment() { + return new Document([]); + }, + createElement(tagName, namespaceURI, attrs) { + const attribs = Object.create(null); + const attribsNamespace = Object.create(null); + const attribsPrefix = Object.create(null); + for (let i = 0; i < attrs.length; i++) { + const attrName = attrs[i].name; + attribs[attrName] = attrs[i].value; + attribsNamespace[attrName] = attrs[i].namespace; + attribsPrefix[attrName] = attrs[i].prefix; + } + const node = new Element(tagName, attribs, []); + node.namespace = namespaceURI; + node['x-attribsNamespace'] = attribsNamespace; + node['x-attribsPrefix'] = attribsPrefix; + return node; + }, + createCommentNode(data) { + return new Comment(data); + }, + createTextNode(value) { + return new Text(value); + }, + //Tree mutation + appendChild(parentNode, newNode) { + const prev = parentNode.children[parentNode.children.length - 1]; + if (prev) { + prev.next = newNode; + newNode.prev = prev; + } + parentNode.children.push(newNode); + newNode.parent = parentNode; + }, + insertBefore(parentNode, newNode, referenceNode) { + const insertionIdx = parentNode.children.indexOf(referenceNode); + const { prev } = referenceNode; + if (prev) { + prev.next = newNode; + newNode.prev = prev; + } + referenceNode.prev = newNode; + newNode.next = referenceNode; + parentNode.children.splice(insertionIdx, 0, newNode); + newNode.parent = parentNode; + }, + setTemplateContent(templateElement, contentElement) { + adapter.appendChild(templateElement, contentElement); + }, + getTemplateContent(templateElement) { + return templateElement.children[0]; + }, + setDocumentType(document, name, publicId, systemId) { + const data = serializeDoctypeContent(name, publicId, systemId); + let doctypeNode = document.children.find((node) => isDirective(node) && node.name === '!doctype'); + if (doctypeNode) { + doctypeNode.data = data !== null && data !== void 0 ? data : null; + } + else { + doctypeNode = new ProcessingInstruction('!doctype', data); + adapter.appendChild(document, doctypeNode); + } + doctypeNode['x-name'] = name; + doctypeNode['x-publicId'] = publicId; + doctypeNode['x-systemId'] = systemId; + }, + setDocumentMode(document, mode) { + document['x-mode'] = mode; + }, + getDocumentMode(document) { + return document['x-mode']; + }, + detachNode(node) { + if (node.parent) { + const idx = node.parent.children.indexOf(node); + const { prev, next } = node; + node.prev = null; + node.next = null; + if (prev) { + prev.next = next; + } + if (next) { + next.prev = prev; + } + node.parent.children.splice(idx, 1); + node.parent = null; + } + }, + insertText(parentNode, text) { + const lastChild = parentNode.children[parentNode.children.length - 1]; + if (lastChild && isText(lastChild)) { + lastChild.data += text; + } + else { + adapter.appendChild(parentNode, adapter.createTextNode(text)); + } + }, + insertTextBefore(parentNode, text, referenceNode) { + const prevNode = parentNode.children[parentNode.children.indexOf(referenceNode) - 1]; + if (prevNode && isText(prevNode)) { + prevNode.data += text; + } + else { + adapter.insertBefore(parentNode, adapter.createTextNode(text), referenceNode); + } + }, + adoptAttributes(recipient, attrs) { + for (let i = 0; i < attrs.length; i++) { + const attrName = attrs[i].name; + if (recipient.attribs[attrName] === undefined) { + recipient.attribs[attrName] = attrs[i].value; + recipient['x-attribsNamespace'][attrName] = attrs[i].namespace; + recipient['x-attribsPrefix'][attrName] = attrs[i].prefix; + } + } + }, + //Tree traversing + getFirstChild(node) { + return node.children[0]; + }, + getChildNodes(node) { + return node.children; + }, + getParentNode(node) { + return node.parent; + }, + getAttrList(element) { + return element.attributes; + }, + //Node data + getTagName(element) { + return element.name; + }, + getNamespaceURI(element) { + return element.namespace; + }, + getTextNodeContent(textNode) { + return textNode.data; + }, + getCommentNodeContent(commentNode) { + return commentNode.data; + }, + getDocumentTypeNodeName(doctypeNode) { + var _a; + return (_a = doctypeNode['x-name']) !== null && _a !== void 0 ? _a : ''; + }, + getDocumentTypeNodePublicId(doctypeNode) { + var _a; + return (_a = doctypeNode['x-publicId']) !== null && _a !== void 0 ? _a : ''; + }, + getDocumentTypeNodeSystemId(doctypeNode) { + var _a; + return (_a = doctypeNode['x-systemId']) !== null && _a !== void 0 ? _a : ''; + }, + //Node types + isDocumentTypeNode(node) { + return isDirective(node) && node.name === '!doctype'; + }, + // Source code location + setNodeSourceCodeLocation(node, location) { + if (location) { + node.startIndex = location.startOffset; + node.endIndex = location.endOffset; + } + node.sourceCodeLocation = location; + }, + getNodeSourceCodeLocation(node) { + return node.sourceCodeLocation; + }, + updateNodeSourceCodeLocation(node, endLocation) { + if (endLocation.endOffset != null) + node.endIndex = endLocation.endOffset; + node.sourceCodeLocation = { + ...node.sourceCodeLocation, + ...endLocation, + }; + }, +}; diff --git a/node_modules/parse5-htmlparser2-tree-adapter/package.json b/node_modules/parse5-htmlparser2-tree-adapter/package.json new file mode 100644 index 0000000..1562d94 --- /dev/null +++ b/node_modules/parse5-htmlparser2-tree-adapter/package.json @@ -0,0 +1,40 @@ +{ + "name": "parse5-htmlparser2-tree-adapter", + "type": "module", + "description": "htmlparser2 tree adapter for parse5.", + "version": "7.1.0", + "author": "Ivan Nikulin (https://github.com/inikulin)", + "contributors": "https://github.com/inikulin/parse5/graphs/contributors", + "homepage": "https://parse5.js.org", + "funding": "https://github.com/inikulin/parse5?sponsor=1", + "keywords": [ + "parse5", + "parser", + "tree adapter", + "htmlparser2" + ], + "license": "MIT", + "main": "dist/cjs/index.js", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + "import": "./dist/index.js", + "require": "./dist/cjs/index.js" + }, + "dependencies": { + "domhandler": "^5.0.3", + "parse5": "^7.0.0" + }, + "scripts": { + "build:cjs": "tsc --moduleResolution node10 --module CommonJS --target ES6 --outDir dist/cjs && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json" + }, + "repository": { + "type": "git", + "url": "git://github.com/inikulin/parse5.git" + }, + "files": [ + "dist/cjs/package.json", + "dist/**/*.js", + "dist/**/*.d.ts" + ] +} diff --git a/node_modules/parse5-parser-stream/LICENSE b/node_modules/parse5-parser-stream/LICENSE new file mode 100644 index 0000000..f3265d4 --- /dev/null +++ b/node_modules/parse5-parser-stream/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2013-2019 Ivan Nikulin (ifaaan@gmail.com, https://github.com/inikulin) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/parse5-parser-stream/README.md b/node_modules/parse5-parser-stream/README.md new file mode 100644 index 0000000..cf24e21 --- /dev/null +++ b/node_modules/parse5-parser-stream/README.md @@ -0,0 +1,34 @@ +

    + + parse5 + +

    + +
    +

    parse5-parser-stream

    +Streaming HTML parser with scripting support. +
    +
    + +
    +npm install --save parse5-parser-stream +
    +
    + +

    + ๐Ÿ“– Documentation ๐Ÿ“– +

    + +--- + +

    + List of parse5 toolset packages +

    + +

    + GitHub +

    + +

    + Changelog +

    diff --git a/node_modules/parse5-parser-stream/dist/cjs/index.d.ts b/node_modules/parse5-parser-stream/dist/cjs/index.d.ts new file mode 100644 index 0000000..b4cc829 --- /dev/null +++ b/node_modules/parse5-parser-stream/dist/cjs/index.d.ts @@ -0,0 +1,85 @@ +/// +import { Writable } from 'node:stream'; +import { Parser, type ParserOptions, type TreeAdapterTypeMap, type DefaultTreeAdapterMap } from 'parse5'; +/** + * Streaming HTML parser with scripting support. + * A [writable stream](https://nodejs.org/api/stream.html#stream_class_stream_writable). + * + * @example + * + * ```js + * const ParserStream = require('parse5-parser-stream'); + * const http = require('http'); + * const { finished } = require('node:stream'); + * + * // Fetch the page content and obtain it's node + * http.get('http://inikulin.github.io/parse5/', res => { + * const parser = new ParserStream(); + * + * finished(parser, () => { + * console.log(parser.document.childNodes[1].childNodes[0].tagName); //> 'head' + * }); + * + * res.pipe(parser); + * }); + * ``` + * + */ +export declare class ParserStream extends Writable { + parser: Parser; + static getFragmentStream(fragmentContext?: T['parentNode'] | null, options?: ParserOptions): ParserStream; + private lastChunkWritten; + private writeCallback; + private pendingHtmlInsertions; + /** The resulting document node. */ + get document(): T['document']; + getFragment(): T['documentFragment']; + /** + * @param options Parsing options. + */ + constructor(options?: ParserOptions, parser?: Parser); + _write(chunk: string, _encoding: string, callback: () => void): void; + end(chunk?: any, encoding?: any, callback?: any): any; +} +export interface ParserStream { + /** + * Raised when parser encounters a `'); + * ``` + * + * @param event Name of the event + * @param handler + */ + on(event: 'script', handler: (scriptElement: T['element'], documentWrite: (html: string) => void, resume: () => void) => void): void; + /** + * Base event handler. + * + * @param event Name of the event + * @param handler Event handler + */ + on(event: string, handler: (...args: any[]) => void): this; +} +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/parse5-parser-stream/dist/cjs/index.js b/node_modules/parse5-parser-stream/dist/cjs/index.js new file mode 100644 index 0000000..a5002be --- /dev/null +++ b/node_modules/parse5-parser-stream/dist/cjs/index.js @@ -0,0 +1,90 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ParserStream = void 0; +const node_stream_1 = require("node:stream"); +const parse5_1 = require("parse5"); +/* eslint-disable unicorn/consistent-function-scoping -- The rule seems to be broken here. */ +/** + * Streaming HTML parser with scripting support. + * A [writable stream](https://nodejs.org/api/stream.html#stream_class_stream_writable). + * + * @example + * + * ```js + * const ParserStream = require('parse5-parser-stream'); + * const http = require('http'); + * const { finished } = require('node:stream'); + * + * // Fetch the page content and obtain it's node + * http.get('http://inikulin.github.io/parse5/', res => { + * const parser = new ParserStream(); + * + * finished(parser, () => { + * console.log(parser.document.childNodes[1].childNodes[0].tagName); //> 'head' + * }); + * + * res.pipe(parser); + * }); + * ``` + * + */ +class ParserStream extends node_stream_1.Writable { + static getFragmentStream(fragmentContext, options) { + const parser = parse5_1.Parser.getFragmentParser(fragmentContext, options); + const stream = new ParserStream(options, parser); + return stream; + } + /** The resulting document node. */ + get document() { + return this.parser.document; + } + getFragment() { + return this.parser.getFragment(); + } + /** + * @param options Parsing options. + */ + constructor(options, parser = new parse5_1.Parser(options)) { + super({ decodeStrings: false }); + this.parser = parser; + this.lastChunkWritten = false; + this.writeCallback = undefined; + this.pendingHtmlInsertions = []; + const resume = () => { + for (let i = this.pendingHtmlInsertions.length - 1; i >= 0; i--) { + this.parser.tokenizer.insertHtmlAtCurrentPos(this.pendingHtmlInsertions[i]); + } + this.pendingHtmlInsertions.length = 0; + //NOTE: keep parsing if we don't wait for the next input chunk + this.parser.tokenizer.resume(this.writeCallback); + }; + const documentWrite = (html) => { + if (!this.parser.stopped) { + this.pendingHtmlInsertions.push(html); + } + }; + const scriptHandler = (scriptElement) => { + if (this.listenerCount('script') > 0) { + this.parser.tokenizer.pause(); + this.emit('script', scriptElement, documentWrite, resume); + } + }; + this.parser.scriptHandler = scriptHandler; + } + //WritableStream implementation + _write(chunk, _encoding, callback) { + if (typeof chunk !== 'string') { + throw new TypeError('Parser can work only with string streams.'); + } + this.writeCallback = callback; + this.parser.tokenizer.write(chunk, this.lastChunkWritten, this.writeCallback); + } + // TODO [engine:node@>=16]: Due to issues with Node < 16, we are overriding `end` instead of `_final`. + // eslint-disable-next-line @typescript-eslint/no-explicit-any + end(chunk, encoding, callback) { + this.lastChunkWritten = true; + super.end(chunk || '', encoding, callback); + } +} +exports.ParserStream = ParserStream; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/parse5-parser-stream/dist/cjs/package.json b/node_modules/parse5-parser-stream/dist/cjs/package.json new file mode 100644 index 0000000..729ac4d --- /dev/null +++ b/node_modules/parse5-parser-stream/dist/cjs/package.json @@ -0,0 +1 @@ +{"type":"commonjs"} diff --git a/node_modules/parse5-parser-stream/dist/index.d.ts b/node_modules/parse5-parser-stream/dist/index.d.ts new file mode 100644 index 0000000..b4cc829 --- /dev/null +++ b/node_modules/parse5-parser-stream/dist/index.d.ts @@ -0,0 +1,85 @@ +/// +import { Writable } from 'node:stream'; +import { Parser, type ParserOptions, type TreeAdapterTypeMap, type DefaultTreeAdapterMap } from 'parse5'; +/** + * Streaming HTML parser with scripting support. + * A [writable stream](https://nodejs.org/api/stream.html#stream_class_stream_writable). + * + * @example + * + * ```js + * const ParserStream = require('parse5-parser-stream'); + * const http = require('http'); + * const { finished } = require('node:stream'); + * + * // Fetch the page content and obtain it's node + * http.get('http://inikulin.github.io/parse5/', res => { + * const parser = new ParserStream(); + * + * finished(parser, () => { + * console.log(parser.document.childNodes[1].childNodes[0].tagName); //> 'head' + * }); + * + * res.pipe(parser); + * }); + * ``` + * + */ +export declare class ParserStream extends Writable { + parser: Parser; + static getFragmentStream(fragmentContext?: T['parentNode'] | null, options?: ParserOptions): ParserStream; + private lastChunkWritten; + private writeCallback; + private pendingHtmlInsertions; + /** The resulting document node. */ + get document(): T['document']; + getFragment(): T['documentFragment']; + /** + * @param options Parsing options. + */ + constructor(options?: ParserOptions, parser?: Parser); + _write(chunk: string, _encoding: string, callback: () => void): void; + end(chunk?: any, encoding?: any, callback?: any): any; +} +export interface ParserStream { + /** + * Raised when parser encounters a `'); + * ``` + * + * @param event Name of the event + * @param handler + */ + on(event: 'script', handler: (scriptElement: T['element'], documentWrite: (html: string) => void, resume: () => void) => void): void; + /** + * Base event handler. + * + * @param event Name of the event + * @param handler Event handler + */ + on(event: string, handler: (...args: any[]) => void): this; +} +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/node_modules/parse5-parser-stream/dist/index.js b/node_modules/parse5-parser-stream/dist/index.js new file mode 100644 index 0000000..56d33dd --- /dev/null +++ b/node_modules/parse5-parser-stream/dist/index.js @@ -0,0 +1,86 @@ +import { Writable } from 'node:stream'; +import { Parser } from 'parse5'; +/* eslint-disable unicorn/consistent-function-scoping -- The rule seems to be broken here. */ +/** + * Streaming HTML parser with scripting support. + * A [writable stream](https://nodejs.org/api/stream.html#stream_class_stream_writable). + * + * @example + * + * ```js + * const ParserStream = require('parse5-parser-stream'); + * const http = require('http'); + * const { finished } = require('node:stream'); + * + * // Fetch the page content and obtain it's node + * http.get('http://inikulin.github.io/parse5/', res => { + * const parser = new ParserStream(); + * + * finished(parser, () => { + * console.log(parser.document.childNodes[1].childNodes[0].tagName); //> 'head' + * }); + * + * res.pipe(parser); + * }); + * ``` + * + */ +export class ParserStream extends Writable { + static getFragmentStream(fragmentContext, options) { + const parser = Parser.getFragmentParser(fragmentContext, options); + const stream = new ParserStream(options, parser); + return stream; + } + /** The resulting document node. */ + get document() { + return this.parser.document; + } + getFragment() { + return this.parser.getFragment(); + } + /** + * @param options Parsing options. + */ + constructor(options, parser = new Parser(options)) { + super({ decodeStrings: false }); + this.parser = parser; + this.lastChunkWritten = false; + this.writeCallback = undefined; + this.pendingHtmlInsertions = []; + const resume = () => { + for (let i = this.pendingHtmlInsertions.length - 1; i >= 0; i--) { + this.parser.tokenizer.insertHtmlAtCurrentPos(this.pendingHtmlInsertions[i]); + } + this.pendingHtmlInsertions.length = 0; + //NOTE: keep parsing if we don't wait for the next input chunk + this.parser.tokenizer.resume(this.writeCallback); + }; + const documentWrite = (html) => { + if (!this.parser.stopped) { + this.pendingHtmlInsertions.push(html); + } + }; + const scriptHandler = (scriptElement) => { + if (this.listenerCount('script') > 0) { + this.parser.tokenizer.pause(); + this.emit('script', scriptElement, documentWrite, resume); + } + }; + this.parser.scriptHandler = scriptHandler; + } + //WritableStream implementation + _write(chunk, _encoding, callback) { + if (typeof chunk !== 'string') { + throw new TypeError('Parser can work only with string streams.'); + } + this.writeCallback = callback; + this.parser.tokenizer.write(chunk, this.lastChunkWritten, this.writeCallback); + } + // TODO [engine:node@>=16]: Due to issues with Node < 16, we are overriding `end` instead of `_final`. + // eslint-disable-next-line @typescript-eslint/no-explicit-any + end(chunk, encoding, callback) { + this.lastChunkWritten = true; + super.end(chunk || '', encoding, callback); + } +} +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/node_modules/parse5-parser-stream/package.json b/node_modules/parse5-parser-stream/package.json new file mode 100644 index 0000000..465e217 --- /dev/null +++ b/node_modules/parse5-parser-stream/package.json @@ -0,0 +1,39 @@ +{ + "name": "parse5-parser-stream", + "type": "module", + "description": "Streaming HTML parser with scripting support.", + "version": "7.1.2", + "author": "Ivan Nikulin (https://github.com/inikulin)", + "contributors": "https://github.com/inikulin/parse5/graphs/contributors", + "homepage": "https://github.com/inikulin/parse5", + "funding": "https://github.com/inikulin/parse5?sponsor=1", + "keywords": [ + "parse5", + "parser", + "stream", + "streaming" + ], + "license": "MIT", + "main": "dist/cjs/index.js", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + "import": "./dist/index.js", + "require": "./dist/cjs/index.js" + }, + "dependencies": { + "parse5": "^7.0.0" + }, + "scripts": { + "build:cjs": "tsc --module CommonJS --target ES6 --outDir dist/cjs && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json" + }, + "repository": { + "type": "git", + "url": "git://github.com/inikulin/parse5.git" + }, + "files": [ + "dist/cjs/package.json", + "dist/**/*.js", + "dist/**/*.d.ts" + ] +} diff --git a/node_modules/parse5/LICENSE b/node_modules/parse5/LICENSE new file mode 100644 index 0000000..f3265d4 --- /dev/null +++ b/node_modules/parse5/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2013-2019 Ivan Nikulin (ifaaan@gmail.com, https://github.com/inikulin) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/parse5/README.md b/node_modules/parse5/README.md new file mode 100644 index 0000000..139f8c6 --- /dev/null +++ b/node_modules/parse5/README.md @@ -0,0 +1,38 @@ +

    + + parse5 + +

    + +
    +

    parse5

    +HTML parser and serializer. +
    +
    + +
    +npm install --save parse5 +
    +
    + +

    + ๐Ÿ“– Documentation ๐Ÿ“– +

    + +--- + +

    + List of parse5 toolset packages +

    + +

    + GitHub +

    + +

    + Online playground +

    + +

    + Changelog +

    diff --git a/node_modules/parse5/dist/cjs/common/doctype.d.ts b/node_modules/parse5/dist/cjs/common/doctype.d.ts new file mode 100644 index 0000000..993afaa --- /dev/null +++ b/node_modules/parse5/dist/cjs/common/doctype.d.ts @@ -0,0 +1,4 @@ +import { DOCUMENT_MODE } from './html.js'; +import type { DoctypeToken } from './token.js'; +export declare function isConforming(token: DoctypeToken): boolean; +export declare function getDocumentMode(token: DoctypeToken): DOCUMENT_MODE; diff --git a/node_modules/parse5/dist/cjs/common/doctype.js b/node_modules/parse5/dist/cjs/common/doctype.js new file mode 100644 index 0000000..82aed98 --- /dev/null +++ b/node_modules/parse5/dist/cjs/common/doctype.js @@ -0,0 +1,118 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.isConforming = isConforming; +exports.getDocumentMode = getDocumentMode; +const html_js_1 = require("./html.js"); +//Const +const VALID_DOCTYPE_NAME = 'html'; +const VALID_SYSTEM_ID = 'about:legacy-compat'; +const QUIRKS_MODE_SYSTEM_ID = 'http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd'; +const QUIRKS_MODE_PUBLIC_ID_PREFIXES = [ + '+//silmaril//dtd html pro v0r11 19970101//', + '-//as//dtd html 3.0 aswedit + extensions//', + '-//advasoft ltd//dtd html 3.0 aswedit + extensions//', + '-//ietf//dtd html 2.0 level 1//', + '-//ietf//dtd html 2.0 level 2//', + '-//ietf//dtd html 2.0 strict level 1//', + '-//ietf//dtd html 2.0 strict level 2//', + '-//ietf//dtd html 2.0 strict//', + '-//ietf//dtd html 2.0//', + '-//ietf//dtd html 2.1e//', + '-//ietf//dtd html 3.0//', + '-//ietf//dtd html 3.2 final//', + '-//ietf//dtd html 3.2//', + '-//ietf//dtd html 3//', + '-//ietf//dtd html level 0//', + '-//ietf//dtd html level 1//', + '-//ietf//dtd html level 2//', + '-//ietf//dtd html level 3//', + '-//ietf//dtd html strict level 0//', + '-//ietf//dtd html strict level 1//', + '-//ietf//dtd html strict level 2//', + '-//ietf//dtd html strict level 3//', + '-//ietf//dtd html strict//', + '-//ietf//dtd html//', + '-//metrius//dtd metrius presentational//', + '-//microsoft//dtd internet explorer 2.0 html strict//', + '-//microsoft//dtd internet explorer 2.0 html//', + '-//microsoft//dtd internet explorer 2.0 tables//', + '-//microsoft//dtd internet explorer 3.0 html strict//', + '-//microsoft//dtd internet explorer 3.0 html//', + '-//microsoft//dtd internet explorer 3.0 tables//', + '-//netscape comm. corp.//dtd html//', + '-//netscape comm. corp.//dtd strict html//', + "-//o'reilly and associates//dtd html 2.0//", + "-//o'reilly and associates//dtd html extended 1.0//", + "-//o'reilly and associates//dtd html extended relaxed 1.0//", + '-//sq//dtd html 2.0 hotmetal + extensions//', + '-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//', + '-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//', + '-//spyglass//dtd html 2.0 extended//', + '-//sun microsystems corp.//dtd hotjava html//', + '-//sun microsystems corp.//dtd hotjava strict html//', + '-//w3c//dtd html 3 1995-03-24//', + '-//w3c//dtd html 3.2 draft//', + '-//w3c//dtd html 3.2 final//', + '-//w3c//dtd html 3.2//', + '-//w3c//dtd html 3.2s draft//', + '-//w3c//dtd html 4.0 frameset//', + '-//w3c//dtd html 4.0 transitional//', + '-//w3c//dtd html experimental 19960712//', + '-//w3c//dtd html experimental 970421//', + '-//w3c//dtd w3 html//', + '-//w3o//dtd w3 html 3.0//', + '-//webtechs//dtd mozilla html 2.0//', + '-//webtechs//dtd mozilla html//', +]; +const QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [ + ...QUIRKS_MODE_PUBLIC_ID_PREFIXES, + '-//w3c//dtd html 4.01 frameset//', + '-//w3c//dtd html 4.01 transitional//', +]; +const QUIRKS_MODE_PUBLIC_IDS = new Set([ + '-//w3o//dtd w3 html strict 3.0//en//', + '-/w3c/dtd html 4.0 transitional/en', + 'html', +]); +const LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ['-//w3c//dtd xhtml 1.0 frameset//', '-//w3c//dtd xhtml 1.0 transitional//']; +const LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = [ + ...LIMITED_QUIRKS_PUBLIC_ID_PREFIXES, + '-//w3c//dtd html 4.01 frameset//', + '-//w3c//dtd html 4.01 transitional//', +]; +//Utils +function hasPrefix(publicId, prefixes) { + return prefixes.some((prefix) => publicId.startsWith(prefix)); +} +//API +function isConforming(token) { + return (token.name === VALID_DOCTYPE_NAME && + token.publicId === null && + (token.systemId === null || token.systemId === VALID_SYSTEM_ID)); +} +function getDocumentMode(token) { + if (token.name !== VALID_DOCTYPE_NAME) { + return html_js_1.DOCUMENT_MODE.QUIRKS; + } + const { systemId } = token; + if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) { + return html_js_1.DOCUMENT_MODE.QUIRKS; + } + let { publicId } = token; + if (publicId !== null) { + publicId = publicId.toLowerCase(); + if (QUIRKS_MODE_PUBLIC_IDS.has(publicId)) { + return html_js_1.DOCUMENT_MODE.QUIRKS; + } + let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES; + if (hasPrefix(publicId, prefixes)) { + return html_js_1.DOCUMENT_MODE.QUIRKS; + } + prefixes = + systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES; + if (hasPrefix(publicId, prefixes)) { + return html_js_1.DOCUMENT_MODE.LIMITED_QUIRKS; + } + } + return html_js_1.DOCUMENT_MODE.NO_QUIRKS; +} diff --git a/node_modules/parse5/dist/cjs/common/error-codes.d.ts b/node_modules/parse5/dist/cjs/common/error-codes.d.ts new file mode 100644 index 0000000..ac15bb3 --- /dev/null +++ b/node_modules/parse5/dist/cjs/common/error-codes.d.ts @@ -0,0 +1,67 @@ +import type { Location } from './token.js'; +export interface ParserError extends Location { + code: ERR; +} +export type ParserErrorHandler = (error: ParserError) => void; +export declare enum ERR { + controlCharacterInInputStream = "control-character-in-input-stream", + noncharacterInInputStream = "noncharacter-in-input-stream", + surrogateInInputStream = "surrogate-in-input-stream", + nonVoidHtmlElementStartTagWithTrailingSolidus = "non-void-html-element-start-tag-with-trailing-solidus", + endTagWithAttributes = "end-tag-with-attributes", + endTagWithTrailingSolidus = "end-tag-with-trailing-solidus", + unexpectedSolidusInTag = "unexpected-solidus-in-tag", + unexpectedNullCharacter = "unexpected-null-character", + unexpectedQuestionMarkInsteadOfTagName = "unexpected-question-mark-instead-of-tag-name", + invalidFirstCharacterOfTagName = "invalid-first-character-of-tag-name", + unexpectedEqualsSignBeforeAttributeName = "unexpected-equals-sign-before-attribute-name", + missingEndTagName = "missing-end-tag-name", + unexpectedCharacterInAttributeName = "unexpected-character-in-attribute-name", + unknownNamedCharacterReference = "unknown-named-character-reference", + missingSemicolonAfterCharacterReference = "missing-semicolon-after-character-reference", + unexpectedCharacterAfterDoctypeSystemIdentifier = "unexpected-character-after-doctype-system-identifier", + unexpectedCharacterInUnquotedAttributeValue = "unexpected-character-in-unquoted-attribute-value", + eofBeforeTagName = "eof-before-tag-name", + eofInTag = "eof-in-tag", + missingAttributeValue = "missing-attribute-value", + missingWhitespaceBetweenAttributes = "missing-whitespace-between-attributes", + missingWhitespaceAfterDoctypePublicKeyword = "missing-whitespace-after-doctype-public-keyword", + missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers = "missing-whitespace-between-doctype-public-and-system-identifiers", + missingWhitespaceAfterDoctypeSystemKeyword = "missing-whitespace-after-doctype-system-keyword", + missingQuoteBeforeDoctypePublicIdentifier = "missing-quote-before-doctype-public-identifier", + missingQuoteBeforeDoctypeSystemIdentifier = "missing-quote-before-doctype-system-identifier", + missingDoctypePublicIdentifier = "missing-doctype-public-identifier", + missingDoctypeSystemIdentifier = "missing-doctype-system-identifier", + abruptDoctypePublicIdentifier = "abrupt-doctype-public-identifier", + abruptDoctypeSystemIdentifier = "abrupt-doctype-system-identifier", + cdataInHtmlContent = "cdata-in-html-content", + incorrectlyOpenedComment = "incorrectly-opened-comment", + eofInScriptHtmlCommentLikeText = "eof-in-script-html-comment-like-text", + eofInDoctype = "eof-in-doctype", + nestedComment = "nested-comment", + abruptClosingOfEmptyComment = "abrupt-closing-of-empty-comment", + eofInComment = "eof-in-comment", + incorrectlyClosedComment = "incorrectly-closed-comment", + eofInCdata = "eof-in-cdata", + absenceOfDigitsInNumericCharacterReference = "absence-of-digits-in-numeric-character-reference", + nullCharacterReference = "null-character-reference", + surrogateCharacterReference = "surrogate-character-reference", + characterReferenceOutsideUnicodeRange = "character-reference-outside-unicode-range", + controlCharacterReference = "control-character-reference", + noncharacterCharacterReference = "noncharacter-character-reference", + missingWhitespaceBeforeDoctypeName = "missing-whitespace-before-doctype-name", + missingDoctypeName = "missing-doctype-name", + invalidCharacterSequenceAfterDoctypeName = "invalid-character-sequence-after-doctype-name", + duplicateAttribute = "duplicate-attribute", + nonConformingDoctype = "non-conforming-doctype", + missingDoctype = "missing-doctype", + misplacedDoctype = "misplaced-doctype", + endTagWithoutMatchingOpenElement = "end-tag-without-matching-open-element", + closingOfElementWithOpenChildElements = "closing-of-element-with-open-child-elements", + disallowedContentInNoscriptInHead = "disallowed-content-in-noscript-in-head", + openElementsLeftAfterEof = "open-elements-left-after-eof", + abandonedHeadElementChild = "abandoned-head-element-child", + misplacedStartTagForHeadElement = "misplaced-start-tag-for-head-element", + nestedNoscriptInHead = "nested-noscript-in-head", + eofInElementThatCanContainOnlyText = "eof-in-element-that-can-contain-only-text" +} diff --git a/node_modules/parse5/dist/cjs/common/error-codes.js b/node_modules/parse5/dist/cjs/common/error-codes.js new file mode 100644 index 0000000..573e68e --- /dev/null +++ b/node_modules/parse5/dist/cjs/common/error-codes.js @@ -0,0 +1,66 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.ERR = void 0; +var ERR; +(function (ERR) { + ERR["controlCharacterInInputStream"] = "control-character-in-input-stream"; + ERR["noncharacterInInputStream"] = "noncharacter-in-input-stream"; + ERR["surrogateInInputStream"] = "surrogate-in-input-stream"; + ERR["nonVoidHtmlElementStartTagWithTrailingSolidus"] = "non-void-html-element-start-tag-with-trailing-solidus"; + ERR["endTagWithAttributes"] = "end-tag-with-attributes"; + ERR["endTagWithTrailingSolidus"] = "end-tag-with-trailing-solidus"; + ERR["unexpectedSolidusInTag"] = "unexpected-solidus-in-tag"; + ERR["unexpectedNullCharacter"] = "unexpected-null-character"; + ERR["unexpectedQuestionMarkInsteadOfTagName"] = "unexpected-question-mark-instead-of-tag-name"; + ERR["invalidFirstCharacterOfTagName"] = "invalid-first-character-of-tag-name"; + ERR["unexpectedEqualsSignBeforeAttributeName"] = "unexpected-equals-sign-before-attribute-name"; + ERR["missingEndTagName"] = "missing-end-tag-name"; + ERR["unexpectedCharacterInAttributeName"] = "unexpected-character-in-attribute-name"; + ERR["unknownNamedCharacterReference"] = "unknown-named-character-reference"; + ERR["missingSemicolonAfterCharacterReference"] = "missing-semicolon-after-character-reference"; + ERR["unexpectedCharacterAfterDoctypeSystemIdentifier"] = "unexpected-character-after-doctype-system-identifier"; + ERR["unexpectedCharacterInUnquotedAttributeValue"] = "unexpected-character-in-unquoted-attribute-value"; + ERR["eofBeforeTagName"] = "eof-before-tag-name"; + ERR["eofInTag"] = "eof-in-tag"; + ERR["missingAttributeValue"] = "missing-attribute-value"; + ERR["missingWhitespaceBetweenAttributes"] = "missing-whitespace-between-attributes"; + ERR["missingWhitespaceAfterDoctypePublicKeyword"] = "missing-whitespace-after-doctype-public-keyword"; + ERR["missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers"] = "missing-whitespace-between-doctype-public-and-system-identifiers"; + ERR["missingWhitespaceAfterDoctypeSystemKeyword"] = "missing-whitespace-after-doctype-system-keyword"; + ERR["missingQuoteBeforeDoctypePublicIdentifier"] = "missing-quote-before-doctype-public-identifier"; + ERR["missingQuoteBeforeDoctypeSystemIdentifier"] = "missing-quote-before-doctype-system-identifier"; + ERR["missingDoctypePublicIdentifier"] = "missing-doctype-public-identifier"; + ERR["missingDoctypeSystemIdentifier"] = "missing-doctype-system-identifier"; + ERR["abruptDoctypePublicIdentifier"] = "abrupt-doctype-public-identifier"; + ERR["abruptDoctypeSystemIdentifier"] = "abrupt-doctype-system-identifier"; + ERR["cdataInHtmlContent"] = "cdata-in-html-content"; + ERR["incorrectlyOpenedComment"] = "incorrectly-opened-comment"; + ERR["eofInScriptHtmlCommentLikeText"] = "eof-in-script-html-comment-like-text"; + ERR["eofInDoctype"] = "eof-in-doctype"; + ERR["nestedComment"] = "nested-comment"; + ERR["abruptClosingOfEmptyComment"] = "abrupt-closing-of-empty-comment"; + ERR["eofInComment"] = "eof-in-comment"; + ERR["incorrectlyClosedComment"] = "incorrectly-closed-comment"; + ERR["eofInCdata"] = "eof-in-cdata"; + ERR["absenceOfDigitsInNumericCharacterReference"] = "absence-of-digits-in-numeric-character-reference"; + ERR["nullCharacterReference"] = "null-character-reference"; + ERR["surrogateCharacterReference"] = "surrogate-character-reference"; + ERR["characterReferenceOutsideUnicodeRange"] = "character-reference-outside-unicode-range"; + ERR["controlCharacterReference"] = "control-character-reference"; + ERR["noncharacterCharacterReference"] = "noncharacter-character-reference"; + ERR["missingWhitespaceBeforeDoctypeName"] = "missing-whitespace-before-doctype-name"; + ERR["missingDoctypeName"] = "missing-doctype-name"; + ERR["invalidCharacterSequenceAfterDoctypeName"] = "invalid-character-sequence-after-doctype-name"; + ERR["duplicateAttribute"] = "duplicate-attribute"; + ERR["nonConformingDoctype"] = "non-conforming-doctype"; + ERR["missingDoctype"] = "missing-doctype"; + ERR["misplacedDoctype"] = "misplaced-doctype"; + ERR["endTagWithoutMatchingOpenElement"] = "end-tag-without-matching-open-element"; + ERR["closingOfElementWithOpenChildElements"] = "closing-of-element-with-open-child-elements"; + ERR["disallowedContentInNoscriptInHead"] = "disallowed-content-in-noscript-in-head"; + ERR["openElementsLeftAfterEof"] = "open-elements-left-after-eof"; + ERR["abandonedHeadElementChild"] = "abandoned-head-element-child"; + ERR["misplacedStartTagForHeadElement"] = "misplaced-start-tag-for-head-element"; + ERR["nestedNoscriptInHead"] = "nested-noscript-in-head"; + ERR["eofInElementThatCanContainOnlyText"] = "eof-in-element-that-can-contain-only-text"; +})(ERR || (exports.ERR = ERR = {})); diff --git a/node_modules/parse5/dist/cjs/common/foreign-content.d.ts b/node_modules/parse5/dist/cjs/common/foreign-content.d.ts new file mode 100644 index 0000000..d08d02b --- /dev/null +++ b/node_modules/parse5/dist/cjs/common/foreign-content.d.ts @@ -0,0 +1,9 @@ +import { TAG_ID as $, NS } from './html.js'; +import type { TagToken, Attribute } from './token.js'; +export declare const SVG_TAG_NAMES_ADJUSTMENT_MAP: Map; +export declare function causesExit(startTagToken: TagToken): boolean; +export declare function adjustTokenMathMLAttrs(token: TagToken): void; +export declare function adjustTokenSVGAttrs(token: TagToken): void; +export declare function adjustTokenXMLAttrs(token: TagToken): void; +export declare function adjustTokenSVGTagName(token: TagToken): void; +export declare function isIntegrationPoint(tn: $, ns: NS, attrs: Attribute[], foreignNS?: NS): boolean; diff --git a/node_modules/parse5/dist/cjs/common/foreign-content.js b/node_modules/parse5/dist/cjs/common/foreign-content.js new file mode 100644 index 0000000..2015b0c --- /dev/null +++ b/node_modules/parse5/dist/cjs/common/foreign-content.js @@ -0,0 +1,237 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SVG_TAG_NAMES_ADJUSTMENT_MAP = void 0; +exports.causesExit = causesExit; +exports.adjustTokenMathMLAttrs = adjustTokenMathMLAttrs; +exports.adjustTokenSVGAttrs = adjustTokenSVGAttrs; +exports.adjustTokenXMLAttrs = adjustTokenXMLAttrs; +exports.adjustTokenSVGTagName = adjustTokenSVGTagName; +exports.isIntegrationPoint = isIntegrationPoint; +const html_js_1 = require("./html.js"); +//MIME types +const MIME_TYPES = { + TEXT_HTML: 'text/html', + APPLICATION_XML: 'application/xhtml+xml', +}; +//Attributes +const DEFINITION_URL_ATTR = 'definitionurl'; +const ADJUSTED_DEFINITION_URL_ATTR = 'definitionURL'; +const SVG_ATTRS_ADJUSTMENT_MAP = new Map([ + 'attributeName', + 'attributeType', + 'baseFrequency', + 'baseProfile', + 'calcMode', + 'clipPathUnits', + 'diffuseConstant', + 'edgeMode', + 'filterUnits', + 'glyphRef', + 'gradientTransform', + 'gradientUnits', + 'kernelMatrix', + 'kernelUnitLength', + 'keyPoints', + 'keySplines', + 'keyTimes', + 'lengthAdjust', + 'limitingConeAngle', + 'markerHeight', + 'markerUnits', + 'markerWidth', + 'maskContentUnits', + 'maskUnits', + 'numOctaves', + 'pathLength', + 'patternContentUnits', + 'patternTransform', + 'patternUnits', + 'pointsAtX', + 'pointsAtY', + 'pointsAtZ', + 'preserveAlpha', + 'preserveAspectRatio', + 'primitiveUnits', + 'refX', + 'refY', + 'repeatCount', + 'repeatDur', + 'requiredExtensions', + 'requiredFeatures', + 'specularConstant', + 'specularExponent', + 'spreadMethod', + 'startOffset', + 'stdDeviation', + 'stitchTiles', + 'surfaceScale', + 'systemLanguage', + 'tableValues', + 'targetX', + 'targetY', + 'textLength', + 'viewBox', + 'viewTarget', + 'xChannelSelector', + 'yChannelSelector', + 'zoomAndPan', +].map((attr) => [attr.toLowerCase(), attr])); +const XML_ATTRS_ADJUSTMENT_MAP = new Map([ + ['xlink:actuate', { prefix: 'xlink', name: 'actuate', namespace: html_js_1.NS.XLINK }], + ['xlink:arcrole', { prefix: 'xlink', name: 'arcrole', namespace: html_js_1.NS.XLINK }], + ['xlink:href', { prefix: 'xlink', name: 'href', namespace: html_js_1.NS.XLINK }], + ['xlink:role', { prefix: 'xlink', name: 'role', namespace: html_js_1.NS.XLINK }], + ['xlink:show', { prefix: 'xlink', name: 'show', namespace: html_js_1.NS.XLINK }], + ['xlink:title', { prefix: 'xlink', name: 'title', namespace: html_js_1.NS.XLINK }], + ['xlink:type', { prefix: 'xlink', name: 'type', namespace: html_js_1.NS.XLINK }], + ['xml:lang', { prefix: 'xml', name: 'lang', namespace: html_js_1.NS.XML }], + ['xml:space', { prefix: 'xml', name: 'space', namespace: html_js_1.NS.XML }], + ['xmlns', { prefix: '', name: 'xmlns', namespace: html_js_1.NS.XMLNS }], + ['xmlns:xlink', { prefix: 'xmlns', name: 'xlink', namespace: html_js_1.NS.XMLNS }], +]); +//SVG tag names adjustment map +exports.SVG_TAG_NAMES_ADJUSTMENT_MAP = new Map([ + 'altGlyph', + 'altGlyphDef', + 'altGlyphItem', + 'animateColor', + 'animateMotion', + 'animateTransform', + 'clipPath', + 'feBlend', + 'feColorMatrix', + 'feComponentTransfer', + 'feComposite', + 'feConvolveMatrix', + 'feDiffuseLighting', + 'feDisplacementMap', + 'feDistantLight', + 'feFlood', + 'feFuncA', + 'feFuncB', + 'feFuncG', + 'feFuncR', + 'feGaussianBlur', + 'feImage', + 'feMerge', + 'feMergeNode', + 'feMorphology', + 'feOffset', + 'fePointLight', + 'feSpecularLighting', + 'feSpotLight', + 'feTile', + 'feTurbulence', + 'foreignObject', + 'glyphRef', + 'linearGradient', + 'radialGradient', + 'textPath', +].map((tn) => [tn.toLowerCase(), tn])); +//Tags that causes exit from foreign content +const EXITS_FOREIGN_CONTENT = new Set([ + html_js_1.TAG_ID.B, + html_js_1.TAG_ID.BIG, + html_js_1.TAG_ID.BLOCKQUOTE, + html_js_1.TAG_ID.BODY, + html_js_1.TAG_ID.BR, + html_js_1.TAG_ID.CENTER, + html_js_1.TAG_ID.CODE, + html_js_1.TAG_ID.DD, + html_js_1.TAG_ID.DIV, + html_js_1.TAG_ID.DL, + html_js_1.TAG_ID.DT, + html_js_1.TAG_ID.EM, + html_js_1.TAG_ID.EMBED, + html_js_1.TAG_ID.H1, + html_js_1.TAG_ID.H2, + html_js_1.TAG_ID.H3, + html_js_1.TAG_ID.H4, + html_js_1.TAG_ID.H5, + html_js_1.TAG_ID.H6, + html_js_1.TAG_ID.HEAD, + html_js_1.TAG_ID.HR, + html_js_1.TAG_ID.I, + html_js_1.TAG_ID.IMG, + html_js_1.TAG_ID.LI, + html_js_1.TAG_ID.LISTING, + html_js_1.TAG_ID.MENU, + html_js_1.TAG_ID.META, + html_js_1.TAG_ID.NOBR, + html_js_1.TAG_ID.OL, + html_js_1.TAG_ID.P, + html_js_1.TAG_ID.PRE, + html_js_1.TAG_ID.RUBY, + html_js_1.TAG_ID.S, + html_js_1.TAG_ID.SMALL, + html_js_1.TAG_ID.SPAN, + html_js_1.TAG_ID.STRONG, + html_js_1.TAG_ID.STRIKE, + html_js_1.TAG_ID.SUB, + html_js_1.TAG_ID.SUP, + html_js_1.TAG_ID.TABLE, + html_js_1.TAG_ID.TT, + html_js_1.TAG_ID.U, + html_js_1.TAG_ID.UL, + html_js_1.TAG_ID.VAR, +]); +//Check exit from foreign content +function causesExit(startTagToken) { + const tn = startTagToken.tagID; + const isFontWithAttrs = tn === html_js_1.TAG_ID.FONT && + startTagToken.attrs.some(({ name }) => name === html_js_1.ATTRS.COLOR || name === html_js_1.ATTRS.SIZE || name === html_js_1.ATTRS.FACE); + return isFontWithAttrs || EXITS_FOREIGN_CONTENT.has(tn); +} +//Token adjustments +function adjustTokenMathMLAttrs(token) { + for (let i = 0; i < token.attrs.length; i++) { + if (token.attrs[i].name === DEFINITION_URL_ATTR) { + token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR; + break; + } + } +} +function adjustTokenSVGAttrs(token) { + for (let i = 0; i < token.attrs.length; i++) { + const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name); + if (adjustedAttrName != null) { + token.attrs[i].name = adjustedAttrName; + } + } +} +function adjustTokenXMLAttrs(token) { + for (let i = 0; i < token.attrs.length; i++) { + const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name); + if (adjustedAttrEntry) { + token.attrs[i].prefix = adjustedAttrEntry.prefix; + token.attrs[i].name = adjustedAttrEntry.name; + token.attrs[i].namespace = adjustedAttrEntry.namespace; + } + } +} +function adjustTokenSVGTagName(token) { + const adjustedTagName = exports.SVG_TAG_NAMES_ADJUSTMENT_MAP.get(token.tagName); + if (adjustedTagName != null) { + token.tagName = adjustedTagName; + token.tagID = (0, html_js_1.getTagID)(token.tagName); + } +} +//Integration points +function isMathMLTextIntegrationPoint(tn, ns) { + return ns === html_js_1.NS.MATHML && (tn === html_js_1.TAG_ID.MI || tn === html_js_1.TAG_ID.MO || tn === html_js_1.TAG_ID.MN || tn === html_js_1.TAG_ID.MS || tn === html_js_1.TAG_ID.MTEXT); +} +function isHtmlIntegrationPoint(tn, ns, attrs) { + if (ns === html_js_1.NS.MATHML && tn === html_js_1.TAG_ID.ANNOTATION_XML) { + for (let i = 0; i < attrs.length; i++) { + if (attrs[i].name === html_js_1.ATTRS.ENCODING) { + const value = attrs[i].value.toLowerCase(); + return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML; + } + } + } + return ns === html_js_1.NS.SVG && (tn === html_js_1.TAG_ID.FOREIGN_OBJECT || tn === html_js_1.TAG_ID.DESC || tn === html_js_1.TAG_ID.TITLE); +} +function isIntegrationPoint(tn, ns, attrs, foreignNS) { + return (((!foreignNS || foreignNS === html_js_1.NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs)) || + ((!foreignNS || foreignNS === html_js_1.NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns))); +} diff --git a/node_modules/parse5/dist/cjs/common/html.d.ts b/node_modules/parse5/dist/cjs/common/html.d.ts new file mode 100644 index 0000000..2fbc821 --- /dev/null +++ b/node_modules/parse5/dist/cjs/common/html.d.ts @@ -0,0 +1,289 @@ +/** All valid namespaces in HTML. */ +export declare enum NS { + HTML = "http://www.w3.org/1999/xhtml", + MATHML = "http://www.w3.org/1998/Math/MathML", + SVG = "http://www.w3.org/2000/svg", + XLINK = "http://www.w3.org/1999/xlink", + XML = "http://www.w3.org/XML/1998/namespace", + XMLNS = "http://www.w3.org/2000/xmlns/" +} +export declare enum ATTRS { + TYPE = "type", + ACTION = "action", + ENCODING = "encoding", + PROMPT = "prompt", + NAME = "name", + COLOR = "color", + FACE = "face", + SIZE = "size" +} +/** + * The mode of the document. + * + * @see {@link https://dom.spec.whatwg.org/#concept-document-limited-quirks} + */ +export declare enum DOCUMENT_MODE { + NO_QUIRKS = "no-quirks", + QUIRKS = "quirks", + LIMITED_QUIRKS = "limited-quirks" +} +export declare enum TAG_NAMES { + A = "a", + ADDRESS = "address", + ANNOTATION_XML = "annotation-xml", + APPLET = "applet", + AREA = "area", + ARTICLE = "article", + ASIDE = "aside", + B = "b", + BASE = "base", + BASEFONT = "basefont", + BGSOUND = "bgsound", + BIG = "big", + BLOCKQUOTE = "blockquote", + BODY = "body", + BR = "br", + BUTTON = "button", + CAPTION = "caption", + CENTER = "center", + CODE = "code", + COL = "col", + COLGROUP = "colgroup", + DD = "dd", + DESC = "desc", + DETAILS = "details", + DIALOG = "dialog", + DIR = "dir", + DIV = "div", + DL = "dl", + DT = "dt", + EM = "em", + EMBED = "embed", + FIELDSET = "fieldset", + FIGCAPTION = "figcaption", + FIGURE = "figure", + FONT = "font", + FOOTER = "footer", + FOREIGN_OBJECT = "foreignObject", + FORM = "form", + FRAME = "frame", + FRAMESET = "frameset", + H1 = "h1", + H2 = "h2", + H3 = "h3", + H4 = "h4", + H5 = "h5", + H6 = "h6", + HEAD = "head", + HEADER = "header", + HGROUP = "hgroup", + HR = "hr", + HTML = "html", + I = "i", + IMG = "img", + IMAGE = "image", + INPUT = "input", + IFRAME = "iframe", + KEYGEN = "keygen", + LABEL = "label", + LI = "li", + LINK = "link", + LISTING = "listing", + MAIN = "main", + MALIGNMARK = "malignmark", + MARQUEE = "marquee", + MATH = "math", + MENU = "menu", + META = "meta", + MGLYPH = "mglyph", + MI = "mi", + MO = "mo", + MN = "mn", + MS = "ms", + MTEXT = "mtext", + NAV = "nav", + NOBR = "nobr", + NOFRAMES = "noframes", + NOEMBED = "noembed", + NOSCRIPT = "noscript", + OBJECT = "object", + OL = "ol", + OPTGROUP = "optgroup", + OPTION = "option", + P = "p", + PARAM = "param", + PLAINTEXT = "plaintext", + PRE = "pre", + RB = "rb", + RP = "rp", + RT = "rt", + RTC = "rtc", + RUBY = "ruby", + S = "s", + SCRIPT = "script", + SEARCH = "search", + SECTION = "section", + SELECT = "select", + SOURCE = "source", + SMALL = "small", + SPAN = "span", + STRIKE = "strike", + STRONG = "strong", + STYLE = "style", + SUB = "sub", + SUMMARY = "summary", + SUP = "sup", + TABLE = "table", + TBODY = "tbody", + TEMPLATE = "template", + TEXTAREA = "textarea", + TFOOT = "tfoot", + TD = "td", + TH = "th", + THEAD = "thead", + TITLE = "title", + TR = "tr", + TRACK = "track", + TT = "tt", + U = "u", + UL = "ul", + SVG = "svg", + VAR = "var", + WBR = "wbr", + XMP = "xmp" +} +/** + * Tag IDs are numeric IDs for known tag names. + * + * We use tag IDs to improve the performance of tag name comparisons. + */ +export declare enum TAG_ID { + UNKNOWN = 0, + A = 1, + ADDRESS = 2, + ANNOTATION_XML = 3, + APPLET = 4, + AREA = 5, + ARTICLE = 6, + ASIDE = 7, + B = 8, + BASE = 9, + BASEFONT = 10, + BGSOUND = 11, + BIG = 12, + BLOCKQUOTE = 13, + BODY = 14, + BR = 15, + BUTTON = 16, + CAPTION = 17, + CENTER = 18, + CODE = 19, + COL = 20, + COLGROUP = 21, + DD = 22, + DESC = 23, + DETAILS = 24, + DIALOG = 25, + DIR = 26, + DIV = 27, + DL = 28, + DT = 29, + EM = 30, + EMBED = 31, + FIELDSET = 32, + FIGCAPTION = 33, + FIGURE = 34, + FONT = 35, + FOOTER = 36, + FOREIGN_OBJECT = 37, + FORM = 38, + FRAME = 39, + FRAMESET = 40, + H1 = 41, + H2 = 42, + H3 = 43, + H4 = 44, + H5 = 45, + H6 = 46, + HEAD = 47, + HEADER = 48, + HGROUP = 49, + HR = 50, + HTML = 51, + I = 52, + IMG = 53, + IMAGE = 54, + INPUT = 55, + IFRAME = 56, + KEYGEN = 57, + LABEL = 58, + LI = 59, + LINK = 60, + LISTING = 61, + MAIN = 62, + MALIGNMARK = 63, + MARQUEE = 64, + MATH = 65, + MENU = 66, + META = 67, + MGLYPH = 68, + MI = 69, + MO = 70, + MN = 71, + MS = 72, + MTEXT = 73, + NAV = 74, + NOBR = 75, + NOFRAMES = 76, + NOEMBED = 77, + NOSCRIPT = 78, + OBJECT = 79, + OL = 80, + OPTGROUP = 81, + OPTION = 82, + P = 83, + PARAM = 84, + PLAINTEXT = 85, + PRE = 86, + RB = 87, + RP = 88, + RT = 89, + RTC = 90, + RUBY = 91, + S = 92, + SCRIPT = 93, + SEARCH = 94, + SECTION = 95, + SELECT = 96, + SOURCE = 97, + SMALL = 98, + SPAN = 99, + STRIKE = 100, + STRONG = 101, + STYLE = 102, + SUB = 103, + SUMMARY = 104, + SUP = 105, + TABLE = 106, + TBODY = 107, + TEMPLATE = 108, + TEXTAREA = 109, + TFOOT = 110, + TD = 111, + TH = 112, + THEAD = 113, + TITLE = 114, + TR = 115, + TRACK = 116, + TT = 117, + U = 118, + UL = 119, + SVG = 120, + VAR = 121, + WBR = 122, + XMP = 123 +} +export declare function getTagID(tagName: string): TAG_ID; +export declare const SPECIAL_ELEMENTS: Record>; +export declare const NUMBERED_HEADERS: Set; +export declare function hasUnescapedText(tn: string, scriptingEnabled: boolean): boolean; diff --git a/node_modules/parse5/dist/cjs/common/html.js b/node_modules/parse5/dist/cjs/common/html.js new file mode 100644 index 0000000..d18fc44 --- /dev/null +++ b/node_modules/parse5/dist/cjs/common/html.js @@ -0,0 +1,528 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.NUMBERED_HEADERS = exports.SPECIAL_ELEMENTS = exports.TAG_ID = exports.TAG_NAMES = exports.DOCUMENT_MODE = exports.ATTRS = exports.NS = void 0; +exports.getTagID = getTagID; +exports.hasUnescapedText = hasUnescapedText; +/** All valid namespaces in HTML. */ +var NS; +(function (NS) { + NS["HTML"] = "http://www.w3.org/1999/xhtml"; + NS["MATHML"] = "http://www.w3.org/1998/Math/MathML"; + NS["SVG"] = "http://www.w3.org/2000/svg"; + NS["XLINK"] = "http://www.w3.org/1999/xlink"; + NS["XML"] = "http://www.w3.org/XML/1998/namespace"; + NS["XMLNS"] = "http://www.w3.org/2000/xmlns/"; +})(NS || (exports.NS = NS = {})); +var ATTRS; +(function (ATTRS) { + ATTRS["TYPE"] = "type"; + ATTRS["ACTION"] = "action"; + ATTRS["ENCODING"] = "encoding"; + ATTRS["PROMPT"] = "prompt"; + ATTRS["NAME"] = "name"; + ATTRS["COLOR"] = "color"; + ATTRS["FACE"] = "face"; + ATTRS["SIZE"] = "size"; +})(ATTRS || (exports.ATTRS = ATTRS = {})); +/** + * The mode of the document. + * + * @see {@link https://dom.spec.whatwg.org/#concept-document-limited-quirks} + */ +var DOCUMENT_MODE; +(function (DOCUMENT_MODE) { + DOCUMENT_MODE["NO_QUIRKS"] = "no-quirks"; + DOCUMENT_MODE["QUIRKS"] = "quirks"; + DOCUMENT_MODE["LIMITED_QUIRKS"] = "limited-quirks"; +})(DOCUMENT_MODE || (exports.DOCUMENT_MODE = DOCUMENT_MODE = {})); +var TAG_NAMES; +(function (TAG_NAMES) { + TAG_NAMES["A"] = "a"; + TAG_NAMES["ADDRESS"] = "address"; + TAG_NAMES["ANNOTATION_XML"] = "annotation-xml"; + TAG_NAMES["APPLET"] = "applet"; + TAG_NAMES["AREA"] = "area"; + TAG_NAMES["ARTICLE"] = "article"; + TAG_NAMES["ASIDE"] = "aside"; + TAG_NAMES["B"] = "b"; + TAG_NAMES["BASE"] = "base"; + TAG_NAMES["BASEFONT"] = "basefont"; + TAG_NAMES["BGSOUND"] = "bgsound"; + TAG_NAMES["BIG"] = "big"; + TAG_NAMES["BLOCKQUOTE"] = "blockquote"; + TAG_NAMES["BODY"] = "body"; + TAG_NAMES["BR"] = "br"; + TAG_NAMES["BUTTON"] = "button"; + TAG_NAMES["CAPTION"] = "caption"; + TAG_NAMES["CENTER"] = "center"; + TAG_NAMES["CODE"] = "code"; + TAG_NAMES["COL"] = "col"; + TAG_NAMES["COLGROUP"] = "colgroup"; + TAG_NAMES["DD"] = "dd"; + TAG_NAMES["DESC"] = "desc"; + TAG_NAMES["DETAILS"] = "details"; + TAG_NAMES["DIALOG"] = "dialog"; + TAG_NAMES["DIR"] = "dir"; + TAG_NAMES["DIV"] = "div"; + TAG_NAMES["DL"] = "dl"; + TAG_NAMES["DT"] = "dt"; + TAG_NAMES["EM"] = "em"; + TAG_NAMES["EMBED"] = "embed"; + TAG_NAMES["FIELDSET"] = "fieldset"; + TAG_NAMES["FIGCAPTION"] = "figcaption"; + TAG_NAMES["FIGURE"] = "figure"; + TAG_NAMES["FONT"] = "font"; + TAG_NAMES["FOOTER"] = "footer"; + TAG_NAMES["FOREIGN_OBJECT"] = "foreignObject"; + TAG_NAMES["FORM"] = "form"; + TAG_NAMES["FRAME"] = "frame"; + TAG_NAMES["FRAMESET"] = "frameset"; + TAG_NAMES["H1"] = "h1"; + TAG_NAMES["H2"] = "h2"; + TAG_NAMES["H3"] = "h3"; + TAG_NAMES["H4"] = "h4"; + TAG_NAMES["H5"] = "h5"; + TAG_NAMES["H6"] = "h6"; + TAG_NAMES["HEAD"] = "head"; + TAG_NAMES["HEADER"] = "header"; + TAG_NAMES["HGROUP"] = "hgroup"; + TAG_NAMES["HR"] = "hr"; + TAG_NAMES["HTML"] = "html"; + TAG_NAMES["I"] = "i"; + TAG_NAMES["IMG"] = "img"; + TAG_NAMES["IMAGE"] = "image"; + TAG_NAMES["INPUT"] = "input"; + TAG_NAMES["IFRAME"] = "iframe"; + TAG_NAMES["KEYGEN"] = "keygen"; + TAG_NAMES["LABEL"] = "label"; + TAG_NAMES["LI"] = "li"; + TAG_NAMES["LINK"] = "link"; + TAG_NAMES["LISTING"] = "listing"; + TAG_NAMES["MAIN"] = "main"; + TAG_NAMES["MALIGNMARK"] = "malignmark"; + TAG_NAMES["MARQUEE"] = "marquee"; + TAG_NAMES["MATH"] = "math"; + TAG_NAMES["MENU"] = "menu"; + TAG_NAMES["META"] = "meta"; + TAG_NAMES["MGLYPH"] = "mglyph"; + TAG_NAMES["MI"] = "mi"; + TAG_NAMES["MO"] = "mo"; + TAG_NAMES["MN"] = "mn"; + TAG_NAMES["MS"] = "ms"; + TAG_NAMES["MTEXT"] = "mtext"; + TAG_NAMES["NAV"] = "nav"; + TAG_NAMES["NOBR"] = "nobr"; + TAG_NAMES["NOFRAMES"] = "noframes"; + TAG_NAMES["NOEMBED"] = "noembed"; + TAG_NAMES["NOSCRIPT"] = "noscript"; + TAG_NAMES["OBJECT"] = "object"; + TAG_NAMES["OL"] = "ol"; + TAG_NAMES["OPTGROUP"] = "optgroup"; + TAG_NAMES["OPTION"] = "option"; + TAG_NAMES["P"] = "p"; + TAG_NAMES["PARAM"] = "param"; + TAG_NAMES["PLAINTEXT"] = "plaintext"; + TAG_NAMES["PRE"] = "pre"; + TAG_NAMES["RB"] = "rb"; + TAG_NAMES["RP"] = "rp"; + TAG_NAMES["RT"] = "rt"; + TAG_NAMES["RTC"] = "rtc"; + TAG_NAMES["RUBY"] = "ruby"; + TAG_NAMES["S"] = "s"; + TAG_NAMES["SCRIPT"] = "script"; + TAG_NAMES["SEARCH"] = "search"; + TAG_NAMES["SECTION"] = "section"; + TAG_NAMES["SELECT"] = "select"; + TAG_NAMES["SOURCE"] = "source"; + TAG_NAMES["SMALL"] = "small"; + TAG_NAMES["SPAN"] = "span"; + TAG_NAMES["STRIKE"] = "strike"; + TAG_NAMES["STRONG"] = "strong"; + TAG_NAMES["STYLE"] = "style"; + TAG_NAMES["SUB"] = "sub"; + TAG_NAMES["SUMMARY"] = "summary"; + TAG_NAMES["SUP"] = "sup"; + TAG_NAMES["TABLE"] = "table"; + TAG_NAMES["TBODY"] = "tbody"; + TAG_NAMES["TEMPLATE"] = "template"; + TAG_NAMES["TEXTAREA"] = "textarea"; + TAG_NAMES["TFOOT"] = "tfoot"; + TAG_NAMES["TD"] = "td"; + TAG_NAMES["TH"] = "th"; + TAG_NAMES["THEAD"] = "thead"; + TAG_NAMES["TITLE"] = "title"; + TAG_NAMES["TR"] = "tr"; + TAG_NAMES["TRACK"] = "track"; + TAG_NAMES["TT"] = "tt"; + TAG_NAMES["U"] = "u"; + TAG_NAMES["UL"] = "ul"; + TAG_NAMES["SVG"] = "svg"; + TAG_NAMES["VAR"] = "var"; + TAG_NAMES["WBR"] = "wbr"; + TAG_NAMES["XMP"] = "xmp"; +})(TAG_NAMES || (exports.TAG_NAMES = TAG_NAMES = {})); +/** + * Tag IDs are numeric IDs for known tag names. + * + * We use tag IDs to improve the performance of tag name comparisons. + */ +var TAG_ID; +(function (TAG_ID) { + TAG_ID[TAG_ID["UNKNOWN"] = 0] = "UNKNOWN"; + TAG_ID[TAG_ID["A"] = 1] = "A"; + TAG_ID[TAG_ID["ADDRESS"] = 2] = "ADDRESS"; + TAG_ID[TAG_ID["ANNOTATION_XML"] = 3] = "ANNOTATION_XML"; + TAG_ID[TAG_ID["APPLET"] = 4] = "APPLET"; + TAG_ID[TAG_ID["AREA"] = 5] = "AREA"; + TAG_ID[TAG_ID["ARTICLE"] = 6] = "ARTICLE"; + TAG_ID[TAG_ID["ASIDE"] = 7] = "ASIDE"; + TAG_ID[TAG_ID["B"] = 8] = "B"; + TAG_ID[TAG_ID["BASE"] = 9] = "BASE"; + TAG_ID[TAG_ID["BASEFONT"] = 10] = "BASEFONT"; + TAG_ID[TAG_ID["BGSOUND"] = 11] = "BGSOUND"; + TAG_ID[TAG_ID["BIG"] = 12] = "BIG"; + TAG_ID[TAG_ID["BLOCKQUOTE"] = 13] = "BLOCKQUOTE"; + TAG_ID[TAG_ID["BODY"] = 14] = "BODY"; + TAG_ID[TAG_ID["BR"] = 15] = "BR"; + TAG_ID[TAG_ID["BUTTON"] = 16] = "BUTTON"; + TAG_ID[TAG_ID["CAPTION"] = 17] = "CAPTION"; + TAG_ID[TAG_ID["CENTER"] = 18] = "CENTER"; + TAG_ID[TAG_ID["CODE"] = 19] = "CODE"; + TAG_ID[TAG_ID["COL"] = 20] = "COL"; + TAG_ID[TAG_ID["COLGROUP"] = 21] = "COLGROUP"; + TAG_ID[TAG_ID["DD"] = 22] = "DD"; + TAG_ID[TAG_ID["DESC"] = 23] = "DESC"; + TAG_ID[TAG_ID["DETAILS"] = 24] = "DETAILS"; + TAG_ID[TAG_ID["DIALOG"] = 25] = "DIALOG"; + TAG_ID[TAG_ID["DIR"] = 26] = "DIR"; + TAG_ID[TAG_ID["DIV"] = 27] = "DIV"; + TAG_ID[TAG_ID["DL"] = 28] = "DL"; + TAG_ID[TAG_ID["DT"] = 29] = "DT"; + TAG_ID[TAG_ID["EM"] = 30] = "EM"; + TAG_ID[TAG_ID["EMBED"] = 31] = "EMBED"; + TAG_ID[TAG_ID["FIELDSET"] = 32] = "FIELDSET"; + TAG_ID[TAG_ID["FIGCAPTION"] = 33] = "FIGCAPTION"; + TAG_ID[TAG_ID["FIGURE"] = 34] = "FIGURE"; + TAG_ID[TAG_ID["FONT"] = 35] = "FONT"; + TAG_ID[TAG_ID["FOOTER"] = 36] = "FOOTER"; + TAG_ID[TAG_ID["FOREIGN_OBJECT"] = 37] = "FOREIGN_OBJECT"; + TAG_ID[TAG_ID["FORM"] = 38] = "FORM"; + TAG_ID[TAG_ID["FRAME"] = 39] = "FRAME"; + TAG_ID[TAG_ID["FRAMESET"] = 40] = "FRAMESET"; + TAG_ID[TAG_ID["H1"] = 41] = "H1"; + TAG_ID[TAG_ID["H2"] = 42] = "H2"; + TAG_ID[TAG_ID["H3"] = 43] = "H3"; + TAG_ID[TAG_ID["H4"] = 44] = "H4"; + TAG_ID[TAG_ID["H5"] = 45] = "H5"; + TAG_ID[TAG_ID["H6"] = 46] = "H6"; + TAG_ID[TAG_ID["HEAD"] = 47] = "HEAD"; + TAG_ID[TAG_ID["HEADER"] = 48] = "HEADER"; + TAG_ID[TAG_ID["HGROUP"] = 49] = "HGROUP"; + TAG_ID[TAG_ID["HR"] = 50] = "HR"; + TAG_ID[TAG_ID["HTML"] = 51] = "HTML"; + TAG_ID[TAG_ID["I"] = 52] = "I"; + TAG_ID[TAG_ID["IMG"] = 53] = "IMG"; + TAG_ID[TAG_ID["IMAGE"] = 54] = "IMAGE"; + TAG_ID[TAG_ID["INPUT"] = 55] = "INPUT"; + TAG_ID[TAG_ID["IFRAME"] = 56] = "IFRAME"; + TAG_ID[TAG_ID["KEYGEN"] = 57] = "KEYGEN"; + TAG_ID[TAG_ID["LABEL"] = 58] = "LABEL"; + TAG_ID[TAG_ID["LI"] = 59] = "LI"; + TAG_ID[TAG_ID["LINK"] = 60] = "LINK"; + TAG_ID[TAG_ID["LISTING"] = 61] = "LISTING"; + TAG_ID[TAG_ID["MAIN"] = 62] = "MAIN"; + TAG_ID[TAG_ID["MALIGNMARK"] = 63] = "MALIGNMARK"; + TAG_ID[TAG_ID["MARQUEE"] = 64] = "MARQUEE"; + TAG_ID[TAG_ID["MATH"] = 65] = "MATH"; + TAG_ID[TAG_ID["MENU"] = 66] = "MENU"; + TAG_ID[TAG_ID["META"] = 67] = "META"; + TAG_ID[TAG_ID["MGLYPH"] = 68] = "MGLYPH"; + TAG_ID[TAG_ID["MI"] = 69] = "MI"; + TAG_ID[TAG_ID["MO"] = 70] = "MO"; + TAG_ID[TAG_ID["MN"] = 71] = "MN"; + TAG_ID[TAG_ID["MS"] = 72] = "MS"; + TAG_ID[TAG_ID["MTEXT"] = 73] = "MTEXT"; + TAG_ID[TAG_ID["NAV"] = 74] = "NAV"; + TAG_ID[TAG_ID["NOBR"] = 75] = "NOBR"; + TAG_ID[TAG_ID["NOFRAMES"] = 76] = "NOFRAMES"; + TAG_ID[TAG_ID["NOEMBED"] = 77] = "NOEMBED"; + TAG_ID[TAG_ID["NOSCRIPT"] = 78] = "NOSCRIPT"; + TAG_ID[TAG_ID["OBJECT"] = 79] = "OBJECT"; + TAG_ID[TAG_ID["OL"] = 80] = "OL"; + TAG_ID[TAG_ID["OPTGROUP"] = 81] = "OPTGROUP"; + TAG_ID[TAG_ID["OPTION"] = 82] = "OPTION"; + TAG_ID[TAG_ID["P"] = 83] = "P"; + TAG_ID[TAG_ID["PARAM"] = 84] = "PARAM"; + TAG_ID[TAG_ID["PLAINTEXT"] = 85] = "PLAINTEXT"; + TAG_ID[TAG_ID["PRE"] = 86] = "PRE"; + TAG_ID[TAG_ID["RB"] = 87] = "RB"; + TAG_ID[TAG_ID["RP"] = 88] = "RP"; + TAG_ID[TAG_ID["RT"] = 89] = "RT"; + TAG_ID[TAG_ID["RTC"] = 90] = "RTC"; + TAG_ID[TAG_ID["RUBY"] = 91] = "RUBY"; + TAG_ID[TAG_ID["S"] = 92] = "S"; + TAG_ID[TAG_ID["SCRIPT"] = 93] = "SCRIPT"; + TAG_ID[TAG_ID["SEARCH"] = 94] = "SEARCH"; + TAG_ID[TAG_ID["SECTION"] = 95] = "SECTION"; + TAG_ID[TAG_ID["SELECT"] = 96] = "SELECT"; + TAG_ID[TAG_ID["SOURCE"] = 97] = "SOURCE"; + TAG_ID[TAG_ID["SMALL"] = 98] = "SMALL"; + TAG_ID[TAG_ID["SPAN"] = 99] = "SPAN"; + TAG_ID[TAG_ID["STRIKE"] = 100] = "STRIKE"; + TAG_ID[TAG_ID["STRONG"] = 101] = "STRONG"; + TAG_ID[TAG_ID["STYLE"] = 102] = "STYLE"; + TAG_ID[TAG_ID["SUB"] = 103] = "SUB"; + TAG_ID[TAG_ID["SUMMARY"] = 104] = "SUMMARY"; + TAG_ID[TAG_ID["SUP"] = 105] = "SUP"; + TAG_ID[TAG_ID["TABLE"] = 106] = "TABLE"; + TAG_ID[TAG_ID["TBODY"] = 107] = "TBODY"; + TAG_ID[TAG_ID["TEMPLATE"] = 108] = "TEMPLATE"; + TAG_ID[TAG_ID["TEXTAREA"] = 109] = "TEXTAREA"; + TAG_ID[TAG_ID["TFOOT"] = 110] = "TFOOT"; + TAG_ID[TAG_ID["TD"] = 111] = "TD"; + TAG_ID[TAG_ID["TH"] = 112] = "TH"; + TAG_ID[TAG_ID["THEAD"] = 113] = "THEAD"; + TAG_ID[TAG_ID["TITLE"] = 114] = "TITLE"; + TAG_ID[TAG_ID["TR"] = 115] = "TR"; + TAG_ID[TAG_ID["TRACK"] = 116] = "TRACK"; + TAG_ID[TAG_ID["TT"] = 117] = "TT"; + TAG_ID[TAG_ID["U"] = 118] = "U"; + TAG_ID[TAG_ID["UL"] = 119] = "UL"; + TAG_ID[TAG_ID["SVG"] = 120] = "SVG"; + TAG_ID[TAG_ID["VAR"] = 121] = "VAR"; + TAG_ID[TAG_ID["WBR"] = 122] = "WBR"; + TAG_ID[TAG_ID["XMP"] = 123] = "XMP"; +})(TAG_ID || (exports.TAG_ID = TAG_ID = {})); +const TAG_NAME_TO_ID = new Map([ + [TAG_NAMES.A, TAG_ID.A], + [TAG_NAMES.ADDRESS, TAG_ID.ADDRESS], + [TAG_NAMES.ANNOTATION_XML, TAG_ID.ANNOTATION_XML], + [TAG_NAMES.APPLET, TAG_ID.APPLET], + [TAG_NAMES.AREA, TAG_ID.AREA], + [TAG_NAMES.ARTICLE, TAG_ID.ARTICLE], + [TAG_NAMES.ASIDE, TAG_ID.ASIDE], + [TAG_NAMES.B, TAG_ID.B], + [TAG_NAMES.BASE, TAG_ID.BASE], + [TAG_NAMES.BASEFONT, TAG_ID.BASEFONT], + [TAG_NAMES.BGSOUND, TAG_ID.BGSOUND], + [TAG_NAMES.BIG, TAG_ID.BIG], + [TAG_NAMES.BLOCKQUOTE, TAG_ID.BLOCKQUOTE], + [TAG_NAMES.BODY, TAG_ID.BODY], + [TAG_NAMES.BR, TAG_ID.BR], + [TAG_NAMES.BUTTON, TAG_ID.BUTTON], + [TAG_NAMES.CAPTION, TAG_ID.CAPTION], + [TAG_NAMES.CENTER, TAG_ID.CENTER], + [TAG_NAMES.CODE, TAG_ID.CODE], + [TAG_NAMES.COL, TAG_ID.COL], + [TAG_NAMES.COLGROUP, TAG_ID.COLGROUP], + [TAG_NAMES.DD, TAG_ID.DD], + [TAG_NAMES.DESC, TAG_ID.DESC], + [TAG_NAMES.DETAILS, TAG_ID.DETAILS], + [TAG_NAMES.DIALOG, TAG_ID.DIALOG], + [TAG_NAMES.DIR, TAG_ID.DIR], + [TAG_NAMES.DIV, TAG_ID.DIV], + [TAG_NAMES.DL, TAG_ID.DL], + [TAG_NAMES.DT, TAG_ID.DT], + [TAG_NAMES.EM, TAG_ID.EM], + [TAG_NAMES.EMBED, TAG_ID.EMBED], + [TAG_NAMES.FIELDSET, TAG_ID.FIELDSET], + [TAG_NAMES.FIGCAPTION, TAG_ID.FIGCAPTION], + [TAG_NAMES.FIGURE, TAG_ID.FIGURE], + [TAG_NAMES.FONT, TAG_ID.FONT], + [TAG_NAMES.FOOTER, TAG_ID.FOOTER], + [TAG_NAMES.FOREIGN_OBJECT, TAG_ID.FOREIGN_OBJECT], + [TAG_NAMES.FORM, TAG_ID.FORM], + [TAG_NAMES.FRAME, TAG_ID.FRAME], + [TAG_NAMES.FRAMESET, TAG_ID.FRAMESET], + [TAG_NAMES.H1, TAG_ID.H1], + [TAG_NAMES.H2, TAG_ID.H2], + [TAG_NAMES.H3, TAG_ID.H3], + [TAG_NAMES.H4, TAG_ID.H4], + [TAG_NAMES.H5, TAG_ID.H5], + [TAG_NAMES.H6, TAG_ID.H6], + [TAG_NAMES.HEAD, TAG_ID.HEAD], + [TAG_NAMES.HEADER, TAG_ID.HEADER], + [TAG_NAMES.HGROUP, TAG_ID.HGROUP], + [TAG_NAMES.HR, TAG_ID.HR], + [TAG_NAMES.HTML, TAG_ID.HTML], + [TAG_NAMES.I, TAG_ID.I], + [TAG_NAMES.IMG, TAG_ID.IMG], + [TAG_NAMES.IMAGE, TAG_ID.IMAGE], + [TAG_NAMES.INPUT, TAG_ID.INPUT], + [TAG_NAMES.IFRAME, TAG_ID.IFRAME], + [TAG_NAMES.KEYGEN, TAG_ID.KEYGEN], + [TAG_NAMES.LABEL, TAG_ID.LABEL], + [TAG_NAMES.LI, TAG_ID.LI], + [TAG_NAMES.LINK, TAG_ID.LINK], + [TAG_NAMES.LISTING, TAG_ID.LISTING], + [TAG_NAMES.MAIN, TAG_ID.MAIN], + [TAG_NAMES.MALIGNMARK, TAG_ID.MALIGNMARK], + [TAG_NAMES.MARQUEE, TAG_ID.MARQUEE], + [TAG_NAMES.MATH, TAG_ID.MATH], + [TAG_NAMES.MENU, TAG_ID.MENU], + [TAG_NAMES.META, TAG_ID.META], + [TAG_NAMES.MGLYPH, TAG_ID.MGLYPH], + [TAG_NAMES.MI, TAG_ID.MI], + [TAG_NAMES.MO, TAG_ID.MO], + [TAG_NAMES.MN, TAG_ID.MN], + [TAG_NAMES.MS, TAG_ID.MS], + [TAG_NAMES.MTEXT, TAG_ID.MTEXT], + [TAG_NAMES.NAV, TAG_ID.NAV], + [TAG_NAMES.NOBR, TAG_ID.NOBR], + [TAG_NAMES.NOFRAMES, TAG_ID.NOFRAMES], + [TAG_NAMES.NOEMBED, TAG_ID.NOEMBED], + [TAG_NAMES.NOSCRIPT, TAG_ID.NOSCRIPT], + [TAG_NAMES.OBJECT, TAG_ID.OBJECT], + [TAG_NAMES.OL, TAG_ID.OL], + [TAG_NAMES.OPTGROUP, TAG_ID.OPTGROUP], + [TAG_NAMES.OPTION, TAG_ID.OPTION], + [TAG_NAMES.P, TAG_ID.P], + [TAG_NAMES.PARAM, TAG_ID.PARAM], + [TAG_NAMES.PLAINTEXT, TAG_ID.PLAINTEXT], + [TAG_NAMES.PRE, TAG_ID.PRE], + [TAG_NAMES.RB, TAG_ID.RB], + [TAG_NAMES.RP, TAG_ID.RP], + [TAG_NAMES.RT, TAG_ID.RT], + [TAG_NAMES.RTC, TAG_ID.RTC], + [TAG_NAMES.RUBY, TAG_ID.RUBY], + [TAG_NAMES.S, TAG_ID.S], + [TAG_NAMES.SCRIPT, TAG_ID.SCRIPT], + [TAG_NAMES.SEARCH, TAG_ID.SEARCH], + [TAG_NAMES.SECTION, TAG_ID.SECTION], + [TAG_NAMES.SELECT, TAG_ID.SELECT], + [TAG_NAMES.SOURCE, TAG_ID.SOURCE], + [TAG_NAMES.SMALL, TAG_ID.SMALL], + [TAG_NAMES.SPAN, TAG_ID.SPAN], + [TAG_NAMES.STRIKE, TAG_ID.STRIKE], + [TAG_NAMES.STRONG, TAG_ID.STRONG], + [TAG_NAMES.STYLE, TAG_ID.STYLE], + [TAG_NAMES.SUB, TAG_ID.SUB], + [TAG_NAMES.SUMMARY, TAG_ID.SUMMARY], + [TAG_NAMES.SUP, TAG_ID.SUP], + [TAG_NAMES.TABLE, TAG_ID.TABLE], + [TAG_NAMES.TBODY, TAG_ID.TBODY], + [TAG_NAMES.TEMPLATE, TAG_ID.TEMPLATE], + [TAG_NAMES.TEXTAREA, TAG_ID.TEXTAREA], + [TAG_NAMES.TFOOT, TAG_ID.TFOOT], + [TAG_NAMES.TD, TAG_ID.TD], + [TAG_NAMES.TH, TAG_ID.TH], + [TAG_NAMES.THEAD, TAG_ID.THEAD], + [TAG_NAMES.TITLE, TAG_ID.TITLE], + [TAG_NAMES.TR, TAG_ID.TR], + [TAG_NAMES.TRACK, TAG_ID.TRACK], + [TAG_NAMES.TT, TAG_ID.TT], + [TAG_NAMES.U, TAG_ID.U], + [TAG_NAMES.UL, TAG_ID.UL], + [TAG_NAMES.SVG, TAG_ID.SVG], + [TAG_NAMES.VAR, TAG_ID.VAR], + [TAG_NAMES.WBR, TAG_ID.WBR], + [TAG_NAMES.XMP, TAG_ID.XMP], +]); +function getTagID(tagName) { + var _a; + return (_a = TAG_NAME_TO_ID.get(tagName)) !== null && _a !== void 0 ? _a : TAG_ID.UNKNOWN; +} +const $ = TAG_ID; +exports.SPECIAL_ELEMENTS = { + [NS.HTML]: new Set([ + $.ADDRESS, + $.APPLET, + $.AREA, + $.ARTICLE, + $.ASIDE, + $.BASE, + $.BASEFONT, + $.BGSOUND, + $.BLOCKQUOTE, + $.BODY, + $.BR, + $.BUTTON, + $.CAPTION, + $.CENTER, + $.COL, + $.COLGROUP, + $.DD, + $.DETAILS, + $.DIR, + $.DIV, + $.DL, + $.DT, + $.EMBED, + $.FIELDSET, + $.FIGCAPTION, + $.FIGURE, + $.FOOTER, + $.FORM, + $.FRAME, + $.FRAMESET, + $.H1, + $.H2, + $.H3, + $.H4, + $.H5, + $.H6, + $.HEAD, + $.HEADER, + $.HGROUP, + $.HR, + $.HTML, + $.IFRAME, + $.IMG, + $.INPUT, + $.LI, + $.LINK, + $.LISTING, + $.MAIN, + $.MARQUEE, + $.MENU, + $.META, + $.NAV, + $.NOEMBED, + $.NOFRAMES, + $.NOSCRIPT, + $.OBJECT, + $.OL, + $.P, + $.PARAM, + $.PLAINTEXT, + $.PRE, + $.SCRIPT, + $.SECTION, + $.SELECT, + $.SOURCE, + $.STYLE, + $.SUMMARY, + $.TABLE, + $.TBODY, + $.TD, + $.TEMPLATE, + $.TEXTAREA, + $.TFOOT, + $.TH, + $.THEAD, + $.TITLE, + $.TR, + $.TRACK, + $.UL, + $.WBR, + $.XMP, + ]), + [NS.MATHML]: new Set([$.MI, $.MO, $.MN, $.MS, $.MTEXT, $.ANNOTATION_XML]), + [NS.SVG]: new Set([$.TITLE, $.FOREIGN_OBJECT, $.DESC]), + [NS.XLINK]: new Set(), + [NS.XML]: new Set(), + [NS.XMLNS]: new Set(), +}; +exports.NUMBERED_HEADERS = new Set([$.H1, $.H2, $.H3, $.H4, $.H5, $.H6]); +const UNESCAPED_TEXT = new Set([ + TAG_NAMES.STYLE, + TAG_NAMES.SCRIPT, + TAG_NAMES.XMP, + TAG_NAMES.IFRAME, + TAG_NAMES.NOEMBED, + TAG_NAMES.NOFRAMES, + TAG_NAMES.PLAINTEXT, +]); +function hasUnescapedText(tn, scriptingEnabled) { + return UNESCAPED_TEXT.has(tn) || (scriptingEnabled && tn === TAG_NAMES.NOSCRIPT); +} diff --git a/node_modules/parse5/dist/cjs/common/token.d.ts b/node_modules/parse5/dist/cjs/common/token.d.ts new file mode 100644 index 0000000..9bcc7dc --- /dev/null +++ b/node_modules/parse5/dist/cjs/common/token.d.ts @@ -0,0 +1,84 @@ +import type { TAG_ID } from './html.js'; +export declare enum TokenType { + CHARACTER = 0, + NULL_CHARACTER = 1, + WHITESPACE_CHARACTER = 2, + START_TAG = 3, + END_TAG = 4, + COMMENT = 5, + DOCTYPE = 6, + EOF = 7, + HIBERNATION = 8 +} +export interface Location { + /** One-based line index of the first character. */ + startLine: number; + /** One-based column index of the first character. */ + startCol: number; + /** Zero-based first character index. */ + startOffset: number; + /** One-based line index of the last character. */ + endLine: number; + /** One-based column index of the last character. Points directly *after* the last character. */ + endCol: number; + /** Zero-based last character index. Points directly *after* the last character. */ + endOffset: number; +} +export interface LocationWithAttributes extends Location { + /** Start tag attributes' location info. */ + attrs?: Record; +} +export interface ElementLocation extends LocationWithAttributes { + /** Element's start tag location info. */ + startTag?: Location; + /** + * Element's end tag location info. + * This property is undefined, if the element has no closing tag. + */ + endTag?: Location; +} +interface TokenBase { + readonly type: TokenType; + location: Location | null; +} +export interface DoctypeToken extends TokenBase { + readonly type: TokenType.DOCTYPE; + name: string | null; + forceQuirks: boolean; + publicId: string | null; + systemId: string | null; +} +export interface Attribute { + /** The name of the attribute. */ + name: string; + /** The namespace of the attribute. */ + namespace?: string; + /** The namespace-related prefix of the attribute. */ + prefix?: string; + /** The value of the attribute. */ + value: string; +} +export interface TagToken extends TokenBase { + readonly type: TokenType.START_TAG | TokenType.END_TAG; + tagName: string; + /** Used to cache the ID of the tag name. */ + tagID: TAG_ID; + selfClosing: boolean; + ackSelfClosing: boolean; + attrs: Attribute[]; + location: LocationWithAttributes | null; +} +export declare function getTokenAttr(token: TagToken, attrName: string): string | null; +export interface CommentToken extends TokenBase { + readonly type: TokenType.COMMENT; + data: string; +} +export interface EOFToken extends TokenBase { + readonly type: TokenType.EOF; +} +export interface CharacterToken extends TokenBase { + type: TokenType.CHARACTER | TokenType.NULL_CHARACTER | TokenType.WHITESPACE_CHARACTER; + chars: string; +} +export type Token = DoctypeToken | TagToken | CommentToken | EOFToken | CharacterToken; +export {}; diff --git a/node_modules/parse5/dist/cjs/common/token.js b/node_modules/parse5/dist/cjs/common/token.js new file mode 100644 index 0000000..a46f0f2 --- /dev/null +++ b/node_modules/parse5/dist/cjs/common/token.js @@ -0,0 +1,24 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TokenType = void 0; +exports.getTokenAttr = getTokenAttr; +var TokenType; +(function (TokenType) { + TokenType[TokenType["CHARACTER"] = 0] = "CHARACTER"; + TokenType[TokenType["NULL_CHARACTER"] = 1] = "NULL_CHARACTER"; + TokenType[TokenType["WHITESPACE_CHARACTER"] = 2] = "WHITESPACE_CHARACTER"; + TokenType[TokenType["START_TAG"] = 3] = "START_TAG"; + TokenType[TokenType["END_TAG"] = 4] = "END_TAG"; + TokenType[TokenType["COMMENT"] = 5] = "COMMENT"; + TokenType[TokenType["DOCTYPE"] = 6] = "DOCTYPE"; + TokenType[TokenType["EOF"] = 7] = "EOF"; + TokenType[TokenType["HIBERNATION"] = 8] = "HIBERNATION"; +})(TokenType || (exports.TokenType = TokenType = {})); +function getTokenAttr(token, attrName) { + for (let i = token.attrs.length - 1; i >= 0; i--) { + if (token.attrs[i].name === attrName) { + return token.attrs[i].value; + } + } + return null; +} diff --git a/node_modules/parse5/dist/cjs/common/unicode.d.ts b/node_modules/parse5/dist/cjs/common/unicode.d.ts new file mode 100644 index 0000000..63eda8b --- /dev/null +++ b/node_modules/parse5/dist/cjs/common/unicode.d.ts @@ -0,0 +1,42 @@ +export declare const REPLACEMENT_CHARACTER = "\uFFFD"; +export declare enum CODE_POINTS { + EOF = -1, + NULL = 0, + TABULATION = 9, + CARRIAGE_RETURN = 13, + LINE_FEED = 10, + FORM_FEED = 12, + SPACE = 32, + EXCLAMATION_MARK = 33, + QUOTATION_MARK = 34, + AMPERSAND = 38, + APOSTROPHE = 39, + HYPHEN_MINUS = 45, + SOLIDUS = 47, + DIGIT_0 = 48, + DIGIT_9 = 57, + SEMICOLON = 59, + LESS_THAN_SIGN = 60, + EQUALS_SIGN = 61, + GREATER_THAN_SIGN = 62, + QUESTION_MARK = 63, + LATIN_CAPITAL_A = 65, + LATIN_CAPITAL_Z = 90, + RIGHT_SQUARE_BRACKET = 93, + GRAVE_ACCENT = 96, + LATIN_SMALL_A = 97, + LATIN_SMALL_Z = 122 +} +export declare const SEQUENCES: { + DASH_DASH: string; + CDATA_START: string; + DOCTYPE: string; + SCRIPT: string; + PUBLIC: string; + SYSTEM: string; +}; +export declare function isSurrogate(cp: number): boolean; +export declare function isSurrogatePair(cp: number): boolean; +export declare function getSurrogatePairCodePoint(cp1: number, cp2: number): number; +export declare function isControlCodePoint(cp: number): boolean; +export declare function isUndefinedCodePoint(cp: number): boolean; diff --git a/node_modules/parse5/dist/cjs/common/unicode.js b/node_modules/parse5/dist/cjs/common/unicode.js new file mode 100644 index 0000000..a2b317f --- /dev/null +++ b/node_modules/parse5/dist/cjs/common/unicode.js @@ -0,0 +1,70 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.SEQUENCES = exports.CODE_POINTS = exports.REPLACEMENT_CHARACTER = void 0; +exports.isSurrogate = isSurrogate; +exports.isSurrogatePair = isSurrogatePair; +exports.getSurrogatePairCodePoint = getSurrogatePairCodePoint; +exports.isControlCodePoint = isControlCodePoint; +exports.isUndefinedCodePoint = isUndefinedCodePoint; +const UNDEFINED_CODE_POINTS = new Set([ + 65534, 65535, 131070, 131071, 196606, 196607, 262142, 262143, 327678, 327679, 393214, + 393215, 458750, 458751, 524286, 524287, 589822, 589823, 655358, 655359, 720894, + 720895, 786430, 786431, 851966, 851967, 917502, 917503, 983038, 983039, 1048574, + 1048575, 1114110, 1114111, +]); +exports.REPLACEMENT_CHARACTER = '\uFFFD'; +var CODE_POINTS; +(function (CODE_POINTS) { + CODE_POINTS[CODE_POINTS["EOF"] = -1] = "EOF"; + CODE_POINTS[CODE_POINTS["NULL"] = 0] = "NULL"; + CODE_POINTS[CODE_POINTS["TABULATION"] = 9] = "TABULATION"; + CODE_POINTS[CODE_POINTS["CARRIAGE_RETURN"] = 13] = "CARRIAGE_RETURN"; + CODE_POINTS[CODE_POINTS["LINE_FEED"] = 10] = "LINE_FEED"; + CODE_POINTS[CODE_POINTS["FORM_FEED"] = 12] = "FORM_FEED"; + CODE_POINTS[CODE_POINTS["SPACE"] = 32] = "SPACE"; + CODE_POINTS[CODE_POINTS["EXCLAMATION_MARK"] = 33] = "EXCLAMATION_MARK"; + CODE_POINTS[CODE_POINTS["QUOTATION_MARK"] = 34] = "QUOTATION_MARK"; + CODE_POINTS[CODE_POINTS["AMPERSAND"] = 38] = "AMPERSAND"; + CODE_POINTS[CODE_POINTS["APOSTROPHE"] = 39] = "APOSTROPHE"; + CODE_POINTS[CODE_POINTS["HYPHEN_MINUS"] = 45] = "HYPHEN_MINUS"; + CODE_POINTS[CODE_POINTS["SOLIDUS"] = 47] = "SOLIDUS"; + CODE_POINTS[CODE_POINTS["DIGIT_0"] = 48] = "DIGIT_0"; + CODE_POINTS[CODE_POINTS["DIGIT_9"] = 57] = "DIGIT_9"; + CODE_POINTS[CODE_POINTS["SEMICOLON"] = 59] = "SEMICOLON"; + CODE_POINTS[CODE_POINTS["LESS_THAN_SIGN"] = 60] = "LESS_THAN_SIGN"; + CODE_POINTS[CODE_POINTS["EQUALS_SIGN"] = 61] = "EQUALS_SIGN"; + CODE_POINTS[CODE_POINTS["GREATER_THAN_SIGN"] = 62] = "GREATER_THAN_SIGN"; + CODE_POINTS[CODE_POINTS["QUESTION_MARK"] = 63] = "QUESTION_MARK"; + CODE_POINTS[CODE_POINTS["LATIN_CAPITAL_A"] = 65] = "LATIN_CAPITAL_A"; + CODE_POINTS[CODE_POINTS["LATIN_CAPITAL_Z"] = 90] = "LATIN_CAPITAL_Z"; + CODE_POINTS[CODE_POINTS["RIGHT_SQUARE_BRACKET"] = 93] = "RIGHT_SQUARE_BRACKET"; + CODE_POINTS[CODE_POINTS["GRAVE_ACCENT"] = 96] = "GRAVE_ACCENT"; + CODE_POINTS[CODE_POINTS["LATIN_SMALL_A"] = 97] = "LATIN_SMALL_A"; + CODE_POINTS[CODE_POINTS["LATIN_SMALL_Z"] = 122] = "LATIN_SMALL_Z"; +})(CODE_POINTS || (exports.CODE_POINTS = CODE_POINTS = {})); +exports.SEQUENCES = { + DASH_DASH: '--', + CDATA_START: '[CDATA[', + DOCTYPE: 'doctype', + SCRIPT: 'script', + PUBLIC: 'public', + SYSTEM: 'system', +}; +//Surrogates +function isSurrogate(cp) { + return cp >= 55296 && cp <= 57343; +} +function isSurrogatePair(cp) { + return cp >= 56320 && cp <= 57343; +} +function getSurrogatePairCodePoint(cp1, cp2) { + return (cp1 - 55296) * 1024 + 9216 + cp2; +} +//NOTE: excluding NULL and ASCII whitespace +function isControlCodePoint(cp) { + return ((cp !== 0x20 && cp !== 0x0a && cp !== 0x0d && cp !== 0x09 && cp !== 0x0c && cp >= 0x01 && cp <= 0x1f) || + (cp >= 0x7f && cp <= 0x9f)); +} +function isUndefinedCodePoint(cp) { + return (cp >= 64976 && cp <= 65007) || UNDEFINED_CODE_POINTS.has(cp); +} diff --git a/node_modules/parse5/dist/cjs/index.d.ts b/node_modules/parse5/dist/cjs/index.d.ts new file mode 100644 index 0000000..25540bd --- /dev/null +++ b/node_modules/parse5/dist/cjs/index.d.ts @@ -0,0 +1,71 @@ +import { type ParserOptions } from './parser/index.js'; +import type { DefaultTreeAdapterMap } from './tree-adapters/default.js'; +import type { TreeAdapterTypeMap } from './tree-adapters/interface.js'; +export { type DefaultTreeAdapterMap, defaultTreeAdapter } from './tree-adapters/default.js'; +import type * as DefaultTreeAdapter from './tree-adapters/default.js'; +export declare namespace DefaultTreeAdapterTypes { + type Document = DefaultTreeAdapter.Document; + type DocumentFragment = DefaultTreeAdapter.DocumentFragment; + type Element = DefaultTreeAdapter.Element; + type CommentNode = DefaultTreeAdapter.CommentNode; + type TextNode = DefaultTreeAdapter.TextNode; + type Template = DefaultTreeAdapter.Template; + type DocumentType = DefaultTreeAdapter.DocumentType; + type ParentNode = DefaultTreeAdapter.ParentNode; + type ChildNode = DefaultTreeAdapter.ChildNode; + type Node = DefaultTreeAdapter.Node; + type DefaultTreeAdapterMap = DefaultTreeAdapter.DefaultTreeAdapterMap; +} +export type { TreeAdapter, TreeAdapterTypeMap } from './tree-adapters/interface.js'; +export { type ParserOptions, /** @internal */ Parser } from './parser/index.js'; +export { serialize, serializeOuter, type SerializerOptions } from './serializer/index.js'; +export { ERR as ErrorCodes, type ParserError, type ParserErrorHandler } from './common/error-codes.js'; +/** @internal */ +export * as foreignContent from './common/foreign-content.js'; +export * as html from './common/html.js'; +export * as Token from './common/token.js'; +/** @internal */ +export { Tokenizer, type TokenizerOptions, TokenizerMode, type TokenHandler } from './tokenizer/index.js'; +/** + * Parses an HTML string. + * + * @param html Input HTML string. + * @param options Parsing options. + * @returns Document + * + * @example + * + * ```js + * const parse5 = require('parse5'); + * + * const document = parse5.parse('Hi there!'); + * + * console.log(document.childNodes[1].tagName); //> 'html' + *``` + */ +export declare function parse(html: string, options?: ParserOptions): T['document']; +/** + * Parses an HTML fragment. + * + * @example + * + * ```js + * const parse5 = require('parse5'); + * + * const documentFragment = parse5.parseFragment('
    '); + * + * console.log(documentFragment.childNodes[0].tagName); //> 'table' + * + * // Parses the html fragment in the context of the parsed element. + * const trFragment = parse5.parseFragment(documentFragment.childNodes[0], ''); + * + * console.log(trFragment.childNodes[0].childNodes[0].tagName); //> 'td' + * ``` + * + * @param fragmentContext Parsing context element. If specified, given fragment will be parsed as if it was set to the context element's `innerHTML` property. + * @param html Input HTML fragment string. + * @param options Parsing options. + * @returns DocumentFragment + */ +export declare function parseFragment(fragmentContext: T['parentNode'] | null, html: string, options: ParserOptions): T['documentFragment']; +export declare function parseFragment(html: string, options?: ParserOptions): T['documentFragment']; diff --git a/node_modules/parse5/dist/cjs/index.js b/node_modules/parse5/dist/cjs/index.js new file mode 100644 index 0000000..0032389 --- /dev/null +++ b/node_modules/parse5/dist/cjs/index.js @@ -0,0 +1,54 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.TokenizerMode = exports.Tokenizer = exports.Token = exports.html = exports.foreignContent = exports.ErrorCodes = exports.serializeOuter = exports.serialize = exports.Parser = exports.defaultTreeAdapter = void 0; +exports.parse = parse; +exports.parseFragment = parseFragment; +const index_js_1 = require("./parser/index.js"); +var default_js_1 = require("./tree-adapters/default.js"); +Object.defineProperty(exports, "defaultTreeAdapter", { enumerable: true, get: function () { return default_js_1.defaultTreeAdapter; } }); +var index_js_2 = require("./parser/index.js"); +Object.defineProperty(exports, "Parser", { enumerable: true, get: function () { return index_js_2.Parser; } }); +var index_js_3 = require("./serializer/index.js"); +Object.defineProperty(exports, "serialize", { enumerable: true, get: function () { return index_js_3.serialize; } }); +Object.defineProperty(exports, "serializeOuter", { enumerable: true, get: function () { return index_js_3.serializeOuter; } }); +var error_codes_js_1 = require("./common/error-codes.js"); +Object.defineProperty(exports, "ErrorCodes", { enumerable: true, get: function () { return error_codes_js_1.ERR; } }); +/** @internal */ +exports.foreignContent = require("./common/foreign-content.js"); +exports.html = require("./common/html.js"); +exports.Token = require("./common/token.js"); +/** @internal */ +var index_js_4 = require("./tokenizer/index.js"); +Object.defineProperty(exports, "Tokenizer", { enumerable: true, get: function () { return index_js_4.Tokenizer; } }); +Object.defineProperty(exports, "TokenizerMode", { enumerable: true, get: function () { return index_js_4.TokenizerMode; } }); +// Shorthands +/** + * Parses an HTML string. + * + * @param html Input HTML string. + * @param options Parsing options. + * @returns Document + * + * @example + * + * ```js + * const parse5 = require('parse5'); + * + * const document = parse5.parse('Hi there!'); + * + * console.log(document.childNodes[1].tagName); //> 'html' + *``` + */ +function parse(html, options) { + return index_js_1.Parser.parse(html, options); +} +function parseFragment(fragmentContext, html, options) { + if (typeof fragmentContext === 'string') { + options = html; + html = fragmentContext; + fragmentContext = null; + } + const parser = index_js_1.Parser.getFragmentParser(fragmentContext, options); + parser.tokenizer.write(html, true); + return parser.getFragment(); +} diff --git a/node_modules/parse5/dist/cjs/package.json b/node_modules/parse5/dist/cjs/package.json new file mode 100644 index 0000000..729ac4d --- /dev/null +++ b/node_modules/parse5/dist/cjs/package.json @@ -0,0 +1 @@ +{"type":"commonjs"} diff --git a/node_modules/parse5/dist/cjs/parser/formatting-element-list.d.ts b/node_modules/parse5/dist/cjs/parser/formatting-element-list.d.ts new file mode 100644 index 0000000..1d421b6 --- /dev/null +++ b/node_modules/parse5/dist/cjs/parser/formatting-element-list.d.ts @@ -0,0 +1,36 @@ +import type { TagToken } from '../common/token.js'; +import type { TreeAdapter, TreeAdapterTypeMap } from '../tree-adapters/interface.js'; +export declare enum EntryType { + Marker = 0, + Element = 1 +} +interface MarkerEntry { + type: EntryType.Marker; +} +export interface ElementEntry { + type: EntryType.Element; + element: T['element']; + token: TagToken; +} +export type Entry = MarkerEntry | ElementEntry; +export declare class FormattingElementList { + private treeAdapter; + entries: Entry[]; + bookmark: Entry | null; + constructor(treeAdapter: TreeAdapter); + private _getNoahArkConditionCandidates; + private _ensureNoahArkCondition; + insertMarker(): void; + pushElement(element: T['element'], token: TagToken): void; + insertElementAfterBookmark(element: T['element'], token: TagToken): void; + removeEntry(entry: Entry): void; + /** + * Clears the list of formatting elements up to the last marker. + * + * @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker + */ + clearToLastMarker(): void; + getElementEntryInScopeWithTagName(tagName: string): ElementEntry | null; + getElementEntry(element: T['element']): ElementEntry | undefined; +} +export {}; diff --git a/node_modules/parse5/dist/cjs/parser/formatting-element-list.js b/node_modules/parse5/dist/cjs/parser/formatting-element-list.js new file mode 100644 index 0000000..e97ebfd --- /dev/null +++ b/node_modules/parse5/dist/cjs/parser/formatting-element-list.js @@ -0,0 +1,114 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.FormattingElementList = exports.EntryType = void 0; +//Const +const NOAH_ARK_CAPACITY = 3; +var EntryType; +(function (EntryType) { + EntryType[EntryType["Marker"] = 0] = "Marker"; + EntryType[EntryType["Element"] = 1] = "Element"; +})(EntryType || (exports.EntryType = EntryType = {})); +const MARKER = { type: EntryType.Marker }; +//List of formatting elements +class FormattingElementList { + constructor(treeAdapter) { + this.treeAdapter = treeAdapter; + this.entries = []; + this.bookmark = null; + } + //Noah Ark's condition + //OPTIMIZATION: at first we try to find possible candidates for exclusion using + //lightweight heuristics without thorough attributes check. + _getNoahArkConditionCandidates(newElement, neAttrs) { + const candidates = []; + const neAttrsLength = neAttrs.length; + const neTagName = this.treeAdapter.getTagName(newElement); + const neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement); + for (let i = 0; i < this.entries.length; i++) { + const entry = this.entries[i]; + if (entry.type === EntryType.Marker) { + break; + } + const { element } = entry; + if (this.treeAdapter.getTagName(element) === neTagName && + this.treeAdapter.getNamespaceURI(element) === neNamespaceURI) { + const elementAttrs = this.treeAdapter.getAttrList(element); + if (elementAttrs.length === neAttrsLength) { + candidates.push({ idx: i, attrs: elementAttrs }); + } + } + } + return candidates; + } + _ensureNoahArkCondition(newElement) { + if (this.entries.length < NOAH_ARK_CAPACITY) + return; + const neAttrs = this.treeAdapter.getAttrList(newElement); + const candidates = this._getNoahArkConditionCandidates(newElement, neAttrs); + if (candidates.length < NOAH_ARK_CAPACITY) + return; + //NOTE: build attrs map for the new element, so we can perform fast lookups + const neAttrsMap = new Map(neAttrs.map((neAttr) => [neAttr.name, neAttr.value])); + let validCandidates = 0; + //NOTE: remove bottommost candidates, until Noah's Ark condition will not be met + for (let i = 0; i < candidates.length; i++) { + const candidate = candidates[i]; + // We know that `candidate.attrs.length === neAttrs.length` + if (candidate.attrs.every((cAttr) => neAttrsMap.get(cAttr.name) === cAttr.value)) { + validCandidates += 1; + if (validCandidates >= NOAH_ARK_CAPACITY) { + this.entries.splice(candidate.idx, 1); + } + } + } + } + //Mutations + insertMarker() { + this.entries.unshift(MARKER); + } + pushElement(element, token) { + this._ensureNoahArkCondition(element); + this.entries.unshift({ + type: EntryType.Element, + element, + token, + }); + } + insertElementAfterBookmark(element, token) { + const bookmarkIdx = this.entries.indexOf(this.bookmark); + this.entries.splice(bookmarkIdx, 0, { + type: EntryType.Element, + element, + token, + }); + } + removeEntry(entry) { + const entryIndex = this.entries.indexOf(entry); + if (entryIndex !== -1) { + this.entries.splice(entryIndex, 1); + } + } + /** + * Clears the list of formatting elements up to the last marker. + * + * @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker + */ + clearToLastMarker() { + const markerIdx = this.entries.indexOf(MARKER); + if (markerIdx === -1) { + this.entries.length = 0; + } + else { + this.entries.splice(0, markerIdx + 1); + } + } + //Search + getElementEntryInScopeWithTagName(tagName) { + const entry = this.entries.find((entry) => entry.type === EntryType.Marker || this.treeAdapter.getTagName(entry.element) === tagName); + return entry && entry.type === EntryType.Element ? entry : null; + } + getElementEntry(element) { + return this.entries.find((entry) => entry.type === EntryType.Element && entry.element === element); + } +} +exports.FormattingElementList = FormattingElementList; diff --git a/node_modules/parse5/dist/cjs/parser/index.d.ts b/node_modules/parse5/dist/cjs/parser/index.d.ts new file mode 100644 index 0000000..04c6a59 --- /dev/null +++ b/node_modules/parse5/dist/cjs/parser/index.d.ts @@ -0,0 +1,221 @@ +import { Tokenizer, TokenizerMode, type TokenHandler } from '../tokenizer/index.js'; +import { OpenElementStack, type StackHandler } from './open-element-stack.js'; +import { FormattingElementList } from './formatting-element-list.js'; +import { ERR, type ParserErrorHandler } from '../common/error-codes.js'; +import { TAG_ID as $, NS } from '../common/html.js'; +import type { TreeAdapter, TreeAdapterTypeMap } from '../tree-adapters/interface.js'; +import { type Token, type CommentToken, type CharacterToken, type TagToken, type DoctypeToken, type EOFToken, type LocationWithAttributes } from '../common/token.js'; +declare enum InsertionMode { + INITIAL = 0, + BEFORE_HTML = 1, + BEFORE_HEAD = 2, + IN_HEAD = 3, + IN_HEAD_NO_SCRIPT = 4, + AFTER_HEAD = 5, + IN_BODY = 6, + TEXT = 7, + IN_TABLE = 8, + IN_TABLE_TEXT = 9, + IN_CAPTION = 10, + IN_COLUMN_GROUP = 11, + IN_TABLE_BODY = 12, + IN_ROW = 13, + IN_CELL = 14, + IN_SELECT = 15, + IN_SELECT_IN_TABLE = 16, + IN_TEMPLATE = 17, + AFTER_BODY = 18, + IN_FRAMESET = 19, + AFTER_FRAMESET = 20, + AFTER_AFTER_BODY = 21, + AFTER_AFTER_FRAMESET = 22 +} +export interface ParserOptions { + /** + * The [scripting flag](https://html.spec.whatwg.org/multipage/parsing.html#scripting-flag). If set + * to `true`, `noscript` element content will be parsed as text. + * + * @default `true` + */ + scriptingEnabled?: boolean; + /** + * Enables source code location information. When enabled, each node (except the root node) + * will have a `sourceCodeLocation` property. If the node is not an empty element, `sourceCodeLocation` will + * be a {@link ElementLocation} object, otherwise it will be {@link Location}. + * If the element was implicitly created by the parser (as part of + * [tree correction](https://html.spec.whatwg.org/multipage/syntax.html#an-introduction-to-error-handling-and-strange-cases-in-the-parser)), + * its `sourceCodeLocation` property will be `undefined`. + * + * @default `false` + */ + sourceCodeLocationInfo?: boolean; + /** + * Specifies the resulting tree format. + * + * @default `treeAdapters.default` + */ + treeAdapter?: TreeAdapter; + /** + * Callback for parse errors. + * + * @default `null` + */ + onParseError?: ParserErrorHandler | null; +} +export declare class Parser implements TokenHandler, StackHandler { + /** @internal */ + fragmentContext: T['element'] | null; + /** @internal */ + scriptHandler: null | ((pendingScript: T['element']) => void); + treeAdapter: TreeAdapter; + /** @internal */ + onParseError: ParserErrorHandler | null; + protected currentToken: Token | null; + options: Required>; + document: T['document']; + constructor(options?: ParserOptions, document?: T['document'], + /** @internal */ + fragmentContext?: T['element'] | null, + /** @internal */ + scriptHandler?: null | ((pendingScript: T['element']) => void)); + static parse(html: string, options?: ParserOptions): T['document']; + static getFragmentParser(fragmentContext?: T['parentNode'] | null, options?: ParserOptions): Parser; + getFragment(): T['documentFragment']; + tokenizer: Tokenizer; + stopped: boolean; + /** @internal */ + insertionMode: InsertionMode; + /** @internal */ + originalInsertionMode: InsertionMode; + /** @internal */ + fragmentContextID: $; + /** @internal */ + headElement: null | T['element']; + /** @internal */ + formElement: null | T['element']; + /** @internal */ + openElements: OpenElementStack; + /** @internal */ + activeFormattingElements: FormattingElementList; + /** Indicates that the current node is not an element in the HTML namespace */ + protected currentNotInHTML: boolean; + /** + * The template insertion mode stack is maintained from the left. + * Ie. the topmost element will always have index 0. + * + * @internal + */ + tmplInsertionModeStack: InsertionMode[]; + /** @internal */ + pendingCharacterTokens: CharacterToken[]; + /** @internal */ + hasNonWhitespacePendingCharacterToken: boolean; + /** @internal */ + framesetOk: boolean; + /** @internal */ + skipNextNewLine: boolean; + /** @internal */ + fosterParentingEnabled: boolean; + /** @internal */ + _err(token: Token, code: ERR, beforeToken?: boolean): void; + /** @internal */ + onItemPush(node: T['parentNode'], tid: number, isTop: boolean): void; + /** @internal */ + onItemPop(node: T['parentNode'], isTop: boolean): void; + protected _setContextModes(current: T['parentNode'] | undefined, tid: number | undefined): void; + /** @protected */ + _switchToTextParsing(currentToken: TagToken, nextTokenizerState: (typeof TokenizerMode)[keyof typeof TokenizerMode]): void; + switchToPlaintextParsing(): void; + /** @protected */ + _getAdjustedCurrentElement(): T['element']; + /** @protected */ + _findFormInFragmentContext(): void; + protected _initTokenizerForFragmentParsing(): void; + /** @protected */ + _setDocumentType(token: DoctypeToken): void; + /** @protected */ + _attachElementToTree(element: T['element'], location: LocationWithAttributes | null): void; + /** + * For self-closing tags. Add an element to the tree, but skip adding it + * to the stack. + */ + /** @protected */ + _appendElement(token: TagToken, namespaceURI: NS): void; + /** @protected */ + _insertElement(token: TagToken, namespaceURI: NS): void; + /** @protected */ + _insertFakeElement(tagName: string, tagID: $): void; + /** @protected */ + _insertTemplate(token: TagToken): void; + /** @protected */ + _insertFakeRootElement(): void; + /** @protected */ + _appendCommentNode(token: CommentToken, parent: T['parentNode']): void; + /** @protected */ + _insertCharacters(token: CharacterToken): void; + /** @protected */ + _adoptNodes(donor: T['parentNode'], recipient: T['parentNode']): void; + /** @protected */ + _setEndLocation(element: T['element'], closingToken: Token): void; + protected shouldProcessStartTagTokenInForeignContent(token: TagToken): boolean; + /** @protected */ + _processToken(token: Token): void; + /** @protected */ + _isIntegrationPoint(tid: $, element: T['element'], foreignNS?: NS): boolean; + /** @protected */ + _reconstructActiveFormattingElements(): void; + /** @protected */ + _closeTableCell(): void; + /** @protected */ + _closePElement(): void; + /** @protected */ + _resetInsertionMode(): void; + /** @protected */ + _resetInsertionModeForSelect(selectIdx: number): void; + /** @protected */ + _isElementCausesFosterParenting(tn: $): boolean; + /** @protected */ + _shouldFosterParentOnInsertion(): boolean; + /** @protected */ + _findFosterParentingLocation(): { + parent: T['parentNode']; + beforeElement: T['element'] | null; + }; + /** @protected */ + _fosterParentElement(element: T['element']): void; + /** @protected */ + _isSpecialElement(element: T['element'], id: $): boolean; + /** @internal */ + onCharacter(token: CharacterToken): void; + /** @internal */ + onNullCharacter(token: CharacterToken): void; + /** @internal */ + onComment(token: CommentToken): void; + /** @internal */ + onDoctype(token: DoctypeToken): void; + /** @internal */ + onStartTag(token: TagToken): void; + /** + * Processes a given start tag. + * + * `onStartTag` checks if a self-closing tag was recognized. When a token + * is moved inbetween multiple insertion modes, this check for self-closing + * could lead to false positives. To avoid this, `_processStartTag` is used + * for nested calls. + * + * @param token The token to process. + * @protected + */ + _processStartTag(token: TagToken): void; + /** @protected */ + _startTagOutsideForeignContent(token: TagToken): void; + /** @internal */ + onEndTag(token: TagToken): void; + /** @protected */ + _endTagOutsideForeignContent(token: TagToken): void; + /** @internal */ + onEof(token: EOFToken): void; + /** @internal */ + onWhitespaceCharacter(token: CharacterToken): void; +} +export {}; diff --git a/node_modules/parse5/dist/cjs/parser/index.js b/node_modules/parse5/dist/cjs/parser/index.js new file mode 100644 index 0000000..5297fa2 --- /dev/null +++ b/node_modules/parse5/dist/cjs/parser/index.js @@ -0,0 +1,3240 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.Parser = void 0; +const index_js_1 = require("../tokenizer/index.js"); +const open_element_stack_js_1 = require("./open-element-stack.js"); +const formatting_element_list_js_1 = require("./formatting-element-list.js"); +const default_js_1 = require("../tree-adapters/default.js"); +const doctype = require("../common/doctype.js"); +const foreignContent = require("../common/foreign-content.js"); +const error_codes_js_1 = require("../common/error-codes.js"); +const unicode = require("../common/unicode.js"); +const html_js_1 = require("../common/html.js"); +const token_js_1 = require("../common/token.js"); +//Misc constants +const HIDDEN_INPUT_TYPE = 'hidden'; +//Adoption agency loops iteration count +const AA_OUTER_LOOP_ITER = 8; +const AA_INNER_LOOP_ITER = 3; +//Insertion modes +var InsertionMode; +(function (InsertionMode) { + InsertionMode[InsertionMode["INITIAL"] = 0] = "INITIAL"; + InsertionMode[InsertionMode["BEFORE_HTML"] = 1] = "BEFORE_HTML"; + InsertionMode[InsertionMode["BEFORE_HEAD"] = 2] = "BEFORE_HEAD"; + InsertionMode[InsertionMode["IN_HEAD"] = 3] = "IN_HEAD"; + InsertionMode[InsertionMode["IN_HEAD_NO_SCRIPT"] = 4] = "IN_HEAD_NO_SCRIPT"; + InsertionMode[InsertionMode["AFTER_HEAD"] = 5] = "AFTER_HEAD"; + InsertionMode[InsertionMode["IN_BODY"] = 6] = "IN_BODY"; + InsertionMode[InsertionMode["TEXT"] = 7] = "TEXT"; + InsertionMode[InsertionMode["IN_TABLE"] = 8] = "IN_TABLE"; + InsertionMode[InsertionMode["IN_TABLE_TEXT"] = 9] = "IN_TABLE_TEXT"; + InsertionMode[InsertionMode["IN_CAPTION"] = 10] = "IN_CAPTION"; + InsertionMode[InsertionMode["IN_COLUMN_GROUP"] = 11] = "IN_COLUMN_GROUP"; + InsertionMode[InsertionMode["IN_TABLE_BODY"] = 12] = "IN_TABLE_BODY"; + InsertionMode[InsertionMode["IN_ROW"] = 13] = "IN_ROW"; + InsertionMode[InsertionMode["IN_CELL"] = 14] = "IN_CELL"; + InsertionMode[InsertionMode["IN_SELECT"] = 15] = "IN_SELECT"; + InsertionMode[InsertionMode["IN_SELECT_IN_TABLE"] = 16] = "IN_SELECT_IN_TABLE"; + InsertionMode[InsertionMode["IN_TEMPLATE"] = 17] = "IN_TEMPLATE"; + InsertionMode[InsertionMode["AFTER_BODY"] = 18] = "AFTER_BODY"; + InsertionMode[InsertionMode["IN_FRAMESET"] = 19] = "IN_FRAMESET"; + InsertionMode[InsertionMode["AFTER_FRAMESET"] = 20] = "AFTER_FRAMESET"; + InsertionMode[InsertionMode["AFTER_AFTER_BODY"] = 21] = "AFTER_AFTER_BODY"; + InsertionMode[InsertionMode["AFTER_AFTER_FRAMESET"] = 22] = "AFTER_AFTER_FRAMESET"; +})(InsertionMode || (InsertionMode = {})); +const BASE_LOC = { + startLine: -1, + startCol: -1, + startOffset: -1, + endLine: -1, + endCol: -1, + endOffset: -1, +}; +const TABLE_STRUCTURE_TAGS = new Set([html_js_1.TAG_ID.TABLE, html_js_1.TAG_ID.TBODY, html_js_1.TAG_ID.TFOOT, html_js_1.TAG_ID.THEAD, html_js_1.TAG_ID.TR]); +const defaultParserOptions = { + scriptingEnabled: true, + sourceCodeLocationInfo: false, + treeAdapter: default_js_1.defaultTreeAdapter, + onParseError: null, +}; +//Parser +class Parser { + constructor(options, document, + /** @internal */ + fragmentContext = null, + /** @internal */ + scriptHandler = null) { + this.fragmentContext = fragmentContext; + this.scriptHandler = scriptHandler; + this.currentToken = null; + this.stopped = false; + /** @internal */ + this.insertionMode = InsertionMode.INITIAL; + /** @internal */ + this.originalInsertionMode = InsertionMode.INITIAL; + /** @internal */ + this.headElement = null; + /** @internal */ + this.formElement = null; + /** Indicates that the current node is not an element in the HTML namespace */ + this.currentNotInHTML = false; + /** + * The template insertion mode stack is maintained from the left. + * Ie. the topmost element will always have index 0. + * + * @internal + */ + this.tmplInsertionModeStack = []; + /** @internal */ + this.pendingCharacterTokens = []; + /** @internal */ + this.hasNonWhitespacePendingCharacterToken = false; + /** @internal */ + this.framesetOk = true; + /** @internal */ + this.skipNextNewLine = false; + /** @internal */ + this.fosterParentingEnabled = false; + this.options = Object.assign(Object.assign({}, defaultParserOptions), options); + this.treeAdapter = this.options.treeAdapter; + this.onParseError = this.options.onParseError; + // Always enable location info if we report parse errors. + if (this.onParseError) { + this.options.sourceCodeLocationInfo = true; + } + this.document = document !== null && document !== void 0 ? document : this.treeAdapter.createDocument(); + this.tokenizer = new index_js_1.Tokenizer(this.options, this); + this.activeFormattingElements = new formatting_element_list_js_1.FormattingElementList(this.treeAdapter); + this.fragmentContextID = fragmentContext ? (0, html_js_1.getTagID)(this.treeAdapter.getTagName(fragmentContext)) : html_js_1.TAG_ID.UNKNOWN; + this._setContextModes(fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : this.document, this.fragmentContextID); + this.openElements = new open_element_stack_js_1.OpenElementStack(this.document, this.treeAdapter, this); + } + // API + static parse(html, options) { + const parser = new this(options); + parser.tokenizer.write(html, true); + return parser.document; + } + static getFragmentParser(fragmentContext, options) { + const opts = Object.assign(Object.assign({}, defaultParserOptions), options); + //NOTE: use a
    Shake it, baby